资讯动态

DIVIDEMIX:噪声标签转为半监督学习,双网络协作提升图像分类鲁棒性

发布时间:2026/10/19 16:52:59 来源:尧图企业网站定制
刚开始接触这篇论文的时候我的第一反应是把带噪声标签的学习问题硬生生转换成半监督学习这个角度是不是太绕了但读完DIVIDEMIX的实现细节再动手复现跑完几组实验后我不得不承认这个“绕路”恰恰是它最聪明的地方。DIVIDEMIX不是某个小技巧的堆砌而是把“噪声标签识别”“半监督训练”“一致性正则”“MixUp增强”这些散落的零件组装成了一套能自我纠正的训练框架。对正在做数据清洗、标签质量不高场景下的图像分类或者想了解如何处理脏数据的学习者来说这篇论文的思路和代码实现都相当值得拆开看一遍。1. 噪声标签和半监督学习是怎么扯上关系的1.1 标签噪声为什么这么棘手先说一个训练中经常遇到的痛点标注数据不可能百分之百干净。众包标注、自动抓取、跨语种翻译、历史遗留数据都可能混入错误标签。比如给一张猫的图片标成狗或者把两个相似类别的样本搞混。这些错误标签在训练时会给模型传递错误信号而神经网络强大的记忆能力会把这些错误“背”下来导致泛化性能下降。之前常见的处理思路大概分几派一派是尝试修正标签比如通过预测概率把错误标签纠正过来另一派是降低错误样本的权重类似给样本加权还有一派是直接把怀疑有问题的样本丢掉。但这些方法都有一个共性问题——它们对“哪些样本是错的”这个判断本身没有一个特别可靠的依据而且错误判断一旦发生会在训练过程中被不断放大。1.2 半监督视角的巧妙置换DIVIDEMIX的核心视角转换在于它不再纠结于“把错误标签改成什么正确标签”而是把整个问题重新定义为——我们有一批带标签但可能不准确的数据加上一批“标签不可信”的数据这不就是半监督学习的标准设定吗半监督学习最擅长处理的就是“少量干净标签 大量无标签数据”的场景。如果能够把带噪数据中相对干净的那部分挑出来作为有标签数据把疑似噪声的那部分视为无标签数据那么就可以直接套用成熟的半监督学习框架论文里选的是MixMatch来训练。这样一来问题从“如何纠错”变成了“如何区分可靠与不可靠样本”后者是一个可判别的任务更符合模型在不同样本上表现出的置信度差异。这个视角的好处是它不要求模型对每个噪声样本都给出正确的标签修正而是允许模型把不确定的样本降级为“无标签”参与低置信度的自训练。这种更软的处理方式避免了硬纠正带来的二次错误。2. DIVIDEMIX 的整体设计双网络分工与合作2.1 Co-divide两个网络互相打分如果只用一个网络去判断哪些样本是干净的很容易出现“自圆其说”的偏差——网络在训练中记住了某些错误标签回头再看这些样本时认为它们是“正常”的。DIVIDEMIX采用的方法是训练两个结构相同但初始化不同、数据增强方式也不同的网络让它们互为参照。具体运行机制是在每个训练轮次中两个网络都会基于自己的预测对每个样本计算交叉熵损失。这些损失值会被收集起来分别用高斯混合模型去拟合从而把样本划分为干净集和噪声集。但关键是网络A划分出的干净集和噪声集并不会交给网络A自己用而是交给网络B作为下一轮训练的划分依据反过来也一样。这种做法借鉴了协同训练co-training的思想两个网络在误差上产生分化的能力越强互相纠错的效果就越好。因为两个网络从不同的初始化出发经过不同的增强扰动后对同一个样本往往会产生不同的预测结果。如果网络A认为某个样本是噪声而网络B认为它是干净的那么这种“分歧”本身就提供了一个比单一网络更稳妥的判断依据。实际操作中这个互相划分的机制让训练过程更加稳定很少出现两个网络同时“钻牛角尖”把自己带偏的情况。2.2 用 GMM 拟合损失分布来区分样本判断一个样本是不是噪声为什么要看它的损失值这里背后有一个经验规律模型在训练初期对干净样本的拟合速度比较快所以干净样本的损失通常会显著低于噪声样本。随着训练推进干净样本的损失整体下降而模型开始逐渐记住甚至死记那些错误标签时噪声样本的损失会呈现出另一种分布形态。DivideMix的做法是把当前轮次全体样本的损失值收集出来然后对这些损失值做标准化再用二维高斯混合模型拟合。拟合之后两簇高斯分布分别对应“低损失”干净和“高损失”噪声。每个样本属于噪声簇的后验概率就可以算出来这个概率进一步作为样本加权用于后续损失计算。这里有一个细节值得注意GMM拟合用的是所有样本的loss而不是直接用一个固定阈值去切。因为数据的难度本身是有差异的有些类别的干净样本天生难学损失也会偏高如果一刀切用阈值划分很容易把这类难样本误伤。用GMM拟合双峰分布相当于让数据自己决定干净和噪声的分界处在哪自适应能力更强。实际操作中我通常会对拟合前的损失做log变换这样能让分布更接近高斯形态拟合出的小概率噪声样本也更符合直觉。2.3 MixMatch把两路数据揉进同一个训练框架DIVIDEMIX没有新造一种半监督损失而是直接复用了MixMatch的流程只不过在标签处理上做了针对性设计。MixMatch本身做的事情可以简化理解为对无标签样本做弱增强和强增强用模型当前的预测对这些增强版本预测取平均再经过温度锐化sharpening得到伪标签然后把有标签样本和无标签样本混合做MixUp在混合空间中迫使模型对插值样本的预测也保持一致。在DIVIDEMIX框架中被划分为“干净”的样本携带原始标签作为有标签分支被划分为“噪声”的样本不再承担原始标签的交叉熵损失而是当作无标签样本来处理。这里没有直接抛弃它们而是把它们的原始标签软化成一个平滑分布和伪标签一起参与训练。这样噪声样本的信息仍然被利用只不过信任度被大幅调低模型可以在它们身上学到一定的结构信息又不会被某个错误标签带偏。从整体框架看DivIdeMix就是把co-divide当成漏斗把训练数据分流成两个分支再统一送入MixMatch优化器。整个训练机制是闭环的每一轮都在重新划分和数据混合中迭代而不是固定死哪些样本是噪声。3. 关键细节和训练流程实操拆解3.1 训练阶段从warm up到交替迭代整个训练流程可以粗略分成两个阶段先用全体数据包括噪声标签快速训练一个初始模型用于第一轮的损失计算然后进入主循环每轮重复“计算损失 - 拟合GMM - 划分干净/噪声 - MixMatch训练 - 更新EMA模型”。我自己写训练脚本的时候发现warm up阶段的设置比较关键。论文里把这个热身阶段设计得比较短通常在CIFAR-10上用全部数据训练几十步到一两百步。这个阶段不区分噪声目的是让模型先学到一些最基本的特征否则一上来就划分干净/噪声训练初期特征还没学出来所有样本的损失差异几乎随机GMM也拟合不出有意义的分界。更稳妥的做法是warm up时使用较小的学习率和较少的轮数目标是让模型“看得懂”数据而不是“记得住”标签。3.2 损失函数构成干净和噪声各走各的道训练时实际算三部分损失。第一部分是干净样本的监督损失直接对原始标签做softmax交叉熵第二部分是噪声样本的监督信号对原始标签做一个“打平”处理比如把one-hot向量乘以一个动量系数后加一个均匀分布这样可以保留部分原始标签信息但大大降低其置信度第三部分是MixMatch中无标签分支的一致性损失通常用MSE计算增强混合前后的预测一致性。在实现时我建议把三部分损失分别打印出来观察。一个健康训练过程中的典型趋势是干净样本的监督损失不断下降噪声样本的修正监督损失保持在一个较低水平不再大幅波动一致性损失则逐渐收敛。如果一致性损失异常升高通常意味着伪标签分布出了问题需要回头检查GMM划分或温度参数。在具体工程实现上有一个容易被忽略的细节MixMatch在batch层面做MixUp时需要保证干净样本和无标签样本的数量比例合适。DivideMix在构造每个batch时会从干净样本和无标签样本中分别采样然后按MixUp的lambda参数混合成新样本。如果某个batch里无标签样本比例过高模型的一致性训练会过度主导导致监督信息不足反之亦然。所以训练时保持两大类数据比例均衡能起到隐性正则化的作用效果比单独调MixUp的alpha更明显。3.3 温度锐化和EMA参数更新MixMatch中的温度锐化是一个值得单独拎出来说的细节。伪标签生成后会通过一个temperature参数T进行锐化。T越小锐化越强伪标签越接近one-hotT太大伪标签趋近均匀分布等于不给模型有效信号。DivideMix论文里建议初始伪标签温度设置在0.5附近同时引入一个锚定函数让伪标签的锐化过程是渐进的而不是一开始就完全置信。EMA指数移动平均在训练中也扮演了重要角色。由于样本划分和标签处理是动态更新的模型参数的剧烈波动会传递到下一轮的GMM拟合里造成划分结果的抖动。用EMA维护一个平滑后的模型实际上是在给样本质量判断和伪标签生成加了一个“低通滤波”训练曲线会更稳定。我个人的复现经验是EMA的动量参数设置在0.999左右是一个比较稳妥的选择这样既能跟踪训练进度又不会让历史信息拖慢模型更新。4. 实验效果与消融DIVIDEMIX到底赢在哪4.1 公开数据集上的整体表现论文在多个公开基准上验证了方法最常被引用的是CIFAR-10和CIFAR-100在不同噪声率和噪声类型下的表现。在对称噪声标签随机翻转场景下当噪声率达到40%甚至更高时DIVIDEMIX依然可以维持较高准确率在非对称噪声类似类别的标签互相混淆场景下它的优势同样明显。相比之前的一些代表性方法准确率提升幅度通常达到几个百分点甚至十几个百分点。我自己复现时主要关注的是一个更贴近实际场景的设定——真实混合噪声即一部分样本标签是干净的一部分是对称翻转一部分是不对称混淆。这种混合噪声下DIVIDEMIX的表现虽然不如纯对称噪声那么亮眼但依然比直接用原始标签训练强出一大截。这说明它对“噪声来源复杂”的情况有一定耐受性并不是只能在论文构造的理想噪声下工作。4.2 消融实验给我们的实际操作启示论文的消融实验印证了几个判断。第一去掉co-divide机制只用一个网络做划分准确率会明显下降这说明了双网络互相纠正的必要性第二不把噪声样本当作无标签样本使用而是直接抛弃也会掉点这说明“软化利用”比“硬删除”信息效率更高第三MixMatch中的一致性正则贡献了相当比例的效果去掉一致性损失后模型面对高噪声时容易过拟合。这些消融结果放在一起指向了一个更普遍的经验把一个复杂问题重构成另一个已有成熟方案的问题然后把成熟方案的完整能力发挥出来比引入一个全新的花式模块更稳定可靠。DIVIDEMIX的创新能力也恰恰体现在这——框架结构简单所有组件都有据可循组合起来却产生了明显的协同效应。4.3 收敛速度与计算成本坦白讲DIVIDEMIX的训练成本并不低。相比普通监督训练它需要训练两个网络每轮还要做GMM拟合和MixMatch的数据增强流程训练时长大概会增加两到三倍。不过从另一个角度来看在噪声率较高的数据集上普通监督训练早就已经被噪声带崩了而DIVIDEMIX还能稳定收敛。这个成本换来的收益在脏数据场景下是完全值得的。如果更追求效率可以先在少量数据上把protype跑通再扩展到全量数据。5. 复现避坑指南与工程实现细节5.1 warm up阶段最容易踩的坑我在复现时遇到的第一个问题就是warm up阶段学习率调得不到位导致训练初期模型根本没有学到区分性特征。那时候我观察到的现象是GMM拟合出来的两个分量几乎完全重合划分结果和随机猜差不多。后来用了一个比较保守的方案前若干个epoch用较低的学习率并且把数据增强强度暂时减弱比如先不做CutOut和强RandomCrop让模型先把主干结构稳定住再逐步加大增强强度。一个更隐蔽的问题是warm up结束后第一次做GMM拟合时损失分布往往还不是标准的双峰分布而是拖着一条长长的尾巴。如果用简单阈值去切尾巴上的难样本全都会被误判为噪声。我后来改成对损失值先做log变换再拟合效果会好很多。原因在于log变换能把长尾压缩让两个高斯分量的重叠区域变得更清晰模型对噪声样本的召回和干净样本的精度都有提升。5.2 样本划分频率与数据增强策略另一个实践中需要认真调的点是每隔多少个step重新划分一次样本集合。论文里的标准做法是每个epoch重新计算一遍损失并重新拟合GMM但实际训练中如果一轮里样本数量很大数据增强带来的扰动会让同一个样本在不同epoch之间被划分到不同集合。这个特性其实是好的它给样本划分提供了一个天然的随机性让模型不会死记某一轮的划分结果。我在实验时尝试过每半个epoch就重新划分一次发现训练抖动明显增加模型反而学得更差。原因是划分频率太高模型还没来得及在当前的划分结果上充分训练下一轮的目标分布就变了导致优化不稳定。反过来如果划分频率太低又会让模型长期在一个僵化的划分结果上训练错误判断得不到纠正。目前看下来每个epoch重拟合一次是一个比较平衡的频率既保证了目标分布的时效性又不会让训练变得过于颠簸。数据增强方面我强烈建议保留Mixup操作。有些复现版本为了省显存把MixUp关掉只保留一致性正则效果会掉不少。MixUp的价值在于它是把“干净样本”和“噪声样本”放在同一个平面上插值这样模型学到的决策边界不是过度锐利的对噪声扰动有天然抵抗力。5.3 训练过程监控要盯住哪几个指标训练DIVIDEMIX时我一般不会只盯着测试集准确率而是额外记录三样东西被划分为干净样本的比例、噪声样本的平均损失、两个网络划分结果的一致性程度。被划分为干净样本的比例可以反映模型对数据可靠性的整体判断。在噪声率较高的数据集上这个比例通常会比真实干净样本比例略低一些因为部分难分类的干净样本也会被当成噪声处理。如果这个比例掉得太厉害就需要考虑是不是模型欠拟合如果比例接近100%说明GMM拟合失效了得检查是不是warm up不够或者温度参数太大。两个网络划分结果的一致性也很重要。如果两个网络对一个样本是否属于噪声有高度分歧这个样本大概率处在边界上。训练到后期我会观察这种分歧样本的占比它应当逐渐降低。如果始终维持在高位说明两个网络在利用不同的特征吃饭需要检查数据增强是否过度或者两个网络的初始化是否过于接近。6. 从DIVIDEMIX里学到的通用方法论6.1 分而治之动态分裂比静态过滤更稳健传统的数据清洗思路是训练前离线做一遍把可疑样本一次性踢掉。DIVIDEMIX给人的启发是样本是否可信不应该在训练之前就拍板因为那时模型根本不知道自己在做什么。更合理的方式是在训练过程中动态判断让模型逐步收敛到一个可信状态再不断修正自己的判断。这个“动态分裂”的思路迁移到其他任务上也同样有效。比如在文本分类、目标检测中把置信度阈值换成动态拟合分布的方法可以更精细地进行困难样本挖掘。其实在很多工程场景里“哪些样本该用、哪些该降权”本身就是一个随时间变化的目标静态一刀切的做法往往是最脆弱的。6.2 半监督框架是处理不确定性的通用载体DIVIDEMIX把带噪标签问题放到半监督框架下处理这个思路让我重新审视半监督学习的价值。半监督训练本质上是一个容忍不确定性的体系它不要求所有训练信号都绝对正确而是通过一致性正则、伪标签锐化这些手段从大规模无标签数据中提取结构信息。当一个任务中天然存在不确定标签时与其费劲去纠正它们不如先把它们降级为无标签数据用半监督的方式吸收它们的有效信息。后来我把这个思路用到自己的一个图像分类项目上数据集是从全网抓的标签噪声不可避免。我没有直接把疑似错误样本丢掉而是把它们当作无标签数据参与一致性训练最终效果比单纯丢掉好。这也算是对DIVIDEMIX的一次实战验证。6.3 对工程实践的几个具体建议如果你准备在自己的任务里迁移DIVIDEMIX我会建议先从一个小规模数据集开始。先把双网络的框架跑通确认GMM划分效果符合直觉再考虑扩展到大模型和大数据量上。大规模复现时双网络同时训练对显存的压力是成倍的可以考虑用混合精度和梯度累积来缓解。另一个建议是不要迷信论文里的所有超参数。不同数据集上最优的temperature、MixUp alpha、EMA动量会有差异。最有效率的做法是先用默认参数跑一个baseline然后针对最敏感的参数做小范围网格搜索。根据我的经验排第一需要调的参数往往是温度锐化T其次是干净/噪声样本的比例最后才是MixUp的alpha范围。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑