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: `cross_entropy()` 是一种常见的损失函数(loss function),通常用于分类问题中。对于二分类问题,它可以被定义为: $$ L(y, \hat{y}) = -y\log(\hat{y}) - (1-y)\log(1-\hat{y}) $$ 其中,$y$ 是真实标签(0 或 1),$\hat{y}$ 是模型预测的概率(0 到 1 之间的实数)。这个损失函数的基本思想是:当模型的预测真实标签相符时,损失函数的值最小;当预测错误时,损失函数的值会增大。 对于多分类问题, `cross_entropy()` 的定义会有所不同,但基本思想是相似的。在训练神经网络时,我们通常会使用反向传播算法(backpropagation)来计算梯度并更新网络参数,以最小化损失函数的值。 ### 回答2: 交叉熵cross-entropy)是在信息论中常用的一种衡量概率分布之间差异的度量。在机器学习中,交叉熵常被用作损失函数,用于衡量模型的预测结果真实标签之间的差异。 假设我们有一个分类问题,其中有多个类别,每个类别都有一个对应的真实标签。对于每个样本,我们的模型会输出一个概率分布,表示这个样本属于每个类别的概率。而真实标签对应的概率分布则只有一个类别的概率为1,其余类别的概率为0。 交叉熵可以用来衡量模型的输出概率分布和真实标签之间的差异。具体来说,交叉熵的计算公式为:H(p, q) = - Σ(p(x) * log(q(x))),其中p表示真实标签的概率分布,q表示模型的输出概率分布。 交叉熵的值越小,表示模型的输出结果真实标签越接近,模型的性能越好。当交叉熵达到最小值时,模型的输出结果和真实标签完全一致。 在训练模型时,我们通常使用梯度下降等优化算法来最小化交叉熵损失。通过迭代和反向传播,模型会不断调整参数,使得交叉熵逐渐减小,从而提高模型的训练效果。 总之,交叉熵是一种用于衡量概率分布之间差异的度量,常用于机器学习中的损失函数,并通过优化算法最小化交叉熵来提高模型的性能。 ### 回答3: 交叉熵cross entropy)是一种在信息论中常用于衡量两个概率分布之间相似度的度量,尤其在机器学习领域中广泛应用。 交叉熵可以用来衡量一个概率分布P另一个概率分布Q之间的差异程度。对于给定的样本集合,P代表了真实分布,Q则代表了模型预测出的概率分布。交叉熵通过计算PQ的每个数据点上的对数概率乘积的平均值,来衡量两个分布之间的差异程度。如果P和Q完全相同,则交叉熵为最小值;反之,如果两个分布相差较大,则交叉熵值较大。 在机器学习中,交叉熵常用于衡量分类模型的训练效果。在分类问题中,模型的预测输出被编码成一个概率分布,交叉熵可以用来比较这个分布真实标签的分布的相似程度。通过最小化交叉熵损失函数,可以使模型的预测结果真实标签尽可能接近,从而提高模型的分类准确性。 交叉熵的优势在于它对概率分布的细节敏感。相对于均方差(mean square error)等其他损失函数,在处理分类问题时,交叉熵更能够关注到预测概率分布中的较大错误,从而更加有效地驱动模型进行改进。因此,在许多机器学习任务中,特别是在神经网络模型中,交叉熵被广泛应用于损失函数的定义和优化算法的设计中。 总结来说,交叉熵是一种在信息论中用于衡量两个概率分布之间差异的度量方式。在机器学习中,交叉熵常用于衡量分类模型的训练效果,并通过最小化交叉熵损失函数来提高模型的分类准确性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值