本文介绍8篇关于在标签噪声下,通过样本选择而提高模型鲁棒的论文。 推荐指数:5星 。万字长文,建议收藏,慢慢阅读。不足之处,还望批评指正。
本文介绍8篇关于在标签噪声下通过选择样本而提高模型鲁棒的论文:
- K折投票过滤法 (2013);
- Mentornet (2018);
- CurriculumNet (2018);
- Co-teaching (2018);
- Co-teaching+ (2019);
- Area Under the Margin (2020);
- JoCoR (2020);
- Co-learning (2021)。
一、K折投票过滤法
论文: 2013 IEEE | Classification in the presence of label noise: a survey
作者: Frénay, B., & Verleysen, M
引用量: 1426
本综述提到一种K折投票过滤法。配合K折交叉验证方案,获取分类器集合来识别错误标记的实例。创建K对(训练集,验证集)。对于每对集合,使用m个学习算法来学习m个使用训练集的分类器,并对验证集中的样本进行分类。因此,为每个样本获得m个分类,因为每个实例恰好属于一个验证集。第二步是基于投票法,从m个预测中推断样本是否被错误标记。另外,投票也分多数票和共识票。分类器们对某个实例的错误分类超过给定百分比,则投多数票。共识票是指所有分类器都对样本进行了错误分类。实践发现,多数票更好,因为保留错误标记的实例似乎比删除太多正确标记的样本更有害。
二、Mentornet
论文: 2018 ICML | Mentornet: Learning data-driven curriculum for very deep neural networks on corrupted labels
作者: Jiang, Lu, Zhengyuan Zhou, Thomas Leung, Li-Jia Li, and Li Fei-Fei
机构: 谷歌和斯坦福大学
引用量: 1004
代码: https://github.com/google/mentornet
其他资料:【论文精读】MentorNet: Learning Data-Driven Curriculum for Very Deep Neural Networks on Corrupted Labels - Atlas8346,文章链接https://blog.csdn.net/qq\_25011449/article/details/81560353
这篇文章对课程学习有严谨的数据阐述,所以初看论文有些吃力。课程学习(Curriculum Learning)的思路是: 模仿人类的学习过程,主张让模型先从容易的样本开始学习,并逐渐进阶到复杂的样本和知识。 作者提出的MentorNet,便以课程学习为出发点,为StudentNet提供课程(即样本加权方案),让学生网络在老师的指导下,更看重学习一些样本的知识。而课程又会从StudentNet反馈的数据中学习(而不是像以往课程学习,在训练过程中固定人类专家预先定义课程),这里,课程由教师和学生共同协作完成,整个过程能有效提高噪声标签下,模型的泛化能力。
图1:MentorNet和Student Net的训练和测试过程
课程学习的训练优化的目标函数如下:
在传统预定义固定的课程下,样本权重v是:当loss小于超参lambda,则样本权重v为1,否则为0。
当lambda小,只有小loss的样本会被考虑。然而这种课程十分生硬,没有基于学生的反馈做动态调整。因此作者提出MentorNet,能够以数据驱动为核心,学习课程。
MentorNet的学习步骤:(1) 近似存在的课程;(2) 从数据发现新课程。
1. 近似存在的课程
将MentorNet简写为 ,可以透过它得到样本权重。其中, 为MentorNet的模型参数, 为输入特征 (后面会细讲输入特征有什么)。那么前面提到的目标函数可以简化为:
其中课程G定义为(lambda1和lambda2为超参):
如果将G带入前面的目标函数,求导找最小点,可得到:
当λ2=0时,则与self-paced learning原理相同;当λ2≠0时,当loss_i≥λ1+λ2,该样本就会被看作“hard”样本,不会被选入训练;否则样本会按照1−(loss_i−λ1)/λ2进行线性加权进行训练。MentorNet的loss与其他损失函数的对比:
图2:MentorNet的loss与其他损失函数的对比
2. 从数据发现新课程
训练课程时,从训练集抽取子集,且假设子集的样本权重近似最优,即待正确标签的样本权重1,噪声标签为0。直觉上,可以把整个学习过程比作模拟考试。老师(MentorNet)学习去更新教学策略(Curriculum),学生(StudentNet)提供特征。但有时正确标签的样本并不总能获得,所以这里的课程时在正确标签的小数据集上学习后,再迁移到相同topic的大数据集任务上,例如CIFAR10→CIFAR100。
模型结构如下:
图3:MentorNet模型结构
prob sampling可以看做是样本dropout(基于fc2的输出权重列向量,概率采样获取到样本权重向量)。前面有提到MentorNet需要StudentNet提供输入特征,它里面包含loss、epoch percentage (当前epoch的训练进度0-99)、label和loss_diff(loss - 每个mini-batch下第p百分位的loss的指数平均)。
由于交替最小化StudentNet的w和MentorNet的v比较耗时,所以作者提出了SPADE(Scholastic gradient Partial Descent),在mini-batch上随机地最小化w和v:
图4:SPADE训练伪代码
实验结果如下:
图5:不同噪声比例下,CIFAR10和CIFAR100的模型对比
三、CurriculumNet
论文: 2018 ECCV | CurriculumNet: Weakly Supervised Learning from Large-Scale Web Images
作者: Guo, Sheng, Weilin Huang, Haozhi Zhang等人
机构: 深圳码隆科技
引用量: 230
代码: https://github.com/guoshengcv/CurriculumNet
在图像领域,为了减少人工标注成本,会通过使用输入查询(例如文本信息)从公开网络自动收集大量网络图像。这些查询信息可以被视为图像的自然注释,对收集的数据提供弱监督,这是一种几乎无限地增加数据集规模的廉价方法。然而,这样的注释非常不可靠,并且通常包含大量嘈杂的标签。因此针对图像噪声标签,该论文提出了CurriculumNet。
图6:CurriculumNet的应用流程示例
1. 起始特征生成
用整个训练集训练Inception_v2结构的网络,这样每类样本能被映射到一个深度特征空间内。
2. 课程设计
依次对每类样本做以下课程设计:
(1) 基于网络映射的特征向量,计算样本两两之间的欧式距离: ;
(2) 对每个样本计算局部密度(即有多少样本j与样本i的距离小于d_c): 其中,我们将n*n的 矩阵转为1维向量后,排序,选择top第k%位置上的欧式距离值为d_c,实践中,k=60比较好。局部密度 反映了有多少样本靠近样本i,密度越大,说明越可能是带有正确标签的干净样本,因为它们常以相似的外观聚集在一起。反之,噪声标签的样本,密度偏小,即聚集性差。
(3) 对每个样本计算距离 :
如果存在样本j局部密度比样本i的局部密度大,则 为 ,否则为 。则局部密度最大的样本点,有着最大的 ,此点被当作该类的聚类中心。所以,靠近聚类中心的点便更可能有着正确标签。
(4) 根据每个样本点到聚类中心的距离,使用Kmeans聚类成几个子集。其中,离聚类中心近的子集样本subset1,为干净样本,subset2为难样本,subset3为噪声标签样本。如下图左边所示。
图7:课程设计和课程学习
3. 课程学习
前面有提到,课程学习的思路是:模仿人类的学习过程,主张让模型先从容易的样本开始学习,并逐渐进阶到复杂的样本和知识。所以如上图右边所示,作者用Inception_v2的网络,先用干净样本子集1,完成第一阶段的学习,再加入难样本集subset2,完成第二阶段的学习,最后加入噪声样本集subset3,完成第三阶段的学习。通过第2和3阶段的学习,不但没对模型产生负面影响,还提高了其泛化能力。
实验如下,我们能看到样本选择+课程学习带来的提升:
图8:在不同样本配置下,使用基于密度的课程和基于Kmean的课程的loss的变化
四、Co-teaching
论文: 2018 NeurlPS | Co-teaching: Robust training of deep neural networks with extremely noisy labels
作者: Han, Bo等人
机构: 悉尼科技大学,RIKEN,第4范式等
引用量: 1050
代码: https://github.com/bhanML/Co-teaching
本文提出了一种新的深度学习范式,称为协同教学“Co-teaching”,用于对抗嘈杂的标签。下图对比了MentorNet, Decoupling和Co-teaching的差异:
图9:MentorNet (M-Net)、解耦和协同教学之间的误差流比较(误差流来自训练实例的偏差选择)
我们能看到在MentorNet或Decoupling中,来自一个网络的误差会在第二个mini-batch数据中直接传回自身,误差应该越来越多地累积。而在Co-teaching中,两个网络具有不同的学习能力,在每个mini-batch内采样较小训练损失的样本给它们peer network,过滤由噪声标签引入的不同类型的错误。在这个交换过程中,对等网络可以相互减少错误流。
图10:Co-teaching伪代码
作者针对Co-teaching的两个问题做出的解答:
Q1: 为什么基于动态采样比例的采样小损失实例可以帮助我们找到干净的实例?
A1: 在噪声数据集上,即使存在噪声标签,深度网络也会在初始时期学习干净且简单的模式(为此作者选用SGD+momentum做参数优化方法,避免一开始就过拟合噪声数据)。因此,他们有能力在训练开始时使用损失值过滤掉嘈杂的实例。为了避免当epoch数量变大时,在嘈杂的标签上过度拟合。随着epoch增加,小损失实例的采样比例会变得更小(即更加严苛)。丢弃率=1-采样比例R(T),代码如下:
# define drop rate schedule
# num_gradual为伪代码的T_K, 即衰减到什么epoch后终止衰减
rate_schedule = np.ones(args.n_epoch)*forget_rate
rate_schedule[:args.num_gradual] = np.linspace(0, forget_rate**args.exponent, args.num_gradual)
作者建议模型训练初期不删除任何实例,即R(1)=1。
Q2: 为什么我们需要两个网络并交叉更新参数?
A2: 不同的分类器可以生成不同的决策边界,然后具有不同的学习能力(为此使用相同的网络结构,但参数初始化不同)。如果所选实例不完全干净,这两个网络将自适应地纠正对等网络的训练错误。以“同行评审”为例。当学生检查自己的试卷时,他们很难发现任何错误或错误,因为他们对答案有一些个人偏见。幸运的是,他们可以请同学审查他们的论文。然后,他们更容易发现潜在的错误。
实验结果如下:
图11:在MNIST数据集上的测试集准确性和标签准确性
图12:在CIFAR-10上,各方法的表现
五、Co-teaching+
论文: 2019 ICML | How does disagreement help generalization against label corruption?
作者: Yu, Xingrui, Bo Han, Jiangchao Yao等人
机构: 悉尼大学、RIKEN-AIP、阿里达摩院、东京大学
引用量: 366
代码: https://github.com/xingruiyu/coteaching\_plus
Co-teaching的问题:随着epoch的增加,两个网络会收敛到一个共识, Co-teaching渐渐变成自训练的MentorNet。
图13:Co-teaching中两模型的预测值方差
为了解决这个问题,作者提出了Co-teaching+,通过保留预测不一致的样本给对方网络,以保持两个网络之间的持续分歧,从而避免两个网络达成共识后产生累积误差,进而拟合噪声标签。
图14:Co-teaching+的区别
Co-teaching+与原Co-teaching类似地训练两个网络,但它由 分歧更新步骤(数据更新)和交叉更新步骤(参数更新) 组成。最初,在分歧更新步骤中,两个网络首先前馈并预测所有数据,并且只保留预测分歧数据。然后,在交叉更新步骤中,每个网络从这些分歧数据中选择其小损失数据,然后给到对方网络做反向传播,更新参数。
图15:历史模型的组件对比
通俗理解分歧更新的思路使:如果两个学生同样擅长数学但不擅长文学,那么他们的文学复习过程将没有任何进展。因此,最佳同伴应该是互补的,这意味着一个擅长数学的学生最好与另一个擅长文学的学生一起复习。
伪代码如下:
图16:Co-teaching+伪代码
其中,分歧样本即两模型预测不一致的样本:
另外,虽然小损失样本集的采样比例是动态减少的(为了避免因误差累积带来训练后期loss不准确而过多采样噪声标签样本),但作者提供了2种衰减方式:
-
: epoch前的采样比例为变化的 ,之后就固定采样比例 。
-
: epoch前的采样比例为 ,之后就采样比例进一步减少。
注: 为噪声比例,e为当前epoch, 为采样方式变化的分界epoch。因为实践中,噪声比例估计的不准,所以一般偏好第二种采样比例衰减方式。
CIFAR-100的实验表现:
图17:CIFAR-100的测试集表现对比
六、AUM
论文: 2020 NeurlPS | Identifying mislabeled data using the area under the margin ranking
作者: Pleiss, G., Zhang, T., Elenberg, E., & Weinberger, K. Q.
机构: 哥伦比亚大学、斯坦福大学、ASAPP、康奈尔大学
引用量: 86
代码: https://github.com/asappresearch/aum
本文介绍了一个度量指标:Area Under the Margin,简称AUM。它能帮助找到错标样本。全文思想也比较简单,我们知道训练初期模型一般不会过拟噪声标签,泛化性比较好,因此也比较能暴露出错标样本和正常样本的logits的差异。如下图所示:
-
easy正确样本:正确类的logit比其它类logits大,且差异会非常明显。
-
hard正确样本:正确类的logit比其它类logits大,但没有easy正确样本的差异大。
-
错标样本:训练初期,错标样本会偏好预测为正确类,而此时正确类被看标是“错误”类,所以所谓“正确类“的logit就比其它类的最大logits小。
图18:AUM指标的示例
由此可得,epoch t下,样本x,对于标签y的margin是预测出的logit z (在标签y类别下) - 其它类的最大logit值。
负margin意味着错误预测,正margin为正确预测。AUM的计算是平均T个epoch的margin值:
那怎么设定AUM阈值以区分正常样本和错标样本呢?如果基于验证集表现,把AUM阈值当做超参搜索会太耗时。所以作者提出了threshold samples - 用于模拟错标数据,数据相似或小于threshold samples的AUM被看作错标样本。错标样本的构建思路如下:假设我们有N个样本,c个类别。先随机选择出N(c+1)个样本并赋值为第c+1类(人为增加的一个错标类别)作为threshold samples,相应地,网络输出层也要增加一个神经元给第c+1类,因为我们有人造的错标样本,所以能算出threshold samples的AUMs,基于实践发现,99分位数下的threshold samples的AUM作为阈值区分出错标样本的效果是不错的。具体示例如下图所示。
图19:threshold samples的使用示例
完整的AUM使用步骤如下图所示:
在第一次学习率减低之前,重复以上步骤,采样出不同threshold samples,以对全部数据集完成错标样本的检测。
实验效果如下:
图20:实验记录
作者还提供了一个简单的包 (pip install aum) 来计算任何PyTorch分类器的AUM。
七、JoCoR
论文: 2020 CVPR | Combating noisy labels by agreement: A joint training method with co-regularization
作者: Wei, Hongxin, Lei Feng, Xiangyu Chen, and Bo An.
机构: 南洋理工大学、Open FIESTA Center和清华大学
引用量: 206
代码: https://github.com/hongxin001/JoCoRs
基于多视图学习和半监督学习的Co-teaching的目标会最大化不同视角的共识agreement。一种比较直白的方法是在训练过程中,通过peer网络的正则项来约束噪声标签的影响,虽然能提高网络的泛化能力,但仍然受到对噪声标签的记忆效应的影响。为了解决该问题,作者提出了一种称为JoCoR(Joint Training with Co-Regularization)的稳健学习范式,以最大化模型的共识(看论文时,我也有些纳闷,前面所有的相关论文都在避免两个网络随着训练逐渐变得更self-paced,而这里却是反其道而行)。
图21:JoCoR与其他范式的区别
由上图可以看到,相比于Co-teaching+的基于分歧硬采样的策略,JoCoR是通过清晰的正则方法来鼓励两个网络相近。这个正则方法就是在损失函数里引入对比损失:
图22:JoCoR的机制
损失函数如下:
其中,有监督的loss是两个网络的CE loss相加,而第二项损失是对比损失,也即Co-Regularization loss,作者使用了JS散度,为了简化实现,使用了对称KL散度:
整个算法训练的伪代码如下:
图23:CoJoR训练的伪代码
看到这里,如果要强行理解Co-teaching的disagreement和CoJoR的agreement的思路区别,个人感觉是不是能说前者主防守,重心放在:不要噪声样本参与训练。而后者主进攻,重心放在:要把干净样本参与训练。但从下图的表现来看,在噪声比例大的数据集上,Co-teaching+比CoJoR差,所以我对这快还是比较疑惑的,欢迎讨论。
图24:CoJoR在CIFAR的实验表现
八、Co-learning
论文: 2021 ICML | Co-learning: Learning from noisy labels with self-supervision
作者: Tan, Cheng, Jun Xia, Lirong Wu, and Stan Z. Li
机构: 西湖大学,西湖高研院
引用量: 17
代码: https://github.com/chengtan9907/Co-learning-Learning-from-noisy-labels-with-self-supervision
前面的CoJoR利用了两个网络的logits输出,分别计算有监督loss(CE loss)+自监督loss(contrastive loss)。而Co-learning进一步深化该方向,该模型训练一个共享的特征encoder,然后额外加入2个头,其中classifier head(有监督)用于探索与标签相关的信息,对应损失为L_sup,projection head(自监督)用于探索与特征相关的信息,对应损失为L_int。而为了保证两个头之间的任务在特征编码器上有一致性,还加入了损失L_str。因此相比于CoJoR只在label上实现agreement,CoLearning在feature上也实现了agreement(通过共享encoder和L_str实现)。
图25:Co-learning与其他范式的区别
Co-learning的网络结构如下:
图26:Co-learning的网络结构
对应的损失函数如下:
模型训练的伪代码如下:
图27:Co-learning训练伪代码
现在展开细节讲讲Co-learning的pipeline中核心模块:
-
数据增强
-
特征编码
-
计算损失:L_sup、L_int和L_str
1. 数据增强
对x做弱数据增强,得到x1,用于喂入后续的分类头(猜测是为了避免学习难度过大,导致收敛困难,所以使用较弱的数据增强)。对x做强数据增强,得到x2和x3,用于喂入后续的映射头,若同属一个样本的不同转换数据(即u(i)_2,u(i)_3),则为正对,若为不同样本的不同转换数据(即u(i)_2,u(j)_3),则为负对。代码中,关于强弱数据增强操作如下:
self.transform_train_weak = transforms.Compose([
transforms.RandomResizedCrop(32),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])
self.transform_train_strong = transforms.Compose([
transforms.RandomResizedCrop(32),
transforms.RandomHorizontalFlip(),
transforms.RandomApply([transforms.ColorJitter(0.4, 0.4, 0.4, 0.1)], p=0.8),
# transforms.RandomApply([GaussianBlur([.1, 2.])], p=0.5),
transforms.RandomGrayscale(p=0.2),
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])
2. 特征编码
共享特征编码器用于提取特征表征。
3. 计算L_sup损失
为了避免有监督学习快速过拟合噪声标签,作者使用了mixup操作,即从mini batch挑选其他样本m(i),进行加权融合:
对应mixup-loss是:
4. 计算L_int损失
基于projection head得到的v2和v3,计算正pair的相似度/负pairs的相似度之和,再对数化后加负号,这样当正pair的相似度高,负pairs的相似度低时,损失会变小。
D为余弦相似度。
5. 计算L_str
计算携带特征信息的projection vector和携带标签信息的logits vector之间的相似度,用KL散度就行,但KL散度是用的0-1的概率,所以需要把v到y的欧式距离正则化转为0-1范围后,再算KL散度:
图28:从h到g,样本的相似关联结构
欧式距离正则化:
求KL散度:
实验表现如下:
图29:Co-learning在CIFAR-10上的表现
九、总结
本文提到的8种方法里,K折投票过滤法、CurriculumNet和AUM三种方法,在一定程度上是把样本选择和模型正式训练解耦开,而Mentornet、Co-teaching、Co-teaching+、JoCoR和Co-learning却是把样本选择的操作嵌入到模型训练流程当中。前者好处在于样本选择完成后,可以直接接入不同的模型结构做实验,但不是端对端的方案。后者是端对端,但依赖模型和内部参数的调试,因为都在担心训练初期模型过于复杂,或者训练后期,采样过多小损失样本会给后续mini batch流入过多的噪声样本,所以在模型结构上设计的相对不敢那么复杂,后期采样比例也不敢太大。在挑选样本的参照基准上,大多是在标签维度上花功夫,例如logits,预测的label,训练时的loss等。
关于Co系列的模型,对比如下:
图30:Co系列的模型对比
交流群:点击“联系作者”--备注“研究方向-公司或学校”
欢迎|论文宣传|合作交流
往期推荐
[WSDM 2023 推荐系统相关论文整理
2022-11-12
[「快手」用户冷启POSO论文详读
2022-11-05
[POSO方法的实际应用和分析思考
2022-11-05
[NIPS'22「牛津+剑桥」利用迁移学习在异构空间中估计干预效果
2022-10-30
长按关注,更多精彩
点个在看你最好看
