【超详细公式推导】关于交叉熵损失函数(Cross-entropy)和 平方损失(MSE)的区别

Cross-entropy 与 MSE

      • 一、概念区别
      • 二、为什么不用MSE(两者区别详解)
        • 2.1 原因 1:交叉熵loss权重更新更快
          • 2.1.1 MSE
          • 2.1.2 Cross-entropy
          • 2.1.3 补充 Cross-entropy 的缺点
        • 2.2 原因 2:MSE是非凸优化问题而 Cross-entropy 是凸优化问题
          • 2.2.1 MSE
          • 2.2.2 Cross-entropy
      • 三、总结

一、概念区别

1. 均方差损失函数(MSE)
简单来说,均方误差(MSE)的含义是求一个batch中n个样本的n个输出与期望输出的差的平方的平均值、

2. Cross-entropy(交叉熵损失函数)
交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况。
它刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。

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

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

2.1.1 MSE

比如对于一个神经元(单输入单输出,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=w x+b,a=\sigma(z) z=wx+ba=σ(z)

在训练神经网络过程中,我们通过梯度下降算法来更新 w w w b b b ,因此需要计算损失函数对 w w w b b b 的导数:

∂ C ∂ w = ( a − y ) σ ′ ( z ) x = ( a − y ) a ( 1 − a ) x ≈ a σ ′ ( z ) \frac{\partial C}{\partial w}=(a-y) \sigma^{\prime}(z) x =(a-y)a(1-a)x \approx a \sigma^{\prime}(z) wC=(ay)σ(z)x=(ay)a(1a)xaσ(z)
∂ C ∂ b = ( a − y ) σ ′ ( z ) = ( a − y ) a ( 1 − a ) ≈ a σ ′ ( z ) \frac{\partial C}{\partial b}=(a-y) \sigma^{\prime}(z) =(a-y)a(1-a) \approx a \sigma^{\prime}(z) bC=(ay)σ(z)=(ay)a(1a)aσ(z)
(其中 x x x y y y 都是已知量,因为网络输入都是以 ( x i , y i (x_i,y_i xi,yi)形式输入的,所以上式直接的 “≈” 把 x x x y y y 略去了)

而后更新 w w w b b b
w = w − η ∂ C ∂ w = w − η a σ ′ ( z ) w = w-\eta \frac{\partial C}{\partial w}=w-\eta a \sigma^{\prime}(z) w=wηwC=wηaσ(z)
b = b − η ∂ C ∂ b = b − η a σ ′ ( z ) b = b-\eta \frac{\partial C}{\partial b}=b- \eta a \sigma^{\prime}(z) b=bηbC=bηaσ(z)
【超详细公式推导】关于交叉熵损失函数(Cross-entropy)和 平方损失(MSE)的区别_第1张图片
因为sigmoid函数的性质,如图的两端,几近于平坦,导致 σ ′ ( z ) \sigma^{\prime}(z) σ(z) z z z 取大部分值时会很小,这样会使得 w w w b b b 更新非常慢(因为 η a σ ′ ( z ) = > 0 \eta a \sigma^{\prime}(z) => 0 ηaσ(z)=>0 )。

再定量解释如下:
在上式
∂ C ∂ w = ( a − y ) σ ′ ( z ) x = ( a − y ) a ( 1 − a ) x ≈ a σ ′ ( z ) \frac{\partial C}{\partial w}=(a-y) \sigma^{\prime}(z) x =(a-y)a(1-a)x \approx a \sigma^{\prime}(z) wC=(ay)σ(z)x=(ay)a(1a)xaσ(z)
a) 当真实值 y = 1 y=1 y=1 ,
若 输出值 a = 1 a=1 a=1,则 ∂ C ∂ w = 0 \frac{\partial C}{\partial w}=0 wC=0

若 输出值 a = 0 a=0 a=0,则 ∂ C ∂ w = 0 \frac{\partial C}{\partial w}=0 wC=0

b) 当真实值 y = 0 y=0 y=0 ,
若 输出值 a = 1 a=1 a=1,则 ∂ C ∂ w = 0 \frac{\partial C}{\partial w}=0 wC=0

若 输出值 a = 0 a=0 a=0,则 ∂ C ∂ w = 0 \frac{\partial C}{\partial w}=0 wC=0

也就是平方损失(MSE)的梯度更新很慢,如下图所示

【超详细公式推导】关于交叉熵损失函数(Cross-entropy)和 平方损失(MSE)的区别_第2张图片
这就带来实际操作的问题。当梯度很小的时候,应该减小步长(否则容易在最优解附近产生来回震荡),但是如果采用 MSE ,当梯度很小的时候,无法知道是离目标很远还是已经在目标附近了。(离目标很近和离目标很远,其梯度都很小)

2.1.2 Cross-entropy

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

1、二分类 Binary Cross-entropy

激活函数为 sigmoid
f ( z ) = 1 1 + exp ⁡ ( − z ) f(z)=\frac{1}{1+\exp (-z)} f(z)=1+exp(z)1
损失函数:

L ( w ) = − 1 N ∑ i = 1 N [ y i log ⁡ f ( x i ) + ( 1 − y i ) log ⁡ ( 1 − f ( x i ) ) ] L(\boldsymbol{w})=-\frac{1}{N} \sum_{i=1}^{N}\left[y_{i} \log f\left(\boldsymbol{x}_{i}\right)+\left(1-y_{i}\right) \log \left(1-f\left(\boldsymbol{x}_{i}\right)\right)\right] L(w)=N1i=1N[yilogf(xi)+(1yi)log(1f(xi))]
或者简写成:
C = − 1 N ∑ i = 1 N [ y i ln ⁡ a + ( 1 − y i ) ln ⁡ ( 1 − a ) ] C=-\frac{1}{N} \sum_{i=1}^{N}\left[y_{i} \ln a+\left(1-y_{i}\right) \ln(1-a) \right] C=N1i=1N[yilna+(1yi)ln(1a)]
其中 z = w x + b , a = σ ( z ) z=w x+b,a=\sigma(z) z=wx+ba=σ(z) N N N 表示样本数量。

同样求导可得:
∂ C ∂ w j = 1 N ∑ i = 1 N ( σ ( z ) − y ) x j = 1 N ∑ i = 1 N ( a − y ) x j \frac{\partial C}{\partial w_{j}}=\frac{1}{N} \sum_{i=1}^{N}(\sigma(z)-y) x_{j}=\frac{1}{N} \sum_{i=1}^{N} (a-y)x_{j} wjC=N1i=1N(σ(z)y)xj=N1i=1N(ay)xj
∂ C ∂ b = 1 N ∑ i = 1 N ( σ ( z ) − y ) = 1 N ∑ i = 1 N ( a − y ) \frac{\partial C}{\partial b}=\frac{1}{N} \sum_{i=1}^{N} (\sigma(z)-y)=\frac{1}{N} \sum_{i=1}^{N} (a-y) bC=N1i=1N(σ(z)y)=N1i=1N(ay)

=================================================================
证明如下:
∂ C ∂ w j = − 1 N ∑ i = 1 N ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) ∂ σ ∂ w j = − 1 N ∑ i = 1 N ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) σ ′ ( z ) x j = 1 N ∑ i = 1 N σ ′ ( z ) x j σ ( z ) ( 1 − σ ( z ) ) ( σ ( z ) − y ) = 1 N ∑ i = 1 N x j ( σ ( z ) − y ) \begin{aligned} \frac{\partial C}{\partial w_{j}} &=-\frac{1}{N} \sum_{i=1}^{N}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \frac{\partial \sigma}{\partial w_{j}} \\ &=-\frac{1}{N} \sum_{i=1}^{N}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \sigma^{\prime}(z) x_{j} \\ &=\frac{1}{N} \sum_{i=1}^{N} \frac{\sigma^{\prime}(z) x_{j}}{\sigma(z)(1-\sigma(z))}(\sigma(z)-y) \\ &=\frac{1}{N} \sum_{i=1}^{N} x_{j}(\sigma(z)-y) \end{aligned} wjC=N1i=1N(σ(z)y1σ(z)(1y))wjσ=N1i=1N(σ(z)y1σ(z)(1y))σ(z)xj=N1i=1Nσ(z)(1σ(z))σ(z)xj(σ(z)y)=N1i=1Nxj(σ(z)y)

其中, σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma^{\prime}(z)=\sigma(z)(1-\sigma(z)) σ(z)=σ(z)(1σ(z))

=================================================================

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

2、多分类 Categorican Cross-entropy
激活函数为 softmax
σ ( z ) j = e z j ∑ k = 1 K e z k \sigma(\mathbf{z})_{j}=\frac{e^{z_{j}}}{\sum_{k=1}^{K} e^{z_{k}}} σ(z)j=k=1Kezkezj
可以看作是Sigmoid的一般情况,用于多分类问题。

损失函数:
C = − ∑ i = 1 k y i ln ⁡ a i C = -\sum_{i=1}^{k} {y}_{i} \ln a_{i} C=i=1kyilnai

后续分析类似。

2.1.3 补充 Cross-entropy 的缺点

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

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

2.2.1 MSE

我们从最简单的线性回归开始讨论:
线性回归(回归问题)使用的是平方损失:

L ( ω , b ) = 1 2 N ∑ i = 1 N ( f ( x i ) − y i ) 2 = 1 2 N ∑ i = 1 N ( y i − ω x i − b ) 2 \begin{aligned} {L}_{(\omega, b)}&=\frac{1}{2 N} \sum_{i=1}^{N}\left(f\left(x_{i}\right)-y_{i}\right)^{2} \\ &=\frac{1}{2 N} \sum_{i=1}^{N}\left(y_{i}-\omega x_{i}-b\right)^{2} \end{aligned} L(ω,b)=2N1i=1N(f(xi)yi)2=2N1i=1N(yiωxib)2
因为这个函数 L ( ω , b ) {L}_{(\omega, b)} L(ω,b) 是凸函数,直接求导等于零,即可求出解析解,很简单。但是对于逻辑回归则不行(分类问题【注意:逻辑回归不是回归!是分类!!】。因为如果逻辑回归也用平方损失作为损失函数,则:
L ( w ) = 1 2 N ∑ i = 1 N ( f ( x i ) − y i ) 2 = 1 2 N ∑ i = 1 N ( y i − σ ( z ) ) 2 = 1 2 N ∑ i = 1 N ( y i − σ ( w ⋅ x ) ) 2 = 1 2 N ∑ i = 1 N ( y i − 1 1 + e − ( w ⋅ x ) ) 2 \begin{aligned} {L}_{(\boldsymbol{w})}&=\frac{1}{2 N} \sum_{i=1}^{N}\left(f\left(x_{i}\right)-y_{i}\right)^{2} \\ &=\frac{1}{2 N} \sum_{i=1}^{N}\left(y_{i}-\sigma(z)\right)^{2} \\ &=\frac{1}{2 N} \sum_{i=1}^{N}\left(y_{i}-\sigma(\boldsymbol{w} \cdot \boldsymbol{x})\right)^{2} \\ &=\frac{1}{2 N} \sum_{i=1}^{N}\left(y_{i}-\frac{1}{1+e^{-(\boldsymbol{w} \cdot \boldsymbol{x})}}\right)^{2} \end{aligned} L(w)=2N1i=1N(f(xi)yi)2=2N1i=1N(yiσ(z))2=2N1i=1N(yiσ(wx))2=2N1i=1N(yi1+e(wx)1)2
其中 N N N 表示样本数量。
上式是非凸的,不能直接求解析解,而且不宜优化,易陷入局部最优解,即使使用梯度下降也很难得到全局最优解。如下图所示:
【超详细公式推导】关于交叉熵损失函数(Cross-entropy)和 平方损失(MSE)的区别_第3张图片

2.2.2 Cross-entropy

而,Cross-entropy 计算 loss,则依旧是一个凸优化问题

以下进行详细说明和推导:

逻辑回归模型进行学习时,给定训练集: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \cdots,\left(\boldsymbol{x}_{N}, y_{N}\right)\right\} T={(x1,y1),(x2,y2),,(xN,yN)},其中 x i = [ x i ( 1 ) x i ( 2 ) ⋮ x i ( n ) ] ∈ R n , y i ∈ { 0 , 1 } \boldsymbol{x}_{i}=\left[\begin{array}{c}x_{i}^{(1)} \\ x_{i}^{(2)} \\ \vdots \\ x_{i}^{(n)}\end{array}\right] \in \mathbf{R}^{n}, \quad y_{i} \in\{0,1\} xi=xi(1)xi(2)xi(n)Rn,yi{0,1},可以应用 极大似然估计 估计模型参数,从而得到逻辑回归模型。

设:
P ( Y = 1 ∣ x ) = π ( x ) , P ( Y = 0 ∣ x ) = 1 − π ( x ) P(Y=1 | \boldsymbol{x})=\pi(\boldsymbol{x}), \quad P(Y=0 | \boldsymbol{x})=1-\pi(\boldsymbol{x}) P(Y=1x)=π(x),P(Y=0x)=1π(x)
似然函数:
∏ i = 1 N [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i \prod_{i=1}^{N}\left[\pi\left(\boldsymbol{x}_{i}\right)\right]^{y_{i}}\left[1-\pi\left(\boldsymbol{x}_{i}\right)\right]^{1-y_{i}} i=1N[π(xi)]yi[1π(xi)]1yi
对数似然函数为:
L ( w ) = log ⁡ [ ∏ i = 1 N [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i ] = ∑ i = 1 N [ y i log ⁡ π ( x i ) + ( 1 − y i ) log ⁡ ( 1 − π ( x i ) ) ] = ∑ i = 1 N [ y i log ⁡ π ( x i ) 1 − π ( x i ) + log ⁡ ( 1 − π ( x i ) ) ] = ∑ i = 1 N [ y i ( w ⋅ x i ) − log ⁡ ( 1 + e w ⋅ x i ) ] \begin{aligned} L(w) &=\log \left[\prod_{i=1}^{N}\left[\pi\left(\boldsymbol{x}_{i}\right)\right]^{y_{i}}\left[1-\pi\left(\boldsymbol{x}_{i}\right)\right]^{1-y_{i}}\right] \\ &=\sum_{i=1}^{N}\left[y_{i} \log \pi\left(\boldsymbol{x}_{i}\right)+\left(1-y_{i}\right) \log \left(1-\pi\left(\boldsymbol{x}_{i}\right)\right)\right] \\ &=\sum_{i=1}^{N}\left[y_{i} \log \frac{\pi\left(\boldsymbol{x}_{i}\right)}{1-\pi\left(\boldsymbol{x}_{i}\right)}+\log \left(1-\pi\left(\boldsymbol{x}_{i}\right)\right)\right] \\ &=\sum_{i=1}^{N}\left[y_{i}\left(\boldsymbol{w} \cdot \boldsymbol{x}_{i}\right)-\log \left(1+e^{w \cdot \boldsymbol{x}_{i}}\right)\right] \end{aligned} L(w)=log[i=1N[π(xi)]yi[1π(xi)]1yi]=i=1N[yilogπ(xi)+(1yi)log(1π(xi))]=i=1N[yilog1π(xi)π(xi)+log(1π(xi))]=i=1N[yi(wxi)log(1+ewxi)]
接下来求 L ( w ) L(w) L(w) 的极大值,从而得到 w w w 的估计值。

这样一来,问题就变成了以对数似然函数为目标函数的最优化问题,逻辑回归
中通常的方法就是梯度下降法拟牛顿法

极大似然函数是求极大,取个相反数,再对所有 N N N 个样本取平均,即得到逻辑回归的损失函数
L ( w ) = 1 N ∑ i = 1 N [ − y i log ⁡ π ( x i ) − ( 1 − y i ) log ⁡ ( 1 − π ( x i ) ) ] = − 1 N ∑ i = 1 N [ y i log ⁡ π ( x i ) + ( 1 − y i ) log ⁡ ( 1 − π ( x i ) ) ] \begin{aligned} L(\boldsymbol{w}) &=\frac{1}{N} \sum_{i=1}^{N}\left[-y_{i} \log \pi\left(\boldsymbol{x}_{i}\right)-\left(1-y_{i}\right) \log \left(1-\pi\left(\boldsymbol{x}_{i}\right)\right)\right] \\ &=-\frac{1}{N} \sum_{i=1}^{N}\left[y_{i} \log \pi\left(\boldsymbol{x}_{i}\right)+\left(1-y_{i}\right) \log \left(1-\pi\left(\boldsymbol{x}_{i}\right)\right)\right] \end{aligned} L(w)=N1i=1N[yilogπ(xi)(1yi)log(1π(xi))]=N1i=1N[yilogπ(xi)+(1yi)log(1π(xi))]

并且这个损失函数 L ( w ) L(w) L(w) 是凸函数,没有局部最优解,便于优化。

=============================================================
以下是直观理解:
L ( w ) = { − log ⁡ ( π ( x i ) )  if  y = 1 − log ⁡ ( 1 − π ( x i ) )  if  y = 0 L(\boldsymbol{w})=\left\{\begin{aligned} -\log \left(\pi\left(\boldsymbol{x}_{i}\right)\right) & \text { if } y=1 \\ -\log \left(1-\pi\left(\boldsymbol{x}_{i}\right)\right) & \text { if } y=0 \end{aligned}\right. L(w)={log(π(xi))log(1π(xi)) if y=1 if y=0

其中:
π ( x i ) = P ( Y = 1 ∣ x ) = e w ⋅ x 1 + e w ⋅ x = 1 1 + e − ( w ⋅ x ) \pi\left(\boldsymbol{x}_{i}\right)=P(Y=1 | \boldsymbol{x})=\frac{e^{w \cdot \boldsymbol{x}}}{1+e^{\boldsymbol{w} \cdot \boldsymbol{x}}}=\frac{1}{1+e^{-(\boldsymbol{w} \cdot \boldsymbol{x})}} π(xi)=P(Y=1x)=1+ewxewx=1+e(wx)1

【超详细公式推导】关于交叉熵损失函数(Cross-entropy)和 平方损失(MSE)的区别_第4张图片
当类别标签为 y = 1 y = 1 y=1 时,越靠近 1 则损失越小;当类别标签为 y = 0 y = 0 y=0 时,越靠近 1
则损失越大.

=============================================================

三、总结

  1. 分类问题,都用 one-hot + Cross-entropy

  2. training 过程中,分类问题用 Cross-entropy,回归问题用 mean squared error

  3. training 之后,validation / testing 时,使用 classification error,更直观,而且是我们最关注的指标。(分类错误数量 / 总数)
    即:classification error =  count of error items   count of all items  =\frac{\text { count of error items }}{\text { count of all items }} = count of all items  count of error items 

参考链接:

  1. 《李宏毅机器学习》课程中 逻辑回归 一节,: 李宏毅机器笔记 Logistic Regression(解释 LR 为什么不能用 square error ).
  2. 解析损失函数之categorical_crossentropy loss与 Hinge loss.
  3. 神经网络的分类模型 LOSS 函数为什么要用 CROSS ENTROPY.
  4. 交叉熵损失函数.

你可能感兴趣的:(机器学习)