cross entropy 与 square error(square error在神经网络中的梯度消失问题)

分类模型中的损失为什么使用cross entropy 而不是classification error或者squared error?

在这里插入图片描述

我们用一个的实际模型来看 classification error 的弊端。
使用 3 组训练数据,computed 一栏是预测结果,targets 是预期结果。二者的数字,都可以理解为概率。correct 一栏表示预测是否正确。

模型 1

computed | targets | correct?

0.3 0.3 0.4 | 0 0 1 (democrat) | yes
0.3 0.4 0.3 | 0 1 0 (republican) | yes
0.1 0.2 0.7 | 1 0 0 (other) | no

item 1 和 2 以非常微弱的优势判断正确,item 3 则彻底错误。classification error= 1/3 = 0.33

模型 2

computed | targets | correct?

0.1 0.2 0.7 | 0 0 1 (democrat) | yes
0.1 0.7 0.2 | 0 1 0 (republican) | yes
0.3 0.4 0.3 | 1 0 0 (other) | no
item 1 和 2 的判断非常精准,item 3 判错,但比较轻。classification error = 1/3 = 0.33

结论
2 个模型的 classification error 相等,但模型 2 要明显优于模型 1.classification error 很难精确描述模型与理想模型之间的距离。

cross-entropy

cross-entropy的计算公式:
在这里插入图片描述
第一个模型是cross-entropy:
− ( I n ( 0.4 ) + I n ( 0.4 ) + I n ( 0.1 ) ) / 3 = 1.38 -(In(0.4) + In(0.4) + In(0.1))/3 = 1.38 (In(0.4)+In(0.4)+In(0.1))/3=1.38
第二个模型的ACE是:
− ( I n ( 0.7 ) + I n ( 0.7 ) + I n ( 0.3 ) ) / 3 = 0.64 -(In(0.7) + In(0.7) + In(0.3))/3 = 0.64 (In(0.7)+In(0.7)+In(0.3))/3=0.64
结论:
ACE结果准确的体现了模型2优于模型1.cross-entropy 更清晰的描述了模型与理想模型的距离。

为什么不用均方误差呢?

分类问题,最后必须是 one hot 形式算出各 label 的概率,然后通过 argmax 选出最终的分类。在计算各个 label 概率的时候,用的是 softmax 函数。
如果用 MSE 计算 loss,输出的曲线是波动的,有很多局部的极值点。即,非凸优化问题 (non-convex)。cross entropy 计算 loss,则依旧是一个凸优化问题,用梯度下降求解时,凸优化问题有很好的收敛特性。

在训练神经网时,应该使用哪一个呢?

如果是回归问题,用均方误差(MSE).如果是分类问题,一般用交叉熵损失(CE).
因为MSE容易发生梯度消失问题,而CE则不会.
以分类问题为例,假设我们的类别数量为T,最后一层使用softmax.对一条样本(x,c)而言,其label为c.在神经网络softmax之前的那一层,共有T个神经元:
在这里插入图片描述
不管是用MSE还是CE,我们都是希望 y c y_c yc越大越好,其他与其并列的神经元越小输出值越好.
如果是MSE,则这条样本的误差为:
( e y c ∑ i = 1 T e y i − 1 ) 2 + ∑ j = 1 , j ≠ c T ( e y c ∑ i = 1 T e y i − 1 ) 2 (\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}}-1)^2 + \sum^T_{j=1,j\neq c}(\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}}-1)^2 (i=1Teyieyc1)2+j=1,j̸=cT(i=1Teyieyc1)2
我们来分析这个误差对于参数w的梯度。上式中一共有T项,我们不妨先取出其中一项,比如第一项来分析:
∂ ( e y c ∑ i = 1 T e y i − 1 ) 2 ∂ w = 2 ( e y c ∑ i = 1 T e y i − 1 ) ⋅ e y c ∑ i = 1 T e y i ⋅ ( 1 − e y c ∑ i = 1 T e y i ) ⋅ ∂ y c ∂ w \frac{\partial (\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}}-1)^2}{\partial w}=2(\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}}-1) \cdot \frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}} \cdot (1-\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}}) \cdot \frac{\partial y_c}{\partial w} w(i=1Teyieyc1)2=2(i=1Teyieyc1)i=1Teyieyc(1i=1Teyieyc)wyc
我们的目标是想通过梯度下降调整w来增大 e y c ∑ i = 1 T e y i \frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}} i=1Teyieyc,是其尽可能的接近于1.但是当 e y c ∑ i = 1 T e y i \frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}} i=1Teyieyc接近于0时,梯度也就接近于0.但是我们期望的是想通过梯度下降使其往1的方向走.但是此时梯度接近于0,无法通过梯度下降使其接近于1.这就是梯度消失。

而使用CE时,就不会出现这个问题,其损失为:
− l o g e y c ∑ i = 1 T e y i -log\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}} logi=1Teyieyc
同样我们求该损失对w的梯度:
∂ ( − l o g e y c ∑ i = 1 T e y i ) ∂ w = ( e y c ∑ i = 1 T e y i − 1 ) ∂ y c ∂ w \frac{\partial (-log\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}})}{\partial w}=(\frac{e^{y_c}}{\sum^T_{i=1}e^{y^i}}-1) \frac{\partial y_c}{\partial w} w(logi=1Teyieyc)=(i=1Teyieyc1)wyc
此时,我们发现,该梯度就不会发生gradient vanishing了,因为消去了导致梯度错误消失的因子。
CE梯度趋近于0仅发生在目标几乎达成的时候,因此没问题。但是MSE在梯度更新的过程可能存在梯度趋近于0,也就是可能随时停在了某个极值点,无法继续更新参数.

参考:https://www.jianshu.com/p/5d13bcd9d990

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值