【深度学习】focal loss介绍

目录

一、focal loss解决的问题:

二、focal loss的两个重要性质:


一、focal loss解决的问题:

因此针对类别不均衡问题,作者提出一种新的损失函数:focal loss

这个损失函数是在标准交叉熵损失基础上修改得到的。可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。

1.1 普通二分类交叉熵CrossEntropy(0,1分类)

1.2 交叉熵基本改进版

接下来介绍一个最基本的对交叉熵的改进,也将作为本文实验的baseline,既然one-stage detector在训练的时候正负样本的数量差距很大,那么一种常见的做法就是给正负样本加上权重,负样本出现的频次多,那么就降低负样本的权重,正样本数量少,就相对提高正样本的权重。因此可以通过设定a的值来控制正负样本对总的loss的共享权重。a取比较大的值来降低负样本(多的那类样本)的权重。

           【深度学习】focal loss介绍_第1张图片

1.3 交叉熵进一步改进版

显然前面的公式3虽然可以控制正负样本的权重,但是没法控制容易分类和难分类样本的权重,于是就有了focal loss:

这里的γ称作focusing parameter,γ>=0。

1.4 focal loss版本

结合了公式3和公式4,这样既能调整正负样本的权重,又能控制难易分类样本的权重

其中称为调制系数(modulating factor)。

1.5 focal loss和普通交叉熵的loss曲线差异

【深度学习】focal loss介绍_第2张图片

二、focal loss的两个重要性质:

1、关于调制系数

  • 当一个样本的概率得分pt很小时,调制因子(1-Pt)越大且接近1,此时调制系数也趋近于1,损失函数的权重基本没有减少
  • 当一个样本的概率得分pt很大趋近于1时,调制因子(1-Pt)接近0,此时调制系数也趋近于0,导致损失函数的权重降低到接近0。那么分的比较好(概率得分高)的样本的loss的权值就被调低了
  • 原理:正常交叉熵loss的权重为1,而focalloss通过调制系数控制loss的权重,难样本(得分低)的权重趋近于1,而简单样本(得分高)的权重会被缩放到很小。难样本loss权重不变,减小简单样本loss权重,也就相当于增大了难样本权重

2、参数γ的取值

  • 当γ=0的时候,focal loss就是传统的交叉熵损失,当γ增加的时候,调制系数也会增加。 专注参数γ平滑地调节了易分样本调低权值的比例。
  • γ增大能增强调制因子的影响,实验发现γ取2最好。直觉上来说,调制因子减少了易分样本的损失贡献,拓宽了样例接收到低损失的范围。
  • 当γ一定的时候,比如等于2,一样easy example(pt=0.9)的loss要比标准的交叉熵loss小100+倍,当pt=0.968时,要小1000+倍,但是对于hard example(pt < 0.5),loss最多小了4倍。这样的话hard example的权重相对就提升了很多。也就增加了那些误分类样本的重要性。

focal loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失的贡献。

例子:

为了能够比较出差异, 直接用极端的例子, 其实也就是one-stage 目标检测的情况

假设我们模型

  • 负样本10000笔资料probability(pt) = 0.95(简单样本), 这边可以理解为easy-example
  • 正样本10笔资料, probability(pt) = 0.05(困难样本),

1.使用普通交叉熵CrossEntropy的loss结果

负样本 : log(p_t) * 样本数(100000) = 0.02227 * 100000 = 2227
正样本 : log(p_t) * 样本数(10) = 1.30102 * 10 = 13.0102
total loss = 2227+13.0102 = 2240
正样本占比:13.0102 / 2240 = 0.0058

2.使用FocalLoss的结果

负样本 : 0.75*(1-0.95)^2 * 0.02227 *样本数(100000) = 0.00004176 * 100000 = 4.1756
正样本 : 0.25* (1-0.05)^2 * 1.30102 *样本数(10)= 0.29354264 * 10 = 2.935
total loss = 4.175 + 2.935 = 7.110
正样本占比:2.935/7.110 = 0.4127(与0.0058差距甚大)
  • 经过比较, 算出CE正样本的值占总loss比例是0.0058, 而FocalLoss计算的正样本占比是0.4127,相差了71倍, 可以看出FL能有效提升正样本的loss占比;
  • 上面的例子中alpha取值为0.25, gamma=2, 这是作者建议的最佳值alpha 的0.25代表的是正样本, 所以负样本就会是1-0.25 = 0.75
  • 这里也许有些奇怪, 就理论上来看,alpha值设定为0.75(因为正样本通常数量小)是比较合理, 但是毕竟还有gamma值在, 已经将负样本损失值降低许多,可理解为alpha和gamma相互牵制,alpha也不让正样本占比过大,因此最终设定为0.25。

小结:

  1. gamma = 2时候, 负样本(1-0.95)^2 = 0.0025, 正样本(1-0.05)^2= 0.9025, 负样本损失值明显比正样本小很多
  2. alpha与gamma是一种相互平衡的值,虽然就理论上来看,alpha值设定为0.75(因为正样本通常数量小)是比较合理, 但是配合gamma值已经将负样本损失值降低许多,可理解为alpha和gamma相互牵制,alpha也不让正样本占比太大,因此最终设定为0.25。

指数函数图像:即为focalloss中的调制系数函数图像(主要看x坐标0~1范围)

【深度学习】focal loss介绍_第3张图片

                                                    图1 focalloss中的调制系数函数图像

-log对数函数图像:

【深度学习】focal loss介绍_第4张图片

 参考:https://zhuanlan.zhihu.com/p/82148525

你可能感兴趣的:(基础理论知识)