回归问题常用损失函数L1Loss、L2Loss、SmoothL1Loss

L1范数误差(L1 loss)

代表:MAE(Mean Absolute Error, 均绝对误差)。即估计值 f ( x ) f(x) f(x)与真实值 y y y之间距离的均值。
M A E = 1 n ∑ i = 1 n ∣ f ( x i ) − y i ∣ MAE=\frac{1}{n}\sum_{i=1}^n|f(x_i)-y_i| MAE=n1i=1nf(xi)yi

优点

  • 无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。
  • 对于离群点不那么敏感。因为 M A E MAE MAE计算的是误差 y − f ( x ) y−f(x) yf(x)的绝对值,对于任意大小的差值,其惩罚都是固定的。

缺点:MAE曲线连续,但是在 y − f ( x ) = 0 y−f(x)=0 yf(x)=0处不可导。而且 MAE 大部分情况下梯度都是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。


L2范数误差(L2 loss)

代表:MSE(Mean Square Error, 均方误差)。即估计值 f ( x ) f(x) f(x)与真实值 y y y之间差值平方的均值。
M S E = 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 MSE=\frac{1}{n}\sum_{i=1}^n(f(x_i)-y_i)^2 MSE=n1i=1n(f(xi)yi)2

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

缺点:当 y y y f ( x ) f(x) f(x)之间的差值大于1时,会放大误差;而当差值小于1时,则会缩小误差,这是平方运算决定的。MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。也就是说,对离群点比较敏感,受其影响较大。如果样本中存在离群点,MSE会给离群点更高的权重,这就会牺牲其他正常点数据的预测效果,最终降低整体的模型性能,甚至可能引发梯度爆炸。

注:误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。
在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。
网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。


平滑L1损失(Smooth L1 loss)

S m o o t h   L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e Smooth\,L1(x) = \left\{ \begin{array}{ll} \quad0.5x^2 & if |x|<1\\ |x|-0.5 & otherwise \end{array} \right. SmoothL1(x)={ 0.5x2x0.5ifx<1otherwise
Smooth L1能从两个方面限制梯度:
当估计值与ground truth差别过大时,梯度值不至于过大;
当估计值与ground truth差别很小时,梯度值足够小。

这样设置让loss对于离群点更加鲁棒,相比于L2损失函数,其对离群点(指的是距离中心较远的点)、异常值(outlier)不敏感,可控制梯度的量级使训练时不容易跑飞。


对比

各损失函数对 x x x的导数为
∂ L 1 ( x ) ∂ x = { s g n ( x ) x ≠ 0 无 定 义 x = 0 \frac{\partial L1(x)}{\partial x} = \left\{ \begin{array}{ll} sgn(x) & x\not=0\\ 无定义 & x=0 \end{array} \right. xL1(x)={ sgn(x)x=0x=0

L1对x的导数为常数,在训练的后期,预测值与ground truth差异很小时,L1的导数的绝对值仍然为1,而 learning rate如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。

∂ L 2 ( x ) ∂ x = 2 x \frac{\partial L2(x)}{\partial x} = 2x xL2(x)=2x

当x增大时,L2的损失也增大。 这就导致在训练初期,预测值与groud truth差异过于大时,损失函数对预测值的梯度十分大,训练不稳定。

∂ S m o o t h   L 1 ( x ) ∂ x = { x i f ∣ x ∣ < 1 s g n ( x ) o t h e r w i s e \frac{\partial Smooth\,L1(x)}{\partial x} = \left\{ \begin{array}{ll} x & if |x|<1\\ sgn(x) & otherwise \end{array} \right. xSmoothL1(x)={ xsgn(x)ifx<1otherwise
Smotth L1在x较小时,对x的梯度也会变小。 而当x较大时,对x的梯度的上限为1,也不会太大以至于破坏网络参数。SmoothL1完美的避开了L1和L2作为损失函数的缺陷。

回归问题常用损失函数L1Loss、L2Loss、SmoothL1Loss_第1张图片


参考 reference

https://www.cnblogs.com/wangguchangqing/p/12021638.html
https://blog.csdn.net/weixin_41940752/article/details/93159710

你可能感兴趣的:(神经网络,深度学习)