【机器学习损失函数】 交叉熵损失(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(y−a)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 Cross−entropy
为了克服上述 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)(1−y)) δ σ 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)(1−y)) σ \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) (a−y) 这一项影响(表示真实值和输出值之间的误差),即受误差的影响,所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢。
原因 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−ωxi−b)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 Cross−entropy
而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−(w⋅x)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)+cross−entropyloss 擅长于学习类间的信息,因为它采用了类间竞争机制,它只关心对于正确标签预测概率的准确性,忽略了其他非正确标签的差异,导致学习到的特征比较散。基于这个问题的优化有很多,比如对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

谢谢点赞交流!(❁´◡`❁)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)