损失函数是用来估量模型的输出与真实值之间的差距,给模型的优化指引方向。
上文我们介绍了交叉熵损失函数,本文主要总结在深度学习中常用的损失函数。
均方差损失也称为L2 loss,常用于回归任务。模型输出与真实值误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质一致。所以L1 loss一般用于满足假设场景的任务,比如回归任务。而分类任务不满足此假设,所以如上文一般用交叉熵损失。
MSE loss其公式如下:
其中y_i为label,f(x_i)为预测值,n为样本个数。
优点:各点都连续,方便求导;
缺点:不是特别稳健,由于计算为平方关系,当函数输入和真实值相差较大时,对应loss值很大,求解梯度很大容易产生梯度爆炸。
平均绝对误差也称为L1 loss,主要也用于回归任务。假设模型预测与真实值之间误差服从拉普拉斯分布Laplace distribution,最小化平均绝对损失函数与极大似然估计本质一致。
MAE loss公式如下:
优点:具有稳定的梯度,不会导致梯度爆炸问题;
缺点:在中心点时折点,不能求导。
也称为smooth L1 loss。是L1 Loss和L2 loss的结合。
也就是当预测值f(x_i)和真实值y_i的差距比较小的情况下,使用L2 loss;差距比较大点情况,使用L1 loss。所以其拥有L1 loss 和 L2 loss的优势:
三者曲线如下图:
(前面提到了L1 loss,顺便提一下L1正则。L1 loss和L1正则都是使用了L1范数。L1 loss是指对预测值和真实值当差值使用L1范数得到损失函数;L1正则是在损失函数之后单独加一项,对所有权重w进行L1范数对运算。
L1正则项在梯度更新时,梯度都是-1或1,所以w每次更新都是固定步长向0前进;L2正则项,梯度越靠近0,w值越小;所以L1正则会让w稀疏;L2正则会让w趋于0,不会过大。)
交叉熵损失在上文我们有进行详细的介绍,交叉熵损失主要用于分类问题。分类问题不适合用均方差损失是因为在均方差损失是假设了误差服从高斯分布,分类问题不满足假设。而交叉熵损失的推导根据上文介绍和使用最大化似然结论是一致的。
合页损失是带有置信度的损失函数,适用于最大间隔(max-margin)分类问题,示意图如下:
其中函数间隔y(wx+b)大于0表示样本被正确分类,损失为0;y(wx+b)小于0表示样本被错误分类,loss大于0。y(wx+b)的绝对值表示样本与决策边界的距离;如果y(wx+b)>0,绝对值越大表示决策边界对样本区分度越好;反之如果y(wx+b)<0,绝对值越大表示决策边界对样本区分度越差。
当样本被正确分类时,损失为0;当样本被错误分类时,损失为1,为0-1损失;
当样本被正确分类时,损失为0;当样本被错误分类时,损失为-y(wx+b),为感知机损失函数;
当样本被正确分类并且函数间隔大于1时,损失为0;否则损失为1-y(wx+b),为合页损失函数。
所以合叶损失函数不仅要正确分类,而且对置信度要达到一定值损失才是0。
上文介绍过通常在分类问题中会使用交叉熵损失函数,但是通常我们会遇到样本不均衡的问题,这种情况下使用交叉熵会存在训练过程中偏向学习样本数多的类别,导致对样本较少的类别识别精度不高。加权损失函数就是在每个类别的损失项前增加一个权重值,比如正负样本的权重可以和对方样本数成正比,给样本少的类别一个较大的学习权重来进行平衡。
focal loss其实也算一种加权loss,他解决了样本不均衡以及困难样本学习问题。
回顾二分类交叉熵损失的公式:
用p_t表示样本的label=1的概率,则有
设置权重\alpha来控制对正负两个类别的样本对总loss的权重,即
通过以上的加权loss,可以控制正负样本的权重,但是无法控制容易分类和难分类的样本的权重。
focal loss的提出就是为了解决困难样本的学习问题。
,其中 {(1-p_t)}^{\gamma}称为调制系数,通过减少易分类样本的权重让模型更专注学难分类的样本。
我们分析focal loss 的公式:当一个样本识别错误,p_t很小,那么调制因子(1-p_t)就接近1,对整体loss的贡献影响很小;当p_t接近于1,则容易分类,(1-p_t)接近于0,相当于权重被调低,对整体loss的贡献就很小。所以让loss减少对易学样本的关注,相对更关注困难样本。
结合以上两个权重就是最终的focal loss 公式:
其中\alpha_t为类别权重, {(1-p_t)}^{\gamma}为难度权重。
dice loss来自dice coefficient,用来评估两个样本相似性的度量函数,多用于语义分割任务。
dice coefficient定义为:
其中|X \cap Y|是X和Y之间的交集,分子乘以2是因为分母会重复计算,保证计算后取值在[0,1]之间。根据dice系数,dice loss可以表示为:
IOU(intersection over union)和dice系数一样也是衡量两个集合之间相似性的度量,分割网络中常用的评价指标。
如下图所示,iou就是蓝色部分/红色+蓝色+黄色。
所以iou和dice也可以表示为:
综合两者,可以得到
不过IOU也有缺点,比如如果两者交集为0,则有IOU=0,不能反映两者的距离大小,loss=0也无法进行训练。所以对IOU也有一些优化方案比如GIou,DIou,CIou,这里不一一介绍。
参考:
https://www.cxymm.net/article/weixin_42310154/119938856#Smooth_L1_loss_39
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。