损失函数(Loss Function)分为经验风险损失函数和结构风险损失函数,经验风险损失函数反映的是预测结果和实际结果之间的差别,结构风险损失函数则是经验风险损失函数加上正则项(L1或L2)。深度学习中的损失函数被用于模型参数的估计,通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。
机器学习任务中的损失函数可以大体分为两种类型:回归损失和分类损失。在此基础上,在深度学习任务中又发展了很多不同的损失函数,由于在网络训练过程中损失函数指导着网络的学习,因此选择合适的损失函数也很重要。常见的有下面几种:
- 回归损失:平均绝对误差(MAE/L1损失),平均平方误差(MSE/L2损失),smooth L1 loss,Huber损失,log cosh loss,quantile loss;
- 分类损失:0-1损失,logistic loss(对数损失),hinge loss(铰链损失),exponential loss(指数损失),KL散度;
- 识别、检测和分割常用的损失:softmax cross-entropy loss,weighted cross-entropy loss,focal loss,OHEM,center loss,triplet loss,contrastive loss,L-softmax,LMCL,IOU loss,GIOU loss,DIOU loss,CIOU loss,dice loss。
回归损失
- MAE/L1 loss:
M A E = 1 n ∑ i = 1 n ∣ f ( x i ) − y i ∣ MAE = \frac1n\sum \limits_{i=1}^{n}|f(x_i)-y_i| MAE=n1i=1∑n∣f(xi)−yi∣
平均绝对误差(Mean Absolute Error,MAE)是对估计值和真实值之差取绝对值的平均值。由上图可以看出,(1)MAE曲线连续,但是在 f ( x i ) − y i = 0 f(x_i)-y_i=0 f(xi)−yi=0 处不可导,求解效率低;(2)梯度较为稳定,但是即使损失很小梯度仍然保持不变,不利于模型的收敛;(3)对异常值更鲁棒(相比于L2 loss)。由于神经网络的问题较为复杂,因此很少使用,但是可以利用L1进行正则化,即将L1损失(权重1范数的和)加在其他损失的后面,作为正则项。正规化是防止过拟合的一种重要技巧,L1正则项的好处是能保持解的稀疏性,即为了使损失最小化,一些影响小的权重参数经过学习设置为0,可以用于特征选择。 - MSE/L2 loss:
M S E = 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 MSE = \frac1n\sum \limits_{i=1}^{n}(f(x_i)-y_i)^2 MSE=n1i=1∑n(f(xi)−yi)2
均方误差(Mean Square Error,MSE)是对估计值和真实值之差取平方和的平均值。由上图可以看出,(1)MSE是平滑函数、处处可导,因此在求解优化问题时有利于误差梯度的计算;(2)随着误差的减小,梯度也在减小,因此使用固定的学习速率,也能较快的收敛到最小值;(3)通过平方计算放大了估计值和真实值的距离,因此对于异常值带来很大的惩罚,从而降低正常值的预测效果;(4)误差很大时梯度也很大,在训练初期不稳定,容易梯度爆炸。L2进行正则化可以防止过拟合,在正则化后的梯度下降迭代公式中,会给权重参数乘以一个小于1的因子 1 − α λ m 1-\alpha\frac{\lambda}m 1−αmλ,其中 λ \lambda λ为正则化参数,因此权重值减小,从而得到的模型越平滑。 - Smooth L1 loss:
S m o o t h L 1 = 1 n ∑ i = 1 n { 0.5 ( f ( x i ) − y i ) 2 i f ∣ f ( x i ) − y i ∣ < 1 ∣ f ( x i ) − y i ∣ − 0.5 o t h e r w i s e Smooth\space L1 = \frac1n\sum \limits_{i=1}^{n}\left\{ \begin{array}{rcl} 0.5(f(x_i)-y_i)^2 & &if \space {|f(x_i)-y_i| <1}\\ |f(x_i)-y_i|-0.5 & & {otherwise}\\ \end{array} \right. Smooth L1=n1i=1∑n{ 0.5(f(xi)−yi)2∣f(xi)−yi∣−0.5if ∣f(xi)−yi∣<1otherwise
Smooth L1 是L1和L2两种损失的结合,目前多用于目标检测中(例如Faster RCNN)的边框回归损失,能从两个方面限制梯度:(1)当预测框与 ground truth 差别过大时,梯度值不至于过大;(2)当预测框与 ground truth 差别很小时,梯度值足够小。 - Huber loss:
H u b e r l o s s = 1 n ∑ i = 1 n { 1 2 ( f ( x i ) − y i ) 2 i f ∣ f ( x i ) − y i ∣ ≤ δ δ ∣ f ( x i ) − y i ∣ − 1 2 δ 2 o t h e r w i s e Huber \space loss = \frac1n\sum \limits_{i=1}^{n}\left\{ \begin{array}{rcl} \frac12(f(x_i)-y_i)^2 & &if \space {|f(x_i)-y_i| \leq \delta}\\ \delta|f(x_i)-y_i|- \frac12\delta^2 & & {otherwise}\\ \end{array} \right. Huber loss=n1i=1∑n{ 21(f(xi)−yi)2δ∣f(xi)−yi∣−21δ2