0%

深度学习损失函数之——L1 L2 SmoothL1

L1,L2以及Smooth L1是深度学习中常见的3种损失函数,这3个损失函数有各自的优缺点和适用场景。

这里对常见的3个损失函数做一个记录,以备后忘。

首先给出各个损失函数的数学定义,假设 $x$ 为预测值与Ground Truth之间的差值:

  • L1 loss表示预测值和真实值之差的绝对值;
  • L2 loss表示与测值和真实值之差的平方;
  • SmoothL1与L1类似,但在预测值与真实值差异非常小时,调整为$0.5x^2$

但是,L1和L2有各自的缺点不足,而SmoothL1综合了二者的优点:

  • L2对离群点非常敏感,会出现与真实值差异较大的预测值主导loss的情况,最终造成梯度爆炸;
  • L1对离群点相对鲁棒 ,但其导数为常数,且在0处不可导;这会导致训练后期预测值与真实值差异很小时,L1难以继续收敛;
  • SmoothL1结合了L2和L1的优点,对噪声鲁棒,在0处可导可以收敛到更高的精度;

从3个损失函数各自的导数也能看出其特征:

  • 对于L2损失函数,其导数与$x$成正比;这就导致训练初期,预测值与真实值差异过大时,损失函数的梯度非常大,梯度爆炸导致训练不稳定;
  • 对于L1损失函数,其导数为常数;这就导致训练后期,预测值与真是差异很小时,损失函数的导数绝对值仍然为1,而如果learning rate不变,损失函数将在稳定值附近波动,难以继续收敛达到更高精度;
  • 对于SmoothL1损失函数,在$x$较小时对梯度会变小,而在$x$很大时其梯度的绝对值达到上限1,梯度不会爆炸。可以说,SmoothL1避开了L1和L2损失的缺陷,因此SmoothL1用的也比较广泛。

最后,3种损失函数的图像如下:

Loss function