Focal Loss 与 GHM

Focal Loss

Focal Loss 的提出主要是为了解决难易样本数量不平衡(注意:这有别于正负样本数量不均衡问题)问题。下面以目标检测应用场景来说明。

  1. 一些 one-stage 的目标检测器通常会产生很多数量的 anchor box,但是只有极少数是正样本,导致正负样本数量不均衡。这里假设我们计算分类损失函数为交叉熵公式。

  2. 由于在目标检测中,大量的候选目标都是易分样本,这些样本的损失很低,但是由于数量极不平衡,易分样本数量相对来说太多,最终主导了总的损失,但是模型也应该关注那些难分样本(难分样本又分为普通难分样本特别难分样本,后面即将讲到的GHM就是为了解决特别难分样本的问题)。

基于以上两个场景中的问题,Focal Loss 给出了很好的解决方法:


GHM

Focal Loss存在一些问题:

  • 如果让模型过多关注 难分样本 会引发一些问题,比如样本中的离群点(outliers),已经收敛的模型可能会因为这些离群点还是被判别错误,总而言之,我们不应该过多关注易分样本,但也不应该过多关注难分样本;
  • \(\alpha\) 与 \(\gamma\) 的取值全从实验得出,且两者要联合一起实验,因为它们的取值会相互影响。

几个概念:

  1. 梯度模长g:\(g\) 正比于检测的难易程度,\(g\) 越大则检测难度越大,\(g\) 从交叉熵损失求梯度得来
    \[
    g=|p-p^*|=
    \begin{cases}
    1-p, & \text{if p* = 1} \\
    p, & \text{if p* = 0}
    \end{cases}
    \]
    \(p\) 是模型预测的概率,\(p^*\) 是 Ground-Truth 的标签(取值为1或者0);

    \(g\) 正比于检测的难易程度,\(g\) 越大则检测难度越大;

  2. 梯度模长与样本数量的关系:梯度模长接近于 0 时样本数量最多(这些可归类为易分样本),随着梯度模长的增长,样本数量迅速减少,但是当梯度模长接近于 1 时样本数量也挺多(这些可归类为难分样本)。如果过多关注难分样本,由于其梯度模长比一般样本大很多,可能会降低模型的准确度。因此,要同时抑制易分样本和难分样本!

  3. 抑制方法之梯度密度 \(G(D)\): 因为易分样本和特别难分样本数量都要比一般样本多一些,而我们要做的就是衰减 单位区间数量多的那类样本,也就是物理学上的密度概念。
    \[
    GD(g) = \frac{1}{l_{\epsilon}}\sum_{k=1}^{N}\delta_{\epsilon}(g_k, g)
    \]
    \(\delta_{\epsilon}(g_k, g)\) 表示样本 \(1 \sim N(样本数量)\) 中,梯度模长分布在 \((g-\frac{\epsilon}{2}, g+\frac{\epsilon}{2} )\) 范围内的样本个数,\(l_{\epsilon}(g)\) 代表了 \((g-\frac{\epsilon}{2}, g+\frac{\epsilon}{2} )\) 区间的长度;

  4. 最后对每个样本,用交叉熵 \(CE\) \(\times\) 该样本梯度密度的倒数即可。

分类问题的GHM损失:
\[
L_{GHM-C} = \sum_{i=1}^{N}\frac{L_{CE}(p_i, p_i^*)}{GD(g_i)}
\]
回归问题的GHM损失:
\[
L_{GHM-R} = \sum_{i=1}^N \frac{ASL_1(d_i)}{GD(gr_i)}
\]
其中,\(ASL_1(d_i)\) 为修正的 smooth L1 Loss。

抑制效果:


参考资料:

5分钟理解Focal Loss与GHM-解决样本不平衡利器——知乎

【深度学习】Focal Loss 与 GHM——解决样本不平衡问题的更多相关文章

  1. 焦点损失函数 Focal Loss 与 GHM

    文章来自公众号[机器学习炼丹术] 1 focal loss的概述 焦点损失函数 Focal Loss(2017年何凯明大佬的论文)被提出用于密集物体检测任务. 当然,在目标检测中,可能待检测物体有10 ...

  2. 从极大似然估计的角度理解深度学习中loss函数

    从极大似然估计的角度理解深度学习中loss函数 为了理解这一概念,首先回顾下最大似然估计的概念: 最大似然估计常用于利用已知的样本结果,反推最有可能导致这一结果产生的参数值,往往模型结果已经确定,用于 ...

  3. AI佳作解读系列(一)——深度学习模型训练痛点及解决方法

    1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...

  4. 深度学习中loss总结

    一.分类损失 1.交叉熵损失函数 公式: 交叉熵的原理 交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近.假设概率分布p为期望输出,概率分布q为实际输 ...

  5. 论文阅读|Focal loss

    原文标题:Focal Loss for Dense Object Detection 概要 目标检测主要有两种主流框架,一级检测器(one-stage)和二级检测器(two-stage),一级检测器, ...

  6. 处理样本不平衡的LOSS—Focal Loss

    0 前言 Focal Loss是为了处理样本不平衡问题而提出的,经时间验证,在多种任务上,效果还是不错的.在理解Focal Loss前,需要先深刻理一下交叉熵损失,和带权重的交叉熵损失.然后我们从样本 ...

  7. Focal Loss 损失函数简述

    Focal Loss 摘要 Focal Loss目标是解决样本类别不平衡以及样本分类难度不平衡等问题,如目标检测中大量简单的background,很少量较难的foreground样本.Focal Lo ...

  8. 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...

  9. [转] 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    转自知乎上看到的一篇很棒的文章:用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文 ...

随机推荐

  1. SpringBoot_@valid_参数校验

    SpringBoot @valid 参数校验 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不 ...

  2. Python Web Flask源码解读(三)——模板渲染过程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  3. NLP(二十) 利用词向量实现高维词在二维空间的可视化

    准备 Alice in Wonderland数据集可用于单词抽取,结合稠密网络可实现其单词的可视化,这与编码器-解码器架构类似. 代码 from __future__ import print_fun ...

  4. NLP(十二)指代消解

    代词是用来代替重复出现的名词 例句: 1.Ravi is a boy. He often donates money to the poor. 先出现主语,后出现代词,所以流动的方向从左到右,这类句子 ...

  5. BZOJ-2743: [HEOI2012]采花 前缀和 树状数组

    BZOJ-2743 LUOGU:https://www.luogu.org/problemnew/show/P4113 题意: 给一个n长度的序列,m次询问区间,问区间中出现两次及以上的数字的个数.n ...

  6. codeforces E. Trains and Statistic(线段树+dp)

    题目链接:http://codeforces.com/contest/675/problem/E 题意:你可以从第 i 个车站到 [i + 1, a[i]] 之间的车站花一张票.p[i][j]表示从 ...

  7. NOIP 2016 蚯蚓 题解

    一道有趣的题目,首先想到合并果子,然而发现会超时,我们可以发现首先拿出来的切掉后比后拿出来切掉后还是还长,即满足单调递增,故建立三个队列即可. 代码 #include<bits/stdc++.h ...

  8. NOIP 2005 等价表达式 题解

    题意 给一个表达式然后再给n个表达式,判断是否等价 一道大模拟题,将a带为数,并且取模防止溢出 #include<bits/stdc++.h> using namespace std; c ...

  9. NOIP2002[提高组] 均分纸牌 题解

    题面 题目保证有解即纸牌总数能被人数整除(N|T)每个人持有纸牌a[1]...a[m],我们可以先考虑第一个人 1.若a[1]>T/M,则第一个人需要给第二个人c[1]-T/M张纸牌,即把c[2 ...

  10. Kafka入门宝典(详细截图版)

    1.了解 Apache Kafka 1.1.简介 官网:http://kafka.apache.org/ Apache Kafka 是一个开源消息系统,由Scala 写成.是由Apache 软件基金会 ...