发布时间:2024-12-19 12:01
核心作用:用于解决正负样本极度不均衡的问题(e.g. 1:1000)
从binary CE Loss的函数曲线来看,哪怕模型对样本的输出概率 p > 0.5 p>0.5 p>0.5,仍然会产生一个比较大的Loss,以至于不可忽略时
当有很多个这样的 p > 0.5 p>0.5 p>0.5(easy negative)时,这些小loss积小成多,会总的loss产生一个不可忽视的主导作用
一个比较常见的缓解方式是加上一个系数 α t \\alpha_t αt: C E ( p t ) = − α t log ( p t ) , α ∈ [ 0 , 1 ] CE(p_t)=-\\alpha_t \\log(p_t), \\alpha \\in [0,1] CE(pt)=−αtlog(pt),α∈[0,1] alpha如果对正样本就是 α \\alpha α,负样本就是 1 − α 1 - \\alpha 1−α,从而在正样本/负样本产生的Loss之间做权衡
但是这种Loss只考虑了正负样本,没有考虑到难易样本,一种直观的延伸是我们在前面加上一个与难易程度(其实也就是 p t p_t pt)有关的项: F L ( p t ) = − ( 1 − p t ) γ log ( p t ) FL(p_t) = -(1-p_t)^\\gamma \\log(p_t) FL(pt)=−(1−pt)γlog(pt)当 p t p_t pt得分很高的时候,也就是这是个easy sample,给一个很低的权重,否则给一个很高的权重 γ \\gamma γ是一个可以调节的参数
实践中发现: γ = 2 \\gamma = 2 γ=2的时候有比较好的效果,这个时候如果 p t = 0.9 p_t = 0.9 pt=0.9,Loss就比原来低了100倍,而 p t ≤ 0.5 p_t \\leq 0.5 pt≤0.5时,只比原来低了4倍。(个人认为考虑到基数问题,倍数不一定都能反馈出真实的难易Loss变化,但整体来说难样本的比重还是会高一点的)
实践中会加入一个平衡系数 α \\alpha α从而防止Loss过小: F L ( p t ) = − α t ( 1 − p t ) γ log ( p t ) FL(p_t) = -\\alpha_t (1-p_t)^\\gamma \\log(p_t) FL(pt)=−αt(1−pt)γlog(pt)(这里的 α \\alpha α 可以认为 γ \\gamma γ已经缓解了类别不均衡的问题,所以不用取太大)
实际上Focal Loss的具体形式不重要