为什么逻辑回归要用交叉熵作为损失函数?
当使用交叉熵作为损失函数时,对于二分类问题,求导可以消去$\sigma()$函数,对于softmax,求导可以消去exp,这样直观上对w的求导变得更加简单,当对w的求导变得简单时,梯度下降法才可以更好的work,否则会出现各种诸如梯度弥散,梯度爆炸等问题。
二分类中交叉熵做损失函数的推导:
假设$a=\sigma(z),z=wx+b$,y为真实分布。
用链式求导法
${\partial C \over \partial w}={\partial C \over \partial a}*{\partial a \over \partial w}$
${\partial C \over \partial a}={(z(y-a)*(-1)) \over 2}=a-y$
${\partial a \over \partial w}={\sigma’(z)*dz \over dw}=\sigma’(z)x$
${\partial C \over \partial w}={\partial C \over \partial a}*\sigma ‘(z)x$
如果我们将$\sigma’(z)$消去,求导就会简单很多,
而$\sigma ‘(z)=\sigma (z)(1-\sigma ‘(z)) =1-a$,
所以,带有$\sigma’(z)$的求导公式为${\partial C \over \partial w}={\partial C \over \partial a}*(1-a)x$,
去掉$\sigma’(z)$的求导公式为${\partial C \over \partial w}=(a-y)x$
令两式相等得${\partial C \over \partial a}*(1-a)x=(a-y)x$,
解得$C=-[y\ln a+(1-y)\ln (1-a)]+constant$,
这是单个训练示例对代价函数的贡献。为了得到完整的代价函数,需要对训练实例进行平均,得到
$C=-{1\over n}\sum_x[y\ln a+(1-y)\ln (1-a)]+constant$,
所以,用交叉熵做损失函数可以使得求导更加简单。
参考:
https://www.cnblogs.com/xhslovecx/p/10858646.html
softmax中交叉熵做损失函数的推导
在多分类问题中,我们经常使用交叉熵作为损失函数
$Loss=-\sum_{i}t_ilny_i$
其中,$t_i$表示真实值,$y_i$表示求出的softmax值。当预测第i个时,可以认为$t_i=1$.此时损失函数变成了:
$Loss_i=-lny_i$
接下来对Loss求导。根据定义:
$y_i={e^i\over\sum_je^j}$
且
${e^i\over\sumje^j}=1-{\sum{j\not=i}ej\over\sum_je^j}$
接下来开始求导:
$ \frac{\partial Loss_i}{\partial _i}=-\frac{\partial ln y_i}{\partial _i} $
$ = \frac{\partial (-ln \frac{e^i}{\sum_j e^j}) }{\partial _i} $
$ = - \frac {1}{ \frac{e^i}{\sum_j e^j}} \cdot \frac{\partial (\frac{e^i}{\sum_j e^j})}{ \partial_i} $
$ = -\frac{\sumj e^j}{e^i} \cdot \frac{\partial (1 - \frac{\sum{j \neq i} e^j}{\sum_j e^j}) } {\partial_i} $
对$i$求导,$(- \sum _ {j \neq i}e^j )$为常数
$ = -\frac{\sumj e^j}{e^i} \cdot (- \sum {j \neq i}e^j ) \cdot \frac{\partial( \frac {1} {\sum_j e^j} ) } { \partial _i} $
$=\frac { \sumj e^j \cdot \sum{j \neq i} e^j} {e^i } \cdot \frac { - e^i} { (\sum_j e^j) ^ 2} $
分数求导法则
$= -\frac { \sum_{j \neq i} e^j } { \sum_j e^j } $
$ = -(1 - \frac{ e ^ i } { \sum_j e^j } ) $
$= y_i - 1 $
上面的结果表示,我们只需要正想求出$y_i$,将结果减1就是反向更新的梯度,导数的计算是不是非常简单!
参考: