深度学习基础-损失函数

前言

经过上一篇深度学习基础-神经网络,我们对神经网络有了一个初步的了解,本文将深入讲解损失函数。

选择不同损失函数的原因

上文说到,损失函数是衡量模型预测值和实际值误差的函数,但不同的模型需要不同的指标去衡量误差。原因如下:1、离群点对不同的模型的影响不同,如果离群点是需要重点关注的异常值,我们要选择均方误差这种对离群点敏感的损失函数。2、回归问题和分类问题需要不同的损失函数,前者输出预测值,更多基于距离度量,后者输出预测类别,更多基于概率分布度量。3、不同损失函数的收敛速度不一样,要根据模型去选择。4、不同模型对预测结果的大小应有不同的损失,预测错误的梯度幅值应根据模型选择。

损失函数分类

回归问题

1、绝对值误差MAE(L1损失)

$ L_{\!M\!A\!E\!}(y,f(x))=|y-f(x)|$

对异常点有更好的鲁棒性,但对所有点的梯度都一样,在0点不可导,在0的去心邻域内梯度也很大,不利用收敛。

2、均方误差(L2损失)

$ L_{\!M\!S\!E\!}(y,f(x))=[y-f(x)]^2$

计算简便,损失的梯度随损失增大而增大,而损失趋于0时则会减小,对异常点灵敏,可能出现梯度爆炸问题。

注:L1、L2是指L1、L2范数,假设$X=(x_1,x_2,\cdots,x_n)$,则

L0范数$\| X\|_0$为向量$X$中的非零元素个数

L1范数为:$\|X \|_1=\sum \vert x_i\vert$

L2范数为:$\| X\|_2=\sqrt{\sum x_i^2}$

Lp范数为:$\| X\|_p=\sqrt[p]{\sum x_i^p}$

p趋于$\infty$时,$\| X\|_{\infty}=max{\vert x_i\vert}$

3、Huber误差

$\displaystyle L_{\delta}(y,f(x))= \begin{cases} \frac{1}{2}(y-f(x))^2 & |y-f(x)|\leq \delta, \\ \delta|y-f(x)|-\frac{1}{2}\delta^2 & otherwise. \end{cases}$

结合了MAE和MSE的优点 ,$\delta$为超参数,需要去评估$\delta$的值。

当 $\vert y-f(x) \vert> \delta$ 时,梯度一直近似为 $\delta$,能够保证模型以一个较快的速度更新参数,又对离群点较为鲁棒;
当 $\vert y-f(x) \vert\leq\delta$ 时,梯度逐渐减小,能够保证模型收敛。

4、双曲余弦误差Log-cosh

二阶处处可微,$ L(y,f(x))=log[cosh(f(x)-y)]$

相当于处处二次可导的Huber损失,用牛顿法优化迭代时就需要二阶导数,而且没有超参数

5、分位数损失

$\displaystyle L_{\gamma}(y,f(x))=\sum_{i:y_i<f(x_i)}(1-\gamma)|y_i-f(x_i)|+\sum_{i:y_i \geq f(x_i)}\gamma|y_i-f(x_i)|$

通过分位值$ \gamma$对高估和低估给予不同的惩罚,反映对正误差和负误差的重视程度,

$\gamma=0.5$时相当于绝对值损失;$\gamma>0.5$时对负误差更敏感;$\gamma<0.5$时对正误差更敏感。

$\gamma$取不同值可以获取不同分位,可以预测结果的上下界

分类问题

对于分类问题,上述损失函数不太适用。

1、Hinge损失

$ L=max\{0\ , 1-yf(x)\}$

适用于支持向量机SVM的二分类,不仅要分类正确,还要让间隔最大。

下面是其变体:

原型(蓝色),在1处不可导

平方变体(绿色)$max\{0, 1-yf(x)\}^2$,

以及 Rennie 和 Srebro 提出的分段平滑变体(红色)$\begin{cases}0.5-yf(x) & yf(x)\leq0 \\ 0.5(1-yf(x))^2 & 0<yf(x)<1 \\ 0 & yf(x)\geq 1 \end{cases}$

2、交叉熵损失

  • 二分类用Binary Cross-Entropy :

    $\displaystyle L(y,f(x))=-y\log p-(1-y)\log(1-p)=\begin{cases}-\log p & y=1 \\ -\log(1-p) & y=0 \end{cases}$

配上Sigmoid激活函数,只输出一个概率值p

  • 多分类时,一般都用交叉熵损失函数:

    $\displaystyle L(y,f(x))=-\sum_{c=1}^N y\log(p_c)$

    配上softmax激活函数,输出属于各个类别的概率,$p_c$为预测为类别c的概率,N为类别数量

3、focal损失

预测错误的梯度更大,预测正确的梯度小,自适应样本的分类难易程度。

其实就是让保持分类正确,加大调整分类错误的。

$\displaystyle L(y,f(x))=\begin{cases}-(1-p)^{\gamma}\log p & y=1 \\ -p^{\gamma}\log(1-p) & y=0 \end{cases}$

蓝线为二分类交叉熵损失