常用损失函数(一):Focal Loss

2023-05-16

1.原理

        Focal Loss最先应用在目标检测任务上,它的提出主要是为了解决正负样本数量不平衡(有些地方叫做类别不平衡)以及难易分样本不均衡的问题。

        在讲解之前,小编先谈谈何为难分样本和易分样本。

难分样本:指的是实际为正样本,但模型预测为正类的置信度很低或者说实际为负样本,但模型    预测为负类的置信度很低。

易分样本:指的是实际为正样本,且模型预测为正类的置信度很高或者说实际为负样本,且模型    预测为负类的置信度很高。

        在进行模型训练过程中,相信大家都会发现一个实际存在的现象:假设正负样本均衡(一般对模型来说易分样本的数量会远远多于难分样本的数量),那么(a)难分样本:错分的样本或者正确分类但置信度很低(0.5附近)的样本,其单个样本的损失很高,但是所有难分样本的损失之和相对于整体损失来说占比却很低;(b)易分样本:正确分类且置信度很高(接近1)的样本,其单个损失很低,但所有易分样本的损失之和相对于整体损失来说占比很高。也就是说易分样本的损失之和将主导整体损失,这样将导致模型训练过程中该背景下的损失函数反向传播时对参数的更新并不会改善模型的预测能力,模型对难分样本的预测能依旧很差。而易分样本本身就能很好的被模型识别,难分样本才是模型最该关注的点。

        Focal Loss就很好地解决了这个问题,它的具体公式如下:

FL(p_{t})=-\alpha _{t}(1-p_{t})^{\gamma }\log (p_{t})

其中p_{t}代表模型预测某类别的概率(即置信度);\alpha _{t}是用来平衡正负样本数量的,样本数量多的赋予更小的\alpha _{t}值,样本数量少的赋予更大的\alpha _{t}值;\gamma是用来调节难分易分样本不均衡问题的,一般取\gamma \geq 1,对易分样本的损失进行一个幂函数的降低。乘上(1-p_{t})^{\gamma }这项可以使模型更加关注于难分样本,比如:假设模型预测某类别的置信度p_{t}=0.968,属于易分样本,当\gamma =2时,(1-0.968)^{2}=0.001,相当于将易分样本损失缩小了1000倍,而另一类预测的置信度p_{t}=0.2,属于难分样本,(1-0.2)^{2}=0.64,相当于只将难分样本的损失缩小了0.64倍,难分样本的损失之和在整体损失的占比中明显提升,说明模型更关注于难分样本,有利于模型预测能力的提升。

2.代码实现

        其实Focal Loss可以看作是由交叉熵损失函数CE(p_{t})=-q_{t}\log p_{t}改进来的,q_{t}是样本类别真实的概率(即标签),是已知的,一般训练是需要对标签进行one-hot编码,q_{t}=1,最终交叉熵损失函数变为CE(p_{t})=-\log p_{t},Pytorch中的F.Cross_entropy()函数对应的数学公式就是这个。

        这里简单描述一下F.Cross_entropy(x,y)函数的计算过程,代码实现时会用到这个函数:

①第一个参数x输入到模型中进行前向传播后进行softmax操作,使模型输出结果在0-1之间,结果记为x_soft;

②对x_soft做对数运算并取相反数,结果记为x_soft_log;

③对y进行one-hot编码,根据上面的交叉熵公式与x_soft_log进行点乘,只有与元素1对应的位置点乘后有非零值,因为乘的是1,所以点乘结果还是x_soft_log,其它位置是与0点乘,点乘结果都为0。

        Focal Loss的代码实现如下:

class FocalLoss(nn.Module):
    def __init__(self, alpha=1, gamma=2, size_average=True, ignore_index=255):
        super(FocalLoss, self).__init__()
        self.alpha = alpha
        self.gamma = gamma
        self.ignore_index = ignore_index
        self.size_average = size_average

    def forward(self, inputs, targets):
        # F.cross_entropy(x,y)工作过程就是(Log_Softmax+NllLoss):①对x做softmax,使其满足归一化要求,结果记为x_soft;②对x_soft做对数运算
        # 并取相反数,记为x_soft_log;③对y进行one-hot编码,编码后与x_soft_log进行点乘,只有元素为1的位置有值而且乘的是1,
        # 所以点乘后结果还是x_soft_log
        # 总之,F.cross_entropy(x,y)对应的数学公式就是CE(pt)=-1*log(pt)
        ce_loss = F.cross_entropy(inputs, targets, reduction='none', ignore_index=self.ignore_index)
        pt = torch.exp(-ce_loss)  # pt是预测该类别的概率,要明白F.cross_entropy工作过程就能够理解
        focal_loss = self.alpha * (1 - pt) ** self.gamma * ce_loss
        if self.size_average:
            return focal_loss.mean()
        else:
            return focal_loss.sum()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用损失函数(一):Focal Loss 的相关文章

随机推荐

  • Openstack部署工具总结

    目前能提供IAAS服务的有 xff1a 诞生较早的Eucalyptus xff0c OpenNebula和CloudStack项目仍占据一定的优势 xff0c 更不必说IaaS的老大AWS xff0c 以及企业级私有云的标杆VMware x
  • Samba服务的配置与管理

    1 Samab的介绍 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件 xff0c 由服务器及客户端程序构成 Samba与NFS不同的地方在于Samba可以实现Linux与Windows主机进行共享访问 SMB xff0
  • strtok 函数解析 及缺陷

    strtok include lt string h gt char strtok char str const char delim char strtok r char str const char delim char saveptr
  • STM32的存储器、电源和时钟体系-第3季第2部分视频课程-朱有鹏-专题视频课程

    STM32的存储器 电源和时钟体系 第3季第2部分视频课程 674人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第2个课程 xff0c 跟着中文版数据手册系统学习了STM32的存储器映射表 电源模块 时钟框体体系等
  • 【Android】解决Kotlin依赖无法下载的问题

    问题 xff1a Unable to resolve dependency for 39 app 64 debug compileClasspath 39 Could not resolve org jetbrains kotlin kot
  • 数学中的一些符号的含义

    在数学中 对于一个有限集合 A 其元素个数记为 card A 例如 A 61 a b c 则card A 61 3 若 f 表示一个函数 domain f 表示 f 的 定义域 range f 表示 f 的 值域
  • 省级、县级行政区shapefile下载

    Step1 从地图选择器输入 名称 xff0c 比如 山东省 济南市 东丽区 xff0c 左下角 geojson 保存到本地 Step2 打开mapshaper网页 xff0c 把下载的geojson文件拖入网页 xff0c 点击 impo
  • 哨兵1号(sentinel 1)数据各参数介绍

    哨兵1号 xff08 sentinel 1 xff09 数据下载及各参数介绍 原文链接 xff1a https blog csdn net yuanqilian article details 111868347 哨兵1号sentinel
  • Chrome(谷歌浏览器)如何截屏整个页面

    第一步 xff1a 在页面空白处右键点击 xff0c 会弹出右键菜单 第二步 xff1a 从弹出的菜单选择 Inspect xff0c 会在右边出现一个代码的显示页面 第三步 xff1a 使用快捷方式ctrl 43 shift 43 p x
  • python安装shapefile

    shapefile没有自己的包 xff0c 应输入 xff1a gt pip install pyshp 从而满足 gt import shapefile
  • ubuntu中terminal如何调整字体大小?

    ubuntu终端字体大小调整方法
  • Linux重启命令

    Linux重启命令 1 reboot xff1b 2 shutdown r now 立刻重启 xff08 root用户使用 xff09 xff1b 3 shutdown r 10 过10分钟自动重启 xff08 root用户使用 xff09
  • 完美解决VMware Tools一直灰色 无法安装问题

    完美解决VMware Tools一直灰色 xff0c 无法安装问题
  • 地图分幅与编号

    转自 xff1a http lijiwei19850620 blog 163 com blog static 97841538201162692340679 地图分幅与编号 为了编图 印刷 保管和使用的方便 xff0c 必须对地图进行分幅和
  • 课程中三款开发板原理图和配置全解析-第3季第3部分视频课程-朱有鹏-专题视频课程...

    课程中三款开发板原理图和配置全解析 第3季第3部分视频课程 729人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第3个课程 xff0c 系统讲解了课程中用到的三款开发板 xff0c 讲解主要围绕开发板主板设备 光盘资
  • 遥感影像的“全色”与“多光谱”

    全色波段 xff08 Panchromatic band xff09 xff0c 因为是单波段 xff0c 在图上显示是灰度图片 全色遥感影象一般空间分辨率高 xff0c 但无法显示地物色彩 实际操作中 xff0c 我们经常将之与多波段影象
  • 正向全局代理(proxy_pool + Proxifier 4.01)

    0x00 准备阶段 Part 1 redis 下载安装好 redis 用于保存 ip 这是 Windows 5 0 14安装版的链接 链接 xff1a https pan baidu com s 1eUTTQ XIeGjWdvXsZ Bpg
  • Linux安装配置 VNC Server

    VNC connect官方下载 xff1a Download VNC Viewer VNC Connect 1 安装图形化界面 1 查看当前的运行级别和可以安装的group systemctl get default yum groupli
  • svn st 的状态说明

    svn st 39 39 没有修改 39 A 39 被添加到本地代码仓库 39 C 39 冲突 39 D 39 被删除 39 I 39 被忽略 39 M 39 被修改 39 R 39 被替换 39 X 39 外部定义创建的版本目录 39 3
  • 常用损失函数(一):Focal Loss

    1 原理 Focal Loss最先应用在目标检测任务上 xff0c 它的提出主要是为了解决正负样本数量不平衡 xff08 有些地方叫做类别不平衡 xff09 以及难易分样本不均衡的问题 在讲解之前 xff0c 小编先谈谈何为难分样本和易分样