伪标签是什么?用模型自己的预测给无标签数据当答案
伪标签(Pseudo-label),也叫伪标记,是半监督学习中的一种常用方法:先用少量有标签的数据训练一个模型,再用这个模型去预测大量没有标签的数据,把那些模型很有把握的预测结果当作“标签”,与原来的有标签数据合在一起,继续训练模型。这些由模型自己生成的标签并不一定正确,所以叫作“伪”标签。
为什么要用伪标签
在很多实际问题中,获取没有标签的数据很容易,但给数据打标签却需要大量的人力和金钱。比如网上有海量的图片,但要请人为每一张标注类别,代价非常高。伪标签方法希望利用大量无标签的数据来提升模型的效果:模型在无标签数据上做出的高置信度预测,大多数是正确的,把它们当作训练数据,相当于免费地扩充了训练集。它的思想与古老的“自训练”方法一脉相承,2013 年,Dong-Hyun Lee 在一篇论文中把伪标签方法系统地应用于深度神经网络,使这一名称广为人知。
它是怎么做的
第一步,用已有的少量有标签数据训练一个初始的模型。第二步,用这个模型对所有无标签的数据进行预测,得到每个样本属于各个类别的概率。第三步,筛选:只保留那些模型非常有把握的预测,比如最大概率超过 0.95 的样本,把模型预测的类别当作它们的伪标签。第四步,把这些带有伪标签的样本加入训练集,与原有的有标签数据一起重新训练模型。第五步,用新的模型重复上面的过程。在一些做法中,伪标签会在每一轮训练中动态地更新,而且随着训练的进行,逐渐增大伪标签数据在损失中所占的权重。
它为什么有效
伪标签方法的效果可以从半监督学习的“低密度分隔”假设来理解:通过让模型对无标签数据也给出确定的预测,相当于鼓励模型的决策边界远离数据密集的区域,穿过数据稀疏的“空隙”。这在效果上类似于“熵最小化”,也就是让模型在无标签数据上的预测尽量自信,而不是模棱两可。
主要的风险:确认偏差
伪标签方法最大的风险是错误的自我强化:如果模型在早期对某些样本的预测是错的,这些错误的伪标签会被加入训练,让模型更加相信这些错误,进而产生更多类似的错误,形成恶性循环。这被称为确认偏差。为了缓解这一问题,常用的做法包括:设置较高的置信度阈值,只使用最有把握的预测;对伪标签数据赋予较小的权重;对不同的类别分别设置阈值,避免模型总是偏向那些容易的类别;以及使用多个模型相互提供伪标签,比如协同训练,降低单个模型错误的影响。
后续的发展
Noisy Student:谷歌在 2019 年提出的方法,先用有标签数据训练一个“教师”模型,为大量无标签图片生成伪标签,再训练一个同样大小甚至更大的“学生”模型,并在训练学生时加入数据增强、Dropout 等噪声,然后让学生成为新的教师,如此反复,在 ImageNet 上取得了当时非常出色的成绩。FixMatch:2020 年提出的方法,对一张无标签图片做一次轻微的增强,用模型的高置信度预测作为伪标签,再要求模型对同一张图片经过强烈增强后的版本也给出相同的预测,把伪标签和一致性正则化巧妙地结合在一起。如今,伪标签的思想也被广泛地用于大模型:比如用大语言模型自动为数据生成标注或回答,再用这些合成的数据训练模型;用语音识别模型为大量没有字幕的音频生成转写文本,用于训练更好的模型。在这些场景中,同样需要对生成的伪标签进行质量筛选。