celeba数据集_「论文分享」利用动态课程学习解决不均衡数据的分类问题

大家好,这篇文章想和大家分享的是收录于ICCV2019的文章《Dynamic Curriculum Learning for Imbalanced Data Classification》。其作者为商汤科技的团队,文章介绍了一种利用动态课程学习来解决不均衡数据分类问题的方法。

任务背景

数据不均衡是大家在实验过程中经常遇到的情况,比如在人脸属性数据集中,秃和非秃的比例就相去甚远,因为按照实际生活场景进行随机收集时,非秃的人占比天然更大。过分不均的数据会对模型的训练、应用和评估产生巨大的影响。尽管已有可用的处理方案,但这些方法仍然存在着不少局限。在这篇文章里,作者受到课程学习仿生概念的启发,提出了Dynamic Curriculum Learning(DCL)模型。从实验结果看,模型较好地解决了实验数据上的数据不均问题,并随着不均程度的增加而愈发明显。

相关工作

(1) imbalanced data learning

首先介绍了不均衡数据的传统处理方法。第一种是从数据的层面着手(data-level),包括过采样(oversample)和欠采样(downsample)。然而,过采样这种重复地取用小类别标签的方式,容易造成过拟合的问题;而欠采样则必然会损失部分的信息。

另一种传统方法为算法层面(algorithm-level),称为cost sensitive learning。简单地说,就是赋予小类别更大的损失权重,来强调小类的分类效果。但是对于权重具体如何分配,至今还没有十分令人满意的方案。

(2) deep imbalanced learning

近年来,也萌生了一些深度学习的方案。总体思路是把采样策略和权重调整两种传统方式融合到一个end-to-end的深度框架里。学者Qi Dong等人在2017和2018年的工作中提出了CRL损失函数(Class rectification loss),使得模型能够识别分布稀疏的小类们的边界,以此避免大类主导的影响。这里的CRL考虑了度量学习(metric loss),采用了三元组损失(triplet loss)的变种。三元组损失函数能在训练中起到减小类内样本差距,增大类间样本差距的效果,从而优化样本的特征表示。

除此之外,还有学者Chen Huang等人在2016和2018年提出的LMLE和CLMLE方法。这类方法属于sample-clustering based, 可以控制增大类内和类间的margin来保护局部类结构。上述的三种方法都用在了后文的实验比较中。

(3) curriculum learning

说到课程学习,大家可能不太熟悉。课程学习的概念在2009年就被提出,其核心思想是仿造人类和动物的学习过程,让模型从简单到困难进行训练。传统的课程学习中,课程是由先前的知识人为确定。提出者的论文就拿多边形分类任务举例,让模型先学习正多边形的分类(容易的课程),再学习不规则多边形的分类(复杂的课程)。实验证明这样比难易混学的效果来得好。

课程学习有一个概念叫scheduler,即调度者。这里的调度者也可以被称为teacher,可以理解为在训练学生的过程中,通过布置子任务(即选择不同难度的样本集合作为课程),指导模型的学习方向。

动机

作者的动机分为两个方面。

首先,重采样是一种好策略,但如果在训练过程中,样本的分布一直维持不变,那么对于一个本质上就不均衡的任务,可能造成对小类别的过分关注,而对大类别不够重视。这在泛化能力、判别能力、实际应用上,都是有损害的。

其次,作者认为在训练过程中,应当动态地结合分类损失和度量损失。我们知道,分类损失如交叉熵的主要作用是促进分类的正确;而度量损失则更侧重于获得不同类别之间差异更大的特征表示。这两个约束的重要性在训练过程中不是始终相同的。一般来说,我们期望训练的前期度量损失权重高,因为这样就可以学到更好的特征表示。而到了后期,我们则希望分类损失权重更高,模型可以具备更好的分类能力。

方法

作者设计了两个课程学习scheduler,一个是sampling scheduler,能对采样进行动态的控制,使得数据由不均到均,同时由简单到复杂;一个是loss scheduler,用于平衡分类损失和度量损失的权重,以达到训练中先侧重特征空间表示,再侧重分类准确性的效果。

首先,先给大家介绍一下课程学习的基本函数:scheduler function。课程学习是一个由浅入深的过程,因此需要一个函数来反映训练进程(简写为SF(l),后文中用到时记为了g(l), f(l))。SF(l)中的l代表当下epoch,公式中的L则代表总epoch。

0a09ae3afeba441ce75c69d0c1b5b9e2.png

如图所示,SF函数可以有多种形式,其值会从1到0递减。在训练开始时,SF(l)的值为1,训练结束时为0。除此之外,这个函数还可以起到控制学习速度的作用,这体现在图中的斜率中。SF函数主要有四种类型,分别可以控制学习速度由慢到快、匀速、又快到慢、以及由慢到快再到慢。

(1) sampling scheduler

sampling scheduler主要通过控制epoch内的每类样本分布,来实现由均到不均的转变。同时,这也一个由易到难的过程,作者认为当数据不均时,模型会更关注于主体而忽视细节和难例,而当数据均匀后,细小的类别也被关注到,自然更难。

作者利用sampling scheduler改变每个epoch内的样本分布,方法如下图

92cfbfdc894023856b898d53e48cd1cb.png

这里的Dtrain表示的是原始数据的样本分布,每个C代表一个类别,一共有K个类别,式子中的#表示该类的数目,这里的分母#Cmin表示最小类的样本数,式子按照升序排列。

ac484e8cf60cf890cf9748ab184f6b27.png

接着,就可以利用scheduler function g(l)来调控目标类别的样本分布了。这里使用的方法也很简单,即给Dtrain内的每一个元素做指数操作。如此一来,该epoch内的目标样本分布Dtarget就可以得到了。举个例子,当训练刚开始时,l=0, 此时g(l)=1,做完指数操作以后,Dtarget依然等于Dtrain,即刚开始时分布不变化,仍保持不均。而当训练进行到最后l=maxepoch时,g(l)=0,此时Dtarget=1:1:1:……:1:1,即分布已达到均衡状态。

在此之后,就是照着Dtarget的分布来进行采样。对于大类,只要在样本里随机进行降采样即可,对于小类,则采取增加权重的办法,二者综合,使得每个batch内的样本都满足Dtarget的分布。

a56d4ca6f2f65f95ae2daa42d1c3bd7e.png

既然涉及到权重,就要考虑到分类优化的loss函数。作者基于交叉熵设计了DSL损失函数,主要的改进是给每个类增加样本权重wj。当某类的目标分布大于等于当前分布,则意味着该类是小类,需要增加权重。反之,则说明这是大类,权重只取决于样本是否被选中而定为1或0。综上,sampling scheduler实现了样本类别分布的调整。

(2) loss scheduler

在考虑两种损失函数的权重调整之前,需要插播一个小知识。前面我们介绍了CRL损失函数,它对三元组损失函数triplett loss进行改进,从而更好地区分一对性状、挖掘难例、优化特征。这里的难例,指的是以很高的预测值进行了错误预测的样本。

如下图,这里有一对形状,两个类别(秃和不秃,小类别记为正),我们把空间里处于分界周边的难正例和难负例,以及较小类别中的所有样例(anchors)组成多个三元组。在这个损失函数的优化下,正难例的特征会在空间中从边界线处向anchors靠近,而负难例则会远离。但这种做法会造成一个问题,由于分界线并非规则直线,这样的推拉有可能使得难例被拉入相反的类别区域中。

441563b425c1e246b0757ac49057cf55.png

为了解决这一问题,作者将anchors的选取范围由小类别中的所有样本改为小类别中的容易样本。容易样本的定义是能以高概率正确预测的样本。如下图所示。如此一来,便可避免难例误入错误区域的问题。作者将这个改进后的损失函数记为TEA:

3ba0f620e4cc8f284e49751d22b37339.png

下面回到loss scheduler,这个步骤是为了动态地调整loss权重,以实现在训练前期将不同类目分得更开,后期将不同类目分得更准的目的。因此,需要在训练前期将TEA度量权重调高,而在后期降低以突出DSL分类权重。作者使用了Scheduler function函数实现。参见下图,作者以第四种SF函数为例,这里的p是一个0到1之间的数,含义是当训练过程到了后期的某个点后,就不再继续降低TEA的权重,不让其降至0。这是因为尽管我们希望强调后期分类的优化,但特征的优化依然是必要的。

2408e896745f71a1fb7c5f039ee16db8.png

到这里,模型最主要的两步设计就介绍完了。

实验

下面先来看看实验的指标。在均衡分类中,一个常用的指标是class-biased accuracy,它等于预测正确的样本数除以总样本数。但对于不均衡数据,这样的计算方式容易导致误差,因此本文使用的是class-balanced accuracy,即对每个类别一视同仁,等权地对每个类内accuracy做平均,这样的方法可以避免大类占优问题。本文中使用到的计算公式如下图所示,mA即表示对多个类别的class-balanced accuracy取平均。

0db406228e0db9a109b8fa1c9d69b581.png

实验分别在三个数据集上进行,前二者为不均匀数据集,最后的CIFAR-100为均匀数据集。

d51cd0c5d145419014977217e1b1945b.png

首先,作者在CelebA上做了实验,这里选用了一个四层的CNN DeepID2作为baseline,基础的损失函数定为交叉熵,并在后面采取了几种不同的不均衡处理方法作对比。其中,selective learning也给了每个epoch一个分布,但分布在训练过程中固定,且没有考虑度量学习。而CRL则是前面提到过的方法,考虑了度量学习,但未做easy anchors的改进,且仅使用交叉熵作为分类损失函数。LMLE和CLMLE则为相关工作部分提到过的两种方法。DCL模型较好地融合、优化了过去的方案。

实验结果如下:

a8855e7bff33cc57584a25d67e705038.png

表格中的横行的首行代表人脸属性性状,每一性状包含正负两类。下一横行则为这些性状所对应的数据不均衡程度(imbalance level = majority class rate – 50%)。中间的即为mA评估值,其中蓝色表示次优,红色表示最优。可以看到,在数据比较均衡的时候,DCL模型无优势,但随着不均衡程度的增加,DCL模型优势逐渐明显,越不均效果越好。平均下来比baseline提高了约8%。

当然,在比较时不难发现,其mA均值与上面的某几个方法差别不大,不同的比例下有时更是难分伯仲。作者解释道,DCL模型更易于拓展到多个属性同时预测的多标签任务上(属性和属性之间的triplet loss是分开计算的),且其所使用的loss算法开销比传统的交叉熵更小,并且也无需像LMLE/CLMLE模型需要在每次训练前提前构建准备。因此,DCL模型在拥有结果优势的同时,也具备更好的效率和实用性,是一种性价比很高的方法。

3f140a9b2c39e6b54f371a31ac3b89c7.png

作者进一步把上面表现最好的三种算法绘制成了折线图。可以看到,DCL模型在数据及其不均匀时表现优越而而稳定。这说明DCL模型可以很好地处理小类别的学习,同时不削弱对大类别的重视:

d46db2a5b7237cab43eeb57b45416f6f.png

接下来,作者用擦除实验观察每个设计点的表现,表现逐步提升,sampling scheduler, triplet loss, loss scheduler三个组分都发挥了积极的作用。

作者还对此前提到的四种scheduler function选用进行了实验,scheduler function可以控制学习的速度,控制样本分布在训练中的变化。由于之前提到的四种函数在在指数操作后造成数据的分布变化都是非线性的,作者增补了一个让数据分布在训练过程中线性地变均匀的函数linear decreasing imbalance,实验结果如下:

cdec2f6fd86e94532701513d1147365c.png

可以看出,凸函数convex的效果最好,它代表由慢到快的学习。这说明,在数据分布不均的开始阶段,学得慢一些,而到了后期数据逐渐均衡时,加快学习速度更好。

接下来,作者还在另一个不均衡数据集RAP上做了实验。这个数据集的不均衡比例更加夸张,到了1:1800的地步。作者首先把这个数据集上的几个经典方法都跑来作对比,发现DCL模型得出了最好的结果,提高了5%。同时,作者表示DCL模型的额外开销相比更小,因而性价比很高。

5555465e87fb36de5382d2bbe86ad44a.png

随后,作者使用resenet-50+交叉熵作为baseline,观察了DCL模型在该数据集不同均衡比例性状下的表现 。作者把数据集里的性状按照不均衡比例分到了三个区间内,并对每个区间内的表现取平均,从而得到下表:

ffe95b864e2a4e2378fc1d88a0e521da.png

可以看到,DCL模型与baseline相比更具优势,随着不均衡比例的提高,baseline结果下降严重 ,而DCL模型不降反升,如此一来,更加充分地证明了DCL模型对不均衡数据处理的有效性。

最后,作者在CIFAR-100数据集上,探讨了DCL模型在均匀数据集上的表现。由于数据均衡,在几种不同的采样策略下,呈现了一样的结果,不予细讨。作者着重比较了loss的设计,采用了交叉熵、CRL和DCL三种。下表可见,其表现逐步提升,作者认为这可以说明easy anchors设计的有效性,也可以说明整个loss scheduler的设计给使数据得到了更好的特征表达。

37b88dbbc31716b27d5ac0abcfc3787b.png

总结

最后,稍微小结一下这篇文章:

(1)DCL的采样策略和loss函数设计融合、优化了过去的工作,较好地解决了数据不均衡问题。

(2)想法新颖,可解释性好。如将curriculum learning的引入数据不均衡问题的想法,以及easy anchors的改进设计。

(3)curriculum learning思想的引入使得训练过程中模型可以自动调整采样策略及损失计算方法,训练过程得以从易到难,且在不同的阶段有不同的侧重、不同的速率。

(2)DCL框架泛化能力好,判别能力好,方便使用,且在多种不均衡数据集的state-of-the-art方法上都能有优越表现。

探讨

(1) 人类为什么可以处理好不均衡问题?人类和动物都是从简单到复杂就能学得更好吗?(对于第一个问题,有同学认为,这是因为人类会自然地分给与众不同的小类更多关注,相当于增大了sample weight。)

(2) easy anchors的有效性值得探究,我们认为论文中并没有直接的实验可以证明easy anchors有效。文中对Table7的分析有提到这点,但这里DCL与CRL之间的区别不仅仅是easy anchors与all anchors的区别。有同学简单地实验,发现提升不大,分析认为还有大量的anchors是easy的,能盖过少数不easy的anchors造成的noise。因此我们认为这里难以做出提升来自于easy anchors的论断。

(3) few-shot和zero-shot的问题可以看做极端的imbalance问题,这几个类型的问题可以互相借鉴。

(4) 文章的想法很好,效果也很好,作者融合、提升了前人的工作。我们在科研中也经常碰到这类问题,值得学习。

(5) 本文在课程学习难易样例的挑选上,认为imbalance的情况更加容易,balance的就更难。而传统的课程学习对难易样例的挑选有着更明确的方法,在未来的工作中,可以思考这方面的策略能否有提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值