本文参考:
PyTorch中的损失函数--L1Loss /L2Loss/SmoothL1Loss - 知乎
【Smooth L1 Loss】Smooth L1损失函数理解_寻找永不遗憾的博客-CSDN博客_smoothl1loss
1、L1 Loss
公式:
假设x为预测框和真实框之间的数值差异时,公式为:
导数为:
特点为:
- L1 loss在零点处不平滑,学习慢
- L1 损失函数对x的导数是常数,训练后期,x很小时,如果学习率不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。
2、L2 Loss
公式:
假设x为预测框和真实框之间的数值差异时,公式变为:
导数:
特点:
- L2 loss由于是平方增长,因此学习快
- 导数为2x,当x很大时,导数也很大,训练初期不稳定
3、Smooth L1 Loss
公式:
导数:
特点:
- smoothL1 Loss相比L1改进了零点不平滑问题
- 相比于L2 loss,在x较大的时候不像L2对异常值敏感,是一个缓慢变化的loss
x啥时较大:比如预测值和GT差比较大的时候。
在图像中,当预测框与GT差别很大时,梯度值不至于过大。当预测框和GT差别很小时,梯度值又足够小。
4、3个loss的比较
共同点:
它们都适用于回归任务
差异点:
L1 Loss适用于简单的模型
L2 Loss适用于特征数值不大
Smooth L1 Loss适用于当特征中有较大的数值