损失函数的选择MSE MAE Huber loss

1. 均方误差(Mean Square Error,MSE)

MSE 对大误差非常敏感(平方级惩罚),所以它会逼着模型去尽量拟合那些离群点。

L_{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2

MSE 曲线的特点是光滑连续、可导,便于使用梯度下降算法,是比较常用的一种损失函数。而且,MSE 随着误差的减小,梯度也在减小,这有利于函数的收敛,即使固定学习因子,函数也能较快取得最小值。

平方误差有个特性,就是当 yi 与 f(xi) 的差值大于 1 时,会增大其误差;当 yi 与 f(xi) 的差值小于 1 时,会减小其误差。这是由平方的特性决定的。也就是说, MSE 会对误差较大(>1)的情况给予更大的惩罚,对误差较小(<1)的情况给予更小的惩罚。从训练的角度来看,模型会更加偏向于惩罚较大的点,赋予其更大的权重。

如果样本中存在离群点,MSE 会给离群点赋予更高的权重,但是却是以牺牲其他正常数据点的预测效果为代价,这最终会降低模型的整体性能。

2. 平均绝对误差(Mean Absolute Error,MAE)

MAE 对异常值更鲁棒,但它在 ​a=0 处不可导,这在优化时偶尔会让人头疼。

L_{MAE} = \frac{1}{n} \sum_{i=1}^n |y_i - \hat{y}_i|

值得一提的是,MAE 相比 MSE 有个优点就是 MAE 对离群点不那么敏感,更有包容性。因为 MAE 计算的是误差 y-f(x) 的绝对值,无论是 y-f(x)>1 还是 y-f(x)<1,没有平方项的作用,惩罚力度都是一样的,所占权重一样。针对 MSE 中的例子,我们来使用 MAE 进行求解,看下拟合直线有什么不同。

3. Huber Loss

Huber Loss 是前两者的结合体。它在误差较小时使用平方损失,在误差较大时切换为线性损失。

L_\delta(a) = \begin{cases} \frac{1}{2}a^2 & \text{for } |a| \le \delta \\ \delta(|a| - \frac{1}{2}\delta) & \text{otherwise} \end{cases}

δ 值的大小决定了 Huber Loss 对 MSE 和 MAE 的侧重性,当 |y−f(x)| ≤ δ 时,变为 MSE;当 |y−f(x)| > δ 时,则变成类似于 MAE,因此 Huber Loss 同时具备了 MSE 和 MAE 的优点,减小了对离群点的敏感度问题,实现了处处可导的功能。通常来说,超参数 δ 可以通过交叉验证选取最佳值。

总结

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

a8fe1577e06e57b23de1103dc0da917b.png

表格整理如下:

损失函数 对异常值敏感度 0点处导数 优化难度
MSE 高(容易被带偏) 0 易(二阶收敛快)
MAE 低(比较佛系) 未定义 中(梯度恒定)
Huber 可调(通过​\delta 0 易(平滑过渡)

Comments