分享

数据不均衡、长尾数据的常用解决方法汇总(附论文及源码)

 mynotebook 2022-11-07 发布于湖南

作者:张大刀

链接:https://mp.weixin.qq.com/s/KCphlKd-Nlwnxfe0ke2C2g

本文仅用于学术分享,如有侵权,请联系台作删文处理

图片
导读
在实际工程项目中,大部分业务场景的数据是不均衡数据,为了对不均衡的数据充分使用,目前计算机视觉中有很多的研究者和工程师从各个角度落地,下面就计算机视觉中样本不均衡问题总结一些常用的方式和技巧,并附上方法的论文和代码。


从技术角度看,在计算机视觉场景中大部分的数据分布不均匀,都是被认为是不均衡的,而长尾数据是一种数据分布不均衡的一个特例,即少数类样本拥有大量的样本(头类),其他类仅有少量样本(尾类)。
图片
这会导致在深度学习训练过程中,模型更偏向于头部数据,对尾部数据,模型表现不佳,则会对学习过程造成困扰。极端的例子如有998个反例,但是正例只有2个,那么学习方法只需要返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例。
有很多的大佬在研究这个领域,这里推荐两篇综述,一是早在2009年时,发表在IEEE上的文章就提出了数据分布不均衡的话题,并就该问题提出了潜在的研究前景[1],二是2019年发表在ACM顶刊上的一篇文章[2]就机器学习中的数据不均衡问题提出了系统级的review。
目前来说对于数据不均衡问题,常见采用几种方式:re-sample 和re-weight,即一个是在训练时对数据重新分布,另一个则是在训练时对各类别的loss重新赋权重,还有训练策略方面的方法。具体的解决方式可以参考下我总结的图:
图片
关于数据不均衡的方法应该远不止以上的方法,这里抛砖引玉,如果大家感兴趣欢迎一起交流。
推荐下Facebook ICKR2020的一篇文章,文章从数据采集层面、分类器选择层面以及解耦训练这几个方向均有提及和验证。[3]

1

训练策略

在训练策略端,有以下几种方式来缓解数据不均衡的问题,如迁移学习、解耦学习、集成学习。

01 迁移学习

迁移学习在深度学习中主要是指将源域中训练学习到的模型放到目标域中,在目标域的数据集上重新训练。模型的预训练是广泛使用的迁移学习方式,如在imageNet上训练好的模型,将其backbone模型迁移到下游任务上。在不平衡学习中还有另外一种迁移方式,即先在完整的数据集上训练得到的模型,迁移到子数据集(重新构建的类别均衡数据集)上,冻结backbone特征提取部分,训练分类器。亲测效果提升明显。

02 解耦学习

解耦学习是将学习过程分成用于特征提取的表征学习和用于分类的分类器学习两个部分,facebook[3] 则提出了两阶段训练的工作:
图片
即先训练CNN的特征提取器,再对其冻结固定后,训练分类器。其效果也是被证明有效的。

03集成学习

集成学习是组合多个网络模块,来解决不平衡学习,一般与数据端重采样一起使用,如假设正例数据n,而反例数据m个。我们可以通过欠采样,随机无重复的生成(k=n/m)个反例子集,并将每个子集都与相同正例数据合并生成k个新的训练样本。我们在k个训练样本上分别训练一个分类器,最终将k个分类器的结果结合起来,获得最终结果。后面有很多的研究学者基于此在上面做一系列的改进,如下图所示:
图片
如BBN[6]则是先在数据端取正常的分布的数据集和均衡数据集,两者共享特征层,不共享分类器的训练后,从开始时正常分布数据集的权重大渐渐过渡到增大下面分支的权重,来将两个数据集集成学习得到模型。来充分使用数据集,是一个端到端的很工程化的方法。
图片

2

数据端

数据端上,对数据不均衡的情况下,通常有两种方法:重采样和数据增强。

01 重采样

重采样分为随机欠采样和随机过采样两种方式,随机欠采样是对头部数据随机采样,达到与尾部数据数量比例在同一量级上;随机过采样为对尾部数据重复采样,使其与头部数据相当。以上两种方式能明显的更新数据分布,我们的训练数据假设不再是真实数据的无偏表述。在第一种方法中,我们会浪费掉很多数据,所以第一种方法一般会结合训练策略中的集成学习,这个在后面的训练策略中详细展开。第二种方法重复使用尾部数据,容易在训练过程中,对尾部数据产生过拟合。facebook[3]对长尾识别中的各个采样策略做了对比验证,具体包括实例平衡采样、类别平衡采样、平方根采样和渐进平衡采样。
图片
其中实例平衡采样是每个样本有相同概率被采样,而类别平衡采样是每个标签被采样的概率相等;平方根采样是实例平衡采样的一种变体,其中每个类别的采样概率与相应类别中样本大小的平方根有关;渐进平衡采样在实例平衡采样和类别平衡采样之间进行渐进插值。同时作者还对分类器学习的各种策略做了对比实验,后面在分类器学习再说。

02 数据增强

数据增强做为数据不均衡下的另外一个解决方案,可以对尾部数据做离线数据增强,增加数据质量和数量。在数据不均衡任务场景重,主要有有两种数据增强方式:常规的数据增强和通过迁移的增强。常规的数据增强主要包括对图像中的对比度、明亮度、平移、裁剪、旋转等能力,还有如copy-paste,mixup,mosica 等最近新提出的数据增强方式,这些增强方式能提高算法的表征学习。
另外一种数据增强基于迁移,特征转移学习发现,尾部类样本的类内方差比头部类的样本小,所以导致特征空间和决策边界有偏差,FTL通过对头部类的类内方差来对尾部样本的特征增强,从而让尾部数据由更高的类内方差,获得更强的尾部数据特征。

3

模型网络模块

除了在数据层面对数据不均衡问题的方案,也有在网络层面上的改进,网络主要分为对数据集提取特征的表征学习和对特征分类的分类器(图像检测天然属于图像不均衡的分类,正样本少于负样本,所以图像检测很多的改进在于采样方式)。

01 表征学习

表征学习主要为提取特征,而特征又分为底层纹理特征,高层语义特征,对不同的任务,想要学习的特征也是不一样的,为了能让分类器更容易的分类,在人脸领域(个人感觉人脸领域对表征的要求高,一般领域backbone的网络基本满足特征提取要求),研究者提出了让学习的特征有侧重点,研究者提出通过距离度量的度量学习,以及增加类间区分度的一种联邦学习(HFL)和Prototype Learning。

02 分类器学习

除了表征学习,分类器的学习也可以有效缓解样本不均衡,类别不均衡会让头部分类器的权重大于尾部分类器,facebook[3]提出了四种分类器:
图片
同时与之前的采样数据一起,实验结果如下:
图片
cvpr2021的一篇文章DisAlign,通过固定特征提取器,引入一个自适应的对齐函数来优化分类器。
图片
微软ACML2022文章提出了一种简单而有效的方法MARC用于边距校准,来校准分类器边距,获得更准确的预测分数。
图片
结果相对于一般的分类器,其在尾部数据的表现拔高一截。

4

loss模块

在样本不均衡的任务中,一个大头的改进即是loss的改进,改变loss在不改变数据集和训练策略的情况下,更换loss属于最简单有效的一种方式了,针对数据不均衡,有提到很多的loss均是从re-weight的方式去探索,如focal loss,balanced loss ,equalization loss 等。

focal loss 

focal loss 是凯明大神提出的一种针对正负样本不均衡和困难样本的一种loss,相信大家都很熟悉了,这里不做细致讲解,其主要的依据是置信学习,以及对少样本属于更多权重的做法。具体可以参见【小白入坑篇】分类Loss函数

class balanced loss 

类别均衡的loss 是cvpr2019的一篇文章,也是一种re-weight的方式:
图片
其中β是适用于每个类别的超参,n_y为样本类别y的样本数据
图片
思路是普世的思路,但看的效果没有碾压式的结论。

equalization loss

equalization loss 是cvpr2020的一篇文章,主要是在loss中对每个类别增加一个w_j的权重:
图片
其中权重的计算:
图片
这里考虑到了检测任务:
E(r)判断是否是前景还是背景,前景E(r)=1,背景0; fj是j出现在数据集的频率。Tλ(x)是一个门限函数,其λ取值和负责分辨是head类还是tail类。
图片
equalization loss 考虑了不仅是在分类任务上,而且在检测分割任务上的re-weight,亲测是有效果的一种方法。

LDAM loss

LDAM loss 是基于SVM的思想:
图片
  作者做实验发现当一个训练集确定下来后,泛化误差与
图片
有关,当:
图片
时,泛化误差最小,于是提出了一个损失函数:
图片
其中标签为y的样本x通过模型预测的结果为zy,zj就是该样本得到的第j类的输出值。该loss相对于传统的Cross Entropy Loss,增加了△y,将由zy变成zy-△y。在其他类的输出不变时,当模型的输出为zy+△y 的时候, LDMA的loss值才和模型的输出为zy时CE的loss 相同,即LDMA算法将上图中的距离拉大了△y,希望正确类的输出能比原先高△y,以达到最优的分类效果。

5

结语

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多