Loss Function/Cost Function

损失函数度量模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏。

  1. 损失函数(loss function)或代价函数(cost function)
    损失函数定义为给定输入$X$ 预测值$f(X)$真实值$Y$之间的非负实值函数,记作$L(Y,f(X))$

  2. 风险函数(risk function)或期望损失(expected loss)
    这个和模型的泛化误差的形式是一样的
    $R_{exp}(f)=E_p[L(Y, f(X))]=\int_{\mathcal X\times\mathcal Y}L(y,f(x))P(x,y), {\rm d}x{\rm d}y$
    模型$f(X)$ 于联合分布$P(X,Y)$ 平均意义下的损失(期望损失),但是因为$P(X,Y)$ 未知的,所以前面的用词是期望,以及平均意义下的

    这个表示其实就是损失的均值,反映了对整个数据的预测效果的好坏,$P(x,y)$ 换成$\frac {\nu(X=x, Y=y)}{N}$ 容易直观理解, 可以参考CH09,6.2.2 节的部分描述来理解,但是真实的数据 N 是无穷的。

  3. 经验风险(empirical risk)或经验损失(empirical loss)
    $R_{emp}(f)=\frac{1}{N}\sum^{N}_{i=1}L(y_i,f(x_i))$
    模型$f$ 于训练样本集的平均损失
    根据大数定律,当样本容量 N 趋于无穷大时,经验风险趋于期望风险

  4. 结构风险(structural risk)
    $R_{srm}(f)=\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f)$
    $J(f)$ 模型复杂度, $\lambda \geqslant 0$​ 是系数,用以权衡经验风险和模型复杂度。

Mean Square Error(MSE)

均方误差指的就是模型预测值$f(x)$ 样本真实值$y$ 间距离平方的平均值。

$$
MSE=\frac{1}{m}\sum\limits_{i=1}^{m}(y_i-f(x_i))^2
$$

其中,$y_i$ $f(x_i)$ 别表示第 $i$ 样本的真实值和预测值,$m$ 样本个数。
为了简化讨论,忽略下标$i$,$m = 1$,以$y-f(x)$​ 为横坐标,MSE 为纵坐标,绘制其损失函数的图
形:

特点

MSE 曲线的特点是光滑连续、可导,便于使用梯度下降算法,是比较常用的一种损失函数。而且,MSE 随着误差的减小,梯度也在减小,这有利于函数的收敛,即使固定学习因子,函数也能较快取得最小值。平方误差有个特性,就是当 $y_i$ 与 $f(x_i)$ 的差值大于 1 时,会增大其误差;当 $y_i$ 与$f(x_i)$ 的差值小于 1 时,会减小其误差。这是由平方的特性决定的。也就是说, MSE 会对误差较大(>1)的情况给予更大的惩罚,对误差较小(<1)的情况给予更小的惩罚。从训练的角度来看,模型会更加偏向于惩罚较大的点,赋予其更大的权重。
如果样本中存在离群点,MSE 会给离群点赋予更高的权重,但是却是以牺牲其他正常数据点的预测效果为代价,这最终会降低模型的整体性能。

Mean Absolute Error(MAE)

$$
MAE=\frac{1}{m}\sum\limits_{i=1}^{m}|y_i-f(x_i)|
$$

为了简化讨论,忽略下标$i$,$m = 1$,以 $y-f(x)$​ 为横坐标,MAE 为纵坐标,绘制其损失函数的图
形:

image-20210904205551904

直观上来看,MAE 的曲线呈 V 字型,连续但在 $y-f(x)=0$​ 处不可导,计算机求解导数比较困难。而且 MAE 大部分情况下梯度都是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。
值得一提的是,MAE 相比 MSE 有个优点就是 MAE 对离群点不那么敏感,更有包容性。因为 MAE 计算的是误差 $y-f(x)$ 的绝对值,无论是 $y-f(x)>1$ 是$y-f(x)<1$​,没有平方项的作用,惩罚力度都是一样的,所占权重一样。实际应用中,我们应该选择 MSE 还是 MAE 呢?从计算机求解梯度的复杂度来说,MSE 要优于 MAE,而且梯度也是动态变化的,能较快准确达到收敛。但是从离群点角度来看,如果离群点是实际数据或重要数据,而且是应该被检测到的异常值,那么我们应该使用 MSE。另一方面,离群点仅仅代表数据损坏或者错误采样,无须给予过多关注,那么我们应该选择 MAE 作为损失。

Huber Loss

$$
L_\delta(y,f(x))=
\begin{cases}\frac{1}{2}(y-f(x))^2&\mid y-f(x)\mid \leq \delta\\delta\mid y-f(x) \mid-\frac{1}{2}\delta^2&\mid y-f(x)\mid>\delta\end{cases}
$$

Huber Loss 是对二者(MSE/MAE)的综合,包含了一个超参数$\delta$。$\delta$ 的大小决定了 Huber Loss 对 MSE 和 MAE 的侧重性, 当 $\mid y−f(x)\mid\leq \delta$ 时, 变为 MSE; 当 $\mid y−f(x)\mid> \delta$ 时, 则变成类似于 MAE,因此 Huber Loss 同时具备了 MSE 和 MAE 的优点,减小了对离群点的敏感度问题,实现了处处可导的功能。通常来说,超参数 $\delta$​ 可以通过交叉验证选取最佳值。下面,分别取 $\delta = 0.1$、$\delta = 10$​,绘制相应的 Huber Loss,如下图所示:

image-20210904210855521

Huber Loss 在$\mid y−f(x)\mid> \delta$ 时,梯度一直近似为$\delta$,能够保证模型以一个较快的速度更新参数。当 $\mid y−f(x)\mid\leq \delta$ 时,梯度逐渐减小,能够保证模型更精确地得到全局最优值。因此,Huber Loss 同时具备了前两种损失函数的优点。

0-1 loss

$$
L(Y,f(X))=\begin{cases}1,& Y \neq f(X) \0, &Y=f(X) \end{cases}
$$

特点:

(1)0-1 损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用.

(2)感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足$\mid Y-f(X)\mid < T$​​ 时认为相等,

$$
L(Y,f(X))=\begin{cases}1,&\mid Y-f(X)\mid \geq T \0, &\mid Y-f(X)\mid < T \end{cases}
$$

Quadratic Loss

$$
L(Y,f(X))=(Y-f(X))^2
$$

特点:

经常应用与回归问题

Logarithmic Loss

$$
L(Y,P(Y|X))=-\log P(Y|X)
$$

这里$P(Y|X)\leqslant 1$,对应的对数是负值,所以对数损失中包含一个负号.

(1) log 对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。

(2)健壮性不强,相比于 hinge loss 对噪声更敏感。

(3)逻辑回归的损失函数就是 log 对数损失函数。

Hinge Loss

在机器学习中,hinge loss作为一个损失函数(loss function),通常被用于最大间隔算法(maximum-margin),而最大间隔算法又是 SVM(支持向量机 support vector machines)用到的重要算法。Hinge loss 用于二分类问题,标签值$y=±1$​​​,预测值$\hat y\in R$​​​。当$y$​​​ 和$\hat y$​​​ 同号,且$\mid \hat y \mid \geq 1$​​​ ,此时$l(y)=0$​​​;而当预测$\mid \hat y \mid< 1$​​​​​ 时,分类器对分类结果不确定,loss 不为 0。

$$
l(y) = max(0,1-\hat y y)
$$

$\hat y y \geq 1$​​​,损失为 0;

$\hat y y<1$,损失为$1-\hat y y$

特点:

  • hinge 损失函数表示如果被分类正确,损失为 0,否则损失就为$1-\hat y y$ 。SVM就是使用这个损失函数。

  • 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

perceptron loss

感知损失函数的标准形式如下:

$$
L(y,f(x))=max(0,-f(x))
$$

特点:

是 Hinge 损失函数的一个变种,Hinge loss 对判定边界附近的点(正确端)惩罚力度很高。而 perceptron loss只要样本的判定类别正确的话,它就满意,不管其判定边界的距离。它比 Hinge loss 简单,因为不是 max-margin boundary,所以模型的泛化能力没 hinge loss 强

Cross-entropy loss

分布差异度量方式

Exponential Loss

Exponential Loss,又称指数损失,其表达式如下:

$$
L=e^{-ys}
$$

image-20210904221305171

Exponential Loss 与交叉熵 Loss 类似,但它是指数下降的,因此梯度较其它 Loss 来说,更大一些。Exponential Loss 一般多用于 AdaBoost 中。因为使用 Exponential Loss 能比较方便地利用加法模型推导出 AdaBoost 算法。

Modified Huber Loss

在之前介绍回归损失函数,我们介绍过 Huber Loss,它集合了 MSE 和 MAE 的优点。Huber Loss 也能应用于分类问题中,称为 Modified Huber Loss,其表达是如下:

$$
L(y,s)=\begin{cases}\max(0,1-ys)^2, & ys\geq -1\-4ys,&ys<-1\end{cases}
$$

image-20210904221651667

从表达式和 Loss 图形上看,Modified Huber Loss 结合了 Hinge Loss 和 交叉熵 Loss 的优点。一方面能在$ys > 1$ 时产生稀疏解提高训练效率;另一方面对于 $ys < −1$​ 样本的惩罚以线性增加,这意味着受异常点的干扰较少。scikit-learn 中的 SGDClassifier 就使用了 Modified
Huber Loss。

References

机器学习基础(四十二)—— 常用损失函数的设计(multiclass SVM loss & hinge loss)_https://space.bilibili.com/59807853-CSDN 博客

常见的损失函数(loss function)总结 - 知乎 (zhihu.com)

常见回归和分类损失函数比较 - massquantity - 博客园 (cnblogs.com)