深度学习_目标检测_Focal Loss详解

Focal Loss本质

Focal Loss本质上解决了分类问题中类别不均衡、分类难度差异的一个损失函数,使得训练更加聚焦在困难样本上。

Focal Loss的发展演化

Focal Loss是从二分类问题出发,同样的思想可以迁移到多分类问题上。

标准交叉熵

我们知道二分类问题的标准loss是交叉熵:

在这里插入图片描述
对于二分类问题我们也几乎适用sigmoid激活函数y^=σ(x)\hat{y} = \sigma(x),所以上面的式子可以转化成:

在这里插入图片描述
这里有1σ(x)=σ(x)1 - \sigma(x) = \sigma(-x)

作者在论文中给出的式子如下:

在这里插入图片描述

其中y{1,1}y\in \{ 1,-1\}是真实标签,p[0,1]p\in[0,1]是预测概率。

我们再定义ptp_{t}

在这里插入图片描述

上面的交叉熵的式子可以转换成:

在这里插入图片描述

均衡交叉熵

最初论文中引入了均衡交叉熵函数:

在这里插入图片描述

要对类别不均衡问题对loss的贡献进行一个控制,即加上一个控制权重即可,最初作者的想法即如下这样,对于属于少数类别的样本,增大ata_{t}即可。但这样有一个问题,它仅仅解决了正负样本之间的平衡问题,并没有区分易分/难分样本。

为什么上述公式只解决正负样本不均衡问题

因为增加了一个系数αtα_{t},跟ptp_{t}的定义类似,当label=1的时候αt=aα_{t}=a ;当label=-1的时候,αt=1aα_{t}= 1 - aaa的范围也是[0,1][0,1]。因此 可以通过设定aa的值(如果11这个类的样本数比1-1这个类的样本数少很多,那么aa会取0.510.5到1来增加11这个类的样本的权重)来控制正负样本对总的loss的贡献。

Focal Loss

上面的交叉熵是硬截断型的loss,我们通常设定一个阈值,超过这个阈值我们就不在更新参数了。这样的话下一次更新训练这个预测值坑又变回小于阈值了,这样会使得训练变得困难,迭代次数大大增加。

所以交叉熵为基础,对loss进行软化,我们不只是要告诉模型正样本的预测值大于阈值就不更新了,而是要告诉模型当其大于阈值后只需要保持就好。

硬截断致命的缺陷是loss的权重因子不可导,对梯度没有任何帮助,软化就是把一些本来不可导的函数用一些可导函数来近似,数学角度叫“光滑化”。

Focal Loss雏形

所以伟大的Focal Loss雏形就出现了:

在这里插入图片描述

(1pt)γ(1 - p_{t})^{\gamma}用于平衡难易样本的比例不均,γ>0\gamma >0起到了对(1pt)(1 - p_{t})的放大作用。γ>0\gamma >0减少易分样本的损失,使模型更关注于困难易错分的样本。例如当γ=2\gamma =2时,模型对于某正样本预测置信度ptp_{t}0.90.9,这时(10.9)γ=0.01(1 - 0.9)^{\gamma} = 0.01,也就是FL值变得很小;而当模型对于某正样本预测置信度ptp_{t}为0.3时,(10.3)γ=0.49(1 - 0.3)^{\gamma} = 0.49,此时它对loss的贡献就变大了。当γ=0\gamma = 0时变成交叉熵损失。

Focal Loss最终版本

为了应对正负样本不均衡的问题,在上面的式子中再加入平衡交叉熵的ata_{t}因子,用来平衡正负样本本身的比例不均,最终得到如下式子:

在这里插入图片描述

Focal Loss论文的作者给出的实验最佳取值为at=0.25a_{t}= 0.25γ=2\gamma = 2

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章