smooth L1、L1、L2 损失函数的区别

  • 感谢商汤科技给我一次面试的机会,通过面试也暴漏了自己很多问题。
  • 立体匹配中很多网络都是用的 smooth L1 loss。那他和L1、L2 loss的区别是什么呢?

L1 loss(MAE)

smooth L1、L1、L2 损失函数的区别_第1张图片
smooth L1、L1、L2 损失函数的区别_第2张图片
在这里插入图片描述
其中 x 为预测框与 groud truth 之间 elementwise 的差异。
在这里插入图片描述

  1. 先说下L1 loss的优点:
  • 优点:L1 的导数为常数。,无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。如果训练数据被异常值破坏的话(也就是我们在训练环境中错误地接收到巨大的不切实际的正/负值,但在测试环境中却没有),MAE会很有用。
  1. L1 的缺点:
  • 对于数据集的一个小的水平方向的波动,回归线也许会跳跃很大(如,在转折点处求导)。在一些数据结构上,该方法有许多连续解;但是,对数据集的一个微小移动,就会跳过某个数据结构在一定区域内的许多连续解。在跳过这个区域内的解后,最小绝对值偏差线可能会比之前的线有更大的倾斜。
    smooth L1、L1、L2 损失函数的区别_第3张图片
  • 上图形象的说明了L1的缺点,当损失很小的时候,L1 loss还是以固定的损失值调整模型,这就导致训练后期,预测值与 ground truth 差异很小时,损失对预测值的导数的绝对值仍然为 1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。

L2 loss

smooth L1、L1、L2 损失函数的区别_第4张图片
在这里插入图片描述
其中 x 为预测框与 groud truth 之间 elementwise 的差异。
在这里插入图片描述
smooth L1、L1、L2 损失函数的区别_第5张图片

  1. L2的优势
  • 注意L2的曲线图,当损失值很小的时候,梯度会随着损失值的减小而变小,使模型更易收敛,损失函数达到最小值。
    smooth L1、L1、L2 损失函数的区别_第6张图片
  1. L2 缺点:
  • 因为MSE是误差的平方值(y — y_predicted = e),那么误差(e)的值在e > 1时会增加很多。如果我们的数据中有异常值,e的值会非常高,e²会>> |e|,引发梯度爆炸的现象。这会让存在MSE误差的模型比存在MAE误差的模型向异常值赋予更多的权重。

smooth L1损失

在这里插入图片描述
在这里插入图片描述

  • smooth L1在 x 较小时,对 x 的梯度也会变小,而在smooth L1很大时,对 x 的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数。 smooth L1完美地避开了 L1 和 L2损失的缺陷。其函数图像如下:
    smooth L1、L1、L2 损失函数的区别_第7张图片
  • 参考:
    L1、L2、smooth L1
    L1、L2、smooth L1

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