作者 | Skura编辑 | Camel

本文是对 CVPR 2019 论文「Class-Balanced Loss Based on Effective Number of Samples」的一篇点评。

这篇论文针对最常用的损耗(softmax 交叉熵、focal loss 等)提出了一种按类重新加权的方案,以快速提高精度,特别是在处理类高度不平衡的数据时尤其有用。

本文的实现方法(PyTorch)的 github 地址为:

https://github.com/vandit15/Class-balanced-loss-pytorch

有效样本数

在处理长尾数据集(一个数据集的大多数样本属于少数类,而其它许多类的数据很少)时,决定如何权衡不同类的损失是很棘手的。通常,权重设置为类支持的逆或类支持的平方根的逆。

传统重加权与这里提到的重加权

然而,如上图所示,这种现象是因为随着样本数的增加,新数据点带来的额外好处减少了。在训练神经网络时使用重数据增强(如重缩放、随机裁剪、翻转等)时,新添加的样本很可能是现有样本的近似副本。用有效样本数重新加权得到了较好的结果。

有效样本数可以想象为 n 个样本覆盖的实际体积,其中总体积 N 由总样本数表示。

有效样本数

我们写出其公式:

有效样本数

这里,我们假设一个新的样本将只以两种方式与先前采样的数据交互:完全覆盖或完全没有交集(如上图所示)。在这种假设下,用归纳法可以很容易地证明上述表达式(请参阅本文的证明)。

我们也可以像下面这样写:

每个样本的贡献

这意味着第 j 个样本对有效样本数贡献为 β^(j-1)。

上述方程的另一个含义是,如果 β=0,则 En=1。同时,En=n 则 β=1。后者可以很容易地用 L'Hopital's 法则证明。这意味着当 N 很大时,有效样本数与样本数相同。在这种情况下,唯一原型数 N 很大,每个样本都是唯一的。然而,如果 N=1,这意味着所有数据都可以用一个原型表示。

类平衡损失

如果没有额外的信息,我们不能为每个类设置单独的 β 值,因此,使用整个数据,我们会将其设置为特定值(通常设置为0.9、0.99、0.999、0.9999 之一的数值)。

因此,类平衡损失可以写成:

CB 损失

这里,L(p,y) 可以是任何损失函数。

类平衡 focal loss

类平衡 focal loss

原始版本的 focal loss 有一个 alpha 平衡变量。相反,我们将使用每个类的有效样本数对其重新加权。

类似地,这种重新加权项也可以应用于其他著名的损失(sigmoid 交叉熵、softmax 交叉熵等)。

应用

在开始应用之前,在使用基于 sigmoid 的损耗进行训练时要注意一点:用 b=-log(c-1)初始化最后一层的偏差,其中类的数量是 c,而不是 0。这是因为设置 b=0 在训练开始时会导致巨大的损失——每个类的输出概率接近 0.5。因此,我们可以假设类 prior 是 1/c,并相应地设置值 b。

类的权重计算

计算标准化权重

上面的代码行是一个简单的实现,获取权重并将其标准化。

获取 one-hot 标签的 PyTorch 张量

在这里,我们得到权重的 one hot 值,这样它们就可以分别与每个类的损失值相乘。

实验

类平衡提供了显著的优势,特别是当数据集高度不平衡时(不平衡=200100)。

结论

利用有效样本数的概念,可以解决数据重合的问题。由于我们没有对数据集本身做任何假设,因此重新加权项通常适用于多个数据集和多个损失函数。因此,类不平衡的问题可以用一个更合适的结构来解决,这一点很重要,因为现实世界中的大多数数据集都存在大量的数据不平衡。

参考

[1] Class-Balanced Loss Based on Effective Number of Samples: https://arxiv.org/abs/1901.05555

via:https://towardsdatascience.com/handling-class-imbalanced-data-using-a-loss-specifically-made-for-it-6e58fd65ffab

样本不平衡 pytorch_CVPR2019 | 面对高度不均衡数据如何提高精度?这篇文章有妙招...相关推荐

  1. 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法

    出处"来自微信公众号:我爱计算机视觉" 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法 这篇论文解决的问题与现实中的人脸识别应用场景密切相关,其假设已经有了少量已经标注的 ...

  2. 2021年最值得期待的数据智能赛事之一,有何解题妙招?

    在 GIS(Geographic Information System)领域,由国际计算机学会 ACM 空间信息专业委员会主办的 ACM SIGSPATIAL,被认为是 GIS 科学与计算机科学结合最 ...

  3. 天下数据教你提升网站访问速度的妙招

    许多用户在建站初期出于对成本的考虑,都会选择国外虚拟主机来搭建网站,但是,一旦网页内容增多,访问量变大就会出现网站打开速度缓慢的问题.如果是搭建独立服务器.购买独立带宽带宽.CDN这类硬指标我们没有经 ...

  4. 大数据技术之Canal入门篇

    大数据技术之Canal入门篇 文章目录 大数据技术之Canal入门篇 写在前面 第 1 章 Canal 入门 1.1 什么是 Canal 1.2 MySQL 的Binlog 1.2.1 什么是 Bin ...

  5. 基于R的Bilibili视频数据建模及分析——预处理篇

    基于R的Bilibili视频数据建模及分析--预处理篇 文章目录 基于R的Bilibili视频数据建模及分析--预处理篇 0.写在前面 1.项目介绍 1.1 项目背景 1.2 数据来源 1.3 数据集 ...

  6. Pytorch CIFAR10图像分类 数据加载与可视化篇

    Pytorch CIFAR10图像分类 数据加载与可视化篇 文章目录 Pytorch CIFAR10图像分类 数据加载与可视化篇 1.数据读取 2. 查看数据(格式,大小,形状) 3. 查看图片 np ...

  7. 样本不平衡不均衡数据处理

    20220302 对连续性的不平衡也可以参照分类型数据的不平衡处理方法?划分为多个集合求平均值? 20220125 # 数据划分negtive_rows = negtive_data.shape[0] ...

  8. 8大策略让你对抗机器学习数据集里的不均衡数据

    本文转自:http://www.36dsj.com/archives/35137 http://blog.csdn.net/heyongluoyao8/article/details/49408131 ...

  9. 堪比Focal Loss!解决目标检测中样本不平衡的无采样方法

    训练目标检测模型的一个难点是样本不均衡,特别是正负样本比例严重失衡.目前解决这类问题主要是两种方案(见综述Imbalance Problems in Object Detection: A Revie ...

  10. 【机器学习】机器学习中样本不平衡,怎么办?

    在银行要判断一个"新客户是否会违约",通常不违约的人VS违约的人会是99:1的比例,真正违约的人 其实是非常少的.这种分类状况下,即便模型什么也不做,全把所有人都当成不会违约的人, ...

最新文章

  1. git 修改仓库的描述_git简介、基本命令和仓库操作
  2. PostgreSQL在何处处理 sql查询之十二
  3. daterangepicker 日期范围插件自定义 可选 年份
  4. php 判断3个数谁最小,Python编程学习之如何判断3个数的大小
  5. ubuntu中make头文件找不到_和平精英:游戏中找不到人怎么办?这些技巧帮你练出“火眼金睛”...
  6. 大数据(big data)_如何使用Big Query&Data Studio处理和可视化Google Cloud上的财务数据...
  7. 加入初创企业需要想清楚的几个问题
  8. oracle的等保,3.Oracle 检查(部分)
  9. 星际通讯+基于区块链的价值共享互联网即时通讯应用平台
  10. 牛客网--华为机试在线训练10:字符个数统计
  11. cudnn 7.5 linux x64,Ubuntu 18.04 N卡驱动安装+CUDA10.0+cuDNN7.5+Anaconda+Tensorflow-GPU
  12. Unicode 字符编码
  13. 工业数据采集网关的特点及应用场景
  14. 面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
  15. STM32普通IO模拟SPI和W25Q32通信调试
  16. html,css,js,简单的网页留言板
  17. Luogu P3387 【模板】缩点
  18. fragment重叠问题
  19. c语言累乘法,C语言基本算法
  20. 2021年度隐私计算十大人物评选出炉

热门文章

  1. 【图像处理】基于matlab颜色恒常性算法水下图像处理【含Matlab源码 474期】
  2. 【缺陷识别】基于matlab GUI SVM金属表面缺陷分类与测量【含Matlab源码 682期】
  3. 【图像分割】基于matlab粒子群优化T熵图像分割【含Matlab源码 286期】
  4. 【数字信号】基于matlab GUI数字电子琴【含Matlab源码 273期】
  5. c语言中逻辑运算符中感叹号,某棋牌 -官网
  6. redis 验证订单_php+redis消息队列实现抢购功能
  7. Linux的dev目录被删除,详解Linux系统下的/dev目录
  8. 例3.6 二叉搜索树 - 九度教程第36题(二叉排序树)
  9. access insert语句怎么写_ySQL中特别实用的几种SQL语句送给大家
  10. c++ map 修改value_深度解密Go语言之map