长尾分布系列论文解析(一)Decoupling Representation and Classifier for Long-Tailed Recognition

本文探讨了长尾分布问题及其在分类任务中的影响。针对数据集类别分布不均等问题,文章介绍了多种采样策略及特征提取与分类器解耦合的训练方法,并通过实验证明了解耦训练的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

 看了挺多长尾分布的论文,从中获益匪浅,长尾分布的问题并不仅仅只局限于早期的分类问题之中,而是广泛存在于深度学习的多项任务之中。接下来一系列的文章将会去介绍近年来几篇典型的研究长尾分布的论文,这些论文也来自于不同的领域,足见长尾分布的普遍性。

首先给长尾分布下一个不那么严谨的定义,长尾分布指的是数据集中的多数样本只覆盖了一小部分的类别, 而其他类别的样本只占据了总体的一小部分,表现出现了样本数量在类别上的不均衡。而更进一步的,长尾分布的的概念也可以扩充到回归问题上,比如在年龄预测问题上,一般我们都是将其作为回归问题来考量,而年龄分布也具有着长尾分布的特性,年龄处于中值的青壮年占人口的大部分,而年龄偏小的老幼只占小部分。
在这里插入图片描述

长尾分布带来的问题也十分的直观,网络训练过程中会更加倾向于向着多数样本的方向适应,而在少数样本上则会有些水土不服。

本篇所涉及到的论文为:

分类问题中的长尾分布

 分类问题中的长尾分布问题也是被研究人员关注最多的问题,目前已经有了许多的应对方法,大体上可以划分为以下三个方向:

  1. 数据分布上的调整:既然长尾分布的问题源头在与数据中的类别分布不平衡,那么最简单的解决办法就是对数据进行重采样使其分布平衡。而依据重采样方法的不同,又可以继续划分为过采样欠采样,前者通过对少数样本进行增广(如简单的复制)实现,后者通过减少多数样本的数目(如直接删除)实现。此外也有着也有类别均等采样的策略。(这一策略就是忽略原始分布,每一类样本被采样到的概率相同)
  2. 损失函数的调整:数据上的调整终究不可能无中生有,另一条可行的道路就是使得网络在训练时不要忽略少数样本。因此研究者选择对损失函数进行调整,为不同样本训练时的损失赋予不等的权重以对抗分布的不均等。
  3. 知识迁移:长尾分布导致网络所学到的知识主要来自于多数样本而忽视了少数样本,那么我们完全可以将抽象为迁移学习问题,即如何使得大数据集上训练模型在另一小数据集上保持特征提取能力。

而在Decoupling Representation and Classifier for Long-Tailed Recognition一文中,作者主要是对第一个方向的解法进行了思考,同时提出了一种新的解决策略–将特征提取器和分类器的训练过程解耦,主要结论如下:

  1. 常见的sampling策略并没有那么有效,在解耦训练的情况下,作者的多项采样策略方案对比中instance balance 采样也就是随机采样获得了最好的分类准确率。而其他的类别均等采样、平方根采样等复杂策略反而使得性能下降。
  2. 长尾分布问题中特征学习和两部分分阶段训练相比联合训练可以获得更好的效果。这里的分阶段训练指的是先将二者视为整体进行训练,再对最后分类器,也就是最后全连接层进行调整。这里的调整方法是可以冻住表征层,只对分类层额外训练多个epoch;或者是对分类层的权重进行非参的norm等等。结果表明大部分情况下这种decoupling的策略会比joint的方法表现更好,同时非参norm的结果也出人意料的优秀。但作者关于这部分的解释“分类的边界变宽,所以many shot类的判决效果好,few shot的效果差”,不是很懂。

采样策略

 首先作者给出了长尾分布问题中主流采样策略进行的统一规范化表示:
p j = n j q ∑ i = 1 C n i q p_j=\frac{n^q_j}{\sum_{i=1}^C n^q_i} pj=i=1Cniqnjq
其中 p j p_j pj为抽取到类别 j j j中的概率, C C C为总的类别数目, n i n_i ni为第 i i i类样本的数目。当 q = 0 , 1 , 1 / 2 q=0,1,1/2 q=0,1,1/2时,分别对应于类别均等采样、样本均等采样(也就是不调整)、方根采样。此外,还有在此基础上将多策略融合的“渐进平衡采样”:
p j P B ( t ) = ( 1 − t T ) p j I B + t T p j C B p_j^{PB}(t)=(1-\frac{t}{T})p_j^{IB}+\frac{t}{T}p_j^{CB} pjPB(t)=(1Tt)pjIB+TtpjCB
每个样本的采样概率为类别均等采样和样本均等采样的加权和,且逐渐趋向于类别均等采样。

解耦训练

 作者认为在长尾识别问题中,将特征表征和分类器解耦训练是很有用的,具体而言就是先对网络整体进行联合训练,再冻住特征学习骨干网络,单独训练分类器。而分类器的训练方法又有以下几种:

  1. cRT:最简单的方式就是初始化分类器权重,用类别均等采样策略重新训练分类器一定轮次。
  2. NCM:抛弃参数化的分类器,直接计算每种类别的平均特征向量,然后利用最近邻原则依据欧几里得距离或者预先距离输出分类结果。
  3. τ \tau τ-noramalized:作者发现使用第一种策略得到的分类器权重的模 ∣ ∣ w j ∣ ∣ ||w_j|| wj会倾向于一致,而在联合训练后得到的分类器权重 ∣ ∣ w j ∣ ∣ ||w_j|| wj则是和对应类别样本数目成正比。因此作者认为可以直接在解耦阶段对分类器的权重进行“归一化”以使得不同类别的判决边界更加的平衡,归一化后的权重计算方式如下:
    w i ~ = w i ∣ ∣ w i ∣ ∣ τ \tilde{w_i}=\frac{w_i}{||w_i||^{\tau}} wi~=wiτwi
    τ = 1 {\tau}=1 τ=1时就为L2正则,同时后续计算输出时会抛弃偏置项,只计算 W ~ f ( x ; θ ) \tilde{W}f(x;\theta) W~f(x;θ)
  4. LWS:类似于 τ \tau τ-noramalized,但是将其定义宽松化。 τ \tau τ-noramalized可以看作是对权重 w i w_i wi缩放的一种特殊形式,更一般的形式可以写成:
    w i ~ = f i ∗ w i \tilde{w_i}=f_i*w_i wi~=fiwi
    f i = 1 ∣ ∣ w i ∣ ∣ τ f_i=\frac{1}{||w_i||^{\tau}} fi=wiτ1时为 τ \tau τ-noramalized,而当 f i f_i fi为可学习参数是就是LWS,通过和cRT一样用类别均等采样单独训练一定轮次,但同时固定住特征学习器和分类器权重,只学习缩放系数 f i f_i fi

实验结果

 实验在样本类别均衡的测试集上进行,结果汇报时分成了多数样本、一般数目样本、少数样本和总体来汇报。先在不同的采样策略下联合训练90个epoch,再使用解耦训练的方法单独调整分类器。结果如下图所示:
在这里插入图片描述

总体上来看,从采样策略上来看,在联合训练的情况下,好的采样策略确实可以使得预测准确率上升。而在大多数的情况下,解耦训练比联合训练取得了更好的效果。(渐进式训练策略和类别均等采样策略基本没有获益)。最有意思的结果是,所有的方法组合中,样本均等采样+解耦训练取得了最好的效果,这似乎表明说类别的不均衡并不会对特征学习的过程产生影响,我们要调整的只是分类器。
 此外,作者从决策边界的角度对解耦训练中的方法进行了理论上的解释,如下图可以看出,当不进行解耦训练的时候,随着样本数目的减少,对应类别分类器权重 w i w_i wi的模是在减少的,而解耦训练中的方法则是抑制了这一趋势,使得不同类的分离器权重模值趋于平衡。
在这里插入图片描述

而权重对于决策边界的影响则可从下图得到:
在这里插入图片描述

τ = 1 \tau=1 τ=1 τ \tau τ-noramalized方法和使用余弦距离、欧几里得距离的NCM方法都会有着更加均衡的边界,不会使得少数类别的判定过于严格。

总结

 这篇论文算是对回归任务中的长尾分布做了一个总结性质的梳理,对采样策略这一脉的方法进行了深度的思考,并且给出了较为颠覆性的结论。此外,提供了一个新的解决思路,即特征提取和分类解耦合。文中关于决策边界和类别分布不均匀的考量同样值得玩味。

### 长尾分布下的自然图像分类论文推荐 在图像分类领域,长尾分布个常见的问题,尤其是在自然图像数据集中。以下是些与长尾分布和自然图像分类相关的研究论文[^1],这些论文提出了多种方法来解决类别不平衡的问题。 #### 1. **Long-Tail Learning via Logit Adjustment** -论文提出了种名为Logit Adjustment的方法,通过调整模型输出的logits来缓解长尾分布的影响。具体来说,它根据每个类别的样本数量对logits进行重新加权,从而使得模型更加关注尾部类别[^2]。 - 论文链接:[https://arxiv.org/abs/2007.07314](https://arxiv.org/abs/2007.07314) #### 2. **Decoupling Representation and Classifier for Long-Tailed Recognition** - 这篇论文探讨了如何解耦特征学习和分类器优化,以应对长尾分布问题。作者提出了种两阶段训练策略,首先学习类别无关的特征,然后对分类器进行再平衡处理。这种方法在多个长尾数据集上表现出色[^4]。 - 论文链接:[https://arxiv.org/abs/2002.09568](https://arxiv.org/abs/2002.09568) #### 3. **Class-Balanced Loss Based on Effective Number of Samples** - 本文引入了个基于有效样本数的损失函数(Class-Balanced Loss),旨在解决类别不平衡问题。通过重新定义每个类别的权重,该方法能够显著提高尾部类别的识别性能[^3]。 - 论文链接:[https://arxiv.org/abs/1901.05555](https://arxiv.org/abs/1901.05555) #### 4. **Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss** - 这篇论文提出了种新的损失函数——Label-Distribution-Aware Margin Loss,它通过动态调整分类边距来适应不同类别的样本分布。实验结果表明,这种方法在长尾分布场景下具有良好的泛化能力[^1]。 - 论文链接:[https://arxiv.org/abs/1906.07413](https://arxiv.org/abs/1906.07413) #### 5. **Deep Imbalanced Learning for Face Recognition and Object Detection** - 尽管这篇论文主要关注人脸识别和目标检测任务,但其提出的深度不平衡学习框架同样适用于自然图像分类中的长尾分布问题。作者通过结合重采样、重加权和生成对抗网络(GAN)等技术,有效提升了尾部类别的性能[^4]。 - 论文链接:[https://arxiv.org/abs/1901.05453](https://arxiv.org/abs/1901.05453) ```python # 示例代码:实现Logit Adjustment的基本思想 import torch import torch.nn as nn class LogitAdjustment(nn.Module): def __init__(self, num_classes, tau=1.0): super(LogitAdjustment, self).__init__() self.num_classes = num_classes self.tau = tau self.class_prior = None def forward(self, logits): if self.class_prior is not None: prior = torch.tensor(self.class_prior).cuda().unsqueeze(0) logits_adjusted = logits + self.tau * torch.log(prior + 1e-9) return logits_adjusted else: return logits ``` ### 注意事项 在实际应用中,除了选择合适的算法和损失函数外,还需要注意数据增强、模型架构设计等因素对长尾分布的影响。例如,可以尝试使用数据增强技术(如Mixup、Cutmix)或生成模型(如GAN)来增加尾部类别的样本数量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值