• 问答
  • 技术
  • 实践
  • 资源
交叉熵损失 (Cross-entropy) 和平方损失 (MSE) 究竟有何区别?
技术讨论

作者丨苏学算法​
来源丨苏学算法
编辑丨极市平台

一、概念区别

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

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

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

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

1. MSE

比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价函数为:

$$
C=\frac{(y-a)^{2}}{2} \
$$

其中 $C$ 是损失, $y$ 是我们期望的输出(真实值 target),$a$ 为神经元的实际输出(输出值), $z=w x+b,a=\sigma(z)$

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

$\frac{\partial C}{\partial w}=(a-y) \sigma^{\prime}(z) x =(a-y)a(1-a)x \approx a \sigma^{\prime}(z)\$$\frac{\partial C}{\partial b}=(a-y) \sigma^{\prime}(z) =(a-y)a(1-a) \approx a \sigma^{\prime}(z) \$

(其中 $x$ 和 $y$ 都是已知量,因为网络输入都是以 $(x_i,y_i$)形式输入的,所以上式直接的 “≈” 把 $x$ 和 $y$ 略去了)

而后更新 $w$ 和 $b$ :

$w = w-\eta \frac{\partial C}{\partial w}=w-\eta a \sigma^{\prime}(z) \$$b = b-\eta \frac{\partial C}{\partial b}=b- \eta a \sigma^{\prime}(z) \$

因为sigmoid函数的性质,如图的两端,几近于平坦,导致 $\sigma^{\prime}(z)$ 在 $z$ 取大部分值时会很小,这样会使得 $w$ 和 $b$ 更新非常慢(因为 $\eta a \sigma^{\prime}(z) => 0$ )。

再定量解释如下: 在上式

$$
\frac{\partial C}{\partial w}=(a-y) \sigma^{\prime}(z) x =(a-y)a(1-a)x \approx a \sigma^{\prime}(z)\
$$

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

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

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

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

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

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

2. Cross-entropy

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

1)二分类 Binary Cross-entropy

激活函数为 sigmoid

$$
f(z)=\frac{1}{1+\exp (-z)} \
$$

损失函数:

$$
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=-\frac{1}{N} \sum{i=1}^{N}\left[y{i} \ln a+\left(1-y_{i}\right) \ln(1-a) \right] \
$$

其中 $z=w x+b,a=\sigma(z)$,$N$ 表示样本数量。

同样求导可得:

$\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} \$$\frac{\partial C}{\partial b}=\frac{1}{N} \sum{i=1}^{N} (\sigma(z)-y)=\frac{1}{N} \sum_{i=1}^{N} (a-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}\
$$

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

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

2)多分类 Categorican Cross-entropy

激活函数为 softmax

$$
\sigma(\mathbf{z}){j}=\frac{e^{z{j}}}{\sum{k=1}^{K} e^{z{k}}} \
$$

可以看作是Sigmoid的一般情况,用于多分类问题。

损失函数:

$$
C = -\sum{i=1}^{k} {y}{i} \ln a_{i} \
$$

后续分析类似。

3. 补充 Cross-entropy 的缺点

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

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

1.MSE

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

$$
\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}_{(\omega, b)}$ 是凸函数,直接求导等于零,即可求出解析解,很简单。但是对于逻辑回归则不行(分类问题【注意:逻辑回归不是回归!是分类!!】。因为如果逻辑回归也用平方损失作为损失函数,则:

$$
\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}\
$$

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

2.Cross-entropy

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

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

逻辑回归模型进行学习时,给定训练集:$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}$,其中 $\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=1 | \boldsymbol{x})=\pi(\boldsymbol{x}), \quad P(Y=0 | \boldsymbol{x})=1-\pi(\boldsymbol{x}) \
$$

似然函数:

$$
\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}} \
$$

对数似然函数为:

$$
\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)$ 的极大值,从而得到 $w$ 的估计值。

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

极大似然函数是求极大,取个相反数,再对所有 $N$ 个样本取平均,即得到逻辑回归的损失函数

$$
\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(\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.\
$$

其中:

$$
\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})}} \
$$

当类别标签为$y = 1$ 时,越靠近 1 则损失越小;当类别标签为 $y = 0$ 时,越靠近 1 则损失越大.

三、总结

  1. 分类问题,都用 one-hot + Cross-entropy
  2. training 过程中,分类问题用 Cross-entropy,回归问题用 mean squared error
  3. training 之后,validation / testing 时,使用 classification error,更直观,而且是我们最关注的指标。(分类错误数量 / 总数) 即:classification error $=\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. 交叉熵损失函数.
  • 0
  • 0
  • 97
收藏
暂无评论