损失函数

损失函数 ( Loss Function ) 也叫代价函数 ( Cost Function ) 或误差函数 ( Error Function ) ,用于衡量预测值与实际值的偏离程度。

一般来说,机器学习任务都有一个目标函数,模型算法便是对这个目标函数进行优化。机器学习的目标是希望预测值与实际值偏离较小,通常使用损失函数作为其目标函数并最小化损失函数。

损失函数分为经验风险损失函数和结构风险损失函数。经验风险指预测结果和实际结果的差别,结构风险是经验风险加上正则项/罚项,表示对复杂模型的惩罚,防止过拟合,结构风险小说明经验风险和模型复杂度都小。

回归问题

均方误差 ( mean-square error, MSE )

也叫 L2 Loss ,L2 指 L2 范数,即欧几里得范数,表示空间里两点的距离/向量的模长,即 \norm{x}=(\sum_{i=1}^nx_i^2)^{\frac{1}{2}} ,指数不会影响相对大小,去掉就是均方误差。

公式与图像

为了方便求导,通常会乘上一个 12\frac{1}{2} 系数。

L=1ni=1n12(yiy^i)2L=\frac{1}{n}\sum_{i=1}^n\frac{1}{2}(y_i-\hat y_i)^2

image-20211123192418211

特点

对离群点敏感,当预测值和真实值差距过大时,容易造成梯度爆炸。

平均绝对误差 ( mean-absolute error, MAE)

也叫 L1 Loss ,L1 指 L1 范数,即向量中各个元素绝对值之和。

顺带提一下 L0 范数,指的是向量中非 0 元素个数。无穷范数指的是向量中所有元素的最大绝对值。

P-范数指的是 \norm{x}_p=(\sum_{i=1}^nx_i^p)^{\frac{1}{p}}

公式与图像

L=\frac{1}{n}\sum_{i=1}^n\abs{y_i-\hat y_i}

image-20211123194135824

特点

导数为常数且在中心点不可导,当预测值与真实值差距较小时难以继续收敛。

Smooth L1 Loss

是对 L1 Loss 的改进,也是结合了 L1 和 L2 Loss 的优点,即在 [1,1][-1,1] 这个区间内换成 L2 Loss ,其他区间按照 L1 Loss 并保持曲线连续。

公式与图像

L_i=\left\{ \begin{aligned} &\frac{1}{2}x^2, \abs{x}\leqslant1 \\ &\abs{x}-0.5, x\lt-1 \ or \ x\gt1 \end{aligned} \right.

其中 x=yiy^ix=y_i-\hat y_i ,注意这里只是计算了一个预测值的误差,因此总的误差为

L=1ni=1nLiL=\frac{1}{n}\sum_{i=1}^n L_i

image-20211123202605798

特点

综合了 L1 和 L2 Loss 的优点,避开了两者的缺陷,因此应用的也较为广泛。

分类问题

Hinge Loss

SVM 中的损失函数。

公式与图像

Li=max(0,1yiy^i)L_i=\max(0,1-y_i\hat y_i)

图为真实分类 yi=1y_i=1 的情况

image-20211123212036520

特点

  • 不鼓励 \abs{\hat y_i}\gt1 ,即不鼓励分类器过度自信,正常的预测值在 [1,1][-1,1] 之间,表示正负类即可。换句话说,分类正确和分类超级正确的 Loss 都是 0 。

交叉熵 ( cross-entropy loss )

分类问题中最常用的损失函数。为什么可以用交叉熵来作为损失函数,可见另一篇笔记 熵-相对熵-交叉熵

公式与图像

L=xj=1Cyjlogy^jL=-\sum_{x}\sum_{j=1}^C y_j\log{\hat y_j}

image-20211123210120024

特点

  • 本质上也是一种对数似然函数,可用于二分类和多分类任务中。
  • 具有 “误差大,权重更新快;误差小,权重更新慢” 的特点。