当前位置:   article > 正文

randn函数加噪声_噪声标签学习——DivideMix与SELF论文浅析

加噪声样本增广

6eb8254fd792dca9958c17c8ac6bc518.png

对于监督学习来说,如何获取大量带有标签的数据无疑是一个关键的问题,人工标注的方式费时费力,而一些自动化的方式(比如直接利用社交网络上带有标签的图片)虽然可以快速得到海量的样本,但是却无法保证标签是准确的,往往会带有一些噪声,将这样的数据集直接用于DNN,会令模型对噪声样本过拟合,导致其泛化性能变差。因此,如果能够针对这个问题设计一个框架,使得它对含有噪声标签的数据集是鲁棒的,那么就能很好地减轻工业中的数据标注困难。

这次准备介绍的DivideMix和SELF两篇论文均来自于ICLR2020,它们各自从不同的角度解决了噪声标签的问题,接下来我们就开始对它们一一介绍。

DivideMix

核心思想:模型将它认为是噪声标签的样本分离出来,把它们作为无标签样本,然后用半监督学习(semi-supervised learning, SSL)来对有标签+无标签样本进行学习

Co-divide

首先是对于噪声样本的判别,这里用到了高斯混合模型(Gaussian Mixture Model, GMM),具体来说对于训练集样本

,权重参数为
的模型输出的softmax概率为
,那么其交叉熵损失为:

这样我们就得到了N个样本loss变量,我们认为这N个变量是由两个高斯分布的混合分布产生的,其中均值较大的那个分布是噪声样本,均值较小的是干净样本,那么接下来基于该设定,我们就可以根据每个样本的loss,分别求出它属于干净样本的概率

(可以用Expectation-Maximization, 即EM算法迭代计算,对这部分不了解同学可以看一下相关资料)。

得到

之后,我们就可以按照设定的阈值
将训练数据分为有标签和无标签两类,然后再用半监督学习的方法进行训练。然而,这样做会带来一个问题,那就是 confirmation bias——如果模型在最初的时候把噪声样本误划入干净样本中,那么在之后的训练过程中它就会对该错误的样本过拟合,使得模型在错误的道路上越走越远。也就是说,单独的模型用这样的方法会变得过度“自信”,因此我们在这里需要用 两个网络来协同划分(co-divide)数据,让一个网络为另一个网络划分数据,两个网络的参数、训练过程都不同,从而可以很好地缓解单个模型的过度“自信”现象。

Confidence Penalty

为了让模型收敛,我们需要在划分数据之前,先用全部的数据对模型训练几个epochs,以达到“预热”的目的。然而“预热”过程会导致模型对非对称噪声样本(例如一共0、1、2三类标签,原始标签是1的样本,其噪声标签大量集中在0,少部分在2)过拟合,从而使得噪声样本也具有较小的loss,这样GMM就不好判别了,会影响到后面的训练。为了解决这个问题,我们在“预热”训练时的,可以在原先交叉熵损失的基础上加入额外的正则项

,其中
,这个正则项其实就是一个负熵,用来
惩罚预测概率分布比较尖锐的样本,令概率分布平坦一些,这样就可以防止模型过于“自信”。如下图所示,该方法可以 在保证干净样本的loss较小的基础上,对大多数的噪声样本保持较大的loss

8aa537e0b6a5b3de503b66593779cfe6.png

Co-refinement+Co-guess+MixMatch

对训练数据进行划分之后,我们就可以利用一些现成的半监督学习方法来训练模型,论文中采用的是目前常用的MixMatch方法,不过再用MixMatch之前,论文还做了co-refinement与co-guess的改进,具体如下:

  1. Co-refinement:对于划分出来的有标签样本,我们需要对它的标签值进行微调,首先是对真实值
    和预测值
    按照GMM的干净概率
    线性组合,具体公式为
    ;然后再通过一个temperature为T的锐化函数
    得到微调后的标签
  2. Co-guess:对于划分出来的无标签样本,需要猜测其标签值,这里我们用两个网络预测结果的均值
    ,这样可以使得猜测的标签值更加可靠 ,其中
    为无标签的样本,
    分别代表两个模型的参数;最后通过锐化函数即可得到最终的猜测值
  3. MixMatch:接下来就套用MixMatch方法来做半监督学习,对MixMatch不了解的同学可以看一下MixMatch原论文,这里就不过多介绍了,简单地说就是先对数据进行增广:

dffa1db71f5b98b47ed7c7c9d44515cc.png

然后对有标签样本集

和无标签样本集
分别计算loss:

3fc3633b864c1114586cb20edb0faf3f.png

最后,考虑到在噪声样本较多的情况下,模型更容易将所有样本都预测为同一类,因此这里在加一个正则项,来迫使模型将样本平均地预测为多类,正则项如下所示:

其中

是一个先验分布,例如

这样模型完整的损失函数为:

整体流程

介绍完DivideMix模型具体的各个部分之后,接下来看一下整体流程,流程图如下所示

362884ad4f4f45ffbbc5afe81cffb946.png

算法如下:

12559103a80d4b4bc3ee3a81b86e58c9.png

我们按照伪代码将整体流程再过一遍,主要步骤如下:

  1. “预热”(第2行):输入原始的训练集(带有噪声数据),对两个网络进行几个epochs的训练(注意有confidence penalty正则项),得到“预热”后的网络参数
  2. Co-divide(4~8行):用两个网络分别对每个样本计算loss,然后用GMM得出其为干净样本的概率,最后两个网络交叉划分出有无标签样本。
  3. Co-refinement(17~19行):对真实值
    和预测值
    (这里计算的是增广样本的均值)做线性组合,然后做锐化得到标签
  4. Co-guess(20~21行):采用两个网络预测结果的均值(这里计算的是增广样本的均值)作为无标签样本的猜测值。
  5. MixMatch(23~27行):用MixMatch对处理后的有标签样本集
    和无标签样本集
    进行训练。

实验结果

论文将DivideMix模型与目前主流的一些模型做了对比,部分结果如下所示,更多实验结果和实验细节可见论文实验和附录部分。

559683f642f66d594e8b7692387ec71b.png

e7e8d0cfc4628e1aa5c271b76820ac90.png

SELF

SELF模型的全称是self-ensemble label filtering,其核心思想是:模型将它认为是噪声标签的样本剥离出来,只对剩下的干净数据做监督学习

这篇论文的思路比较简单,先说一下论文是如何剥离噪声数据的,主要是基于这样的观察:对于那些噪声标签的样本,模型在训练的过程中往往预测的波动较大。因此一个自然的想法就是对模型取平均来去除波动,论文这里采用了两种方法:

  • Model ensemble:采用了Mean Teacher算法的思路,在训练过程中对模型的参数进行移动平均(weight-averaged),也就是当用训练数据更新normal model参数的时候,还要通过权重的指数移动平均来维护一个teacher model,同时利用一个正则项(例如KL散度)来令两个model尽量一致,最后用teacher model的输出作为预测结果,如下图(a)所示,具体细节可以看论文附录以及Mean Teacher原论文。
  • Predictions ensemble:在不同的epoch上对teacher model的预测值取平均,公式很简单, 对于第j个epoch,计算模型输出
    的指数移动平均
    ,其中
    是momentum参数。

这样我们就可以根据平均的预测结果来识别出噪声样本,具体来说,检查该样本的标签

是否一致,若一致则认为它是干净样本,否则就会
被暂时剔除出下一个epoch的训练,如下图所示,从(b)可以看出,在做了移动平均之后,噪声标签
(蓝色)对应的预测概率是并不是最大的,所以它不会参与到下一轮的训练,这就实现了对于噪声样本的剥离。

ba70ee6ed24033d66960368040ee012b.png

SELF模型的流程图如下所示:

cbb989816d4fd093b24574221a3393c3.png

算法如下:

2adf0a1d409aab86c0cd680243ab307b.png

算法很直观,这里再简单概括一下:

  1. 让Mean-Teacher模型对所有样本进行预测
  2. 计算预测值的指数移动平均,检查其最大预测值的类别标签是否与给定的标签一致,若不一致则暂时排除出训练集
  3. 用过滤后的数据集来训练Mean-Teacher模型
  4. 不断重复上述步骤,直到模型在验证集上的性能不再提高。

实验结果

下面是SELF模型与目前主流的一些模型的对比,部分结果如下所示,更多实验结果和实验细节可见论文实验和附录部分。

6e5c435ddc0096cc52c1d4b06680ba71.png

97fa5f7a78307a5bf827e3332bc064fb.png

总结

这次我们介绍的两篇论文都是关于含噪声标签学习的,面对同样的问题,两篇论文从不同的思路给出了相应的解决办法。含噪声标签学习主要分为两个步骤:1、对噪声样本的分离,2、模型训练。对于噪声样本的分离问题,DivideMix模型采用的是GMM来分离噪声样本,而SELF模型则通过模型+预测的ensemble对样本进行筛选。对于模型训练,DivideMix将其看作是一个半监督学习问题,而SELF则只对过滤后的样本进行监督学习。

参考文献

[1] DivideMix: Learning with Noisy Labels as Semi-supervised Learning

[2] SELF: Learning to Filter Noisy Labels with Self-Ensembling

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/370128
推荐阅读
相关标签
  

闽ICP备14008679号