数据分布——长尾分布的处理
前言
长尾分布在分类任务中会提到这个名,这是因为长尾分布这个现象问题会导致在训练过程中会出现出错率高的问题,影响了实验结果。
这里要说的是,长尾分布是一种现象,有的地方说是一种理论或定律,我感觉这样说不太确切,因为长尾分布并非是一种普遍现象,不能将所有的数据分布或者现象都强加于长尾分布这个概念上。
这个概念是对于IT行业来说比较常见的,比如电商的销售现象——常见的产业巨头能够在实体产业上独树一帜,但是电商的发展,导致了很多小众或者说不太常见的商品的销售量很可能大于或者等于原来产业巨头的销售产量,这就是在IT产业上的长尾分布的现象。
在机器学习和视觉识别的实际应用过程中,长尾分布在某种程度上可以说是比正态分布更加广泛存在的一种自然分布,现实中主要表现在少量个体做出大量贡献(少量类别的样本数占据大量样本比例),人们经常提到的“二八定律”(Pareto法则)就是长尾分布的形象概括。
对于长尾分布这个现象在图像或者视觉等任务中是经常遇到的。

现在也出现了NLP的领域,这里我想提一下我看到的一个名次——齐夫定律(Zipf's Law).这个是应用在自然语言处理当中的,主要是讲到了:在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比。所以,频率最高的单词出现的频率大约是出现频率第二位的单词的2倍,而出现频率第二位的单词则是出现频率第四位的单词的2倍。这个定律被作为任何与幂定律概率分布有关的事物的参考。
之所以提到这个齐夫定律是因为它和长尾分布一样,都是关于幂定律概率分布的一种分布,在自然语言处理中,也说明了经常出现的词或者字也很容易对模型产生我们不想要的结果。
在Brown语料库中,“the”、“of”、“and”是出现频率最前的三个单词,其出现的频数分别为69971次、36411次、28852次,大约占整个语料库100万个单词中的7%、3.6%、2.9%,其比例约为6:3:2。大约占整个语料库的7%(100万单词中出现69971次)。满足齐夫定律中的描述。仅仅前135个字汇就占了Brown语料库的一半。
至此,可以看出,对数据做一下平衡处理,是机器学习中需要考虑的一个问题了。
处理方法(相关工作)
下面的词汇和处理方法的划分来自于这篇文章:【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】,其中里面说到的方法都是在CV方面上的应用,不过我认为这种现象也是可以迁移到其他的研究方向上的。
先说一下一些相关的词汇:
-
CE——交叉熵;
-
Imbalance factor——定义为数据集中数据量最大的类与数据量最小的类的比值;
-
CAM—— tailored for two-stage training and generates discriminative images by transferring foregrounds while keeping backgrounds unchanged.
-
These fine-tuning methods (Cao et al. 2019) can be divided into two sections:
deferred re-balancing by re-sampling (DRS) and by re-weighting (DRW).DRS和DRW其实是两种训练方法,DRS是第一阶段使用 vanilla training schedule来训练,第二阶段使用re-sample来微调;而DRW在第二阶段使用re-weight来微调。
经典机器学习处理的方法
重采样法(Re-Sampling)
这里又分为两种方法——Over-Sampling和Under-Sampling
- Over-Sampling,在训练的过程中多次采样数据集中数据量占比量较小的数据,使得这些数据在训练时被多次用到,从而缓解长尾数据分布的问题。
- Under-Sampling,在训练中抛弃数据量占比较高的数据,从而达到各个类别数据量的平衡,以缓解长尾数据分布的问题。
【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】一文中总结了一些方法:Class-balanced sampling、Random under-sampling、Progressively-balanced sampling等,本质上是修改了选择样本的概率P。
损失重加权(Re-Weight)
在训练模型的过程中,增加损失中长尾数据的权重,即是根据样本隶属类别“稀疏程度”来对该样本的损失进行加权,包含越多样本的类别通常会被分配更低的权重,从而平衡不同类别样本对损失函数的贡献。但该方法无法处理实际生活中的数据,一旦长尾数据分布很严重,该方法还容易引起优化的问题。
重新分配权重是根据不同类别的不同样本数决定其损失值的惩罚系数大小,比如对于少数样本类,其损失惩罚应该更大,通常的做法是为交叉熵损失加上各个类别的权重系数,该系数通常定义为类别样本数的倒数。
【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】总结了相关的算法,本质上是通过修改了loss来达到平衡的效果。
为什么说上述两种方法有一定的效果呢?
在《BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition》一文中提到这样的常见方法虽然在分类效果上很好,但是在表征能力上就不是很好,原文内容如下:
We firstly discover that these rebalancing methods achieving satisfactory recognition accuracy owe to fifier learning of deep networks. However, at the same time,they will unexpectedly damage the representative ability of the learned deep features to some extent.
这也就是说这样的平衡方法在一定程度上是损失了数据的特征,也即表示特征的能力下降了:
In this paper,we reveal that the mechanism of these strategies is to signifificantly promote classififier learning but will unexpectedly damage the representative ability of the learned deep features to some extent.
具体来说的效果如下图:

从图中可以看出,在平衡之后的数据特征开始分散了。
进一步的实验分析得到了下图的数据:

两个图代表了两个数据集,这里就以左图为例子说一下这两张图说明了什么:
- 首先,作者为了方便证明,将训练的方法分为了两个阶段:
- representation learing,也就是特征提取器的训练过程(FP和BP阶段,不包含全联接层);
- classifer learning,也就是分类器的训练阶段(最后的全联接层);
- 分了三种训练方法——plain training(就是用交叉验证,这是分类常用的方法,PS:我认为这个交叉验证的作用就是充当了对照实验,也就是说不做任何技术处理的前提下来看得到的的训练结果)、re-sampling和re-weight;
- 只看其中一列(固定其中一列,在representation learning一定的前提下),RS的分类效果最好;
- 只看其中一行(同理),交叉验证CE的表示效果最好;
存在的问题
re-balance方法还是存在问题的,在文中提到:
- re-sampling
- 前提:在数据extreme不平衡的前提下;
- over-sampling:存在过过拟合现象;
- under-sampling: 存在欠拟合现象;
- re-weight
- 打乱原始数据的分布情况;
深度学习方法
两阶段微调策略
下面的BBN只是其中的一种模型,所谓的两阶段微调策略(Two-stage fifine-tuning strategies),所谓的两阶段是分为:1)不平衡的训练;2)平衡的微调;两个部分。
BBN
这个方法将训练分为两个阶段。第一阶段像往常一样正常训练用于提取表征,第二个阶段使用较小的学习率以Re-balancing的方式微调网络。
这里我提一个我看到过的今年刚提出的一种Two-stage方法实现处理长尾分布的框架。
在《BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition》一文中就提出了BBN网络用于更好地处理长尾分布。

如上图所示,在文中,作者将整个自己设计的BNN模型设计成为三个模块:
- conventional learning branch
- re-balancing branch
- cumulative learning(根据训练epochs的增加来不断修改参数 α \alpha α,通过这个参数来整合上述两个branch)
当然还有其他的方法很好的在长尾分布上效果很好的分类模型——LDAM和CB-Focal。
Mixup方法
【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】一文中提出了两种Minxup方法,其中一种是已经存在的Mixup方法:
- Input Mixup
- Maninfold Mixup
另一种就是作者提出的“fine-tuning after mixup training“的方法,其实就是分成了两个阶段,第一个阶段是mixup,第二阶段就是微调模型训练(至于是怎么实现的,文中没说明)。
文本分类中的长尾分布问题
上述的解决方法都是针对图像或CV领域来解决的,但是在NLP中也有长尾分布的问题,比如在【Balancing Methods for Multi-label Text Classification with Long-Tailed Class Distribution】一文中提出了在多标签的文本分类问题的结局方法——提出新的Loss函数:

相关文章:
数据分布——长尾分布的处理
前言 长尾分布在分类任务中会提到这个名,这是因为长尾分布这个现象问题会导致在训练过程中会出现出错率高的问题,影响了实验结果。 这里要说的是,长尾分布是一种现象,有的地方说是一种理论或定律,我感觉这样说不太确切࿰…...
集合导题、刷题、考试全套完整流程,专业强大的功能,提高刷题学习效率和企业的培训效率
土著刷题微信小程序v1.15,主要是迭代了考试模块的进阶功能,对考试模块进行了一次升级改造。 由于在v1.15开发期间,收到了违规内容整改的通告,为了遵守相关法律法规,让小程序能够平稳安全地运营下去,我们特此…...
【机器学习】采样方法
文章目录 采样方法11.1 简介11.2 常见采样方法11.2.1 均匀分布采样11.2.2 逆变换采样11.2.3 拒绝采样11.2.4 重要采样11.2.5 Metropolis方法11.2.6 Metropolis-Hasting 算法11.2.7 吉布斯采样 采样方法 11.1 简介 什么是采样 从一个分布中生成一批服从该分布的样本,…...
Seata TCC 模式理论学习、生产级使用示例搭建及注意事项 | Spring Cloud55
一、前言 通过以下系列章节: docker-compose 实现Seata Server高可用部署 | Spring Cloud 51 Seata AT 模式理论学习、事务隔离及部分源码解析 | Spring Cloud 52 Spring Boot集成Seata利用AT模式分布式事务示例 | Spring Cloud 53 Seata XA 模式理论学习、使用…...
一文详解:Vue3中使用Vue Router
目录 安装和配置Vue Router安装Vue Router配置Vue Router Vue Router的基本概念Vue Router 的配置项介绍routes中的配置项介绍 路由跳转使用 router-link组件使用router.push函数 路由传参动态路由嵌套路由命名路由路由守卫全局路由守卫路由独享守卫 路由懒加载使用import()方式…...
C++开发—远程控制
C开发—远程控制 一,准备二,安装版本控制工具1,安装gitforwindows2,安装乌龟git1,安装乌龟git应用2,安装乌龟git对应的语言包 3,设置Visual Studio的git插件4,创建git项目 三&#x…...
【Python基础】Python数据容器(集合)
文章目录 数据容器:set(集合)集合的定义集合的常用操作-修改(1)添加新元素(2)移除元素(3)从集合中随机取出元素(4)清空集合(5)取出 两个集合的差集(6)消除 两个集合的差集(7)两个集合 合并(8)统计集合元素数量len()(9)集合的遍历 集合的特点 …...
高通 Camera HAL3:集成camxoverridesettings.txt到整机版本
camxoverridesettings.txt 是高通提供给开发者临时进行CAMX、CHI-CDK功能调试的一种方式,通过配置各种变量值然后写入到该文件,能控制Log打印、参数配置、数据dump等多种功能 这个文件需要集成在设备目录的vendor/etc/camera/里 因为camxoverridesetti…...
PHP面试题大全
一 、PHP基础部分 1、PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为ApacheMySQLPHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以…...
Linux发送接收邮件
目录 一、实验 1.linux用户发送给linux中的其它用户 2.linux用户发送给外网用户 一、实验 1.linux用户发送给linux中的其它用户 (1)使用命令 yum install -y sendmail 安装sendmail软件 (2)使用yum install -y mailx 安装 mail…...
SpringBoot-【回顾】
第一个SpringBoot程序 自动装配原理 Springboot的自动装配实际上就是为了从Spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给Spring容器来帮我们进行管理 启动器:以starter为标记 EnableAuto…...
Python模拟试卷2023(1)
模拟试卷(1) 一、简答题 (共8题,100分) 1、已知有列表lst[54,36,75,28,50],请完成一下操作: 1、在列表尾部插入元素42 2、在元素28前面插入66 3、删除并输出28 4、将列表按降序排序 5、清空整个列表 lst[54,3…...
常量接口 vs 常量类 vs 枚举区别
把常量定义在接口里与类里都能通过编译,那2者到底有什么区别呢? 那个更合理? 常量接口 public interface ConstInterfaceA {public static final String CONST_A "aa";public static final String CONST_C "cc"; } 存在…...
第二章 模态命题:必然、可能
第二章 模态命题:必然、可能 第一节 模态命题-句式转换-逻辑转换 题-模态命题-句式转换-逻辑转换:①不一定不可能;②不一定可能不未必。 1.唐代韩愈在《师说》中指出:“孔子曰:三人行,则必有我师。是故…...
Selenium 必了解—如何测试REST API
目录 前言: Web UI测试存在的问题: REST API测试: 依赖包 程序示例: 1-获取联系人 2-GET Request: 3-POST Request: 4- 编辑请求 5- 删除请求 前言: Selenium WebDriver 可以用于测试 Web 应用的…...
pytorch安装老版本
比如1.7.1, cuda 10.1 pip install torch1.7.1cu101 -f https://download.pytorch.org/whl/torch_stable.html官网查看有哪些可以装的: https://download.pytorch.org/whl/torch_stable.html...
怎么自学电脑编程
首要之首:不要急于选择一种语言 新手们有一个常见的错误就是犹豫于判断哪种编程语言是做好的、最该先学的。 我们有很多的选择,但你不能说那种语言最好。 我们应该理解:说到底,什么语言并不重要。 重要的是理解数据结构、控制逻辑…...
【华为OD统一考试B卷 | 100分】斗地主之顺子(C++ Java JavaScript Python)
文章目录 题目描述输入描述输出描述用例C++JavajavaScriptpython题目描述 在斗地主扑克牌游戏中, 扑克牌由小到大的顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2,玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。 其中顺子的出牌规则为:由至少5张由小到大连续递增的扑…...
案例39:基于Java办公自动化管理系统开题报告设计
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
基于山景BP10128音频处理器高通滤波器算法设计
+ hezkz17进数字音频答疑 山景BP10128音频处理器是一款高性能的数字信号处理器,专门用于音频信号的处理和增强。它采用先进的数字信号处理技术和算法,能够对音频信号进行实时处理,并且具有高效、稳定、可靠等特点。 该处理器具有以下主要功能: 均衡器:支持低音、中音、…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

