ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

focal loss

2021-05-07 18:56:31  阅读:207  来源: 互联网

标签:loss 分类 log 样本 0.5 Kx focal




经搜索它是Kaiming大神团队在他们的论文《Focal Loss for Dense Object Detection》提出来的损失函数,利用它改善了图像物体检测的效果。不过我很少做图像任务,不怎么关心图像方面的应用。本质上讲,focal loss就是一个解决分类问题中类别不平衡、分类难度差异的一个loss,总之这个工作一片好评就是了。大家还可以看知乎的讨论:
《如何评价kaiming的Focal Loss for Dense Object Detection?》

看到这个loss,开始感觉很神奇,感觉大有用途。因为在NLP中,也存在大量的类别不平衡的任务。最经典的就是序列标注任务中类别是严重不平衡的,比如在命名实体识别中,显然一句话里边实体是比非实体要少得多,这就是一个类别严重不平衡的情况。我尝试把它用在我的基于序列标注的问答模型中,也有微小提升。嗯,这的确是一个好loss。

接着我再仔细对比了一下,我发现这个loss跟我昨晚构思的一个loss具有异曲同工之理!这就促使我写这篇博文了。我将从我自己的思考角度出发,来分析这个问题,最后得到focal loss,也给出我昨晚得到的类似的loss。

硬截断 

整篇文章都是从二分类问题出发,同样的思想可以用于多分类问题。二分类问题的标准loss是交叉熵

Lce=−ylogy^−(1−y)log(1−y^)={−log(y^),当y=1−log(1−y^),当y=0Lce=−ylog⁡y^−(1−y)log⁡(1−y^)={−log⁡(y^),当y=1−log⁡(1−y^),当y=0
其中 y∈{0,1}y∈{0,1} 是真实标签, y^y^ 是预测值。当然,对于二分类我们几乎都是用sigmoid函数激活 y^=σ(x)y^=σ(x) ,所以相当于
Lce=−ylogσ(x)−(1−y)logσ(−x)={−logσ(x),当y=1−logσ(−x),当y=0Lce=−ylog⁡σ(x)−(1−y)log⁡σ(−x)={−log⁡σ(x),当y=1−log⁡σ(−x),当y=0
(我们有 1−σ(x)=σ(−x)1−σ(x)=σ(−x) 。)

我在上半年的博文《文本情感分类(四):更好的损失函数》中,曾经针对“集中精力关注难分样本”这个想法提出了一个“硬截断”的loss,形式为

L⋅=λ(y,y^)⋅LceL⋅=λ(y,y^)⋅Lce
其中
λ(y,y^)={0,(y=1且y^>0.5)或(y=0且y^<0.5)1,其他情形λ(y,y^)={0,(y=1且y^>0.5)或(y=0且y^<0.5)1,其他情形
这样的做法就是: 正样本的预测值大于0.5的,或者负样本的预测值小于0.5的,我都不更新了,把注意力集中在预测不准的那些样本,当然这个阈值可以调整。这样做能部分地达到目的,但是所需要的迭代次数会大大增加。

原因是这样的:以正样本为例,我只告诉模型正样本的预测值大于0.5就不更新了,却没有告诉它要“保持”大于0.5,所以下一阶段,它的预测值就很有可能变回小于0.5了,当然,如果是这样的话,下一回合它又被更新了,这样反复迭代,理论上也能达到目的,但是迭代次数会大大增加。所以,要想改进的话,重点就是“不只是要告诉模型正样本的预测值大于0.5就不更新了,而是要告诉模型当其大于0.5后就只需要保持就好了”。(好比老师看到一个学生及格了就不管了,这显然是不行的。如果学生已经及格,那么应该要想办法要他保持目前这个状态甚至变得更好,而不是不管。)

软化loss 

硬截断会出现不足,关键地方在于因子λ(y,y^)λ(y,y^)是不可导的,或者说我们认为它导数为0,因此这一项不会对梯度有任何帮助,从而我们不能从它这里得到合理的反馈(也就是模型不知道“保持”意味着什么)。

解决这个问题的一个方法就是“软化”这个loss,“软化”就是把一些本来不可导的函数用一些可导函数来近似,数学角度应该叫“光滑化”。这样处理之后本来不可导的东西就可导了,类似的算例还有《梯度下降和EM算法:系出同源,一脉相承》中的kmeans部分。我们首先改写一下L∗L∗。

L⋅={−θ(0.5−y^)log(y^),当y=1−θ(y^−0.5)log(1−y^),当y=0L⋅={−θ(0.5−y^)log⁡(y^),当y=1−θ(y^−0.5)log⁡(1−y^),当y=0
这里的 θθ 就是单位阶跃函数
θ(x)=⎧⎩⎨⎪⎪⎪⎪1,x>012,x=00,x<0θ(x)={1,x>012,x=00,x<0
这样的 L∗L∗ 跟原来的是完全等价的,它也等价于(因为 σ(0)=0.5σ(0)=0.5 )
L⋅={−θ(−x)logσ(x),当y=1−θ(x)logσ(−x),当y=0L⋅={−θ(−x)log⁡σ(x),当y=1−θ(x)log⁡σ(−x),当y=0
这时候思路就很明显了,要想“软化”这个loss,就得“软化” θ(x)θ(x) ,而软化它就再容易不过,它就是sigmoid函数!我们有
θ(x)=limK→+∞σ(Kx)θ(x)=limK→+∞σ(Kx)
所以很显然,我们将 θ(x)θ(x) 替换为 σ(Kx)σ(Kx) 即可:
L⋅⋅={−σ(−Kx)logσ(x),当y=1−σ(Kx)logσ(−x),当y=0L⋅⋅={−σ(−Kx)log⁡σ(x),当y=1−σ(Kx)log⁡σ(−x),当y=0
这就是我昨晚思考得到的loss了,显然实现上也是很容易的。

现在跟focal loss做个比较。

Focal Loss 

Kaiming大神的focal loss形式是

Lfl={−(1−y^)γlogy^,当y=1−y^γlog(1−y^),当y=0Lfl={−(1−y^)γlog⁡y^,当y=1−y^γlog⁡(1−y^),当y=0
如果落实到 y^=σ(x)y^=σ(x) 这个预测,那么就有
Lfl={−σγ(−x)logσ(x),当y=1−σγ(x)logσ(−x),当y=0Lfl={−σγ(−x)log⁡σ(x),当y=1−σγ(x)log⁡σ(−x),当y=0
特别地, 如果KK和γγ都取1,那么L∗∗=LflL∗∗=Lfl!

事实上KK和γγ的作用都是一样的,都是调节权重曲线的陡度,只是调节的方式不一样~注意L∗∗L∗∗或LflLfl实际上都已经包含了对不均衡样本的解决方法,或者说,类别不均衡本质上就是分类难度差异的体现。比如负样本远比正样本多的话,模型肯定会倾向于数目多的负类(可以想象全部样本都判为负类),这时候,负类的y^γy^γ或σ(Kx)σ(Kx)都很小,而正类的(1−y^)γ(1−y^)γ或σ(−Kx)σ(−Kx)就很大,这时候模型就会开始集中精力关注正样本。

当然,Kaiming大神还发现对LflLfl做个权重调整,结果会有微小提升

Lfl={−α(1−y^)γlogy^,当y=1−(1−α)y^γlog(1−y^),当y=0Lfl={−α(1−y^)γlog⁡y^,当y=1−(1−α)y^γlog⁡(1−y^),当y=0
通过一系列调参,得到 α=0.25,γ=2α=0.25,γ=2 (在他的模型上)的效果最好。注意在他的任务中,正样本是属于少数样本,也就是说,本来正样本难以“匹敌”负样本,但经过 (1−y^)γ(1−y^)γ 和 y^γy^γ 的“操控”后,也许形势还逆转了,还要对正样本降权。不过我认为这样调整只是经验结果,理论上很难有一个指导方案来决定 αα 的值,如果没有大算力调参,倒不如直接让 α=0.5α=0.5 (均等)。

多分类 

focal loss在多分类中的形式也很容易得到,其实就是

Lfl=−(1−y^t)γlogy^tLfl=−(1−y^t)γlog⁡y^t
y^ty^t 是目标的预测值,一般就是经过softmax后的结果。那我自己构思的 L∗∗L∗∗ 怎么推广到多分类?也很简单:
L⋅⋅=−softmax(−Kxt)logsoftmax(xt)L⋅⋅=−softmax(−Kxt)log⁡softmax(xt)
这里 xtxt 也是目标的预测值,但它是softmax前的结果。

结语 

什么?你得到了跟Kaiming大神一样想法的东西?不不不,本文只是对Kaiming大神的focal loss的一个介绍而已,更准确地说,是应对分类不平衡、分类难度差异的一些方案的介绍,并尽可能给出自己的看法而已。当然,本文这样的写法难免有附庸风雅、东施效颦之嫌,请读者海涵。

转载到请包括本文地址:https://kexue.fm/archives/4733/

标签:loss,分类,log,样本,0.5,Kx,focal
来源: https://blog.51cto.com/u_14540820/2759525

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有