【机器学习损失函数】 交叉熵损失(Cross-entropy)和平方损失(MSE)究竟有何区别?


更多代码Gitee主页:https://gitee.com/GZHzzz
博客主页CSDN:https://blog.csdn.net/gzhzzaa

概念区别

  • 均方差损失函数(MSE)
    简单来说,均方误差(MSE)的含义是求一个batch中n个样本的n个输出与期望输出的差的平方的平均值
  • Cross-entropy(交叉熵损失函数)
    交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况。它刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近

为什么不用MSE(两者区别详解)

原因 1:交叉熵loss权重更新更快😝

  • M S E MSE MSE

比如对于一个神经元(单输入单输出, s i g m o i d sigmoid sigmoid函数),定义其代价函数为:
C = ( y − a ) 2 2 C= \frac {(y-a)^ {2}}{2} C=2(ya)2 其中 C C C是损失, y y y是我们期望的输出(真实值target), a a a为神经元的实际输出(输出值): z = w x + b , a = σ ( z ) z=wx+b,a=\sigma(z) z=wx+b,a=σ(z)在训练神经网络过程中,我们通过梯度下降算法来更新 w w w b b b ,因此需要计算损失函数对 w w w b b b的导数: d C d w \frac{dC}{dw} dwdC=(a-y) σ \sigma σ’(z)x=(a-y)a(1-a)x ≈ \approx a σ \sigma σ’(z) d C d b \frac{dC}{db} dbdC=(a-y) σ \sigma σ’(z)=(a-y)a(1-a) ≈ \approx a σ \sigma σ’(z)
(其中 x x x y y y 都是已知量,因为网络输入都是以 ( x , y ) (x,y) (x,y) 形式输入的,所以上式直接的 “ ≈ ” “≈” x x x y y y 略去了)
在这里插入图片描述
因为 s i g m o i d sigmoid sigmoid函数的性质,如图的两端,几近于平坦,导致 σ \sigma σ‘(z) 在 z 取大部分值时会很小,这样会使得 w 和 b 更新非常慢
再定量解释如下:
由上式: d C d w \frac{dC}{dw} dwdC=(a-y) σ \sigma σ’(z)x=(a-y)a(1-a)x ≈ \approx a σ \sigma σ’(z)
a) 当真实值 y = 1:

  • 若 输出值 a = 1, d C d w \frac{dC}{dw} dwdC=0
  • 若 输出值 a = 0, d C d w \frac{dC}{dw} dwdC=0

b) 当真实值 y = 0:

  • 若 输出值 a = 1, d C d w \frac{dC}{dw} dwdC=0
  • 若 输出值 a = 0, d C d w \frac{dC}{dw} dwdC=0

这就带来实际操作的问题。当梯度很小的时候,应该减小步长(否则容易在最优解附近产生来回震荡),但是如果采用 MSE ,当梯度很小的时候,无法知道是离目标很远还是已经在目标附近了。(离目标很近和离目标很远,其梯度都很小
在这里插入图片描述

  • C r o s s − e n t r o p y Cross-entropy Crossentropy

为了克服上述 MSE 不足,引入了categorical_crossentropy(交叉熵损失函数)

二分类 Binary Cross-entropy,激活函数为 sigmoid: f ( z ) = 1 1 + e x p ( − z ) f(z)=\frac {1}{1+exp(-z)} f(z)=1+exp(z)1 损失函数:L(w)=- 1 N \frac {1}{N} N1 ∑ i = 1 n \sum _ {i=1}^ {n} i=1n[ y i y_{i} yi log ⁡ f \log _ {f} logff(xi)+(1-yi) log ⁡ \log log(1-f(xi))]

简写为:C=- 1 N \frac {1}{N} N1 ∑ i = 1 N \sum_{i=1}^{N} i=1N[ y i y_{i} yi ln ⁡ \ln lna+(1- y i y_ {i} yi) ln ⁡ \ln ln(1-a)]

同样求导可得:

δ C δ w j \frac{\delta C}{\delta wj} δwjδC = 1 N \frac {1}{N} N1 ∑ i = 1 N \sum _ {i=1}^ {N} i=1N( σ \sigma σ(z)-y) x j x_ {j} xj= 1 N \frac {1}{N} N1 ∑ i = 1 N \sum _ {i=1}^ {N} i=1N(a-y) x j x_ {j} xj

δ C δ b \frac {\delta C}{\delta b} δbδC = 1 N \frac{1}{N} N1 ∑ i = 1 N \sum _ {i=1}^ {N} i=1N( σ \sigma σ(z)-y)= 1 N \frac {1}{N} N1 ∑ i = 1 N \sum _ {i=1}^ {N} i=1N(a-y)

证明如下:

  • δ C δ w j \frac {\delta C}{\delta w_ {j}} δwjδC =- 1 N \frac {1}{N} N1 ∑ i = 1 N \sum _ {i=1}^ {N} i=1N( y σ ( z ) \frac {y}{\sigma (z)} σ(z)y - ( 1 − y ) 1 − σ ( z ) \frac {(1-y)}{1-\sigma (z)} 1σ(z)(1y)) δ σ d w j \frac {\delta \sigma }{dwj} dwjδσ
    =- 1 N \frac {1}{N} N1 ∑ i = 1 N \sum _ {i=1}^ {N} i=1N( y σ ( z ) \frac{y}{\sigma (z)} σ(z)y - ( 1 − y ) 1 − σ ( z ) \frac {(1-y)}{1-\sigma (z)} 1σ(z)(1y)) σ \sigma σ’(z) x j x_ {j} xj
    = 1 N \frac {1}{N} N1 ∑ i = 1 N \sum_ {i=1}^ {N} i=1N σ ′ ( z ) x j σ ( z ) ( 1 − σ ( z ) ) \frac{\sigma'(z)x_ {j}}{\sigma (z)(1-\sigma (z))} σ(z)(1σ(z))σ(z)xj( σ \sigma σ(z)-y)
    = 1 N \frac {1}{N} N1 ∑ x = 1 N \sum _ {x=1}^ {N} x=1N( σ \sigma σ(z)-y) x j x_ {j} xj

因此, w 的梯度公式中原来的 σ \sigma σ'(z)被消掉了,所以导数中没有这一项,权重的更新是受 ( a − y ) (a-y) (ay) 这一项影响(表示真实值和输出值之间的误差),即受误差的影响,所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢。

原因 2:MSE是非凸优化问题而 Cross-entropy 是凸优化问题😝

  • M S E MSE MSE

我们从最简单的线性回归开始讨论:

线性回归(回归问题)使用的是平方损失:L( ω \omega ω,b)= 1 2 N \frac{1}{2N} 2N1 ∑ i = 1 N \sum _ {i=1}^ {N} i=1N ( y i − ω x i − b ) 2 (y_ {i}-\omega x_ {i}-b)^ {2} (yiωxib)2

因为这个函数 L ( w , b ) L(w,b) L(w,b)是凸函数,直接求导等于零,即可求出解析解,很简单。但是对于逻辑回归则不行(分类问题)【注意:逻辑回归不是回归!是分类!!】。因为如果逻辑回归也用平方损失作为损失函数,则: L ( w ) L_ {(w)} L(w)= 1 2 N \frac {1}{2N} 2N1 ∑ i = 1 N \sum _ {i=1}^ { N} i=1N( y i y_ {i} yi- 1 1 + e − ( w x i ) ) \frac {1}{1+e^{-(wx_{i})}}) 1+e(wxi)1)

上式是非凸的,不能直接求解析解,而且不宜优化,易陷入局部最优解,即使使用梯度下降也很难得到全局最优解。如下图所示:

在这里插入图片描述

  • C r o s s − e n t r o p y Cross-entropy Crossentropy

而Cross-entropy 计算 loss,则依旧是一个凸优化问题。
直观理解:
L ( w ) = { − log ⁡ ( π ( x i ) ) . i f ( y = 1 ) − log ⁡ ( 1 − π ( x i ) ) . i f ( y = 0 ) L(w)= \begin{cases}-\log(\pi(x_{i})). if (y=1)\\-\log(1-\pi(x_{i})).if(y=0)\end{cases} L(w)={log(π(xi)).if(y=1)log(1π(xi)).if(y=0)其中: π \pi π( x i x_ {i} xi)=P(Y=1|x)= e w x 1 + e w x \frac {e^ {wx}}{1+e^ {w}x} 1+ewxewx = 1 1 + e − ( w ⋅ x ) \frac {1}{1+e^{-(w\cdot x)}} 1+e(wx)1
在这里插入图片描述
当类别标签为 y = 1 y=1 y=1 时,越靠近1则损失越小;当类别标签为 y = 0 y=0 y=0 时,越靠近1则损失越大

补充 Cross-entropy 的缺点

  • s i g m o i d ( s o f t m a x ) + c r o s s − e n t r o p y l o s s sigmoid(softmax)+cross-entropy loss sigmoid(softmax)+crossentropyloss 擅长于学习类间的信息,因为它采用了类间竞争机制,它只关心对于正确标签预测概率的准确性,忽略了其他非正确标签的差异,导致学习到的特征比较散。基于这个问题的优化有很多,比如对softmax进行改进,如L-Softmax、SM-Softmax、AM-Softmax等。这些在本篇不展开讨论。

写在最后

十年磨剑,与君共勉!
更多代码Gitee主页:https://gitee.com/GZHzzz
博客主页CSDN:https://blog.csdn.net/gzhzzaa

  • Fighting!😎

基于pytorch的经典模型基于pytorch的典型智能体模型
强化学习经典论文强化学习经典论文
在这里插入图片描述

while True:
	Go life

在这里插入图片描述

谢谢点赞交流!(❁´◡`❁)

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北郭zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值