举个简单的例子,如果要做一个动物分类数据集,猫狗等常见数据可以轻轻松松的采集数以百万张的图片,但是考虑到数据集的均衡,我们必须也给雪豹等罕见动物采集等量的样本,而随着类别稀有度的增加,其采集成本往往成指数增长。
在自然情况下,数据往往都会呈现如下相同的长尾分布。这种趋势同样出现在从自然科学到社会科学的各个领域各个问题中,参考Zipf'sLaw或者我们常说的28定律。
直接利用长尾数据来训练的分类和识别系统,往往会对头部数据过拟合,从而在预测时忽略尾部的类别。
用于长尾问题的数据集是训练集imbalance但测试集是balance
如何有效的利用不均衡的长尾数据,来训练出均衡的分类器就是我们所关心的问题,从工业需求上来说,该研究也将大大地提升数据采集的速度并显著降低采集成本
长尾效应主要体现在有监督学习里,无监督/自监督学习等因为不依赖标注,所以长尾效应体现的不明显,目前也缺少这方面的研究(但并不代表无监督/自监督学习不受长尾效应的影响,因为图片本身也有分布,常见的图案和罕见的图案也会形成这样的长尾效应,从而使模型对常见的图案更敏感)。
长尾分布的最简单的两类基本方法是重采样(re-sampling)和重加权(re-weighting)。这类方法本质都是利用已知的数据集分布,在学习过程中对数据分布进行暴力的hacking,即反向加权,强化尾部类别的学习,抵消长尾效应。
(1)重采样(re-sampling)
(2)重加权(re-weighting)
总的来说,在长尾分类问题中,上述两种方法简单有效,以至于大多数最新的研究其实本质都是对他们的拓展和细化。
主要分为三类:
规律1:对任何不均衡分类数据集地再平衡本质都应该只是对分类器地再均衡,而不应该用类别的分布改变特征学习时图片特征的分布,或者说图片特征的分布和类别标注的分布,本质上是不耦合的。(当然,这是我自己的总结,原文没这段,也没任何证明)
基于这个规律,Decoupling和BBN提出了两种不同的解决方案,又因为Decoupling的方案更简单,实验更丰富,所以我这里优先介绍Decoupling方法。
Decoupling将长尾分类模型的学习分为了两步
第一步,先不作任何再均衡,而是直接像传统的分类一样,利用原始数据学习一个分类模型(包含特征提取的backbone+一个全连接分类器)
第二步,将第一步学习的模型中的特征提取backbone的参数固定(不再学习),然后单独接上一个分类器(可以是不同于第一步的分类器),对分类器进行class-balancedsampling学习。
其中2利用了fixed第一步分类权重\(w_i\),对每个类学习了一个加权参数\(f_i\)。
Decoupling的核心在于图片特征的分布和类别分布其实不耦合,所以学习backbone的特征提取时不应该用类别的分布去重采样(re-sampling),而应该直接利用原始的数据分布。
BBN的核心idea和Decoupling其实是一样的。正因为两个人同时发现了同样的规律,更证明了这个规律的通用性和可靠性。关于上文的规律,BBN做了更详细的分析:
这个图说明,长尾分类的最佳组合来自于:利用Cross-EntropyLoss和原始数据学出来的backbone+利用Re-sampling学出来的分类器。
和Decoupling的区别在于,BBN将模型两步的学习步骤合并至一个双分支模型。该模型的双分支共享参数,一个分支利用原始数据学习,另一个分支利用重采样学习,然后对这两个分支进行动态加权\((\alphavs.(1-\alpha))\)。这样随着权重\(\alpha\)的改变,就实现了自然而然地从stage-one到state-two的过度。
根据原文的总结,该框架包括两个level的课程学习方案:
1)SamplingScheduler:调整训练集的数据分布,将采样数据集的样本分布从原先的不平衡调整到后期的平衡状态;
2)LossScheduler:调整两个Loss(分类Loss和度量学习Loss)的权重,从一开始倾向于拉大不同类目之间特征的距离(度量学习Loss),到后期倾向于对特征做分类(分类Loss)。
Mixup是一个这两年常用的数据增强方法,简单来说就是对两个sample的inputimage和one-hotlabel做线性插值,得到一个新数据。实现起来看似简单,但是却非常有效,因为他自带一个很强的约束,就是样本之间的差异变化是线性的,从而优化了特征学习和分类边界。
而Remix其实就是将类别插值的时候,往少样本类的方向偏移了一点,给小样本更大的\(\lambda_y\)。
暂且归为迁移学习类。作者发现在一个长尾分布的数据集中,如果我们取一个更均衡的子集来训练,其结果反而比利用完整的数据集效果更好。所以原文利用多个子集来训练更均衡的专家模型来指导一个unified学生模型。
训练多个classifierexperts,然后通过diverseloss让每个classifier有不同的分布(也就是专注于不同的categories)。然后通过一个路由模块,去动态的决定那些classifierexpert应该参与分类。虽然看起来是ensemble,但是模型channel缩小了1/4,所以本质上并没有提升计算量。这篇paper证明了基于这种类ensemble的分支结构可以同时提升head和tail的performance。
关于如何利用半监督和自监督来解决类别不均衡的问题,因为既然数据的标注难免会遇到类别不均衡的问题,那么如果不利用或少利用类别信息,是否可以解决长尾/不均衡分布问题呢?
这篇工作的核心亮点有两处:
第一是把学习长尾分布的数据看成是一种增量学习(incrementallearning),即我们是优先学会常见物体(头部数据),然后再基于对常见类别的知识,去认知少见的尾部类别。这其实是一种非常接近人类思维的学习方法。这个工作的学习流程如下图,将类别根据出现频率依次排列,并划分为不同的学习阶段,依次从易到难的学习所有类别。
第二个亮点是高效的实例级别重采样(EfficientInstance-levelre-sampling)。作为长尾分类的常用方法,重采样在instance-level的数据上却没有重加权来的易于实现。如果一个图片只采样一个实例的话,虽然可以直接将instance-level重采样退化为image-level重采样,但却不够高效。因此基于对数据的观察,我们发现一个物体出现时,往往图片中会同样出现同一类别的其他实例,所以提出了如下高效的实例重采样:
FocalLoss虽然不是专门用来解决长尾分类的,但是因为其Hard-ExampleMining的特性刚好和长尾分类对尾部数据的欠拟合所契合,因此也可以作为长尾物体检测和实例分割的baseline。其实现为如下的FL公式:
但不同于Decoupling作者直接对模长归一化,本文的作者采用了按模长量级分类,仅对同一量级的类别logits计算softmax,而不是所有类别一起计算softmax。同时不忘对background类做个特殊处理,单独算为一类。
这篇工作也是对softmax做了改进,提出了concurrentsoftmax,但不同于上文,该工作主要是基于类别间的并发率对loss做了调整。因为传统softmax会在训练时抑制所有非ground-truth类,而当数据不均衡时,很多时候尾部类别很可能是某个头部类别的子类,或者是非常相近的类别,这时候就不该过多的抑制这些类,即便他们不是ground-truth。为了解决这个问题,作者提出了concurrentsoftmax,对和ground-truth类别有很高并发率(concurrentrate)的类别,给予更少的抑制。concurrentsoftmax的定义如下:
其中\(r_{ij}\)是从数据中统计出来的类别\(i\)和类别\(j\)的并发率(concurrentrate):类别\(i\)的物体被标记为\(j\)的概率。
注:本文中作者只是说传统的softmaxloss容易使梯度更新时倾向于获得更小的值,没有说明这个与长尾分布有关。相反是后面的soft-balancesamplingwithhybirdtraining是re-sample的方法
这个工作从因果分析的角度,利用一种非常优雅的实现,提出了一种崭新的长尾问题的通用解决思路。而且实现非常简单,能够广泛适用于各种不同类型的任务。之前几期介绍了很多过往的工作,然而有几个问题(缺陷)却一直萦绕在我的脑中没有被解决:
我认为,需要利用原始的长尾分布来学习特征提取的原因在于,大量的尾部类别其实不足以提供足够的样本来学习鲁棒的特征表达,如果强行利用re-balancingtrick只会让模型对尾部类别特征过拟合,而对样本充足的头部类别欠拟合。这也不符合人类的认知习惯,人类描述罕见的物体时,往往是通过和已知常见类的比较,比如我会说狮鹫是有着狮子的身体,鹰的翅膀和头的生物,而不必要单独拿一堆狮鹫的图片出来,让你死记硬背住狮鹫的长相。这就解释了为什么直接利用长尾分布的原始数据学习的特征表达器更好,因为他可以充分的利用优质的头部类指导特征学习,可问题在于我们分类时也是直接记住(狮鹫=狮子+鹰),而不需要额外的再去看很多狮鹫样本来和头部的类做“均衡”啊。
在介绍本文复杂的因果图构建和后续推导实现,让同学们失去耐心之前,对于想赶紧快速食用我们方法的同学,我给个4步速成指南吧:
下面就是具体我怎么得出上述的算法。首先,基于我的分析,我们构建了如下的因果图。其中M就是优化器的动量,X是backbone提取的特征,Y是预测。D是特征对头部大类的偏移量。至于为什么会有这个偏移量呢?因为优化器的动量包含了数据集的分布信息,他的动态平均会显著地将优化方向倾向于多数类,这也就造成了模型中的参数会有生成头部类特征的倾向。
因为混淆因子和中介的存在,我们最终期望得到的X对Y的effect其实并不是原始效应(原始logits),而是下图这样的去混杂后的直接效应。其中De-confoundtraining可以在训练中控制M对X的影响,而counterfactualinference的减法,通过类似设置安慰剂对照组的思想,去除了间接效应。
至于4.2的inference时TDE的减法其实还是比较直接的,我这就不细说了。同时考虑到在一些特殊任务中,有些大类是需要保持合理的倾向性的,比如物体检测和实例分割时,就需要合理地倾向于background类这个大类,否则就会检测到过多无意义地细节。因此我们在4.3中介绍了Background-ExemptedInference这种特殊处理。
我们提出的这个因果框架,其实也同时解释了2-stage的方法,并可以将其近似为NDE,关于怎么理解TDE和NDE的区别,可以参考我在补充材料里写的下面这个简单的一维数据二分类例子。
其中高斯曲线代表预测的分布,可以看到传统的直接训练和单步的re-balancing都有严重的问题,而2-stage的方法通过第二步再训练去矫正分类器的分类边界。我们提出的TDE方法则直接通过矫正特征本身的分布来更简单优雅的解决了分布不均衡的问题。
Experiments(实验结果)
我们在ImageNet-LT和Long-tailedCIFAR-10/-100上都超过了之前最优的长尾分布分类算法。