什么是损失函数?

       1、什么是损失呢?

在机器学习模型中,对于每一个样本的预测值与真实值的差称为损失。

2、什么是损失函数呢?

显而易见,是一个用来计算损失的函数。它是一个非负实值函数,通常使用L(Y, f(x))来表示。

3、那损失函数有什么用呢?

度量一个模型进行每一次预测的好坏(即预测值与真实值的差距程度)。差距程度越小,则损失越小,该学习模型越好。

4、损失函数如何使用呢?

损失函数主要是用在模型的训练阶段。在每一个批次的训练数据送入模型后,通过前向传播输出预测值,然后损失函数会计算出预测值与真实值的差异值,即损失值。得到损失值后,模型通过反向传播去更新各个参数,来降低真实值与预测值之间的损失,使得模型生成的预测值往真实值靠拢,从而达到学习的目的。在训练完该模型后,此时模型通过反向传播后,已经使得每个参数都为最优。所以使用该模型进行预测得到的结果一定是接近真实结果的。

有哪些损失函数?

1、分类任务损失

0-1 loss、熵与交叉熵loss、softmax loss及其变种、KL散度、Hinge loss、Exponential loss、Logistic loss、Focal Loss等待。

  2、回归任务损失

                L1 loss、L2 loss、perceptual loss、生成对抗网络损失、GAN的基本损失、-log D trick、Wasserstein GAN、LS-GAN、Loss-sensitive-GAN等等。

Focal Loss损失函数介绍

Focal Loss的引入主要是为了解决one-stage目标检测中正负样本数量极不平衡问题

那么什么是正负样本不平衡(Class Imbalance)呢?

在一张图像中能够匹配到目标的候选框(正样本)个数一般只有十几个或几十个,而没有匹配到的候选框(负样本)则有10000~100000个。这么多的负样本不仅对训练网络起不到什么作用,反而会淹没掉少量但有助于训练的样本。

上面说了是为了解决一阶段目标检测模型,那为什么二阶段不用解决呢?

因为在二阶段中分了两步,第一步时同样也会生成许多的负样本以及很少的正样本,但到第二步时,它会在第一步的基础上选取特定数量的正负样本去检测,所以正负样本并不会特别不平衡

为了解决该问题,许多网络也进行过许多处理方法,比如:hard negative mining(难例挖掘),即并不会使用所有的负样本去训练网络,而是去选取损失比较大的来训练。

上表是一张采用hard negative mining和Focal Loss方法的比较,和显然使用Focal Loss的效果非常好

Focal Loss理论知识

Focal loss是基于二分类交叉熵CE的。它是一个动态缩放的交叉熵损失,通过一个动态缩放因子,可以动态降低训练过程中易区分样本的权重,从而将重心快速聚焦在那些难区分的样本(有可能是正样本,也有可能是负样本,但都是对训练网络有帮助的样本)。

接下来我将从以下顺序详细说明:Cross Entropy Loss (CE) ->  Balanced Cross Entropy (BCE) -> Focal Loss (FL)

1、Cross Entropy Loss:基于二分类的交叉熵损失,它的形式如下:

上式中,y的取值为1和-1,分别代表前景和背景。p的取值范围为0~1,是模型预测属于前景的概率。接下来定义一个关于P的函数:

结合上式,可得到简化公式:

注意:公式中的log函数就是ln函数:

 2、Balanced Cross Entropy:常见的解决类不平衡方法。引入了一个权重因子α ∈ [ 0 , 1 ] ,当为正样本时,权重因子就是α,当为负样本时,权重因子为1-α。所以,损失函数也可以改写为:

  这里给出一张图:

可以看出当权重因子为0.75时,效果最好。

3、Focal Loss:虽然BCE解决了正负样本不平衡问题,但并没有区分简单还是难分样本。当易区分负样本超级多时,整个训练过程将会围绕着易区分负样本进行,进而淹没正样本,造成大损失。所以这里引入了一个调制因子 ,用来聚焦难分样本,公式如下:

γ为一个参数,范围在 [0,5], 当 γ为0时,就变为了最开始的CE损失函数。

可以减低易分样本的损失贡献,从而增加难分样本的损失比例,解释如下:当Pt趋向于1,即说明该样本是易区分样本,此时调制因子是趋向于0,说明对损失的贡献较小,即减低了易区分样本的损失比例。当pt很小,也就是假如某个样本被分到正样本,但是该样本为前景的概率特别小,即被错分到正样本了,此时 调制因子是趋向于1,对loss也没有太大的影响。

对于 γ的不同取值,得到的loss效果如图所示

可以看出,当pt越大,即易区分的样本分配的非常好,其所对于的loss就越小。

通过以上针对正负样本以及难易样本平衡,可以得到应该最终的Focal loss形式

即通过αt​ 可以抑制正负样本的数量失衡,通过 γ 可以控制简单/难区分样本数量失衡。

Focal Loss理论知识总结:

      ①调制因子是用来减低易分样本的损失贡献 ,无论是前景类还是背景类,pt越大,就说明该样本越容易被区分,调制因子也就越小。

②αt用于调节正负样本损失之间的比例,前景类别使用 αt 时,对应的背景类别使用 1 − αt 。

③γ 和 αt 都有相应的取值范围,他们的取值相互间也是有影响的,在实际使用过程中应组合使用。

Focal Loss损失函数(超级详细的解读)相关推荐

  1. 剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选

    作者 | 图像所浩南哥 来源 | CSDN博客 论文名称:< Focal Loss for Dense Object Detection > 论文下载:https://arxiv.org/ ...

  2. Focal loss 损失函数详解

    Focal loss 目前目标检测的算法大致分为两类,One Stage .Two Stage. One Stage:主要指类似YOLO.SGD等这样不需要region proposal,直接回归的检 ...

  3. 图像分割之常用损失函数-Focal Loss

    哈喽大家好 ! 我是唐宋宋宋,很荣幸与您相见!! focal loss的整体理解: 目前目标检测的算法大致分为两类,One Stage .Two Stage. One Stage:主要指类似YOLO. ...

  4. Focal Loss 论文理解及公式推导

    原文:Focal Loss 论文理解及公式推导 - AIUAI 题目: Focal Loss for Dense Object Detection - ICCV2017 作者: Tsung-Yi, L ...

  5. 损失函数解读 之 Focal Loss

    前言 Focal loss 是一个在目标检测领域常用的损失函数,它是何凯明大佬在RetinaNet网络中提出的,解决了目标检测中 正负样本极不平衡 和 难分类样本学习 的问题. 论文名称:Focal ...

  6. (HEM/OHEM)hard negative(example)mining难例挖掘 与focal loss、GHM损失函数

    目录 分类任务中的样本不均衡及hard negative mining的必要性 hard negative example HEM(hard example/negative mining) 与 OH ...

  7. 目标检测分类损失函数——Cross entropy、Focal loss

    一.Cross Entropy Loss 交叉熵是用来判定实际的输出与期望的输出的接近程度,刻画的是实际输出与期望输出的距离,也就是交叉熵的值越小,两个概率分布就越接近. 1. CE Loss的定义 ...

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

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

  9. 损失函数focal loss深度理解与简单实现

    本文主要从二值交叉熵损失函数出发,通过代码实现的方式,去更好地理解Focal Loss对于数据不平衡问题.难易样本问题损失是如何权衡的. 1.  首先我们给出比较官方一些的代码,具体就是mmdet中的 ...

最新文章

  1. 注册MSComm方法
  2. 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14
  3. java能过吗_java – 你能通过例子解释AspectJ的cFlow(P u00...
  4. Django学习手册 - ORM数据类型
  5. 每日一笑 | 程序员和产品经理打架了,怎么办?
  6. c ++查找字符串_C ++类和对象| 查找输出程序| 套装4
  7. C++学习之路 | PTA乙级—— 1050 螺旋矩阵 (25 分)(精简)
  8. [Godot][Blender] 通过 Blender 将 fbx 批量转为 gltf 用于 godot
  9. 谈谈复杂多分类问题上的一些个人理解
  10. python学习6 web开发
  11. GPS经纬度转84坐标系
  12. 怎么安装python的数据库5.7.28_Windows下mysql-5.7.28下载、安装、配置教程
  13. unity给头发添加物理_U3D实时渲染教程之角色头发各向异性表达(上)
  14. PCB原理图制作一些简单个人总结
  15. 基于R统计分析——样本与分布
  16. java StringBuilder用法
  17. 新手入门3D游戏建模一定要搞懂的流程!
  18. Cent OS安装中文字体
  19. matlab绘图坐标轴字体_MATLAB绘图(轴文本粗体,曲线粗体),Matlab,坐标轴,文字,加粗...
  20. SAPABAP金色传说:KE30报表增加特征筛选字段的示例方法

热门文章

  1. 服装店管理软件有哪些功能?
  2. 赶紧收藏转发,次世代角色制作质量规范,快看看你的作品是否达标了?
  3. c语言int8u的作用,UCOS-Ⅱ下的C语言文件功能函数
  4. [转]各种主板不用NLITE、DPS等最简单的集成SATA驱动的办法适用SP1/SP2/SP3
  5. 不平衡数据集处理方法
  6. python 读取文件转txt crnn
  7. java制表位_java制表位如何应用?大神进来。
  8. 常用网络测试命令——ipconfig命令
  9. pip install pyahocorasick(ahocorasick 改名成 pyahocorasick 了)
  10. WebKitX ActiveX 最新版