衡量预测值与真实值的偏差程度的最常见的loss: 误差的L1范数和L2范数
因为L1范数在误差接近0的时候不平滑,所以比较少用到这个范数
对于大多数CNN网络,我们一般是使用L2 loss而不是L1 loss,因为L2 loss的收敛速度要比L1 loss要快得多。
L2范数的缺点是当存在离群点(outliers)的时候,这些点会占loss的主要组成部分。比如说真实值为1,预测10次,有一次预测值为1000,其余次的预测值为1左右,显然loss值主要由1000主宰。
所以FastRCNN采用稍微缓和一点绝对损失函数(smooth L1损失),它是随着误差线性增长,而不是平方增长。
smooth L1 loss和L1 loss函数的区别在于,L1 loss在0点处导数不唯一,可能影响收敛。smooth L1 loss的解决办法是在0点附近使用平方函数使得它更加平滑。
(1)L1 loss
(2)L2 loss
(3)Smooth L1 loss
(4)Smooth L1 loss vs. L2 loss
smooth L1 loss让loss function对于离群点更加鲁棒,即:相比于L2损失函数,其对离群点/异常值(outlier)不敏感,梯度变化相对更小,训练时不容易跑飞。