前言:若需获取本文全部的手书版原稿资料,扫码关注公众号,回复: Softmax和Logistic 即可获取。
原创不易,转载请告知并注明出处!扫码关注公众号【机器学习与自然语言处理】,定期发布知识图谱,自然语言处理、机器学习等知识,添加微信号【17865190919】进讨论群,加好友时备注来自优快云。
一、神经网络中的Softmax函数
1、Softmax函数定义
Softmax函数常在神经网络输出层充当激活函数,将输出层的值通过激活函数映射到0-1区间,将神经元输出构造成概率分布,用于多分类问题中,Softmax激活函数映射值越大,则真实类别可能性越大,下面先给出Softmax函数计算公式:
a j = e z j ∑ k e z k a_{j} = \ \frac{e^{z_{j}}}{\sum_{k}^{}e^{z_{k}}} aj= ∑kezkezj
下图给出了Softmax作激活函数对输出值映射处理过程,形象理解Softmax函数
2、Softmax回归反向传播梯度推导
在神经网络算法中,在输出层通常将Softmax函数作为激活函数,并定义log似然代价函数,通过求解似然函数梯度,结合反向传播算法来更新网络参数以此训练神经网络,先看下图有一个形象的理解:
再介绍梯度推导之前,我们先介绍一下Softmax函数求导,Softmax十分特殊,求导过程如下:
我们利用激活函数预测输出值建立log似然代价函数公式,其中yk是真实标签,ak是预测标签:
C = − ∑ k y k log a k C = \ - \sum_{k}^{}{y_{k}\log a_{k}} C= −k∑yklogak
正如上图所示,其中有:
a j = e z j ∑ k e z k a_{j} = \ \frac{e^{z_{j}}}{\sum_{k}^{}e^{z_{k}}} aj= ∑kezkezj
z j = w kj x j + b j z_{j} = w_{\text{kj}}x_{j} + \ b_{j} zj=wkjxj+ bj
其中yk表示的是第k个神经元对应的真实值,也是和aj一样是经过归一化处理的,因此有(下面推导将用到):
∑ k y k = 1 \sum_{k}^{}y_{k} = 1 k∑yk=1
下面我们便让log似然代价函数对参数w、b求导得出梯度,梯度回带利用反向传播算法更新参数w、b,对参数w、b求导过程如下:
∂ C ∂ w kj = ∂ C ∂ z j ∂ z j ∂ w kj = ∂ C ∂ z j ∂ ( w kj x j + b j ) ∂ w kj \frac{\partial C}{\partial w_{\text{kj}}} = \ \frac{\partial C}{\partial z_{j}}\frac{\partial z_{j}}{\partial w_{\text{kj}}} = \ \frac{\partial C}{\partial z_{j}}\frac{\partial(w_{\text{kj}}x_{j} + \ b_{j})}{\partial w_{\text{kj}}} ∂wkj∂C= ∂zj∂C∂wkj∂zj= ∂zj∂C∂wkj∂(wkjxj+ bj)
∂ C ∂ b j = ∂ C ∂ z j ∂ z j ∂ b j = ∂ C ∂ z j ∂ ( w kj x j + b j ) ∂ b j \frac{\partial C}{\partial b_{j}} = \ \frac{\partial C}{\partial z_{j}}\frac{\partial z_{j}}{\partial b_{j}} = \ \frac{\partial C}{\partial z_{j}}\frac{\partial(w_{\text{kj}}x_{j} + \ b_{j})}{\partial b_{j}} ∂bj∂C= ∂zj∂C∂bj∂zj= ∂zj∂C∂bj∂(wkjxj+ bj)
其中有:
∂ ( w kj x j + b j ) ∂ w kj = x j \frac{\partial(w_{\text{kj}}x_{j} + \ b_{j})}{\partial w_{\text{kj}}} = \ x_{j} ∂wkj∂(wkjxj+ bj)= xj
∂ ( w kj x j + b j ) ∂ b j = 1 \frac{\partial(w_{\text{kj}}x_{j} + \ b_{j})}{\partial b_{j}} = 1 ∂bj∂(wkjxj+ bj)=1
因此我们当前的目标便是求解:
∂ C ∂ z j = ? \frac{\partial C}{\partial z_{j}} = \ ? ∂zj∂C= ?
其求解过程如下所示:
∂ C ∂ z j = ∂ ( − ∑ k y k log a k ) ∂ z j \frac{\partial C}{\partial z_{j}} = \ \frac{\partial\left( - \sum_{k}^{}{y_{k}\log a_{k}} \right)}{\partial z_{j}} ∂zj∂C= ∂zj∂(−∑kyklogak)
= ∂ ( − y j log a j ) ∂ z j + ∂ ( − ∑ k ≠ j y k log a k ) ∂ z j \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = \frac{\partial( - y_{j}\log a_{j})}{\partial z_{j}} + \ \frac{\partial\left( - \sum_{k \neq j}^{}{y_{k}\log a_{k}} \right)}{\partial z_{j}} =∂zj∂(−yjlogaj)+ ∂zj∂(−∑k=jyklogak)
= − y j 1 a j ∂ a j ∂ z j − ∑ k ≠ j y k 1 a k ∂ a k ∂ z j \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = - y_{j}\frac{1}{a_{j}}\frac{\partial a_{j}}{\partial z_{j}}\ - \ \sum_{k \neq j}^{}y_{k}\frac{1}{a_{k}}\frac{\partial a_{k}}{\partial z_{j}} =−yjaj1∂zj∂aj − k=j∑ykak1∂zj∂ak
= − y j 1 a j ∗ a j ( 1 − a j ) − ∑ k ≠ j y k 1 a k ∗ ( − a k a j ) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = - y_{j}\frac{1}{a_{j}}*a_{j}\left( 1 - a_{j} \right) - \ \ \sum_{k \neq j}^{}y_{k}\frac{1}{a_{k}}*( - a_{k}a_{j}) =−yjaj1∗aj(1−aj)− k=j∑ykak1∗(−akaj)
= y j a j + ∑ k ≠ j y k a j − y j \ \ \ \ \ \ \ \ \ \ \ \ \ \ = y_{j}a_{j} + \ \ \sum_{k \neq j}^{}y_{k}a_{j} - \ y_{j} =yjaj+ k=j∑ykaj− yj
= ∑ k y k a j − y j = a j − y j \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = \sum_{k}^{}y_{k}a_{j} - \ y_{j} = \ a_{j} - \ y_{j} =k∑ykaj− yj= aj− yj
这样经过上述推导我们便得到了参数w、b梯度:
∂ C ∂ w kj = x j ( a j − y j ) \frac{\partial C}{\partial w_{\text{kj}}} = \ x_{j}(a_{j} - \ y_{j}) ∂wkj∂C= xj(aj− yj)
∂ C ∂ b j = a j − y j \frac{\partial C}{\partial b_{j}} = a_{j} - \ y_{j} ∂bj∂C=aj− yj
上面是对单一变量进行求导,对全部参数求导写成向量表示为,其中a是预测输出向量形式,y为真是标签向量形式:
∂ C ∂ w → = x → ( a → − y → ) \frac{\partial C}{\partial\overrightarrow{w}} = \ \overrightarrow{x}(\overrightarrow{a} - \ \overrightarrow{y}) ∂w∂C= x(a− y)
∂ C ∂ b → = a → − y → \frac{\partial C}{\partial\overrightarrow{b}} = \overrightarrow{a} - \ \overrightarrow{y} ∂b∂C=a− y
得到上述梯度后便可利用反向传播算法更新更新神经网络参数,当然如果我们使用不同的形式定义损失函数C则得到的结果也会有差别,例如我们也可以使用交叉熵函数定义C:
C
=
−
1
n
∑
x
[
y
l
n
a
+
(
1
−
y
)
ln
(
1
−
a
)
]
C = \ - \frac{1}{n}\sum_{x}^{}{\lbrack\ ylna} + \left( 1 - y \right)\ln\left( 1 - a \right)\rbrack
C= −n1x∑[ ylna+(1−y)ln(1−a)]
二、Softmax回归与Logistic回归关系
关于Logistic回归的详细介绍请参考博主另一篇文章:logistic回归原理解析及Python应用实例
1、由广义线性模型再推Logistic回归损失函数
由线性回归的广义线性模型和Sigmoid函数便可得到二分类模型Logistic回归预测函数
y = g − 1 ( w T x + b ) y = \ g^{- 1}\left( w^{T}x + b \right) y= g−1(wTx+b)
y = 1 1 + e − z y = \ \frac{1}{1 + e^{- z}} y= 1+e−z1
由上面两个式子可以得到Logistic预测函数
y = h w ( x ) = 1 1 + e − ( w T x + b ) y = h_{w}(x) = \frac{1}{1 + e^{- (w^{T}x + b)}} y=hw(x)=1+e−(wTx+b)1
现在我们通过上式一步一步推导得到Logistic回归的损失函数,首先上面变化可得:
lny l n 1 − y = w T x + b \frac{\text{lny}}{ln1 - y} = \ w^{T}x + b ln1−ylny= wTx+b
因为Logistic是二分类模型,所以我们可以将y看成正例可能性的概率,则1-y便是反例可能性的概率,把正例看成类1,反例看成类0,即可做出下面等价:
y < = > p ( y = 1 | x ) y < = > \ \ p\left( y = 1 \middle| x \right) y<=> p(y=1∣x)
1 − y < = > p ( y = 0 | x ) 1 - y < = > \ p\left( y = 0 \middle| x \right) 1−y<=> p(y=0∣x)
因此可得出:
ln p ( y = 1 | x ) p ( y = 0 | x ) = w T x + b \ln\frac{p\left( y = 1 \middle| x \right)}{p\left( y = 0 \middle| x \right)} = \ w^{T}x + b lnp(y=0∣x)p(y=1∣x)= wTx+b
再由上式经过变换分别求出p(y=1|x)和p(y=0|x):
p ( y = 1 | x ) = e w T x + b 1 + e w T x + b = y = h w ( x ) p\left( y = 1 \middle| x \right) = \ \frac{e^{w^{T}x + b}}{1 + e^{w^{T}x + b}} = y = \ h_{w}(x) p(y=1∣x)= 1+ewTx+bewTx+b=y= hw(x)
p ( y = 0 | x ) = 1 1 + e w T x + b = 1 − y = 1 − h w ( x ) p\left( y = 0 \middle| x \right) = \ \frac{1}{1 + e^{w^{T}x + b}} = 1 - y = {1 - h}_{w}(x) p(y=0∣x)= 1+ewTx+b1=1−y=1−hw(x)
上述式子便是通过概率的思想来看分类问题,即样本属于类别1和类别0的概率,哪个概率大则样本便属于哪一类,于是我们根据最大似然法的思想通过整合上面两个式子得到类条件概率为:
p ( y | x , w ) = ( h w ( x ) ) y ( 1 − h w ( x ) ) 1 − y y ∈ { 0 , 1 } p\left( y \middle| x,w \right) = {(h_{w}(x))}^{y}{(1 - h_{w}(x))}^{1 - y}\text{\ \ \ \ \ \ \ }y \in \{ 0,\ 1\} p(y∣x,w)=(hw(x))y(1−hw(x))1−y y∈{0, 1}
这样由最大似然法再取负对数便可得到Logistic回归的损失函数:
J ( w ) = − l n ∏ p ( y ∣ x , w ) = − ∑ ( yln h w ( x ) + ( 1 − y ) ln ( 1 − h w ( x ) ) ) J\left( w \right) = - ln\prod_{}^{}{p(y|x,\ w)}\ = - \sum_{}^{}\left( \text{yln}h_{w}\left( x \right) + \left( 1 - y \right)\ln\left( 1 - h_{w}\left( x \right) \right) \right) J(w)=−ln∏p(y∣x, w) =−∑(ylnhw(x)+(1−y)ln(1−hw(x)))
因为 y={0, 1} 两类,所以将上式损失函数写开为:
2、Logistic回归和Softmax回归关系
<1> 简述Softmax和Logistic关系
Softmax回归是用来处理多分类问题,Softmax回归在处理二分类问题时既是Logistic回归,可以把Softmax回归看成是Logistic回归更一般的形式。下面我们一起推导Softmax回归模型的损失函数,并看当k=2时,Softmax回归损失函数和Logistic回归损失函数是等价的
<2> Softmax回归和Logistic回归损失函数关系
Softmax回归假设函数是针对于每一个类别估算出相应的概率值p(y=j|x),估计x每一个分类结果出现的概率,因此假设函数便是输出一个k维的向量表示k个类别的概率估计值,因此假设函数定义如下:
h w ( x ) = [ p ( y = 1 | x , w ) … p ( y = k | x , w ) ] = 1 ∑ i = 1 k e w i T x [ e w 1 T x … e w k T x ] h_{w}\left( x \right) = \begin{bmatrix} p\left( y = 1 \middle| x,w \right) \\ \ldots \\ p\left( y = k \middle| x,w \right) \\ \end{bmatrix} = \frac{1}{\sum_{i = 1}^{k}e^{w_{i}^{T}x}}\begin{bmatrix} e^{w_{1}^{T}x} \\ \ldots \\ e^{w_{k}^{T}x} \\ \end{bmatrix} hw(x)=⎣⎡p(y=1∣x,w)…p(y=k∣x,w)⎦⎤=∑i=1kewiTx1⎣⎡ew1Tx…ewkTx⎦⎤
上式分母的目的是对概率分布进行归一化处理,使得最终的概率之和为1,因此Softmax回归中将x分类为类别j的概率为:
p ( y i = j | x i , w ) = e w j T x i ∑ l = 1 k e w l T x i p\left( y^{i} = j \middle| x^{i},\ w \right) = \ \frac{e^{w_{j}^{T}x^{i}}}{\sum_{l = 1}^{k}e^{w_{l}^{T}x^{i}}} p(yi=j∣∣xi, w)= ∑l=1kewlTxiewjTxi
根据概率分布使用最大似然法可得Softmax回归损失函数为:
J ( w ) = − 1 m [ ∑ i = 1 m ∑ j = 1 k 1 { y i = j } log e w j T x i ∑ l = 1 k e w l T x i ] J\left( w \right) = \ - \frac{1}{m}\left\lbrack \sum_{i = 1}^{m}{\sum_{j = 1}^{k}{1\left\{ y^{i} = j \right\}\log\frac{e^{w_{j}^{T}x^{i}}}{\sum_{l = 1}^{k}e^{w_{l}^{T}x^{i}}}}} \right\rbrack J(w)= −m1[i=1∑mj=1∑k1{yi=j}log∑l=1kewlTxiewjTxi]
对于上诉公式当类别j取值范围为{0, 1}时便是Logistic回归的损失函数,注意下面:
J ( w ) = − 1 m [ ∑ i = 1 m ( 1 − y i ) log ( 1 − h w ( x i ) ) + y i log h w ( x i ) ] J\left( w \right) = \ - \frac{1}{m}\left\lbrack \sum_{i = 1}^{m}{\left( 1 - y^{i} \right)\log\left( 1 - h_{w}\left( x^{i} \right) \right) + y^{i}\log h_{w}\left( x^{i} \right)} \right\rbrack J(w)= −m1[i=1∑m(1−yi)log(1−hw(xi))+yiloghw(xi)]
= − 1 m [ ∑ i = 1 m ∑ j = 0 1 1 { y i = j } logp ( y i = j | x i , w ) ] \ = - \frac{1}{m}\left\lbrack \sum_{i = 1}^{m}{\sum_{j = 0}^{1}{1\left\{ y^{i} = j \right\}\text{logp}\left( y^{i} = j \middle| x^{i},\ w \right)}} \right\rbrack\text{\ \ \ \ \ \ \ \ \ \ } =−m1[i=1∑mj=0∑11{yi=j}logp(yi=j∣∣xi, w)]
下面我们将通过另一个角度再深入了解Logistic回归和Softmax回归之间关系,首先我们了解一下Softmax回归模型参数的冗余性
<3> 从Softmax回归参数冗余性看Softmax和Logistic回归预测函数关系
Softmax回归参数冗余性是指最优解不止一个,有多个。假设我们从参数向量w中减去一个向量θ,则并不会改变x属于每个类的概率值,证明如下:
p ( y i = j | x i , w ) = e ( w j − θ ) T x i ∑ l = 1 k e ( w l − θ ) T x i = e w j T x i ∗ ∑ l = 1 k e − θ T x i ∑ l = 1 k e w l T x i e − θ T x i = e w j T x i ∑ l = 1 k e w l T x i p\left( y^{i} = j \middle| x^{i},\ w \right) = \ \frac{e^{{(w_{j} - \theta)}^{T}x^{i}}}{\sum_{l = 1}^{k}e^{{(w_{l} - \theta)}^{T}x^{i}}} = \ \frac{e^{w_{j}^{T}x^{i}}*\sum_{l = 1}^{k}e^{{- \theta}^{T}x^{i}}}{\sum_{l = 1}^{k}e^{w_{l}^{T}x^{i}}e^{{- \theta}^{T}x^{i}}} = \frac{e^{w_{j}^{T}x^{i}}}{\sum_{l = 1}^{k}e^{w_{l}^{T}x^{i}}} p(yi=j∣∣xi, w)= ∑l=1ke(wl−θ)Txie(wj−θ)Txi= ∑l=1kewlTxie−θTxiewjTxi∗∑l=1ke−θTxi=∑l=1kewlTxiewjTxi
从上式可以看出,从参数w中减去向量θ完全不会影响假设函数的预测结果!
接下来我们通过预测函数h(w)说明Softmax回归是Logistic回归的一般形式,当k=2时二者的预测函数相同。当k=2时,Softmax回归的假设函数为:
h w ( x ) = 1 e w 1 T x + e w 2 T x [ e w 1 T x e w 2 T x ] h_{w}\left( x \right) = \frac{1}{e^{w_{1}^{T}x} + e^{w_{2}^{T}x}}\begin{bmatrix} e^{w_{1}^{T}x} \\ e^{w_{2}^{T}x} \\ \end{bmatrix} hw(x)=ew1Tx+ew2Tx1[ew1Txew2Tx]
根据Softmax回归参数冗余特点,令减去的向量θ= w1,可得:
h w ( x ) = 1 e ( w 1 − w 1 ) T x + e ( w 2 − w 1 ) T x [ e ( w 1 − w 1 ) T x e ( w 2 − w 1 ) T x ] h_{w}\left( x \right) = \frac{1}{e^{{(w_{1} - w_{1})}^{T}x} + e^{{(w_{2} - w_{1})}^{T}x}}\begin{bmatrix} e^{{(w_{1} - w_{1})}^{T}x} \\ e^{{(w_{2} - w_{1})}^{T}x} \\ \end{bmatrix} hw(x)=e(w1−w1)Tx+e(w2−w1)Tx1[e(w1−w1)Txe(w2−w1)Tx]
h w ( x ) = [ 1 1 + e ( w 2 − w 1 ) T x e ( w 2 − w 1 ) T x 1 + e ( w 2 − w 1 ) T x ] h_{w}\left( x \right) = \begin{bmatrix} \frac{1}{1 + e^{\left( w_{2} - w_{1} \right)^{T}x}} \\ \frac{e^{\left( w_{2} - w_{1} \right)^{T}x}}{1 + e^{\left( w_{2} - w_{1} \right)^{T}x}} \\ \end{bmatrix} hw(x)=[1+e(w2−w1)Tx11+e(w2−w1)Txe(w2−w1)Tx]
我们令w=w2-w1,则softmax得到的两个的概率分别是:
p ( y = 0 | x ) = 1 1 + e w T x p\left( y = 0 \middle| x \right) = \ \frac{1}{1 + e^{w^{T}x}} p(y=0∣x)= 1+ewTx1
p ( y = 1 | x ) = e w T x 1 + e w T x p\left( y = 1 \middle| x \right) = \ \frac{e^{w^{T}x}}{1 + e^{w^{T}x}} p(y=1∣x)= 1+ewTxewTx
上面两个概率等式正是Logistic回归模型的概率值,因此Logistic回归模型正是Softmax回归的二分类时的模型。
3、Softmax损失函数优化-权重衰减
对损失函数J(w) 添加一个权重衰减项来修改损失函数,这个衰减项会惩罚过大的参数:
J ( w ) = − 1 m [ ∑ i = 1 m ∑ j = 1 k 1 { y i = j } log e w j T x i ∑ l = 1 k e w l T x i ] + λ 2 ∑ i = 1 k ∑ j = 1 n w ij 2 J\left( w \right) = \ - \frac{1}{m}\left\lbrack \sum_{i = 1}^{m}{\sum_{j = 1}^{k}{1\left\{ y^{i} = j \right\}\log\frac{e^{w_{j}^{T}x^{i}}}{\sum_{l = 1}^{k}e^{w_{l}^{T}x^{i}}}}} \right\rbrack + \ \frac{\lambda}{2}\sum_{i = 1}^{k}{\sum_{j = 1}^{n}w_{\text{ij}}^{2}} J(w)= −m1[i=1∑mj=1∑k1{yi=j}log∑l=1kewlTxiewjTxi]+ 2λi=1∑kj=1∑nwij2
其中λ>0,有了权重衰减项后,损失函数就变成了严格的凸函数,保证了解的唯一性,此时的Hessian矩阵便是可逆矩阵,得到的解也一定是全局最优解,求J(w)求导有:
∂
J
(
w
)
∂
w
=
−
1
m
[
∑
i
=
1
m
[
x
i
(
1
{
y
i
=
j
}
−
p
(
y
i
=
j
|
x
i
,
w
)
)
]
]
+
λ
w
j
\frac{\partial J(w)}{\partial w} = \ \ - \frac{1}{m}\left\lbrack \sum_{i = 1}^{m}\left\lbrack x^{i}\left( 1\left\{ y^{i} = j \right\} - p\left( y^{i} = j \middle| x^{i},\ w \right) \right) \right\rbrack\ \right\rbrack + \ \lambda w_{j}
∂w∂J(w)= −m1[i=1∑m[xi(1{yi=j}−p(yi=j∣∣xi, w))] ]+ λwj