数据类别不平衡/长尾分布?不妨利用半监督或自监督学习

于类别不均衡的学习问题,利用

1.半监督学习 --- 也即利用更多的无标签数据

2.自监督学习 --- 不利用任何其他数据,仅通过在现有的不平衡数据上先做一步不带标签信息的自监督预训练(self-supervised pre-training)

 

都可以大大提升模型的表现,并且对于不同的平衡/不平衡的训练方法,从最基本的交叉熵损失,到进阶的类平衡损失[1][2],重采样[3],重加权[4][5],以及之前的state-of-the-art最优的decouple算法[6]等,都能带来一致的&较大的提升。相信我们从和现有方法正交的角度的分析,可以作为解决不平衡长尾问题的新的思路,其简单通用性也使得能够很容易和不同方法相结合,进一步提升学习结果。

接下来我们进入正文,我会先抛开文章本身,大体梳理一下imbalance这个问题以及一部分研究现状,在此基础上尽量详细的介绍我们的思路和方法,省去不必要的细节。

1

 

研究背景

数据不平衡问题在现实世界中非常普遍。对于真实数据,不同类别的数据量一般不会是理想的uniform分布,而往往会是不平衡的;如果按照不同类别数据出现的频率从高到低排序,就会发现数据分布出现一个“长尾巴”,也即我们所称的长尾效应。大型数据集经常表现出这样的长尾标签分布:

不同数据集的标签呈长尾分布。图片来源:https://liuziwei7.github.io/projects/LongTail.html

当然,不仅仅是对于分类任务,其他任务比如object detection或instance segmentation,常用数据集也存在类别的不均衡。此外,除了视觉领域中的数据,对于涉及安全或健康的关键应用,例如自动驾驶和医疗/疾病诊断,数据本质上也是严重失衡的。

为什么会存在不平衡的现象?其实很好理解,一个通用的解释就是特定类别的数据是很难收集的。拿Species分类来说(参考大型数据集iNaturalist[7]),特定种类(如猫,狗等)非常常见,但是有的种类(如高山兀鹫,随便举的例子...)就非常稀有。再比如对自动驾驶,正常行驶的数据会占大多数,而真正发生异常情况/存在车祸危险的数据却极少。再比如对医疗诊断,患有特定疾病的人群数相比正常人群也是极度不平衡的。对于healthcare data来说另一个可能原因是和privacy issue有关,特定病人可能都很难采集数据。

那么,不平衡或长尾数据会有什么问题?简单来说,如果直接把类别不平衡的样本丢给模型用ERM学习,显然模型会在major classes的样本上的学习效果更好,而在minor classes上泛化效果差,因为其看到的major classes的样本远远多于minor classes。

那么,对于不平衡学习问题有哪些解决方法?我自己总结的目前主流方法大致分为以下几种:

1.重采样(re-sampling):更具体可分为对少样本的过采样[3],或是对多样本的欠采样[8]。但因过采样容易overfit到minor class,无法学到更鲁棒易泛化的特征,往往在非常不平衡数据上表现会更差;而欠采样则会造成major class严重的信息损失,导致欠拟合发生。

 

2.数据合成(synthetic samples):即生成和少样本相似的“新”数据。经典方法SMOTE[9],思路简单来讲是对任意选取的少类样本,用K近邻选取其相似样本,通过对样本线性插值得到新样本。这里会想到和mixup[10]很相似,于是也有imbalance的mixup版本出现[11]。

 

3.重加权(re-weighting):对不同类别(甚至不同样本)分配不同权重。注意这里的权重可以是自适应的。此类方法的变种有很多,有最简单的按照类别数目的倒数来做加权[12],按照“有效”样本数加权[1],根据样本数优化分类间距的loss加权[4],等等。

 

4.迁移学习(transfer learning):这类方法的基本思路是对多类样本和少类样本分别建模,将学到的多类样本的信息/表示/知识迁移给少类别使用。代表性文章有[13][14]。

 

5.度量学习(metric learning):本质上是希望能够学到更好的embedding,对少类附近的boundary/margin更好的建模。有兴趣的同学可以看看[15][16]。

 

6.元学习/域自适应(meta learning/domain adaptation):分别对头部和尾部的数据进行不同处理,可以去自适应的学习如何重加权[17],或是formulate成域自适应问题[18]。

 

7.解耦特征和分类器(decoupling representation & classifier):最近的研究发现将特征学习和分类器学习解耦,把不平衡学习分为两个阶段,在特征学习阶段正常采样,在分类器学习阶段平衡采样,可以带来更好的长尾学习结果[5][6]。这也是目前的最优长尾分类算法。

 

至此大概总结了研究背景和常用方法;然而,即使有如数据重采样或类平衡损失等专门设计的算法,在极端的类别失衡下,深度模型性能的下降仍然广泛存在。因此,理解类别不均衡的数据标签分布所带来的影响是非常重要的。

2

 

我们的研究动机和思路

不同于之前对于长尾分布研究方法,我们从“the value of labels”,即这些本身就不平衡的数据标签具有的“价值”这一思路去考虑。与理想情况下平衡的标签不同,这些不平衡的数据标签存在一个非常有趣的dilemma。

一方面,这些标签提供了非常珍贵的监督信息。有监督的学习通常都比无监督的学习在给定任务上具有更高准确性,因此即使不平衡,这些标签也拥有“正面价值”。

但是另一方面,由于标签非常不平衡,训练模型的过程中可以非常自然的强加上label bias,从而使得最后的决策区域很大程度上被major class影响;这样的结果又证明了不平衡标签的“负面价值”。作为总结,在不平衡的训练集中,这些标签就像一把双刃剑;想要得到更好的结果,一个非常重要的问题就是如何最大程度的利用不平衡标签的“价值”?

于是,我们尝试系统性的分解并且分别分析上述两种不同的角度。我们的结论表明对于正面的和负面的角度,不平衡标签的价值都可被充分利用,从而极大的提高最后分类器的准确性:

  • 从正面价值的角度,我们发现当有更多的无标签数据时,这些不平衡的标签提供了稀缺的监督信息。通过利用这些信息,我们可以结合半监督学习去显著的提高最后的分类结果,即使无标签数据也存在长尾分布。

  •  

  • 从负面价值的角度,我们证明了不平衡标签并非在所有情况下都是有用的。标签的不平衡大概率会产生label bias。因此在训练中,我们首先想到“抛弃”标签的信息,通过自监督的学习方式先去学到好的起始表示形式。我们的结果表面通过这样的自监督预训练方式得到的模型也能够有效的提高分类的准确性。

3

 

半监督框架下的不均衡学习

我们首先从半监督的不均衡学习说起,通过一个简单的理论模型分析来建立直观的解释(省去了许多细节;可以直接跳到解释部分),之后展示一些有意思的实验结果。

理论分析:我们先从一个简单的toy example入手。考虑一个不同均值,  和  ,但是相同方差的Guassian mixture模型,我们可以很容易验证其贝叶斯最优分类器为:  。因此为了更好的分类,我们希望学习到他们的平均均值,  。

假设我们已有一个在不平衡的训练集上得到的基础分类器  以及一定量的无标签的数据,我们可以通过这个基础分类器给这些数据做pseudo-label。令  和  代表pseudo-label为正和为负的数据的数量。为了估计  ,最简单的方法我们可以通过pseudo-label给这些对应的没有标签的数据取平均得到  。假设  代表基础分类器对于两个类的准确度的gap。这样的话我们推出以下定理:

那么直观理解,对于这样一个toy example,这个定理告诉了我们以下两点很有意思的结论:

 

1.原始数据集的不平衡性会影响我们最后estimator的准确性。越不平衡的数据集我们expect 基础分类器有一个更大的  。越大的  影响我们的estimator  到理想的均值之间的距离。

 

2.无标签数据集的不平衡性影响我们能够得到一个好的estimator的概率。对于还不错的基础分类器,  可以看做是对于无标签数据集的不平衡性的近似。我们可以看到,当  ,如果无标签数据很不平衡,那么数据少的一项会主导另外一项,从而影响最后的概率。

 

半监督的不平衡学习框架:我们的理论发现表明,利用pseudo-label伪标签(以及训练数据中的标签信息)可以有助于不平衡学习;而数据的不平衡程度会影响学习的结果。受此启发,我们系统地探索了无标记数据的有效性。我们采用最简单的自训练(self-training)的半监督学习方法,即对无标记数据生成伪标签(pseudo-labeling)进而一起训练。准确来讲,我们首先在原始的不平衡数据集  上正常训练获得一个中间步骤分类器  ,并将其应用于生成未标记数据  的伪标签  ;通过结合两部分数据,我们最小化损失函数  以学习最终模型  。

 

值得注意的是,除了self-training之外,其他的半监督算法也可以通过仅修改损失函数轻松地并入我们的框架中;同时,由于我们未指定  和  的学习策略,因此半监督框架也能很轻易的和现有类别不平衡的算法相结合。

 

实验:到了激动人心的实验部分了 :)! 首先说一下实验的setting --- 我们选择了人工生成的长尾版本的CIFAR-10和SVHN数据集,因为他们均有天然对应、且数据分布相似的无标记数据:CIFAR-10属于Tiny-Images数据集,而SVHN本身就有一个extra dataset可用来模拟多余的无标记数据。这部分更加细节的setting请详见我们的文章;我们也开源了相应的数据供大家使用测试。对于无标记数据,我们也考虑到了其可能的不平衡/长尾分布,并显式的比较了不同分布的无标记数据的影响(  和  的典型分布如下):

典型的原始数据分布,以及可能的无标记数据分布

而具体的实验结果如下表所示。我们可以清楚看到,利用无标记数据,半监督学习能够显著提高最后的分类结果,并且在不同的 (1) 数据集,(2) base学习方法,(3) 标记数据的不平衡比率,(4) 无标记数据的不平衡比率下,都能带来一致的提升。此外,我们在附录里还提供了 (5) 不同半监督学习方法的比较,以及不同data amount的ablation study。

最后展示一下定性的实验结果。我们分别画出了不使用/使用无标签数据,在训练集和测试集上的t-SNE可视化图。从图中可以直观看出,使用未标记数据有助于建模更清晰的类边界,并促成更好的类间分离,尤其是对于尾类的样本。这样的结果也符合我们的直观理解,对于尾类样本,其所处区域的数据密度低,模型在学习过程中不能对这些low-density区域很好建模边界,从而造成模糊性(ambiguity)导致较差的泛化;而无标记数据则能有效提高低密度区域样本量,加上了更强的regularization使得模型重新更好地建模边界。

4

 

关于半监督不均衡学习的进一步思考

虽然通过半监督学习,模型在不平衡数据上的表现能够得到显著的提升,但是半监督学习本身也存在一些实际应用的问题,而这些问题在不平衡学习中可能会被进一步放大。接下来我们通过设计相应实验来系统地阐述和分析这些情况,并motivate接下来对于不平衡标签“负面价值”的思考和研究。

首先,无标签数据与原始数据的相关性对于半监督学习的结果有很大的影响。举个栗子,对于CIFAR-10(10类分类)来说,获得的无标签数据可能并不属于原本10类中的任何一类(比如高山兀鹫...),这时多余的信息则可能对训练和结果造成不小影响。

为了验证这一观点,我们固定无标签数据和原始训练数据有相同的不平衡比率,但是通过改变无标签数据和原始训练数据的相关性去构造不同的无标签数据集。从Figure 2中我们可以看出,无标签数据的相关性需要达到将近60%以上才能过对不平衡学习有正面的帮助。

既然原始训练数据是不平衡的,能够采集到的无标签数据也大概率是极度不平衡的。譬如医疗数据中,你构建了自动诊断某类疾病的数据集,其中正例(患病)很少,只占总体1%,但因为此病得病率就在1%左右,即使大量搜集无标签数据,其中真正患病数据大概率还是很少。

那么,在同时考虑相关性的前提下,如Figure 3所示,我们首先让无标签数据集有足够的相关性(60%),但改变无标签数据的不平衡比率。这个实验中,我们固定原始训练数据的不平衡比率为50。可以看到对于无标签数据,当无标签数据过于不平衡(本例中不平衡比率高于50)时,利用无标签数据反而可能让结果变得更差。

上述问题在某些特定的实际不平衡学习任务中,可能是非常普遍的。比如医疗/疾病诊断的应用,对于可能获得的无标记数据,其绝大多数大概率也都是从正常样本上采集的,这首先造成了数据的不平衡;

其次,即使是患病的样本,也很可能由很多其他混杂因素(confounding factors)导致,而这会降低与本身研究病症的相关性。

因此,在一些很难利用半监督学习的极端情况下,我们需要完全不同的但是也行之有效的方法。非常自然的,我们接下来从不平衡标签负面价值的角度去入手,阐述另一思路 --- 自监督学习带来的好处。

5

 

自监督框架下的不均衡学习

同样地,我们首先通过一个简单的理论模型分析来直观理解自监督对不平衡学习所带来的影响(同样也可以直接跳到解释部分),之后展示有意思的实验结果,以及总结思考。

理论分析:我们同样考虑一个  维Guassian mixture的toy example。这次我们考虑两个类有相同的均值(都为0)但是不同的方差,  和  。其中,我们假设负类是主要的类(mix 概率  )。我们考虑线性的分类器  ,  ,并且用标准的error probability, ,作为分类器的衡量标准。在正常的训练中,公式里的feature代表的是raw data,  。在这种情况下,我们可以首先证明上述的线性分类器一定会有至少  的error probability(详见文章)。

接下来我们考虑当有self-supervision的情况。假设一个好的self-supervised task帮助我们学习到了新的representation, , 。我们考虑用  作为线性分类器的输入。在上述的分类器范围内, 我们可以得到一个分类器,  , ,满足下面的定理:

 

同样的,我们尝试直观的解释这个定理的意义。我们发现在这样简单的情况下,如果通过一个好的self-supervised task学习到了有用的表达形式,我们能得到:

1.有很高的概率,我们能得到一个更好的分类器。这个分类器的error probability随数据维度  的增加而指数型减小。对于如今常见的高维数据(如图像)这种性质是我们希望得到的。

 

2.训练数据的不平衡性会影响我们能够得到这样一个好的分类器的概率。上文中, 和  代表训练数据里不同类的数量。从  和  这两项中我们可以发现,当数据越多且越平衡,我们就有更高的概率得到一个好的分类器。

 

自监督的不平衡学习框架:为利用自监督来克服固有的“label bias”,我们提出在长尾学习的第一阶段先放弃标签信息,并进行自监督预训练(self-supervised pre-training,SSP)。此过程旨在从不平衡数据集中学到更好的、与标签无关的初始化特征信息。在此阶段后,我们可以使用任何标准的训练方法,去训练得到最终的模型。由于预训练与正常训练阶段所采用的学习方法无关,因此这种策略可与任何现有的不平衡学习算法兼容。一旦自监督产生良好的初始化,网络就可以从预训练任务中受益,并最终学习到更通用的表示形式。

 

实验:那么又一次到了激动人心的实验部分 ;) 这次由于不需要额外数据,我们除了在长尾的CIFAR-10/100上验证算法,也在大型数据集ImageNet的长尾版本,以及一个真实的大型长尾数据集iNaturalist[7]上进行测试,并和相应state-of-the-art对比。对于自监督算法,我们采用了经典的Rotation prediction[19]和最新的对比学习方法MoCo[20]。在Appendix里我们也提供了更多ablation study,比较了4种不同自监督方法的效果,以及不同的Imbalance Type。

 

具体实验结果如以下两表格所示。一言以蔽之,使用SSP能够对不同的 (1) 数据集,(2) 不平衡比率,以及 (3) 不同的基础训练算法,都带来了一致的、肉眼可见的提升,并且在不同数据集上都超过了之前最优的长尾分类算法。

最后同样展示一下自监督下的定性实验结果。与之前一样,我们分别画出了训练和测试集的特征t-SNE投影。从图中不难发现,正常CE训练的决策边界会很大程度被头类样本改变,从而导致在(平衡的)测试集中尾类样本的大量“泄漏”,无法很好泛化。

相比之下,使用SSP可以保持清晰的分离效果,并减少尾类样本的泄漏,尤其是在相邻的头类和尾类之间。这样的结果同样也能直观理解:自监督学习通过额外的task来约束学习过程,对数据空间的结构学习的更完整、提取的信息更全面,相比不平衡的标签信息带来的语义信息的不平衡,其能有效减轻网络对高层语义特征的依赖,以及对尾部数据的过拟合,学到的特征表示会更鲁棒易泛化,从而在下游任务中表现更好。

6

 

结语

最后总结一下本文,我们首次通过半监督和自监督这两个不同的viewpoint去尝试理解和利用不平衡的数据(标签),并且验证了这两种框架均能提升类别不均衡的长尾学习问题。我个人还是挺喜欢这篇文章的,有很直观的理论分析与解释,以及用非常简洁并且通用的框架去提升长尾分布下的学习任务。拿一位给我们很高分数的reviewer的原话,“The results could be of interest to even broader area of different applications”,即不只是局限于文中做的几个academic datasets,而对于现实中许多常见的imbalance或long-tail的任务,都是能即插即用,或是对如何有效收集无标签数据提供一些insight的。

当然,宣传归宣传,我们的工作还是存在其局限性。虽然我们考虑到了无标签数据的不平衡性,但是对于半监督(或是自监督)的算法本身,并没有整合不平衡学习的策略,而是直接使用了vanilla的算法。

其次,如我们标题所带词语“improving”所示,我们能提升现有的最优算法,但长尾问题本身仍未完全解决,甚至还有很大的提升空间。希望本文能抛砖引玉,也非常欢迎大家follow我们的工作!最后的最后再次附上我们论文的相关链接:

主页 | https://www.mit.edu/~yuzhe/imbalanced-semi-self.html

论文 | https://arxiv.org/pdf/2006.07529.pdf

代码 | https://github.com/YyzHarry/imbalanced-semi-self

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑头人

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值