Focal Loss 的深刻理解__交叉熵的前世今生

一、前言

在以往的目标检测任务中,一阶段的方法往往会比两阶段的检测算法精度要低,造成一阶段检测效果不佳的原因如下:

1、负样本的数量过多,导致正样本的loss被覆盖,就算正样本的loss非常大也会被数量庞大的负样本中和掉,从而导致整个样本集的损失值较小,而这些正样本才是我们要检测的前景区域;

2、难样本往往是前景和背景区域的过渡部分,这类样本难以被区分,所以称难样本。剩下的易样本往往较好计算,导致模型非常容易就收敛了。但是损失函数收敛了并不代表模型效果好,因为我们更需要把那些难样本训练好,这样才能增强模型过的泛化能力和鲁棒性。

针对上述两个问题,何恺明等人提出一个新的损失函数Focal Loss(FL)。FL是一个尺度动态可调的交叉熵损失函数,在FL中有两个参数α和 λ,其中α主要作用是解决正负样本的不平衡,λ主要是解决难易样本的不平衡。

二、通过交叉熵损失(BC)引出Focal Loss

在介绍FL损失函数之前,首先介绍一下交叉熵损失函数,本文以二值交叉熵为例,其表达式如下:(交叉熵可参考本人博文  交叉熵损失函数(信息量、信息熵、KL散度)_Focal Loss__℡ヾNothing-_哥的博客-CSDN博客

https://img-blog.csdnimg.cn/20210626165543241.png

公式可简写为以下形式:

https://img-blog.csdnimg.cn/20210626170022467.png

其中,

https://img-blog.csdnimg.cn/20210626165543249.png

其中,p表示预测样本属于1的概率,取值范围为[0,1];y表示标签,取值为{0,1}。

当y=1时,假如某个样本x预测为1这个类的概率p=0.6,那么损失就是-log(0.6),注意这个损失是大于等于0的。如果p=0.9,那么损失就是-log(0.9),所以p=0.6的损失要大于p=0.9的损失,这很容易理解。这里仅仅以二分类为例,多分类以此类推。

三、Focal Loss

首先,承接上一节的交叉熵(BC), Focal Loss(FL)实际上就是在交叉熵损失函数(BC)的基础上进行改进的,在BC中引入了两个参数(α和 λ)对不同的样本进行权重的重新分配。其中,FL的表达式如下:

3.1 参数α:用于解决正负样本不均衡的问题

作者引入参数α是为了解决正负样本不均衡的问题,其原理十分简单,也很符合何凯明大神的风格。α的取值范围为[0,1],当y=1时,αt取值为α;当y=-1时,αt取值为1-α  我们使用和pt类似的方法将αt进行表示,可得:

因此,如果仅仅对正负样本进行不同权重的分配,这可以将交叉熵改造成如下形式:

如果数据中正样本超级多,则将α设置相对小一点,α的值往往需要根据验证集进行调整,原论文中给出的是0.25。

3.2 参数λ:用于解决难易样本不均衡的问题

绘制图看如下Figure1表示预测概率与loss之前的关系,横坐标是pt,纵坐标是loss。

FL(pt)表示focal loss中用到的改进的交叉熵;当λ=0时,FL就退化成CE(pt)标准的交叉熵公式了。 图中曲线中我们可以看出对于易样本的loss可以收敛到很小,但是由于它们的数量过于庞大,把一些难样本的loss覆盖掉,导致求和之后他们依然会支配整个批次样本的收敛方向。

一个简单的策略就是缩小易样本的训练权重。前面引入的α只能解决正负样本不均衡问题,但是没法控制容易分类和难分类样本的权重,于是作者有引入了参数λ对权重进行控制,λ的取值范围为[0,正无穷),包含λ的整个项表达如下:

其中,这里的参数lamda被称作focusing parameter,整项被称为称为调制系数(modulating factor)。由于易样本的预测概率往往接近1,即pt接近于1,那么调制系数项(1-pt)λ的值就会比较小,因此易样本得到了抑制,相对的难样本得到了放大,例如图1中λ>0 的那四条曲线。

举个栗子:当γ=0的时候,focal loss就是传统的交叉熵损失,当γ增加的时候,调制系数也会增加。当γ=2时,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。

(大量实验表明:当γ增加的时候,a需要减小一点。原文最佳的搭配:γ=2,a=0.25的效果最好)

本文主要参考两位大佬的博文:

Focal loss论文详解 - 知乎

物体检测之Focal Loss及RetinaNet - 知乎

Focal Loss理解 - 三年一梦 - 博客园

深刻理解交叉熵损失函数、Focal Loss_ZSH12345678900的博客-CSDN博客

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值