一、概念区别

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

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

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

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

2.1.1 MSE

比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价函数为:
C=(ya)22C=\frac{(y-a)^{2}}{2}

其中 CC 是损失, yy 是我们期望的输出(真实值 target),aa 为神经元的实际输出(输出值), z=wx+ba=σ(z)z=w x+b,a=\sigma(z)

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

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

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

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

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

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

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

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

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

2.1.2 Cross-entropy

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

1、二分类 Binary Cross-entropy

**函数为 sigmoid
f(z)=11+exp(z)f(z)=\frac{1}{1+\exp (-z)}
损失函数:

L(w)=1Ni=1N[yilogf(xi)+(1yi)log(1f(xi))]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]
或者简写成:
C=1Ni=1N[yilna+(1yi)ln(1a)]C=-\frac{1}{N} \sum_{i=1}^{N}\left[y_{i} \ln a+\left(1-y_{i}\right) \ln(1-a) \right]
其中 z=wx+ba=σ(z)z=w x+b,a=\sigma(z)NN 表示样本数量。

同样求导可得:
Cwj=1Ni=1N(σ(z)y)xj=1Ni=1N(ay)xj\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}
Cb=1Ni=1N(σ(z)y)=1Ni=1N(ay)\frac{\partial C}{\partial b}=\frac{1}{N} \sum_{i=1}^{N} (\sigma(z)-y)=\frac{1}{N} \sum_{i=1}^{N} (a-y)

=================================================================
证明如下:
Cwj=1Ni=1N(yσ(z)(1y)1σ(z))σwj=1Ni=1N(yσ(z)(1y)1σ(z))σ(z)xj=1Ni=1Nσ(z)xjσ(z)(1σ(z))(σ(z)y)=1Ni=1Nxj(σ(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}

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

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

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

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

损失函数:
C=i=1kyilnaiC = -\sum_{i=1}^{k} {y}_{i} \ln a_{i}

后续分析类似。

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)=12Ni=1N(f(xi)yi)2=12Ni=1N(yiωxib)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){L}_{(\omega, b)} 是凸函数,直接求导等于零,即可求出解析解,很简单。但是对于逻辑回归则不行(分类问题【注意:逻辑回归不是回归!是分类!!】。因为如果逻辑回归也用平方损失作为损失函数,则:
L(w)=12Ni=1N(f(xi)yi)2=12Ni=1N(yiσ(z))2=12Ni=1N(yiσ(wx))2=12Ni=1N(yi11+e(wx))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}
其中 NN 表示样本数量。
上式是非凸的,不能直接求解析解,而且不宜优化,易陷入局部最优解,即使使用梯度下降也很难得到全局最优解。如下图所示:
【超详细公式推导】关于交叉熵损失函数(Cross-entropy)和 平方损失(MSE)的区别

2.2.2 Cross-entropy

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

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

逻辑回归模型进行学习时,给定训练集:T={(x1,y1),(x2,y2),,(xN,yN)}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\},其中 xi=[xi(1)xi(2)xi(n)]Rn,yi{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\},可以应用 极大似然估计 估计模型参数,从而得到逻辑回归模型。

设:
P(Y=1x)=π(x),P(Y=0x)=1π(x)P(Y=1 | \boldsymbol{x})=\pi(\boldsymbol{x}), \quad P(Y=0 | \boldsymbol{x})=1-\pi(\boldsymbol{x})
似然函数:
i=1N[π(xi)]yi[1π(xi)]1yi\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}}
对数似然函数为:
L(w)=log[i=1N[π(xi)]yi[1π(xi)]1yi]=i=1N[yilogπ(xi)+(1yi)log(1π(xi))]=i=1N[yilogπ(xi)1π(xi)+log(1π(xi))]=i=1N[yi(wxi)log(1+ewxi)]\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)L(w) 的极大值,从而得到 ww 的估计值。

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

极大似然函数是求极大,取个相反数,再对所有 NN 个样本取平均,即得到逻辑回归的损失函数
L(w)=1Ni=1N[yilogπ(xi)(1yi)log(1π(xi))]=1Ni=1N[yilogπ(xi)+(1yi)log(1π(xi))]\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)L(w) 是凸函数,没有局部最优解,便于优化。

=============================================================
以下是直观理解:
L(w)={log(π(xi)) if y=1log(1π(xi)) if y=0L(\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.

其中:
π(xi)=P(Y=1x)=ewx1+ewx=11+e(wx)\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})}}

【超详细公式推导】关于交叉熵损失函数(Cross-entropy)和 平方损失(MSE)的区别
当类别标签为y=1y = 1 时,越靠近 1 则损失越小;当类别标签为 y=0y = 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 }}

参考链接:

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

相关文章:

  • 2021-05-09
  • 2021-10-21
  • 2022-12-23
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2021-05-08
猜你喜欢
  • 2022-12-23
  • 2021-06-14
  • 2021-12-26
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
  • 2021-06-13
相关资源
相似解决方案