交叉熵损失函数

2021-05-03  本文已影响0人  张虾米试错

目录

  1. 二分类
  2. 多分类
  3. 为什么sigmoid激活函数,使用交叉熵损失函数更好?

1. 二分类

激活函数sigmoid
y' = sigmoid(z_i) = \frac{1}{1+e^{-z_i}}
这里要注意的是z_i是最后一层的输出,y'才是激活函数后的输出,为预测值。
二分类的交叉熵损失函数
L = -y \log y' - (1-y) \log (1-y')
这里的y=0y=1

2. 多分类

一般情况下,最后一个输出层的节点个数与分类任务的目标数相等。因此多分类最后一层用softmax得到每个类别的预测值。
激活函数softmax:
y'_i = softmax(z_i) = \frac{e^{z_i}}{\sum {e^{z_i}}}
因此\sum{y'_i}=1

损失函数
L = -\sum{y_i \log y'_i}
这里的y_i=0y_i=1
举例说明,假设任务是3分类问题,原始样本标签为y = [1, 0, 0],预测值为y' =[0.7, 0.2, 0.1],那么L = 1*\log 0.7 + 0*\log 0.2+0*\log 0.1

3. 为什么sigmoid激活函数,使用交叉熵损失函数更好?

下面以二分类为例进行说明。

数学推导,求损失函数的解必会有求导,因此我们对损失函数求导:
\frac{\partial L}{\partial y} = \frac{\partial L}{\partial y} * \frac{\partial y}{\partial z}
\frac{\partial L}{\partial y} = -\frac{y}{y'} + \frac{1-y}{1-y'}=\frac{y'-y}{y(1-y')}
\frac{\partial y}{\partial z} =\frac{e^{-z}} {(1+e^{-z})^2} = \frac{e^{-z}} {(1+e^{-z})} * \frac{1} {(1+e^{-z})} = y'(1-y')
\frac{\partial L}{\partial z} = y'-y
所以当误差大的时候,权重更新快;当误差小的时候,权重更新慢。这是一个很好的性质。

对比均方误差损失函数。
L = \frac{1}{2n} \sum (y_i-y_i')^2
\frac{\partial L}{\partial y} = y'-y
\frac{\partial y}{\partial z} =\frac{e^{-z}} {(1+e^{-z})^2} = \frac{e^{-z}} {(1+e^{-z})} * \frac{1} {(1+e^{-z})} = y'(1-y')
\frac{\partial L}{\partial z} = (y'-y) \frac{\partial y}{\partial z} = y'(1-y') (y'-y)
相比交叉熵损失函数,没有“误差更大权重更新越快”的性质。

学习资料

上一篇下一篇

猜你喜欢

热点阅读