长尾分类(Long-tailed Classification)方法汇总

长尾分布:训练集里少数头部类别样本极多,大量尾部类别样本很少,模型容易偏向头部类,尾部召回差。下面按大类整理主流方法。

从左到右样本数递减;左边头部类别样本充足,右边尾部类别样本稀少。模型直接训练时,会优先拟合头部样本,尾部类别学到的特征聚类中心弱、决策边界容易被头部 "挤压"。

一、数据层面(Data-level)

1. 重采样 Re-sampling

  • 过采样 Oversampling:重复抽取尾部类样本,增加尾部数据量;缺点:尾部容易过拟合。
  • 欠采样 Undersampling:减少头部类样本数量,平衡类别;缺点:丢失头部信息。
  • 自适应重采样(Class-balanced sampling):按类别有效样本数采样,最常用,很多长尾 baseline 标配。

2. 数据增强 Data Augmentation

  • 基础增强:随机裁剪、翻转、色彩抖动
  • 针对长尾的强增强:Mixup、CutMix、AugMix、SMOTE(传统机器学习)
  • 尾部专属增强:Tail augmentation,专门对少样本类别做更多增强;
  • 生成式增强:GAN、Diffusion 生成尾部类样本,弥补数据稀缺,代价高。

二、损失函数层面(Loss-level,最常用)

1. 类别权重加权

  • Class-balanced Loss(CB Loss):引入有效样本数计算每类权重,样本越少权重越高。
  • Balanced Softmax :修正 softmax,把类别样本量放进 logit,解决长尾下分类器偏向头部,现在非常热门。
  • Focal Loss:降低简单头部样本权重,聚焦难例(尾部 + 困难样本);原始 Focal 不直接针对长尾,常和 CB 结合。

Class-Balanced Loss Based on Effective Number of Samples(CVPR2019,CB Loss)

arXiv:https://arxiv.org/pdf/1901.05555.pdf

Balanced Softmax for Long-Tailed Visual Recognition(NeurIPS2021,Balanced Softmax)

arXiv:https://arxiv.org/pdf/2007.10740.pdf

Focal Loss for Dense Object Detection(ICCV2017,Focal Loss,长尾常用 baseline)

arXiv:https://arxiv.org/pdf/1708.02002.pdf

2. Logit 调整(Logit Adjustment)

核心:在分类得分 logit 上直接加类别先验偏移,抵消数据分布偏置

  • Logit Adjustment(LA):\(z_i' = z_i + \tau \log n_i\),\(n_i\)为类别样本数;简单高效,消融实验高频使用。
  • Tau-Normalized:归一化分类权重,减少头部类别权重范数偏大问题。

Long-tail Learning via Logit Adjustment(ICLR2021,LA Logit 调整)

arXiv:https://arxiv.org/pdf/2007.07314v2

3. 其他改进损失

  • LDAM Loss:在 logit 调整基础上,加上边际 margin,拉大尾部类别间隔,经典长尾 baseline。
  • RRT Loss、DRO(Distributionally Robust Optimization):鲁棒优化,约束最差类别性能。

三、特征 / 分类器层面(Representation & Classifier)

1. 两阶段训练(Two-stage)

长尾领域经典范式:

  1. Stage1:普通训练,用原始长尾数据学习通用特征(冻结主干)
  2. Stage2:重平衡微调,只微调分类头,使用 balanced sampler /balanced softmax / LA

代表论文:Balanced Softmax、Logit Adjustment,大量实验证明两阶段效果优于单阶段。

2. 解耦学习 Decoupled Learning

把特征提取器(backbone) 和分类器(classifier) 分开优化:

  • Stage1:特征学习阶段 :用原始长尾数据 + instance-balanced 采样(按样本实例采样)+ 普通交叉熵,训练主干网络,不做重平衡。目标:学习通用视觉特征;过早重平衡会破坏全局特征提取能力。
  • Stage2:分类器重校准阶段 :冻结 Backbone 主干,只重新训练分类头,使用 class-balanced 采样(按类别采样,每个类别被采样概率均等),即 cRT(classifier re-training)。

论文核心结论:特征学习和分类器学习目标不一样,不能一起联合重平衡。普通联合训练会让分类器权重范数随类别样本数变大(头部分类器权重 L2 范数更大),产生固有偏置。
(a) 普通 CE 联合训练 (b) 解耦学习

  • (a) 普通 CE 联合训练:紫色三角 = 头部,绿色圆 = 尾部;尾部特征少,决策边界被头部挤压,尾部容易被错分。
  • (b) 解耦学习:主干学到好的特征,固定特征后单独调整分类器,重新划分决策边界,保护尾部类别。

论文:Kang B, et al. Decoupling Representation and Classifier for Long-Tailed Recognition, ICLR, 2020

arXiv:https://arxiv.org/pdf/1910.09217v2

这篇论文奠定了两阶段解耦的主流框架,几乎所有长尾 baseline 都基于这个思路。

3. 分类器归一化

  • Normed-Classifier:对分类权重做 L2 归一化,消除头部类别权重 norm 更大的偏差。

四、迁移学习 / 预训练 + 少样本范式

适合尾部样本极少(极端长尾)

  1. 大模型预训练(ImageNet 预训练 / CLIP 等对比学习预训练),主干学到通用特征,尾部只微调分类头
  2. 元学习(Meta-learning):MAML 等,用少量尾部样本快速适配
  3. 对比学习:MoCo、SimCLR 先自监督预训练,不需要标签,对长尾友好,提升特征质量。

五、专家 / 分支模型(Mixture of Experts,MoE 类)

  • Dynamic MoE / Multi-expert:多个专家分支,不同专家分别负责头部、中部、尾部类别。 例:Long-tailed Mixture of Experts,将类别分组,不同专家学习不同分组,避免头部压制尾部。
  • 分支划分:Head expert / Tail expert,最后融合预测。
  • 缺点:参数量大、训练成本高。

RIDE: Long-tailed Recognition by Routing Diverse Distribution-Aware Experts(ICLR2021,多专家 MoE)

arXiv:https://arxiv.org/pdf/2010.01809.pdf

六、知识蒸馏 Knowledge Distillation

  • 用在均衡数据集训练的教师模型,蒸馏知识给长尾学生模型;
  • 或者用强头部样本学到的特征,蒸馏辅助尾部类别学习;
  • 代表:Balanced KD,跨类别蒸馏。

七、其他小众方向

  • 因果推断:消除 "样本数量带来的伪相关",去混杂(Causal Inference for Long-tail)
  • 标签感知正则化、迁移原型学习:为尾部类别构造原型特征
  • 半监督长尾:利用无标签数据补充尾部类别(Semi-supervised long-tailed)

常用 Baseline 推荐(做实验优先试)

  1. 基础:Class-balanced Sampling + Focal Loss
  2. 性价比首选:两阶段 + Logit Adjustment
  3. SOTA 常用:两阶段 + Balanced Softmax
  4. 强基线:LDAM-DRW(LDAM loss + 动态重权重 DRW)

论文常用对比可视化

普通 CE 训练各类精度 长尾方法各类精度

  • 左图:普通 CE 训练,类别按样本数从多到少排序;头部类别精度很高,尾部精度断崖下跌。
  • 右图:长尾方法(如 LA/BalancedSoftmax),头部精度轻微下降,但尾部类别精度显著提升,各类别精度更加均衡。

综述论文(Deep Long-Tailed Learning: A Survey,TPAMI2023,自动化学报中文综述配套参考)

arXiv:https://arxiv.org/pdf/2110.04596.pdf

相关推荐
汤姆宝库44 分钟前
世界模型深拆:视频生成、潜在模拟与物理直觉
人工智能
weixin_468466854 小时前
从“看懂”到“做到”:视觉-语言-动作模型如何让机器人真正执行指令
人工智能·ai·机器人·大语言模型·前沿科技
朋友圈自动点赞工具4 小时前
科学AI插件化:从蛋白质结构到古籍修复
人工智能
龙粤GEO5 小时前
实体Entity在GEO中代表什么含义
人工智能
听风吹等浪起6 小时前
第26章:ViT+InceptionDW+FocalLoss改进|CT骨折影像二分类完整Pytorch实现(含PyQt5推理GUI)
pytorch·qt·分类
剑雨巍巍6 小时前
AI Agent面试之基础概念
人工智能
微帧Visionular6 小时前
AI视频单帧清晰,播放时却闪烁,原因是什么?
人工智能·深度学习·音视频
武子康6 小时前
MultiNet6 空闲崩溃:`EXCVADDR=0x8` 后又出现 `CORRUPT HEAP`
人工智能·后端·agent
云智慧AIOps社区6 小时前
智能巡检机器人应用场景解析:机房巡检、园区安防、管廊巡视与展厅导览
人工智能·机器人·具身智能·智能巡检机器人·企业级智能巡检机器人·机房巡检机器人·导览机器人
EnCi Zheng6 小时前
Agent 如何进行工具调用:从一次 Function Calling 到生产级工具编排的完整链路
大数据·人工智能·agent·ai编程·工具调用