Logistic分布函数可以表示为:
F ( x ) = P ( X < x ) = 1 1 + e − ( x − μ ) σ , − ∞ < x < ∞ F\left( x \right) =P\left( X
其中,位置参数: − ∞ < μ < ∞ -\infty <\mu<\infty −∞<μ<∞,尺度参数: σ > 0 \sigma>0 σ>0. 其概率密度函数为:
f ( x ) = F ′ ( x ) = 1 σ e − ( x − μ ) σ ( 1 + e − ( x − μ ) σ ) 2 f\left( x \right) =F'\left( x \right) =\frac{\frac{1}{\sigma}e^{\frac{-\left( x-\mu \right)}{\sigma}}}{\left( 1+e^{\frac{-\left( x-\mu \right)}{\sigma}} \right) ^2} f(x)=F′(x)=(1+eσ−(x−μ))2σ1eσ−(x−μ)
当 μ = 0 \mu=0 μ=0和 σ = 1 \sigma=1 σ=1时,称为标准Logistic分布,分布函数 F 0 ( x ) F_0(x) F0(x)和密度函数 f 0 ( x ) f_0(x) f0(x)为:
F 0 ( x ) = 1 1 + e − x F_0\left( x \right) =\frac{1}{1+e^{-x}} F0(x)=1+e−x1 f 0 ( x ) = e − x ( 1 + e − x ) 2 f_0\left( x \right) =\frac{e^{-x}}{\left( 1+e^{-x} \right) ^2} f0(x)=(1+e−x)2e−x
其中, − ∞ < x < ∞ -\infty
几率是指事件发生和不发生概率的比值,即正类和负类的几率为:
o d d s = F 0 ( x ) 1 − F 0 ( x ) ln ( o d d s ) = ln ( 1 + e x 1 + e − x ) = x \begin{aligned} odds & = \frac{F_0(x)}{1-F_0(x)} \\ \ln(odds) & = \ln(\frac{1+e^x}{1+e^{-x}}) = x \end{aligned} oddsln(odds)=1−F0(x)F0(x)=ln(1+e−x1+ex)=x
逻辑回归(Logistics Regression,LR)是一种广义线性回归模型,线性回归解决的是回归问题,预测值是实数范围,逻辑回归则相反,解决的是分类问题,预测值是[0,1]范围。所以逻辑回归名为回归,实为分类。用一句话来概括逻辑回归(LR):
逻辑回归假设数据服从伯努利分布,通过极大化似然函数推导损失函数,运用梯度下降来求解参数,来达到将数据二分类的目的。
Logistic回归模型是分析二分类型变量时常用的非线性统计模型,是最重要且应用最广泛的非线性模型之一。该模型的因变量为二分类变量(y=0或y=1),结果变量与自变量间是非线性关系。如:
P ( y i = 1 ∣ x i ) = 1 1 + e − ( w x i + b ) , − ∞ < x i < ∞ P\left( y_i=1|x_i \right) =\frac{1}{1+e^{-\left( \bm{w}x_i+b \right)}},\,\,-\infty
其中, P i P_i Pi为事件发生的概率,取值为 [ 0 , 1 ] [0,1] [0,1].
LR遵循两个假设:一是数据服从伯努利分布;二是正类概率由sigmoid函数计算。
逻辑回归第一个假设是样本集服从伯努利分布。伯努利分布为离散型概率分布,正类取值为1;反类取值为0。正类概率为p,反类概率为1-p。可以表示为:
p ( y i ∣ x i ; w ) = { h ( x i ; w ) , y i = 1 1 − h ( x i ; w ) , y i = 0 p\left( y_i|x_i;\bm{w} \right) =\begin{cases} h\left( x_i;\bm{w} \right)& ,y_i=1\\ 1-h\left( x_i;\bm{w} \right)& ,y_i=0\\ \end{cases} p(yi∣xi;w)={h(xi;w)1−h(xi;w),yi=1,yi=0
逻辑回归第二个假设是样本是正样本类别的概率可以用sigmoid函数表示,即:
h ( x ; w ) = 1 1 + e − w x h\left( x;\bm{w} \right) =\frac{1}{1+e^{-\boldsymbol{\bm{w}}x}} h(x;w)=1+e−wx1
将两者合并起来,可以表示为:
y ^ = p ( y i = 1 ∣ x i ; w ) y i [ 1 − p ( y i = 1 ∣ x i ; w ) y i ] 1 − y i \hat{y}=p\left( y_i=1|x_i;\bm{w} \right) ^{y_i}\left[ 1-p\left( y_i=1|x_i;\bm{w} \right) ^{y_i} \right] ^{1-y_i} y^=p(yi=1∣xi;w)yi[1−p(yi=1∣xi;w)yi]1−yi = h ( x i ; w ) y i [ 1 − h ( x i ; w ) ] 1 − y i =h(x_i;\bm{w})^{y_i}[1-h(x_i;\bm{w})]^{1-y_i} =h(xi;w)yi[1−h(xi;w)]1−yi
线性回归问题中使用的是模型误差的平方和来定义损失函数。但是逻辑回归中类别不是连续的,无法使用误差的平方和来定义损失函数。在概率统计中通常使用极大似然估计法求解参数 w \bm{w} w。这里通过似然函数来推导出逻辑回归的损失函数。
极大似然估计:利用已知的样本结果信息,反推最具可能导致这些样本结果出现的模型参数值。
假设已知 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn是样本 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn的观测值,则事件 { X 1 = x i , X 2 = x 2 , . . . , X n = x n } \{X_1=x_i,X_2=x_2,...,X_n=x_n\} {X1=xi,X2=x2,...,Xn=xn}发生的概率为:
L ( w ) = L ( x 1 , x 2 , . . . , x n ) = ∏ i = 1 n p ( x i ; w ) , w ∈ w L\left( \bm{w} \right) =L\left( x_1,x_2,...,x_n \right) =\prod_{i=1}^n{p\left( x_i;\bm{w} \right)},\ \bm{w} \in \bm{w} L(w)=L(x1,x2,...,xn)=i=1∏np(xi;w), w∈w = ∏ i = 1 n h ( x i ; w ) y i [ 1 − h ( x i ; w ) ] 1 − y i =\prod_{i=1}^n{h\left( x_i;\bm{w} \right) ^{y_i}\left[ 1-h\left( x_i;\bm{w} \right) \right] ^{1-y_i}} =i=1∏nh(xi;w)yi[1−h(xi;w)]1−yi
L ( w ) L(\bm{w}) L(w)即为似然函数,其中 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn均为已知的样本值。
对等式两边同时取对数,得到对数似然函数,即:
ln L ( y i , x i ; w ) = ∑ y i ln h ( x i ) + ( 1 − y i ) ln ( 1 − h ( x i ) ) = ∑ y i ln h ( x i ) 1 − h ( x i ) + ln ( 1 − h ( x i ) ) = ∑ y i ln 1 1 + e − w x i 1 1 + e w x i + ln ( 1 − h ( x i ) ) = ∑ y i ( w x i ) − ln ( 1 + e w x i ) \begin{aligned} \ln L\left(y_i,x_i; \boldsymbol{\bm{w}} \right) &=\sum{y_i\ln h\left( x_i \right) +\left( 1-y_i \right) \ln \left( 1-h\left( x_i \right) \right)} \\ & =\sum{y_i\ln \frac{h\left( x_i \right)}{1-h\left( x_i \right)}+\ln \left( 1-h\left( x_i \right) \right)} \\ & =\sum{y_i\ln \frac{\frac{1}{1+e^{-\boldsymbol{\bm{w}}x_i}}}{\frac{1}{1+e^{\boldsymbol{\bm{w}}x_i}}}+\ln \left( 1-h\left( x_i \right) \right)} \\ & =\sum{y_i\left( \boldsymbol{\bm{w}}x_i \right) -\ln \left( 1+e^{\boldsymbol{\bm{w}}x_i} \right)} \end{aligned} lnL(yi,xi;w)=∑yilnh(xi)+(1−yi)ln(1−h(xi))=∑yiln1−h(xi)h(xi)+ln(1−h(xi))=∑yiln1+ewxi11+e−wxi1+ln(1−h(xi))=∑yi(wxi)−ln(1+ewxi)
在机器学习中我们有损失函数的概念,其衡量的是模型预测错误的程度。如果求在整个数据集上的平均对数似然损失,可以得到:
L ( w ) = − 1 N ln L ( y i , x i ; w ) L\left( \boldsymbol{w} \right) =-\frac{1}{N}\ln L\left(y_i,x_i; \boldsymbol{\bm{w}} \right) L(w)=−N1lnL(yi,xi;w)
可以看出,在逻辑回归模型中,最大化似然函数和最小化损失函数是等价的。
总结: 对于分类问题来说,我们采用逻辑回归作为分类模型,采用最大似然估计评估模型性能。基于此,神经网络直接用最大似然函数的变形作为损失函数,指导模型的训练过程,也就是这里的逻辑损失函数。
Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。
Logistic 回归的本质是:假设数据服从伯努利分布,然后使用极大似然估计来得到参数的估计。
将负对数似然损失函数从二分类扩展到多分类,即可得到交叉熵损失函数。
对一个样本来说,真实类标签与模型预测的类标签分布可以用交叉熵来表示,当 C = 2 C=2 C=2 时,交叉熵损失函数与负对数似然损失函数相同:
L C = − ∑ i = 1 C t i ln y i L_C=-\sum_{i=1}^C{t_i\ln y_i} LC=−i=1∑Ctilnyi
对于 N N N个样本 { t 1 , t 2 , . . . , t n } \{ t_1,t_2,...,t_n\} {t1,t2,...,tn},总的损失函数为:
L = − ∑ k = 1 N ∑ i = 1 C t i k ln y i k L=-\sum_{k=1}^N{\sum_{i=1}^C{t_{i}^{k}\ln y_{i}^{k}}} L=−k=1∑Ni=1∑Ctiklnyik
其中, t i k t^k_i tik表示样本 t k t^k tk属于类别 i i i的真实概率, y i k y^k_i yik表示模型预测的结果。
损失函数的优化方法有很多,主要方法为梯度下降(一阶优化方法)和牛顿法(二阶方法)。优化的主要目标是找到一个方向,参数朝这个方向移动之后使得损失函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。
随机梯度下降:随机梯度下降主要通过 L ( w ) L(\bm{w}) L(w)对参数 w \bm{w} w的一阶导数来寻找下降方向,初始化参数 w \bm{w} w后,以迭代的方式来更新参数,更新方式为:
g i = ∂ L ( w ) ∂ w j = ( σ ( z ) − y ) x ( i ) w j k + 1 = w j k + α g j \begin{aligned} g_i=\frac{\partial L(\bm{w})}{\partial \bm{w}_j} &=\left( \sigma \left( z \right) -y \right) x_{}^{\left( i \right)} \\ w^{k+1}_j &= w^k_j +\alpha g_j \end{aligned} gi=∂wj∂L(w)wjk+1=(σ(z)−y)x(i)=wjk+αgj
针对分类问题来看,网络输出通常需要通过Sigmoid(二分类)和Softmax(多分类)层,然后输出样本所属类别的先验概率。最后,用于计算交叉熵损失。
以网络最后一层为例,分析模型预测、计算损失和模型学习的过程:
简单将二分类模型定义为:
z = w T x + b p = σ ( z ) = 1 1 + e − z L ( w ) = − [ y log p + ( 1 − y ) log ( 1 − p ) ] \begin{aligned} z & = \bm{w}^T\bm{x}+b \\ p & = \sigma(z) = \frac{1}{1+e^{-z}}\\ L(\bm{w}) &=-\left[ y\log p+\left( 1-y \right) \log \left( 1-p \right) \right] \end{aligned} zpL(w)=wTx+b=σ(z)=1+e−z1=−[ylogp+(1−y)log(1−p)]
二分类的交叉熵损失优化可以看成是sigmoid层的反向传播过程,总的损失相对于参数 w \bm{w} w 的梯度为可以分为三个部分:
∂ L ( w ) ∂ w i = ∂ L ( w ) ∂ p ⋅ ∂ p ∂ z ⋅ ∂ z ∂ w i \frac{\partial L(\bm{w})}{\partial w_i}=\frac{\partial L(\bm{w})}{\partial p}\cdot \frac{\partial p}{\partial z}\cdot \frac{\partial z}{\partial w_i} ∂wi∂L(w)=∂p∂L(w)⋅∂z∂p⋅∂wi∂z
1. 计算 ∂ L ( w ) ∂ p \frac{\partial L(\bm{w})}{\partial p} ∂p∂L(w) ,已知:
L ( w ) = − [ y log p + ( 1 − y ) log ( 1 − p ) ] L(\bm{w})=-\left[ y\log p+\left( 1-y \right) \log \left( 1-p \right) \right] L(w)=−[ylogp+(1−y)log(1−p)]
其中, y ∈ 1 , 0 y \in {1, 0} y∈1,0 .
则有:
∂ L ( w ) ∂ p = ∂ { − [ y log p + ( 1 − y ) log ( 1 − p ) ] } ∂ p = − [ y p + ( − 1 − y 1 − p ) ] = − y p + 1 − y 1 − p \begin{aligned} \frac{\partial L(\bm{w})}{\partial p} & =\frac{\partial \left\{ -\left[ y\log p+\left( 1-y \right) \log \left( 1-p \right) \right] \right\}}{\partial p} \\ & =- \left[\frac{y}{p} + \left( -\frac{1-y}{1-p} \right)\right] \\ &=-\frac{y}{p}+\frac{1-y}{1-p} \end{aligned} ∂p∂L(w)=∂p∂{−[ylogp+(1−y)log(1−p)]}=−[py+(−1−p1−y)]=−py+1−p1−y
2. 计算 ∂ p ∂ z \frac{\partial p}{\partial z} ∂z∂p,也就是对 p = σ ( z ) = h ( x i ; w ) p=\sigma(z)=h\left( x_i;\bm{w} \right) p=σ(z)=h(xi;w)求导:
σ ( z ) = 1 1 + e − z σ ′ ( z ) = − − e − z ( 1 + e − z ) 2 = 1 1 + e − z ( e − z 1 + e − z ) = σ ( z ) ( 1 − σ ( z ) ) \begin{aligned} \sigma \left( z \right) & = \frac{1}{1+e^{-z}} \\ \sigma'\left( z \right) & =-\frac{-e^{-z}}{\left( 1+e^{-z} \right) ^2}=\frac{1}{1+e^{-z}}\left( \frac{e^{-z}}{1+e^{-z}} \right) =\sigma \left( z \right) \left( 1-\sigma \left( z \right) \right) \end{aligned} σ(z)σ′(z)=1+e−z1=−(1+e−z)2−e−z=1+e−z1(1+e−ze−z)=σ(z)(1−σ(z))
3. 计算 ∂ z ∂ w i \frac{\partial z}{\partial w_i} ∂wi∂z ,假设样本为 m m m 维,即 x = [ x ( 1 ) , x ( 2 ) , . . . , x ( m ) ] T x=\left[ x_{}^{\left( 1 \right)},\ x_{}^{\left( 2 \right)},...,\ x_{}^{\left( m \right)} \right] ^T x=[x(1), x(2),..., x(m)]T ,最后一层正向传播过程为 z = w T x + b = w 1 x ( 1 ) + w 2 x ( 2 ) + . . . + w m x ( m ) + b ⋅ 1 z=\bm{w}^T\boldsymbol{x}+b=w_1x_{}^{\left( 1 \right)}+w_2x_{}^{\left( 2 \right)}+...+w_mx_{}^{\left( m \right)}+b\cdot 1 z=wTx+b=w1x(1)+w2x(2)+...+wmx(m)+b⋅1 ,对第 i i i 个参数 w i w_i wi 求导:
∂ z ∂ w i = x ( i ) \frac{\partial z}{\partial w_i}=x_{}^{\left( i \right)} ∂wi∂z=x(i)
最终的求导结果为:(注意这里的 y = 1 y=1 y=1)
∂ L ( w ) ∂ w i = ∂ L ( w ) ∂ p ⋅ ∂ p ∂ z ⋅ ∂ z ∂ w i = ( − y p + 1 − y 1 − p ) ⋅ σ ( z ) ( 1 − σ ( z ) ) ⋅ x ( i ) = − y ( 1 − p ) + p ( 1 − y ) p ( 1 − p ) ⋅ p ( 1 − p ) ⋅ x ( i ) = ( p − y ) x ( i ) = ( σ ( z ) − y ) x ( i ) \begin{aligned} \frac{\partial L(\bm{w})}{\partial w_i} & = \frac{\partial L(\bm{w})}{\partial p}\cdot \frac{\partial p}{\partial z}\cdot \frac{\partial z}{\partial w_i} \\ & = \left( -\frac{y}{p} + \frac{1-y}{1-p}\right) \cdot \sigma(z)\left( 1-\sigma(z) \right) \cdot x^{(i)} \\ & =\frac{-y\left( 1-p \right) +p\left( 1-y \right)}{p\left( 1-p \right)}\cdot p\left( 1-p \right) \cdot x^{\left( i \right)} \\ & =\left( p -y \right) x_{}^{\left( i \right)} \\ & =\left( \sigma \left( z \right) -y \right) x_{}^{\left( i \right)} \end{aligned} ∂wi∂L(w)=∂p∂L(w)⋅∂z∂p⋅∂wi∂z=(−py+1−p1−y)⋅σ(z)(1−σ(z))⋅x(i)=p(1−p)−y(1−p)+p(1−y)⋅p(1−p)⋅x(i)=(p−y)x(i)=(σ(z)−y)x(i)
参数 w \bm{w} w 的梯度可以写为: ( σ ( z ) − y ) x \left( \sigma(z)-y \right) \bm{x} (σ(z)−y)x ,其中 ( σ ( z ) − y ) \left( \sigma(z)-y \right) (σ(z)−y) 为实数,最终输出为向量形式,分别表示每个参数的梯度。
对于参数 b b b来说,可以将 b b b 看成是与输入维度 x ( m + 1 ) = 1 x^{\left( m+1 \right)}=1 x(m+1)=1 对应的参数,即输出表示为 z = w T x + b = [ w ; b ] T [ x ; 1 ] z=\bm{w}^T \bm{x}+b=\left[ \bm{w};b \right] ^T\left[ \bm{x};1 \right] z=wTx+b=[w;b]T[x;1] ,参数 b b b 的梯度为: ∂ L ( w ) ∂ b = σ ( z ) − y \frac{\partial L(\bm{w})}{\partial b} =\sigma \left( z \right) -y ∂b∂L(w)=σ(z)−y .
网络最后一层输出为 z = [ z 1 , z 2 , z 3 , . . . , z n ] T \mathbf{z}=\left[ z_1,z_2,z_3,...,z_n \right] ^T z=[z1,z2,z3,...,zn]T , z i = w i T x + b = [ w i ; b ] T [ x ; 1 ] z_i=\bm{w}_i^T \bm{x}+b=\left[ \bm{w}_i;b \right] ^T\left[ \bm{x};1 \right] zi=wiTx+b=[wi;b]T[x;1] ,softmax激活层输出为: a i = softmax ( z i ) a_i=\text{softmax} \left( z_i \right) ai=softmax(zi) ,其中 a i = e z i ∑ j e z j , i = 1 , 2 , . . . , n a_i=\frac{e^{z_i}}{\sum_j{e^{z_j}}},\ i=1,2,...,n ai=∑jezjezi, i=1,2,...,n 。
根据最后一层( L L L层,第 j j j个神经元输出 z j z_j zj,激活值为 a j a_j aj)误差定义:
δ j L = ∂ L ∂ z j = ∂ L ∂ a j ⋅ ∂ a j ∂ z j \delta ^L_j=\frac{\partial L}{\partial z_{j}}=\frac{\partial L}{\partial a_{j}}\cdot \frac{\partial a_{j}}{\partial z_{j}} δjL=∂zj∂L=∂aj∂L⋅∂zj∂aj
对于多分类问题来说,假设类别数为 n n n,样本 x ( i ) x^{(i)} x(i)对应的标签为: y = [ y 1 , y 2 , . . . , y n ] \bm{y} = [y_1, y_2,...,y_n] y=[y1,y2,...,yn],其中 y i ∈ { 1 , 0 } y_i\in \left\{ 1,0 \right\} yi∈{1,0} 。网络输出 a i a_i ai表示对应 i i i类的概率。多目标的交叉熵损失函数为(单个训练样本):
L = − ∑ i = 1 n y i log a i L=-\sum_{i=1}^n{y_i\log a_i} L=−i=1∑nyilogai
参数 w \bm{w} w 的梯度也可以分为三个部分:
∂ L ∂ w i j = δ i L ⋅ ∂ z i ∂ w i j = ∂ L ∂ a i ⋅ ∂ a i ∂ z i ⋅ ∂ z i ∂ w i j \begin{aligned} \frac{\partial L}{\partial w_{ij}} & =\delta^L_i \cdot \frac{\partial z_i}{\partial w_{ij}} \\ & =\frac{\partial L}{\partial a_i} \cdot \frac{\partial a_i}{\partial z_i} \cdot \frac{\partial z_i}{\partial w_{ij}} \end{aligned} ∂wij∂L=δiL⋅∂wij∂zi=∂ai∂L⋅∂zi∂ai⋅∂wij∂zi
下面分别对三部分进行求导:
1. ∂ z i ∂ w i j \frac{\partial z_i}{\partial w_{ij}} ∂wij∂zi,由于 z i = [ w i 1 , w i 2 , . . . , w i m , b ] [ x 1 , x 2 , . . . , x m , 1 ] T z_i=\left[ w_{i1},w_{i2},..., w_{im}, b \right] \left[ x_1, x_2, ..., x_m, 1 \right]^T zi=[wi1,wi2,...,wim,b][x1,x2,...,xm,1]T ,因此: ∂ z i ∂ w i j = x j \frac{\partial z_i}{\partial w_{ij}} = x_j ∂wij∂zi=xj ;
2. 求softmax输出 对最后一层神经元的输出值 a j a_j aj的导数: ∂ a j ∂ z i \frac{\partial a_j}{\partial z_i} ∂zi∂aj 。因为,softmax函数与网络输出 z = [ z 1 , z 2 , z 3 , . . . , z n ] T \mathbf{z}=\left[ z_1,z_2,z_3,...,z_n \right] ^T z=[z1,z2,z3,...,zn]T 都有关系,所以需要分情况讨论,而不能只求 ∂ a i ∂ z i = ∂ softmax ( z i ) ∂ z i \frac{\partial a_i}{\partial z_i}=\frac{\partial \text{softmax} \left( z_i \right)}{\partial z_i} ∂zi∂ai=∂zi∂softmax(zi) 。
将其分为两种情况,分别是 i = j i=j i=j 和 i ≠ j i\not ={j} i=j ,当 i = j i=j i=j 时:
∂ a j ∂ z i = ∂ a i ∂ z i = e z i ∑ j e z j − e z i e z i ( ∑ j e z j ) 2 = e z i ∑ j e z j [ 1 − e z i ∑ j e z j ] = softmax ( z i ) ( 1 − softmax ( z i ) ) \begin{aligned} \frac{\partial a_j}{\partial z_i}=\frac{\partial a_i}{\partial z_i} & =\frac{e^{z_i}\sum_j{e^{z_j}}-e^{z_i}e^{z_i}}{\left( \sum_j{e^{z_j}} \right) ^2} \\ & =\frac{e^{z_i}}{\sum_j{e^{z_j}}} \left [ 1 - \frac{e^{z_i}}{\sum_j{e^{z_j}}}\right ] \\ & =\text{softmax} \left( z_i \right) \left( 1-\text{softmax} \left( z_i \right) \right) \end{aligned} ∂zi∂aj=∂zi∂ai=(∑jezj)2ezi∑jezj−eziezi=∑jezjezi[1−∑jezjezi]=softmax(zi)(1−softmax(zi))
当 i ≠ j i\not = j i=j 时:
∂ a j ∂ z i = 0 − e z i e z j ( ∑ j e z j ) 2 = − e z i e z j ( ∑ j e z j ) 2 = − softmax ( z i ) ⋅ softmax ( z j ) \begin{aligned} \frac{\partial a_j}{\partial z_i} & =\frac{0-e^{z_i}e^{z_j}}{\left( \sum_j{e^{z_j}} \right) ^2} = -\frac{e^{z_i}e^{z_j}}{\left( \sum_j{e^{z_j}} \right) ^2} \\ & =-\text{softmax} \left( z_i \right) \cdot \text{softmax} \left( z_j \right) \end{aligned} ∂zi∂aj=(∑jezj)20−eziezj=−(∑jezj)2eziezj=−softmax(zi)⋅softmax(zj)
3. 求损失 L L L 相对于最后一层输出 z j z_j zj 的梯度 ∂ L ∂ z i \frac{\partial L}{\partial z_i} ∂zi∂L,即最后一层网络的误差 δ j L \delta ^L_j δjL(假设输出层网络输出值 z j z_j zj 直接通过softmax层,不使用其它激活函数):
∂ L ∂ z i = ∂ [ − ∑ j = 1 n y j log a j ] ∂ a j ⋅ ∂ a j ∂ z i = ∂ L ∂ a i ∂ a i ∂ z i + ∂ L ∂ a j ≠ i ∂ a j ≠ i ∂ z i ( 分为两种情况, j = i 和 j ≠ i ) = − y i a i ⋅ ∂ a i ∂ z i − ∑ j ≠ i n y j a j ⋅ ∂ a j ∂ z i = − y i a i a i ( 1 − a i ) − ∑ j ≠ i n y j a j ⋅ ( − a i a j ) = − y i ( 1 − a i ) + ∑ j ≠ i n y j a i = − y i + ∑ j = 1 n y j a i = − y i + a i = { a i − 1 , i 是目标的真实类别 a i − 0 , i 不是目标的真实类别 \begin{aligned} \frac{\partial L}{\partial z_i} & = \frac{\partial \left[ -\sum_{j=1}^n{y_j\log a_j} \right]}{\partial a_j}\cdot \frac{\partial a_j}{\partial z_i} \\ & =\frac{\partial L}{\partial a_i}\frac{\partial a_i}{\partial z_i}+\frac{\partial L}{\partial a_{j\ne i}}\frac{\partial a_{j\ne i}}{\partial z_i}\ \ \ \left( \text{分为两种情况,}j=i\text{和}j\ne i \right) \\ & =-\frac{y_i}{a_i}\cdot \frac{\partial a_i}{\partial z_i}-\sum_{j\ne i}^n{\frac{y_j}{a_j}\cdot \frac{\partial a_j}{\partial z_i}} \\ & = -\frac{y_i}{a_i}a_i\left( 1-a_i \right) -\sum_{j\ne i}^n{\frac{y_j}{a_j}\cdot \left( -a_ia_j \right)} \\ & = -y_i\left( 1-a_i \right) +\sum_{j\ne i}^n{y_ja_i} \\ & = -y_i+\sum_{j=1}^n{y_ja_i} \\ & = -y_i+a_i \\ & = \begin{cases} a_i - 1, &i\text{是目标的真实类别}\\ a_i - 0, &i\text{不是目标的真实类别}\\ \end{cases} \end{aligned} ∂zi∂L=∂aj∂[−∑j=1nyjlogaj]⋅∂zi∂aj=∂ai∂L∂zi∂ai+∂aj=i∂L∂zi∂aj=i (分为两种情况,j=i和j=i)=−aiyi⋅∂zi∂ai−j=i∑najyj⋅∂zi∂aj=−aiyiai(1−ai)−j=i∑najyj⋅(−aiaj)=−yi(1−ai)+j=i∑nyjai=−yi+j=1∑nyjai=−yi+ai={ai−1,ai−0,i是目标的真实类别i不是目标的真实类别
简单来说,当求损失相对于某个样本 x x x 的输出 z = [ z 1 , z 2 , z 3 , . . . , z n ] T \mathbf{z}=\left[ z_1,z_2,z_3,...,z_n \right] ^T z=[z1,z2,z3,...,zn]T 的误差时,若当前样本属于第 i i i 类时,其误差为 a i − 1 a_i - 1 ai−1 ;其余类别对应输出的误差为 a i a_i ai 。
举个例子,假设样本 x x x 属于第2个类别,即其样本标签为: y = [ 0 , 1 , 0 , . . . , 0 ] T \bm{y} = [0,1,0,...,0]^T y=[0,1,0,...,0]T ,网络预测概率为: a = [ 0.05 , 0.7 , 0.05 , . . . , 0.05 ] T \bm{a} = [0.05,0.7,0.05,...,0.05]^T a=[0.05,0.7,0.05,...,0.05]T 。此时,网络最后一层的误差计算结果为: δ L = [ δ 1 L , δ 2 L , δ 3 L , . . . , δ n L ] T = [ 0.05 , ( 0.7 − 1 ) , 0.05 , . . . , 0.05 ] T \bm{\delta}^L =\left[\delta^L_1,\delta^L_2,\delta^L_3,...,\delta^L_n \right]^T = [0.05,(0.7-1),0.05,...,0.05]^T δL=[δ1L,δ2L,δ3L,...,δnL]T=[0.05,(0.7−1),0.05,...,0.05]T 。可以看出,正类(第2类)对应的预测概率越大,误差的绝对值越小;负类对应的预测概率越大,误差越大。
4. 求损失 L L L 相对于最后一层中第 i i i 个权重 w i = [ w i 1 , w i 2 , . . . , w i m , b ] T \bm{w}_i=\left[ w_{i1},w_{i2},...,w_{im},b \right] ^T wi=[wi1,wi2,...,wim,b]T 的梯度 ∂ L ∂ w i \frac{\partial L}{\partial \bm{w}_i} ∂wi∂L :(假设前一层共 m m m 个神经元,最后一层的输入为 x = [ x 1 , x 2 , . . . , x m , 1 ] T \bm{x}=\left[ x_1,x_2,...,x_m,1 \right] ^T x=[x1,x2,...,xm,1]T )
其中,参数 w i \bm{w}_i wi 表示最后一层中第 i i i 个神经元与前一层连接的权重矩阵, w i j w_{ij} wij 表示最后一层中第 i i i 个神经元与前一层第 j j j 个神经元的连接权重。
∂ L ∂ w i = ∂ L ∂ z i ∂ z i ∂ w i = ( a i − y i ) ⋅ x \frac{\partial L}{\partial \bm{w}_i}=\frac{\partial L}{\partial z_i}\frac{\partial z_i}{\partial \bm{w}_i}=\left( a_i-y_i \right) \cdot \bm{x} ∂wi∂L=∂zi∂L∂wi∂zi=(ai−yi)⋅x
根据输出梯度向量 ( a i − y i ) ⋅ x \left( a_i-y_i \right) \cdot \bm{x} (ai−yi)⋅x 可以对每个参数 w i j w_{ij} wij 进行更新,如:
w i j ← w i j − λ ∂ L ∂ w i j = w i j − λ ⋅ [ a i − y i ] ⋅ x j w_{ij}\gets w_{ij}-\lambda \frac{\partial L}{\partial w_{ij}}=w_{ij}-\lambda \cdot \left[ a_i-y_i \right] \cdot x_j wij←wij−λ∂wij∂L=wij−λ⋅[ai−yi]⋅xj
其中, λ \lambda λ 为参数学习率。
将Softmax和Sigmoid层的输出层误差结合起来看,可以表示为:
δ L = ∂ L ∂ z = a − y \delta^L = \frac{\partial L}{\partial \bm{z}} = \bm{a}-\bm{y} δL=∂z∂L=a−y
即二分类和对分类问题使用交叉熵损失函数时,输出层的误差可以表示为预测概率和样本标签(One-Hot码)的差值。
###为什么使用交叉熵损失?
《深度学习入门:基于Python的理论与实现》第5章5.6节:
使用交叉熵作为分类问题中的损失函数,在反向传播过程中,网络输出层的误差为 a − y = [ a 1 − y 1 , . . . , a n − y n ] \bm{a}-\bm{y}=\left[ a_1-y_1,...,a_n-y_n \right] a−y=[a1−y1,...,an−yn] ,得到这种看似恰好的结果。实际上,上述结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。
若代价函数为均方误差函数 C = 1 2 ∑ j ( y j − a j L ) 2 C=\frac{1}{2}\sum_j{\left( y_j-a_{j}^{L} \right) ^2} C=21∑j(yj−ajL)2 ,则输出层误差为(不使用激活函数情况下): ∂ C ∂ a j L = a j L − y j \frac{\partial C}{\partial a_{j}^{L}}=a_{j}^{L}-y_j ∂ajL∂C=ajL−yj ;
回归问题中输出层使用“恒等函数”,损失函数使用“均方误差”,也是出于同样的理由。可以看出,输出层误差的形式与交叉熵损失函数的相同: a i − y i a_i-y_i ai−yi 。
1) 为什么LR不使用均方误差(MSE)当作损失函数?
使用均方误差替换LR模型中的交叉熵损失函数,即损失函数为:
C = ( y − y ^ ) 2 2 C = \frac{(y-\hat{y})^2}{2} C=2(y−y^)2
其中, y ^ \hat{y} y^ 是模型的预测结果, y ^ = σ ( z ) , z = w T x + b \hat{y} = \sigma(z), z = \bm{w}^T \bm{x} + b y^=σ(z),z=wTx+b ,参数的梯度为:
∂ C ∂ w i = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ w i = ( y ^ − y ) ⋅ σ ′ ( z ) ⋅ x i = ( y ^ − y ) ⋅ σ ( z ) [ 1 − σ ( z ) ] ⋅ x i \begin{aligned} \frac{\partial C}{\partial w_{i}} & = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial w_{i}} \\ & = (\hat{y}-y)\cdot \sigma ' (z) \cdot x_i \\ & = (\hat{y}-y)\cdot \sigma (z) [1 - \sigma (z)] \cdot x_i \end{aligned} ∂wi∂C=∂y∂L⋅∂z∂y⋅∂wi∂z=(y^−y)⋅σ′(z)⋅xi=(y^−y)⋅σ(z)[1−σ(z)]⋅xi
∂ C ∂ b = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ b = ( y ^ − y ) ⋅ σ ′ ( z ) = ( y ^ − y ) ⋅ σ ( z ) [ 1 − σ ( z ) ] \begin{aligned} \frac{\partial C}{\partial b} & = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial b} \\ & = (\hat{y}-y)\cdot \sigma ' (z) \\ & = (\hat{y}-y)\cdot \sigma (z) [1 - \sigma (z)] \end{aligned} ∂b∂C=∂y∂L⋅∂z∂y⋅∂b∂z=(y^−y)⋅σ′(z)=(y^−y)⋅σ(z)[1−σ(z)]
1. 从结果可以看出,如果使用均方误差+sigmoid组合的情况下,参数的梯度式中包含sigmoid函数的导数,其值域为 ( 0 , 0.25 ] (0,0.25] (0,0.25] 。相比于交叉熵+sigmoid的组合,前者更容易出现梯度消失的情况。
2. 其次,使用交叉熵损失函数计算简单且速度更快,因为只和x,y有关,和sigmoid本身的梯度无关。因为,sigmod函数的梯度都小于0.25,会使误差减小。
2) 逻辑回归的优缺点
优点:
缺点:
3) 为什么逻辑回归是线性模型
LR模型可以表示为:
P w ( y ∣ x ) = 1 1 + e w T x P_{\bm{w}}(y|\bm{x}) = \frac{1}{1+e^{\bm{w}^T\bm{x}}} Pw(y∣x)=1+ewTx1
可以看出LR模型中存在分线性因素,但是并不影响LR模型的分类面。也就是说,判断一个模型是否是线性的,是通过分界面是否是线性来判断的。这个P函数是y关于x的后验概率,它的非线性不影响分界面性质。
4) LR为什么用极大似然函数
想要让每一个样本的预测都要得到最大的概率,即将所有的样本预测后的概率进行相乘都最大,也就是极大似然函数。
对极大似然函数取对数以后相当于对数损失函数,由梯度更新的公式可以看出,对数损失函数的训练求解参数的速度是比较快的,而且更新速度只和x,y有关,比较的稳定。
5) LR为什么用sigmoid函数, 为什么不用其他函数?优缺点?
LR是广义线性模型,假设数据服从伯努利分布,广义线性模型理论和伯努利分布推导出的函数形式和sigmoid函数相同。
优点
缺点
6) LR如何实现多分类
注意:类别互斥,用softmax,不互斥,用多分类lr。
7) 逻辑回归能否解决非线性分类问题?
7) 逻辑回归为什么要对特征进行离散化
8) 线性回归与逻辑回归区别
1. 逻辑回归是广义线性回归模型,名为回归,实为分类,输出是[0,1],可作为概率;线性回归是回归模型,输出是负无穷到正无穷;
2. 线性回归使用最小化平方误差(MSE),对偏离真实值越远的数据惩罚越严重。逻辑回归是最大化似然函数进行参数估计,使用交叉熵做损失函数
3. 线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值,使用逻辑回归的方法进行分类,就明显对异常值有较好的稳定性。
9) LR和SVM的区别:
相同点: LR和SVM都是分类模型,监督学习,判别模型,如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
不同点:
10) 逻辑回归为什么更适合处理id类特征?
1. 对于tree based模型,处理id类特征,从树根到树叶的路径,其实就是是否是某用户和是否是某商品的联合判断,它已经变成了一个历史记忆,这就是为什么tree based模型在稀疏大规模ID类特征表现不行的原因;
2. 对于逻辑回归模型,一方面,它可以处理大规模的数据,可以并行处理;另一方面,我们可以通过L1正则化,进行特征选择。
11) 关于模型在各个维度进行不均匀伸缩后,最优解与原来等价吗?
等不等价要看最终的误差优化函数。如果经过变化后最终的优化函数等价则等价。明白了这一点,那么很容易得到,如果对原来的特征乘除某一常数,则等价。做加减和取对数都不等价。
12) 关于逻辑回归,连续特征离散化的好处
可以实现非线性。举例,一个变量如果服从对数正态分布,那么对于不同区间,重要度不同。因此我们通过离散化,可以实现对不同区间学习不同的权重。