一句话:伪标签(Pseudo-Labeling)就是先让一个已经训练过的模型去猜无标注数据,把其中"猜得很自信"的那部分结果当成临时答案,再把它们混进训练集,重新训练模型。
打个比方
想象你带一个实习生做题库。真正有标准答案的题只有一百道,但没答案的题有一万道。你不可能每题都亲自批。于是你让实习生先按自己学到的东西把一万道题全做一遍,然后规定:自己觉得有九成把握的题,就当答案是对的,拿去复习;没把握的题直接跳过。复习一轮后,他水平涨了,再回头把之前跳过的题重做一遍,又能捞回一批。
这就是伪标签的循环:训练 → 预测 → 挑高置信的当标签 → 再训练。通常把出预测的模型叫教师(teacher),被教的那个叫学生(student),两者可以是同一个模型,也可以不是。
关键在"高置信"三个字。实现上一般看模型输出的概率,比如只保留预测概率超过某个门槛的样本,或者每个类别只取最靠前的一小撮。也可以不丢硬标签,直接把整条概率分布当软标签用,信息量更大。
为什么它管用,又为什么容易翻车
管用的理由很朴素:无标注数据几乎不要钱,标注数据很贵。模型其实已经对一部分数据学到了不错的特征,让这些可靠判断反过来固化进参数,等于凭空扩大了训练集。
翻车的理由也很朴素:模型错的地方,它自己往往同样自信。你一旦把它的错误当成标准答案,下一轮它就会更坚定地错下去,这叫确认偏误(confirmation bias),噪声会滚雪球。
常见的刹车手段有几个:卡置信度阈值、按类别配平避免某一类被刷屏、给伪标签的损失降权、要求模型对同一张图的不同增强版本给出同样答案(一致性正则)、教师模型用参数的滑动平均慢慢更新而不是蹦来蹦去。具体怎么配,各家实现差别很大,以自己项目的验证集为准。
和几个近邻的区别
注意伪标签和主动学习刚好相反:一个挑最确定的交给模型,一个挑最不确定的交给人类。而知识蒸馏虽然也是"教师教学生",但它通常追求的是把大模型变小,伪标签追求的是白捡数据。
对从业者的意义
第一,这是一条"用算力换标注"的路子,在检测、分割、语音、文本分类里都很常见。第二,做实验时千万别把伪标签打到验证集和测试集上,否则指标会虚高,上线的落差能让你怀疑人生。第三,伪标签本质上是把模型当下的判断写进了数据,迭代节奏太快容易自我强化,建议每轮都留一份干净的人工标注集做体检。
