损失函数是代价函数的一部分,而代价函数是目标函数的一种类型

  • Loss function,即损失函数:用于定义单个训练样本与真实值之间的误差;
  • Cost function,即代价函数:用于定义单个批次/整个训练集样本与真实值之间的误差;
  • Objective function,即目标函数:泛指任意可以被优化的函数。

损失函数可以分为三类:回归损失函数、分类损失函数和排序损失函数。

L1 Loss

平均绝对误差(Mean Absolute Error, MAE),它衡量的是预测值与真实值之间距离的平均误差幅度,作用范围为0到正无穷。

优点:对离群点或者异常值更具有鲁棒性。

缺点:在0处导数不连续,求解效率低,收敛速度慢;对于所有的损失值,梯度一样,不利于网络学习。

L2 Loss

均方差(Mean Squred Error, MSE),它衡量的是预测值与真实值之间距离平方和的均值,作用范围同为0到正无穷。

优点:收敛速度快,能够对梯度给予合适的惩罚权重,而不是“一视同仁”,使梯度更新的方向可以更加精确。

缺点:对异常值十分敏感,梯度更新的方向很容易受离群点所主导,不具备鲁棒性。

Smooth L1 Loss

出自 Fast RCNN,L1 loss 在0附近采用L2 loss,解决了L1在0处不可导的问题,使其更加平滑易于收敛,同时在1以后采用固定梯度,能够快速下降。

Cross-Entropy

用预测分布编码随机变量所需的期望编码长度,

交叉熵损失函数,能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。交叉熵的值越小,模型预测效果就越好。

在机器学习中,我们认为数据的分布是真实分布,而模型输出的分布用来逼近真实分布,因此优化交叉熵即让两个分布接近。

优点:对于 softmax 函数,常用的 MSE 误差越大,下降越慢。但交叉熵能很好改善这个问题,当误差较大时,梯度也大,下降的较快;也避免了某些情况下激活函数进入饱和区,梯度消失的问题。对于MSE当激活层采用sigmoid时,误差越大,梯度越小,产生梯度消失

均方误差损失向最后一层传递梯度时,梯度与最后一层的激活函数的导数成正比,当输入较大时,梯度较小,收敛慢。
交叉熵损失函数对最后一层权重的梯度与激活函数的导数无关,只与输出值与真实值的差值成正比

BCE

用于二分类,多标签二分类

KL Divergence Loss

KL散度又称为相对熵,是真实分布与预测分布的交叉熵 与 真实分布的熵的差,最小化KL散度,可以令两个分布相近。

机器学习的过程就是希望在训练数据上模型学到的分布和真实数据分布越接近越好但由于没有真实的数据分布,就采用交叉熵损失函数,优于真实分布熵是不变的,最小化KL散度等价于最小化交叉熵。

Dice Loss

集合相似度度量函数,用于计算两个样本的相似度,常用于图像分割。

  • 有益于正负样本不均衡的情况,侧重于对前景的挖掘;
  • 训练过程中,在有较多小目标的情况下容易出现振荡;
  • 极端情况下会出现梯度饱和的情况。

一般会结合交叉熵损失或其他分类损失一同进行优化。

Focal Loss

用于解决样本类别不均衡的问题,如果直接采用原始的交叉熵损失,负样本所占比例会非常大,主导梯度的优化方向。
Focal loss聚焦于训练一个困难样本的稀疏集,通过直接在标准的交叉熵损失基础上做改进,引进了两个惩罚因子,来减少易分类样本的权重,使得模型在训练过程中更专注于困难样本。

FL(p,p^)=(α(1p^)γplog(p^)+(1α)p^γ(1p))log(1p^)FL(p,\hat{p}) = -( \alpha(1-\hat{p})^\gamma p log(\hat{p}) + (1-\alpha) \hat{p}^\gamma (1-p) ) log(1-\hat{p})

  • 参数α\alpha(1α)(1-\alpha)分别用于控制正负样本的比例。
  • 参数γ\gamma称为聚焦参数,取值范围是[0,+)[0,+\infty),目的是通过减少易分类样本的权重,从而使模型在训练时更专注于困难样本。当γ=0\gamma=0时,Focal Loss退化为交叉熵损失函数,γ\gamma越大,对易分类样本的惩罚力度就越大。

参考资料

损失函数技术总结及Pytorch使用示例
一文看尽深度学习中的15种损失函数