前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >五分钟学会:焦点损失函数 FocalLoss 与 GHM

五分钟学会:焦点损失函数 FocalLoss 与 GHM

作者头像
机器学习炼丹术
发布2020-07-14 11:05:17
4K0
发布2020-07-14 11:05:17
举报

1 focal loss的概述

焦点损失函数 Focal Loss(2017年何凯明大佬的论文)被提出用于密集物体检测任务。

当然,在目标检测中,可能待检测物体有1000个类别,然而你想要识别出来的物体,只是其中的某一个类别,这样其实就是一个样本非常不均衡的一个分类问题。

而Focal Loss简单的说,就是解决样本数量极度不平衡的问题的。

说到样本不平衡的解决方案,想必大家是知道一个混淆矩阵的f1-score的,但是这个好像不能用在训练中当成损失。而Focal loss可以在训练中,让小数量的目标类别增加权重,让分类错误的样本增加权重

先来看一下简单的二值交叉熵的损失:

  • y’是模型给出的预测类别概率,y是真实样本。就是说,如果一个样本的真实类别是1,预测概率是0.9,那么
-log(0.9)

就是这个损失。

  • 讲道理,一般我不喜欢用二值交叉熵做例子,用多分类交叉熵做例子会更舒服。

【然后看focal loss的改进】:

这个增加了一个

(1-y')^\gamma

的权重值,怎么理解呢?就是如果给出的正确类别的概率越大,那么

(1-y')^\gamma

就会越小,说明分类正确的样本的损失权重小,反之,分类错误的样本的损权重大


【focal loss的进一步改进】:

这里增加了一个

\alpha

,这个alpha在论文中给出的是0.25,这个就是单纯的降低正样本或者负样本的权重,来解决样本不均衡的问题

两者结合起来,就是一个可以解决样本不平衡问题的损失focal loss。


【总结】:

\alpha

解决了样本的不平衡问题;

\beta

解决了难易样本不平衡的问题。让样本更重视难样本,忽视易样本。

  1. 总之,Focal loss会的关注顺序为:样本少的、难分类的;样本多的、难分类的;样本少的,易分类的;样本多的,易分类的。

2 GHM

  • GHM是Gradient Harmonizing Mechanism。

这个GHM是为了解决Focal loss存在的一些问题。

【Focal Loss的弊端1】让模型过多的关注特别难分类的样本是会有问题的。样本中有一些异常点、离群点(outliers)。所以模型为了拟合这些非常难拟合的离群点,就会存在过拟合的风险。

2.1 GHM的办法

Focal Loss是从置信度p的角度入手衰减loss的。而GHM是一定范围内置信度p的样本数量来衰减loss的。

首先定义了一个变量g,叫做梯度模长(gradient norm)

可以看出这个梯度模长,其实就是模型给出的置信度

p^*

与这个样本真实的标签之间的差值(距离)。g越小,说明预测越准,说明样本越容易分类。

下图中展示了g与样本数量的关系:

【从图中可以看到】

  • 梯度模长接近于0的样本多,也就是易分类样本是非常多的
  • 然后样本数量随着梯度模长的增加迅速减少
  • 然后当梯度模长接近1的时候,样本的数量又开始增加。

GHM是这样想的,对于梯度模长小的易分类样本,我们忽视他们;但是focal loss过于关注难分类样本了。关键是难分类样本其实也有很多!,如果模型一直学习难分类样本,那么可能模型的精确度就会下降。所以GHM对于难分类样本也有一个衰减。

那么,GHM对易分类样本和难分类样本都衰减,那么真正被关注的样本,就是那些不难不易的样本。而抑制的程度,可以根据样本的数量来决定。

这里定义一个GD,梯度密度

GD(g)=\frac{1}{l(g)}\sum_{k=1}^N{\delta(g_k,g)}
GD(g)

是计算在梯度g位置的梯度密度;

\delta(g_k,g)

就是样本k的梯度

g_k

是否在

[g-\frac{\epsilon}{2},g+\frac{\epsilon}{2}]

这个区间内。

l(g)

就是

[g-\frac{\epsilon}{2},g+\frac{\epsilon}{2}]

这个区间的长度,也就是

\epsilon

总之,

GD(g)

就是梯度模长在

[g-\frac{\epsilon}{2},g+\frac{\epsilon}{2}]

内的样本总数除以

\epsilon

.

然后把每一个样本的交叉熵损失除以他们对应的梯度密度就行了。

L_{GHM}=\sum^N_{i=1}{\frac{CE(p_i,p_i^*)}{GD(g_i)}}
CE(p_i,p_i^*)

表示第i个样本的交叉熵损失;

GD(g_i)

表示第i个样本的梯度密度;

2.2 论文中的GHM

论文中呢,是把梯度模长划分成了10个区域,因为置信度p是从0~1的,所以梯度密度的区域长度就是0.1,比如是0~0.1为一个区域。

下图是论文中给出的对比图:

【从图中可以得到】

  • 绿色的表示交叉熵损失;
  • 蓝色的是focal loss的损失,发现梯度模长小的损失衰减很有效;
  • 红色是GHM的交叉熵损失,发现梯度模长在0附近和1附近存在明显的衰减。

当然可以想到的是,GHM看起来是需要整个样本的模型估计值,才能计算出梯度密度,才能进行更新。也就是说mini-batch看起来似乎不能用GHM。

在GHM原文中也提到了这个问题,如果光使用mini-batch的话,那么很可能出现不均衡的情况。

【我个人觉得的处理方法】

  1. 可以使用上一个epoch的梯度密度,来作为这一个epoch来使用;
  2. 或者一开始先使用mini-batch计算梯度密度,然后模型收敛速度下降之后,再使用第一种方式进行更新。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习炼丹术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 focal loss的概述
  • 2 GHM
    • 2.1 GHM的办法
      • 2.2 论文中的GHM
      相关产品与服务
      批量计算
      批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档