绸缎庄的老掌柜教徒弟辨认料子。过去他的教学方式简单粗暴:指着真丝说“这就是真丝”,指着棉布说“这就是棉布”,绝不含糊。徒弟学得很快,可一上手就露怯——看见一块带着光泽的仿真丝涤纶,他拍着胸脯打赌“这是纯真丝!”;看到一块斜纹软缎,他一口咬定“这不是真丝!”老掌柜这才明白:教得太绝对,徒弟就会太自信,而太自信的人最容易看走眼。 于是他改了教法。再教认料子时,他不说“这是真丝”,而是说“这块料子,九分像真丝,还有一分可能是别的。”徒弟心里反而有了分寸,遇到新料子不再急着下结论,看走眼的次数反而少了。 这个故事里,“九分肯定、一分保留”的教法,就是深度学习训练中的一个经典技巧——标签平滑(Label Smoothing,LS)。它把“非黑即白”的硬标签,变成“留有余地”的软标签,让分类模型不再过度自信,从而获得更好的泛化能力。本文就用老掌柜的绸缎庄作为贯穿线索,把这个技巧讲透。
对 AI 从业者而言,标签平滑是成本极低的调参技巧:几行代码就能提升分类模型的泛化能力、改善概率校准,是面试与实战中的高频加分点。
可视化演示
展示标签平滑将硬标签转换为软标签的原理、平滑系数alpha调参效果与模型泛化校准提升,切换模式掌握深度学习训练核心技巧。
本节配有交互动效(进入视口后自动加载,约 3KB)。
标签平滑基本原理:硬标签转软标签 标准分类使用独热编码,正确类别概率为1其他为0,驱使模型logit趋向无穷大导致过度自信 标签平滑将硬标签软化:q=(1-a)*onehot+a/K,正确类别降为1-a,其他类别升至a/K,防止过度自信 q_smooth = (1-a)*one_hot + a/K, where K=num_classes, a=smoothing_factor 标签平滑通过软化标签分布提升模型泛化能力
硬标签隐患
老掌柜最初教徒弟,方法极其干脆:抓起一块真丝绸缎往桌上一拍,说“看清楚,这就是真丝”;又抓起一块老棉布,说“这是棉布”。徒弟记性不错,可一到铺子里接活就露馅:客人拿一块带云纹的斜纹软缎,他一口咬定“不是真丝”;客人拿一块垂坠感极好的仿真丝涤纶,他又拍胸脯打包票“百分百真丝”。为什么学得越死,错得越离谱?因为老掌柜的教法里没有“不确定”三个字。
在深度学习分类任务中,这种“绝对化教法”对应的就是硬标签(hard label)。我们用 one-hot 编码把每个训练样本表示成一个向量:正确类别处是 1,其余全是 0。比如一个三分类任务里,“猫”的标签就是 [0, 1, 0],意思是“百分之百是猫,其他任何可能都没有”。模型在交叉熵损失的驱动下,会把正确类别的输出概率一路推向 1,甚至不惜把 logits(softmax 之前的得分)推到极大值,让 softmax 输出彻底饱和。
1. 类别索引定位:假设第 c 类是正确答案,向量只在第 c 个位置写 1。
2. 其余位置置零:其他所有类别的标签值都是 0,模型被明确告知“没有第二种可能”。
这种“过度自信”的后果是:当模型真的遇到一个模棱两可的样本——比如一只姿势奇怪的猫——它依然会给出 95% 以上的置信度。老掌柜很快就发现,徒弟的问题不在记性,而在于师傅把话说绝了。模型也一样:硬标签把话说绝了,它便丧失了“心里打鼓”的能力。
软标签魔法
老掌柜换了个教法。他再教徒弟时,不再说“这是真丝”,而是说“这块料子,九分把握是真丝,还有一分可能是别的。”为了说清楚,他甚至会在桌上摊开五块料子,告诉徒弟:“真丝的可能性九成,棉布、麻布、绸缎、化纤各一丁点可能。”徒弟听完反而头脑清醒:原来料子之间存在相似性,不是非此即彼。
标签平滑做的就是这件事。假设分类任务共有 K 个类别,正确类是第 c 类,硬标签本来在 c 处是 1;标签平滑先取一个很小的系数 α(比如 0.1),把正确类的 1 缩小为 1-α,再把抠出来的 α 平均分给全部 K 个类别。于是原来的 [0, 1, 0] 就变成了 [0.02, 0.9, 0.02](三分类、α=0.1 时)。模型的目标从“非黑即白”变成“九分肯定、一分保留”。
1. 保留主类权重:先把硬标签整体缩放为原来的 (1-α) 倍,正确类置信度被略为削减。
2. 均匀撒下噪音:把 α 平均分成 K 份,每个类别都分到 α/K 的目标值,像撒一层“不确定”的灰尘。
3. 合成软标签:两部分相加,就得到了每个类别的软标签,总和依然是 1。
注意软标签每个位置都不为零,总和仍为 1——它只是把“全押在一处”的确定性,改成了“分散但仍有主次”的温和判断。老掌柜把这个法子称为“给人留一步台阶”,模型从此不必为了凑出一个绝对的 1 而把 logit 推向无穷大。
平滑系数alpha
老掌柜很快发现,“九分肯定”里的“九分”很有讲究。说十分,徒弟又变回那个武断的愣头青;说七分,徒弟拿不准主意,连真丝和仿真丝都不敢分辨了。试来试去,九分刚刚好。标签平滑里的 α 就扮演着这个“几分肯定”的旋钮,它叫平滑系数。
当 α=0 时,软标签退化为硬标签,相当于老掌柜回到“绝对化教法”;当 α 趋近 1 时,软标签趋近均匀分布 1/K,模型几乎学不到类别差异,相当于老掌柜每个答案都说“都有可能”。实践中最常用的值是 α=0.1,也就是“九分肯定、一分保留”。想要理解 α 为什么不能乱调,可以把标签平滑后的交叉熵损失展开来看:
1. 原始交叉熵加权:第一项是标准的交叉熵损失乘上 (1-α),保留“学会区分主类”的核心任务。
2. 均匀性惩罚项:第二项要求所有类别的输出概率不能过低,把模型预测的概率分布“地板”抬高,防止某个 logit 独大。
3. 整体损失:两项相加得到平滑后的总损失,α 决定“地板高度”和“主类压力”的权衡。
从展开式可以看出,α 越大,第二项权重越大,模型越不敢轻视任何类别;但这也会让真正重要的类别变得“含混”。所以 α 一般取 0.1,就像老掌柜定下的规矩:遇到再熟的料子,话也只说九分满,剩下的留给经验去补。实际调参时,可以试着在验证集上观察损失和校准误差(模型自信程度与真实正确率的差距)来微调。
泛化能力提升
徒弟带着“九分肯定、一分保留”的规矩重新上手后,变化是实实在在的:他看走眼的次数少了,偶尔遇到完全没见过的进口面料,也敢说“不敢打包票,但大概率是这一类”,而不是信口开河。为什么留一分余地,反而更准了?因为这一分余地逼着徒弟去看料子的纹理、光泽、手感,而不是背下“标准答案”。
在模型侧,标签平滑相当于一种正则化手段。它把正确类的目标从 1 降到了 1-α+α/K,模型不再需要把 logits 推向极端就能逼近目标,因此学到的特征分布更舒展、更鲁棒。这带来的直接收益是降低过拟合:训练集上的损失虽然比硬标签时略大,但验证集上的准确率通常更高。另一个常被忽视的收益是模型校准(calibration)变好——模型的置信度与真实正确率更匹配。数学上,平滑后正确类的目标峰值是:
1. 主类目标下移:正确类的目标不再是 1,而是 1-α 再加上返还的 α/K。
2. 其他类地板不高:每个错误类分到微小的 α/K,既不是 0 也不是平均主义。
3. 峰值必然小于 1:只要 α>0,正确类目标就严格小于 1,模型不必为了“满分”而极端化。
注意,这里的峰值是训练目标,不是模型输出的硬限制。它相当于老掌柜告诉徒弟:“你不需要一伸手就摸出百分百的把握,摸到九分就该收手了。”模型因此不再把大量精力花在把正确类概率压向 1,而是把精力分散到刻画类别间的细微差别上,泛化能力自然提升。
适用边界
不过,老掌柜也不是什么时候都“留一分”。遇到一位挑剔的老主顾要定制一件只收纯真丝的礼服,他反而会让徒弟把话说死:“这块料子如果不是百分百桑蚕丝,我们分文不取。”因为在这种场景下,模糊的代价太高,而且主顾需要的就是绝对的确定性。标签平滑也有自己的适用边界,不是万金油。
首先,如果训练数据本身标签噪声就很大,标签平滑通常是有益的——因为硬标签强迫模型记住错误答案,平滑则给了模型“反悔”的空间。但如果数据量极小(比如只有几百张图),平滑引入的“不确定”会稀释原本就稀薄的监督信号,反而让模型欠拟合。其次,当类别严重不平衡时,均匀分摊的 α/K 会向头部类别注入更多“虚假目标”,可能加剧尾部类别的学习困难,此时要么调小 α,要么改用类别加权平滑。最后,在知识蒸馏管线里,如果要训练一个教师模型去传授经验,一般不建议对教师使用过强的标签平滑——平滑后的教师像一个说话含糊的师傅,学生从他那里学不到足够犀利的判断力。
至于“什么时候收益最明显”:大规模分类任务(类别多、样本多、训练轮次长)中效果最为稳定,这也是为什么它在 ImageNet 分类、语音识别等任务上成为标配。老掌柜把这条经验浓缩成一句话:“留一分余地,是给运气腾位置;但该下判断的时候,别让余地变成犹豫。”训练你自己的模型时,不妨把 α=0.1 当作默认值,再根据任务和数据量微调。
知识蒸馏关联
老掌柜年纪大了,决定让徒弟出师,自己则带了一批更小的学徒。有趣的是,他教小学徒时不再自己定“九分”的比例,而是让学徒去摸师傅的手感——“真丝和仿真丝,你师傅心里那杆秤,会告诉你怎么掂量。”也就是说,软标签不再是人拍脑袋定的,而是从一个更成熟的老师那里学来的。这正是知识蒸馏(Knowledge Distillation)的思路。
在知识蒸馏中,教师模型先在大数据集上训练,然后用它对新样本做预测;预测时并不直接用 argmax 结果,而是把 softmax 的输出当作软标签教给学生。为了让软标签“更软”,蒸馏引入了一个温度参数 T:T 越大,输出分布越平缓,类别间的相似性信息就越丰富。带温度的 softmax 公式如下:
1. logits 按温度缩放:把网络最后一层的得分 z_i 除以温度 T,温度大于 1 时得分差异被压缩。
2. 软化后的概率:对缩放后的得分做 softmax,得到每个类别的软概率 q(i)。
3. 学生以软标签训练:学生模型用教师输出的 q 分布做目标,学的不是标准答案,而是教师的心得。
标签平滑与知识蒸馏的区别就在这里:前者是“人工设定”的均匀软标签——把 α/K 平均撒给所有类别;后者是“学出来的”软标签——教师模型在训练中自然学到的类别间相似性。标签平滑像是老掌柜凭着经验给的“九一开”,蒸馏则像是小学徒真正去感受师傅那杆秤的分量。两者可以合璧:在大规模分类训练中先加标签平滑提升教师泛化能力,再用蒸馏把教师的经验传授给学生模型。理解这层关系,就能在模型压缩与部署中做出更灵活的设计。
AI 应用场景
电商图像分类模型调优
阶段:训练优化(模型训练)
解决的问题:图像分类模型在标注噪声较多的商品图上容易过拟合,错误样本以 97% 以上的置信度输出,导致后端的规则拦截完全失效。传统交叉熵训练让模型“把话说绝”,而标签平滑通过软目标降低了对噪声标签的记忆强度,同时改善了置信度校准,让置信度与实际正确率对齐。
具体案例:某电商以图搜图场景中,ResNet50 训练时在交叉熵后接入一个平滑损失层,α 取 0.1。经过 90 个 epoch 训练后,Top-5 准确率提升 0.4 个百分点;更关键的是,误检样本的平均置信度从 0.97 降到 0.88,后端可以设置 0.9 的阈值直接拦截大部分误检。
智能客服意图识别
阶段:模型微调(Fine-tuning)
解决的问题:少量样本的意图类别在硬标签训练下极易“死记硬背”,模型对未见过的问法也给出 100% 的自信预测,导致超出范围(OOS)的对话被强行归入某个意图。标签平滑能让模型在这些少数类上学到更温和的决策边界。
具体案例:某智能客服机器人在 BERT 微调阶段加入标签平滑,α=0.1。上线后,OOS 检测的召回率提升了 6%,用户重复提问率下降了 3%,原因是模型不再把“查快递”和“催发货”这样语义相近但不同意图的句子用绝对置信度强硬区分。
目标检测的分类头
阶段:检测模型训练
解决的问题:目标检测框的分类任务中,背景负样本数量远大于前景类别,硬标签会让分类头对背景框也给出极端置信度,干扰 NMS 后处理。标签平滑能在不改变检测框架的前提下,让分类头输出更稳定的分数分布。
具体案例:在 YOLO 系列模型的训练中,对分类分支施加标签平滑(α=0.05 到 0.1),mAP 在公开数据集上稳定提升 0.3~0.8 个点,同时减少了低质量检测框的高置信度输出,让后处理阈值更容易调节。
Python 演示
import torchimport torch.nn.functional as F def hard_loss(logits, target): # 标准交叉熵:只惩罚正确类别 return F.cross_entropy(logits, target) def smooth_loss(logits, target, num_classes, alpha=0.1): # 构造软标签:每个类别先分到 alpha/K soft_target = torch.full_like(logits, alpha / num_classes) # 在正确类位置替换为 1-alpha+alpha/K soft_target.scatter_(1, target.unsqueeze(1), 1 - alpha + alpha / num_classes) log_probs = F.log_softmax(logits, dim=1) return -(soft_target * log_probs).sum(dim=1).mean() num_classes = 5target = torch.tensor([2])# 模拟一个过度自信的样本:类别2得分极高logits = torch.tensor([[10.0, -2.0, 12.0, -1.5, 0.5]]) lh = hard_loss(logits, target)ls = smooth_loss(logits, target, num_classes, 0.1)print("hard loss:", lh.item())print("smooth loss:", ls.item())
soft_target = torch.full_like(logits, alpha / num_classes)初始化每个类别的基础目标 α/K,相当于“每人先分一勺”soft_target.scatter_(1, target.unsqueeze(1), ...)在正确类的位置写入 1-α+α/K,完成软标签构造F.cross_entropy(logits, target)标准硬标签损失,只要求正确类的概率接近 1F.log_softmax(logits, dim=1)计算对数概率,用于手工展开交叉熵计算-(soft_target * log_probs).sum(dim=1).mean()软标签与 log 概率逐元素相乘再取负,得到平滑后的交叉熵损失
常见误区
误区“标签平滑不就是让模型别太自信吗?那把 alpha 设成 0.5 甚至更大,模型不是更谦虚、泛化更好吗?”
正解alpha 越大,软标签越接近均匀分布 1/K,模型会逐渐丧失区分类别的能力。老掌柜如果把话从“九分肯定”改成“五五开”,徒弟连真丝和棉布都不敢分辨了。0.1 是经验默认值,调参时需要观察验证集损失,而不是盲目加大模糊程度。
为何常见:初学者容易把“防过自信”误解为“越模糊越好”,忽略了分类任务的根本是判别力。
误区“训练时用了标签平滑,推理时模型的输出概率偏低,是不是应该把每个概率都除以 (1-alpha) 补回来?”
正解标签平滑只影响训练阶段的损失函数,推理时直接对模型输出做 argmax 即可,不需要任何修正。模型输出概率低一些是正常现象,恰恰说明校准变好了。如果确实需要把概率还原到“硬”尺度,可以用 temperature scaling,但那是另一个话题。
为何常见:人们习惯性地认为“训练时改了什么,推理时就要逆操作”,混淆了损失函数设计与预测解码两个阶段。
误区“反正是一行代码的事,给所有分类模型都加上标签平滑,应该只会变好不会变坏。”
正解在小数据集、类别严重不平衡或模型本身欠拟合的场景,标签平滑会稀释监督信号,反而降低性能。它真正擅长的是大规模分类、标签有噪声、模型容易过拟合的场景。老掌柜也不是对每个客人都说“九分肯定”——该斩钉截铁时就得斩钉截铁。
为何常见:教程和开源代码里大量默认开启 LS,让人误以为它是无条件的“免费午餐”。
误区“软标签嘛,标签平滑和知识蒸馏都是把硬标签变软,本质上是一回事。”
正解标签平滑的软标签是人工构造的均匀分布,所有类别平等地分到 α/K;蒸馏的软标签来自教师模型,携带了类别之间的相似性结构(比如“猫”和“豹”比“猫”和“汽车”更接近)。前者是“一刀切地留余地”,后者是“有重点地传授经验”。
为何常见:两者在形式上都是“非 0/1 的标签”,初学者只看表象不看软标签的生成来源,容易混为一谈。
面试题
Q1. Label Smoothing 最核心的目标是什么?
- A.加速模型收敛速度
- B.缓解模型过度自信← 正确答案
- C.减少模型参数量
- D.自动选择学习率
答案:B。标签平滑通过降低正确类标签的置信度(从 1 降到 1-α+α/K),阻止模型把 logits 推向极端,从而缓解过度自信。加速收敛、减少参数、自动调学习率都不是它的职责。
Q2. 分类任务中平滑系数 alpha 的常用经验值是多少?
- A.设置为 0.01
- B.设置为 0.1← 正确答案
- C.设置为 0.5
- D.设置为 0.9
答案:B。0.1 是 ImageNet、语音识别等大规模分类任务中广泛使用的默认值,对应“九分肯定、一分保留”。0.01 太平滑效果微弱,0.5 和 0.9 会让模型失去判别力。
Q3. 在 K 分类任务中,平滑后正确类别的标签值是多少?
- A.1 - alpha + alpha/K← 正确答案
- B.1 - alpha
- C.alpha/K
- D.(1 - alpha)/K
答案:A。正确类保留 (1-α) 的权重,同时它作为 K 个类别之一,还能拿回一份 α/K,所以是 1-α+α/K。B 漏掉了返还项,C 是错误类的目标值,D 的表达式没有对应含义。
Q4. 当 alpha 取 0 时,标签平滑会退化成什么?
- A.完全随机的均匀标签
- B.标准硬标签 one-hot← 正确答案
- C.知识蒸馏软标签
- D.不改变原始标签分布
答案:B。把 α=0 代入软标签公式,y_soft = y_hard,恰好还原成 one-hot 硬标签。它不会变成均匀标签(那是 α=1 的情形),与蒸馏也没关系。
Q5. 关于标签平滑对训练过程的影响,下列说法正确的是?
- A.惩罚错误类别的极端 logit← 正确答案
- B.抬高所有类别输出的概率地板← 正确答案
- C.等价于交叉熵加正则项← 正确答案
- D.需要修改推理时的解码方式
答案:ABC。从损失展开式看,LS = (1-α)·CE − α/K·Σlog p,第二项惩罚任何类别概率过低。A、B、C 都正确。D 错误,推理时保持 argmax 即可,无需改动。
Q6. 标签平滑与知识蒸馏的关系是什么?
- A.蒸馏的软标签来自教师网络← 正确答案
- B.两者是完全等价的技巧
- C.标签平滑必须配合蒸馏使用
- D.蒸馏的实现依赖标签平滑
答案:A。蒸馏的软标签是教师模型前向输出,携带类别间相似性;标签平滑的软标签是人工均匀构造的。两者不等价,也无依赖关系,但可以组合使用。
Q7. 以下哪种场景不建议直接使用标签平滑?
- A.大规模图像分类基准
- B.类别不平衡的小样本任务← 正确答案
- C.语音识别大词汇量任务
- D.机器翻译大规模语料
答案:B。小样本加严重类别不平衡时,α/K 的均匀分摊会给头部类别注入大量虚假目标,让尾部类别更难学习。A、C、D 都是标签平滑收益稳定的经典场景。
Q8. softmax 输出趋近饱和,通常说明模型处于什么状态?
- A.正确类概率趋近于 1← 正确答案
- B.训练已经完全收敛
- C.学习率调度出问题
- D.需要增大模型容量
答案:A。饱和指某个类别的输出概率接近 1,是过度自信的典型表现,常见于硬标签训练。它不代表收敛良好,反而可能是过拟合的信号。
Q9. 标签平滑带来的收益通常包括哪些?
- A.降低训练集过拟合← 正确答案
- B.改善模型置信校准← 正确答案
- C.防止特征分布极端化← 正确答案
- D.减小模型推理时延
答案:ABC。LS 降低过拟合、改善校准、让特征分布更舒展,这些都有明确证据。推理时延取决于模型结构和硬件,与训练技巧无关,D 错误。
Q10. 训练阶段加了标签平滑,推理阶段应该怎么做?
- A.概率需减去 alpha/K
- B.直接保持 argmax 不变← 正确答案
- C.输出除以一减 alpha
- D.使用均匀分布做解码
答案:B。标签平滑只修改训练损失,不改变模型输出层,推理时直接 argmax 即可。A、C 是把训练目标误当成推理修正,D 更是完全偏离了解码逻辑。