在深度学习中,是否应该打破正负样本1:1的迷信思想?

  • Q:是否应该打破正负样本 1:1 的迷信思想?
    A:是的,类别不平衡的比例只是表象,并非本质。

  • Q:当训练集和测试集分布匹配,但正负样本比例仍然悬殊,是否有必要再引入处理不平衡样本的策略?
    A:通常需要,除非你只关心 overall accuracy,但这意味着你几乎不关心模型分类少数类的能力。

1.是否应该打破正负样本1:1的迷信思想?

长话短说,正负样本并不需要是 1:1,因为类别不平衡的比例一直只是表象,问题的本质从来都是如何帮助模型对每个类(尤其是少数类)都学习到合理的表示。 而后者和正负样本比例之间并没有直接的关系。

**理论上如果任务足够简单(如完全线性可分,且满足 train/test i.i.d),那么无论正负样本比例多悬殊,模型都能够对测试数据进行完美分类。**当然这只对一些直接使用全量数据学习的模型成立,比如决策树、SVM 等。在实际中训练 NN 需要进行 batch-wise 的随机梯度下降训练,连续多个 batch 都只有来自负类的数据会让模型很快收敛到一个 local optimal solution,将所有数据全部预测为负类。

因此出现了其他答案所提到的一些经验结果(如 1:10 等比例),这些比例应该是在特定场景下能够避免模型训练过程 collapse 的比例。

具体在特定场景下,采用什么正负比例还是需要根据实际的 task、model,和 metric 决定。我不认为这个问题存在一个可以解决一切的 magic number。

为什么正负样本比例不一定重要:一个 toy example

见下图,用一个 toy example 就可以从直觉上解释为什么正负样本的比例并不是唯一决定任务难度的因素。

▲ 从左到右:类别比例(imbalance ratio/IR)逐渐增长。第一行:一个线性可分的简单任务。第二行:一个相对困难的复杂任务。

如果任务很简单(如上图第一行的数据分布,线性可分) ,那么即便有很悬殊的正负样本数量比例(如最右侧,正负样本 1:100),也不影响模型可以直接在原始数据上学习得到一个完美的分类边界,并实现 0 错误率:见下图第一行,即使 IR=100 模型也可以实现 0 分类错误(分类错误的 sample 由红色表示)。

而如果任务本身就很困难(如上图第二行,不同类别的 underlying distribution 有较大 overlap 且在 feature space 中有复杂的 pattern),那么即便正负样本比例差距不大,同样的模型也很难学到合理的边界(见下图第二行)。

▲ 第一列:任务示例。第二/三列:KNN/AdaBoost 分类器在每个任务上的结果。红色的点被误分类。

2.当训练集和测试集分布匹配,但正负样本比例仍然悬殊,是否有必要再引入处理不平衡样本的策略?

A:通常需要,除非你只关心 overall accuracy,但这意味着你几乎不关心模型分类少数类的能力。

如上所述,如果两类样本数量悬殊且不做任何处理,模型会连续很多 batch 都只遇到来自负类的样本,这容易使其收敛到 trivial solution。将所有样本预测为负类的 trivial solution 会有很高的 overall accuracy(例如正负比 1:10000,那其 acc=99.99%)。

但通常我们都更加关心少数类样本(positive cases,例如医疗诊断中的病人、欺诈/攻击检测中的恶意用户等)并使用 balanced accuracy,macro-f1 等 metric。优化这些更加合理的 metric 就需要引入处理不平衡样本的策略

3.重采样之余,还有哪些方式处理类别不平衡?

重新采样改变正负样本比例只是其中一种从数据出发的方式。 我开发的 imbens package 实现了为类别不平衡设计的十几种重采样技术 与 ensemble 学习方法,具有与 sklearn-style 的易用 API 设计和详细的文档及示例,并已在 github 收获近 300 星,每月下载逾 2000 次

https://github.com/ZhiningLiu1998/imbalanced-ensemble

https://zhuanlan.zhihu.com/p/376572330

▲ 一些 IMBENS 官方文档中提供的使用示例

在重采样之余,处理深度学习的不平衡有很多从其他方面入手的经典例子:

  • **类别重加权:**Class-Balanced Loss Based on Effective Number of Samples(CVPR 2019)

  • **难例挖掘:**Focal loss for dense object detection(ICCV 2017)

  • **margin-based loss:**Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss(NIPS 2019)

  • meta-learning 自动学习加权/采样策略:

    • MESA: Boost Ensemble Imbalanced Learning with MEta-SAmpler(NeurIPS 2020)

    • Meta-weight-net: Learning an explicit mapping for sample weighting(NIPS 2019)

  • **设计特殊模型架构:**BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition(CVPR 2020)

  • **改变训练过程/策略:**Decoupling Representation and Classifier for Long-tailed Recognition(ICLR 2020)

  • **后验概率校正:**Posterior Re-calibration for Imbalanced Datasets(NeurIPS 2020)

更多相关的技术和论文,请见我们的 awesome-imbalanced-learning 项目,已在 github 上收获逾 1.3k 星:

https://github.com/ZhiningLiu1998/awesome-imbalanced-learning

https://zhuanlan.zhihu.com/p/111460698

相关推荐
一个处女座的程序猿1 分钟前
LLMs之Pretrained:《Training Language Models via Neural Cellular Automata》翻译与解读
人工智能·深度学习·llms·pretrained
是烨笙啊1 分钟前
五分钟上线:基于DeepSeek-OCR的多功能web应用
人工智能·aigc·ocr
rainy雨2 分钟前
六西格玛改进系统的全流程功能:传统企业转型中如何用六西格玛解决成本失控与交付延期的双重难题
大数据·人工智能·精益工程
人工干智能6 分钟前
科普:OpenClaw、大模型、通道及云端养虾
网络·人工智能·llm
2501_926978336 分钟前
“AI构建APP”--到--“AI的动力性底层存在”--到--“AGI合法性验证”--AI治理的核心痛点解决方案
人工智能·经验分享·ai写作·agi
猿小猴子6 分钟前
主流 AI IDE 之一的 JoyCode 介绍
ide·人工智能
格林威7 分钟前
工业相机图像高速存储(C#版):直接IO(Direct I/O)方法,附Basler相机实战代码!
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
LitchiCheng8 分钟前
Mujoco 仿真相机下 SolvePnp 获得 Apriltag 位姿
人工智能·python
草莓熊Lotso10 分钟前
MySQL 表约束核心指南:从基础约束到外键关联(含实战案例)
android·运维·服务器·数据库·c++·人工智能·mysql
烙印60112 分钟前
不只是调包:Transformer编码器的原理与实现(一)
人工智能·深度学习·transformer