训练一个图像分类模型,测试集准确率达到95%。随机抽取一个样本,模型输出预测概率:[0.999, 0.001, 0.000, …]。看起来模型对这个预测非常自信——99.9%的置信度。但这个置信度真的可靠吗?
问题在于,神经网络天生就有"过度自信"的倾向。一个在训练集上达到99%准确率的模型,可能在测试集上输出99.9%的置信度,即使它的实际准确率远低于此。这种现象被称为校准误差——模型输出的概率值与其真实准确率不匹配。
这种不匹配带来的问题远不止于"数字看起来不对"。在医疗诊断场景中,医生需要根据模型的置信度决定是否进行进一步检查;在自动驾驶中,系统需要根据置信度决定是继续行驶还是请求人工接管。如果模型"嘴上说很确定,实际上经常出错",后果可能是灾难性的。
2016年,Christian Szegedy等人在研究Inception架构时提出了一个简单而优雅的解决方案:不要让模型学到"非此即彼"的绝对判断,而是让它学会保留一点点"不确定性"。这个方法就是标签平滑(Label Smoothing)。
核心原理:从硬标签到软标签
在传统分类任务中,我们使用one-hot编码表示标签。假设一个三分类问题,类别1的正确标签是[1, 0, 0]。这意味着模型被期望学习到:属于类别1的概率是100%,属于其他类别的概率是0%。
标签平滑的核心思想是:把这种"绝对"的标签变得稍微"软"一点。具体来说,对于一个$K$分类问题,原始one-hot标签$y$经过平滑处理后变为$y'$:
$$y'_k = (1-\varepsilon) \cdot y_k + \frac{\varepsilon}{K}$$其中$\varepsilon$是平滑参数(通常取0.1),$K$是类别总数。
用一个具体例子说明:假设有一个三分类问题,真实标签是类别0。原始one-hot编码为$[1, 0, 0]$。如果使用$\varepsilon=0.1$的标签平滑,平滑后的标签变成:
$$[0.9 + 0.1/3, 0 + 0.1/3, 0 + 0.1/3] = [0.933, 0.033, 0.033]$$graph LR
A[原始标签<br/>1, 0, 0] -->|标签平滑| B[平滑标签<br/>0.933, 0.033, 0.033]
B --> C[模型学习<br/>不再追求绝对确定]
C --> D[输出概率更合理]
这个看似简单的变化,背后的数学原理是什么呢?
从交叉熵损失的角度理解
标准交叉熵损失定义为:
$$\mathcal{L}_{CE} = -\sum_{k=1}^{K} y_k \log(p_k)$$其中$y_k$是真实标签,$p_k$是模型预测概率。当$y$是one-hot编码时,损失简化为$-\log(p_{true})$——只要模型对真实类别的预测概率越高,损失就越小。
引入标签平滑后,损失变为:
$$\mathcal{L}_{LS} = -\sum_{k=1}^{K} y'_k \log(p_k)$$可以将其展开为:
$$\mathcal{L}_{LS} = (1-\varepsilon)\mathcal{L}_{CE} + \varepsilon \cdot \mathcal{H}(u, p)$$这里$\mathcal{H}(u, p)$是预测分布与均匀分布之间的交叉熵。这意味着标签平滑实际上在原始损失之外,额外加入了一项:惩罚预测分布与均匀分布的差异。
换言之,模型不仅要正确分类,还被要求"不要太过于确定"。
从KL散度的角度理解
另一个理解角度是将标签平滑视为对目标分布的修改。设$q$为真实分布(one-hot),$u$为均匀分布,标签平滑后的目标分布为:
$$q' = (1-\varepsilon)q + \varepsilon u$$训练目标变为最小化$KL(q' || p)$。由于KL散度可以分解为:
$$KL(q' || p) = H(q') - H(q'; p)$$其中$H(q')$是常数,最小化KL散度等价于最小化交叉熵$H(q'; p)$。
这个视角揭示了标签平滑的一个关键特性:它改变了优化的目标分布,从"绝对确定"变成"保留不确定性"。
为什么有效:三重视角
视角一:正则化效应
从损失函数的展开式可以看出,标签平滑引入了一个正则化项:
$$\mathcal{L}_{LS} = (1-\varepsilon)\mathcal{L}_{CE} + \frac{\varepsilon}{K}\sum_{k=1}^{K} \log(p_k)$$第二项鼓励模型对所有类别都保持一定的"关注度",而不是完全忽略非目标类别。这类似于L2正则化鼓励权重变小,标签平滑鼓励预测概率分布更加"平缓"。
Lukasik等人在2020年的研究中证明,对于线性模型,标签平滑的效果类似于权重的L2收缩。这意味着它可以通过增加决策边界的margin来提高泛化能力。
视角二:特征空间聚类
Müller、Kornblith和Hinton在2019年NeurIPS发表的论文"When Does Label Smoothing Help?“中,通过可视化倒数第二层的特征表示,发现了一个有趣的现象:
不使用标签平滑时,同一类别的样本在特征空间中形成紧密的簇,不同类别之间界限分明。
使用标签平滑后,同一类别的样本簇变得更加"松散”,但不同类别之间的界限仍然清晰。
graph TD
A[不用标签平滑] --> B[特征聚类紧密<br/>类别间界限分明]
C[使用标签平滑] --> D[特征聚类松散<br/>仍保持可分性]
B --> E[可能过度拟合<br/>对噪声敏感]
D --> F[泛化能力更强<br/>抗噪声能力提升]
这种"松散但不混淆"的特性,正是标签平滑能够提高泛化能力的关键。研究者还发现了一个更微妙的现象:标签平滑会"擦除"logits中关于样本相似性的相对信息。这对知识蒸馏有重要影响,我们后面会详细讨论。
视角三:隐式模型集成
标签平滑还可以从模型集成的角度理解。每个样本的平滑标签可以看作是对多个"虚拟样本"的期望标签。具体来说:
$$y' = (1-\varepsilon)y_{true} + \varepsilon \cdot \frac{1}{K}\sum_{k=1}^{K}y_k^{uniform}$$这相当于告诉模型:“这个样本有$(1-\varepsilon)$的概率属于真实类别,有$\varepsilon$的概率可能是任何类别”。这种"不确定性注入"天然带有正则化效果。
模型校准:从自信到可靠
模型校准衡量的是预测概率与实际准确率的一致性。一个良好校准的模型,如果它输出80%的置信度,那么在所有输出80%置信度的预测中,应该有大约80%是正确的。
衡量校准质量的常用指标是期望校准误差(Expected Calibration Error, ECE),定义为:
$$ECE = \sum_{m=1}^{M} \frac{|B_m|}{n} |acc(B_m) - conf(B_m)|$$其中将预测按置信度分成$M$个区间,$B_m$是第$m$个区间内的样本集合,$acc(B_m)$是该区间内的实际准确率,$conf(B_m)$是平均置信度。
graph LR
A[模型输出概率] --> B[按置信度分桶]
B --> C[计算每桶准确率]
C --> D[与置信度对比]
D --> E[ECE指标]
Müller等人的研究表明,标签平滑可以显著降低ECE。在他们实验中,使用$\alpha=0.1$的标签平滑,可以将ImageNet/Inception-v4的ECE从0.071降低到0.035——这意味着模型的置信度更加可靠。
更有趣的是,他们发现标签平滑可以达到与**温度缩放(Temperature Scaling)**相当的校准效果,而且不需要额外的后处理步骤。温度缩放是一种常用的校准方法,需要在验证集上学习一个温度参数。标签平滑则是在训练过程中直接实现校准,是一种"一次性"的解决方案。
下表展示了不同方法对ECE的影响:
| 方法 | 数据集/架构 | ECE |
|---|---|---|
| 基线(无处理) | CIFAR-100/ResNet-56 | 0.150 |
| 温度缩放 | CIFAR-100/ResNet-56 | 0.021 |
| 标签平滑($\alpha=0.05$) | CIFAR-100/ResNet-56 | 0.024 |
| 基线(无处理) | ImageNet/Inception-v4 | 0.071 |
| 温度缩放 | ImageNet/Inception-v4 | 0.022 |
| 标签平滑($\alpha=0.1$) | ImageNet/Inception-v4 | 0.035 |
数据来源:Müller et al., NeurIPS 2019
应用历史:从Inception到Transformer
标签平滑最早由Szegedy等人在2016年提出,用于改进Inception架构在ImageNet上的表现。原文描述简洁:
“We propose to incorporate a smoothing term in the cross-entropy loss… This prevents the network from becoming overconfident.”
实验结果显示,使用$\varepsilon=0.1$的标签平滑,ImageNet top-1准确率提升了约0.2%。虽然提升幅度不大,但考虑到这只是损失函数的一个微小改动,这个结果相当可观。具体来说,Inception-v2的top-1错误率从23.1%降低到22.8%。
真正让标签平滑"出圈"的,是2017年的Transformer论文"Attention Is All You Need"。论文明确写道:
“During training, we employed label smoothing of value $\varepsilon_{ls}=0.1$.”
这是少数在论文中明确提到使用的训练技巧之一。之后,标签平滑成为许多大型模型的标配:BERT、GPT系列、Vision Transformer等,几乎都在训练中采用了标签平滑。
timeline
title 标签平滑发展历程
2016 : Szegedy等人提出<br/>Inception-v2使用
2017 : Transformer论文<br/>明确使用ε=0.1
2019 : Müller等人系统研究<br/>揭示校准和蒸馏影响
2020 : Lukasik等人发现<br/>噪声标签处理效果
2025 : ICLR论文揭示<br/>选择性分类局限性
值得注意的是,Transformer论文中的标签平滑参数选择$\varepsilon=0.1$,这个值后来成为业界共识,大多数实现都默认使用这个值。
与知识蒸馏的复杂关系
知识蒸馏是一种模型压缩技术,通过让"学生"模型学习"教师"模型的软标签来传递知识。直觉上,教师模型的软标签包含比one-hot标签更丰富的信息。
然而,Müller等人在2019年发现了一个"反直觉"的现象:如果教师模型使用了标签平滑训练,反而会损害学生模型的性能。
为什么会这样?
研究者发现,标签平滑会"抹平"教师模型的logits中的相对信息。具体来说,不使用标签平滑的教师模型,其logits在非目标类别之间存在可区分的差异,这些差异包含关于样本相似性的信息。使用标签平滑后,这些信息被"擦除"了。
用一个例子说明:假设有一个鸟类分类任务,图片是一只麻雀。不使用标签平滑的教师模型可能输出[0.95, 0.02, 0.02, 0.005, 0.005],其中"燕子"和"知更鸟"的分数略高于"猫"和"狗"。这些细微差异告诉学生模型:“这个样本和燕子、知更鸟比较相似”。使用标签平滑后,输出可能变成[0.93, 0.02, 0.02, 0.015, 0.015],相对信息被模糊化了。
研究者通过计算互信息来量化这种信息擦除。他们发现,随着训练进行,使用标签平滑的模型的互信息显著降低,最终趋近于$\log(2)$——这对应于极端情况,即所有训练样本只保留了一个比特的信息:属于哪个类别。
graph TD
A[教师模型训练] --> B{是否使用标签平滑?}
B -->|是| C[logits信息被擦除]
B -->|否| D[保留样本相似性信息]
C --> E[学生模型学到更少]
D --> F[学生模型学到更多]
但是,Lukasik等人在2020年的研究发现了另一种情况:当训练数据存在标签噪声时,对教师模型使用标签平滑反而有益。
原因在于,噪声标签会导致教师模型对错误标签产生过度自信。标签平滑可以"平抑"这种过度自信,传递给学生模型的是更加"谨慎"的知识。在噪声数据场景下,这种谨慎反而是正确的。
这个发现揭示了机器学习中一个普遍规律:没有放之四海而皆准的技巧,适用性取决于具体场景。
噪声标签的意外收获
标签平滑与噪声标签的关系,可以从两个看似矛盾的角度理解:
角度一:标签平滑像是"注入噪声"
如果训练数据本就包含噪声标签,再进行标签平滑,岂不是"错上加错"?数学上,标签平滑确实等价于向标签中注入对称噪声。
角度二:标签平滑具有"去噪"效果
实验结果出乎意料:标签平滑不仅没有加剧噪声问题,反而提升了模型在噪声数据上的表现。
Lukasik等人的实验数据清晰展示了这一效果:
| 噪声率 | 不用标签平滑 | 用标签平滑($\alpha=0.2$) | 提升 |
|---|---|---|---|
| 20% | 70.86% | 71.55% | +0.69% |
| 40% | 50.67% | 55.90% | +5.23% |
| 60% | 37.58% | 42.39% | +4.81% |
数据来源:CIFAR-100,ResNet-32,Lukasik et al., ICML 2020
为什么会有这种"去噪"效果?研究者从正则化角度给出了解释。标签平滑作为一种L2正则化,会促使权重向零收缩。在线性分类器中,这意味着决策边界会远离被噪声影响的样本,从而降低噪声的影响。
更重要的是,标签平滑降低了模型对任何单个标签的"执着"。当模型不再追求100%的置信度时,它对噪声标签的敏感度也会降低。这是一种"不求绝对正确,但求整体稳健"的策略。
研究者还发现,在噪声数据场景下进行知识蒸馏时,对教师模型使用标签平滑是有益的——这与干净数据下的结论相反。这再次说明,理解数据特性是正确应用技术的关键。
局限性:什么时候不该用?
标签平滑并非万能良药。2025年ICLR的一项研究揭示了一个重要的局限性:标签平滑会损害选择性分类任务(Selective Classification)的性能。
选择性分类指的是模型可以选择"拒绝预测"的场景。例如,在医疗诊断中,如果模型对某个样本不够确定,可以选择"拒绝诊断"并转交人工。这需要模型输出的置信度能够可靠地反映预测的可靠性。
研究发现,标签平滑会"压缩"模型输出的logits分布,使得正确预测和错误预测的置信度差异变小。结果就是,基于置信度的拒绝策略效果下降。
具体来说,研究者观察到:
- 标签平滑使得正确预测的最大logit值下降
- 同时错误预测的logit值相对上升
- 两者的差异变小,导致选择性分类性能下降
论文中提出的解决方案是使用Margin-based Label Smoothing,只在分类边界的样本上应用平滑,而不是对所有样本一视同仁。这提醒我们:在使用标签平滑时,需要考虑具体的任务需求。
另一个需要谨慎的场景是类别不平衡问题。当某些类别的样本数量远少于其他类别时,均匀分布的平滑可能不是最佳选择。有研究者提出了类别感知的标签平滑(Class-aware Label Smoothing),对少数类别使用更小的平滑参数。
graph TD
A[标签平滑适用性分析] --> B{任务类型?}
B -->|标准分类| C[推荐使用]
B -->|知识蒸馏<br/>教师训练| D[谨慎/避免使用]
B -->|选择性分类| E[可能有害]
B -->|噪声标签数据| F[强烈推荐]
C --> G[ε=0.1为默认值]
D --> H[会擦除相对信息]
E --> I[考虑margin-based变体]
F --> J[ε=0.1-0.2效果更佳]
实现细节:PyTorch中的标签平滑
在PyTorch 1.10及以上版本,CrossEntropyLoss直接支持标签平滑参数:
import torch
import torch.nn as nn
# 使用标签平滑,alpha=0.1
criterion = nn.CrossEntropyLoss(label_smoothing=0.1)
# 训练循环中正常使用
for inputs, targets in dataloader:
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
对于使用旧版本PyTorch的用户,可以手动实现标签平滑:
def label_smoothing_cross_entropy(logits, targets, epsilon=0.1):
"""
手动实现带标签平滑的交叉熵损失
Args:
logits: 模型输出,shape为[batch_size, num_classes]
targets: 真实标签,shape为[batch_size]
epsilon: 平滑参数
"""
num_classes = logits.size(-1)
# 将one-hot标签转换为平滑标签
smooth_targets = torch.zeros_like(logits)
smooth_targets.fill_(epsilon / (num_classes - 1))
smooth_targets.scatter_(1, targets.unsqueeze(1), 1.0 - epsilon)
# 计算交叉熵
log_probs = torch.log_softmax(logits, dim=-1)
loss = -torch.sum(smooth_targets * log_probs, dim=-1)
return loss.mean()
需要注意的是,手动实现时平滑标签的计算方式略有不同。PyTorch官方实现使用的是:
$$y'_{smooth} = (1-\varepsilon)y_{onehot} + \frac{\varepsilon}{K}$$而上面的手动实现使用的是:
$$y'_{smooth} = (1-\varepsilon)y_{onehot} + \frac{\varepsilon}{K-1}(1-y_{onehot})$$两种方式在实践中差异很小,但理解这一点有助于调试。
参数选择建议
关于平滑参数$\varepsilon$的选择,基于实践经验和研究文献,有以下建议:
| 场景 | 建议值 | 理由 |
|---|---|---|
| 通用分类任务 | 0.1 | Transformer论文的选择,业界共识 |
| 数据量较小 | 0.05-0.1 | 防止过度正则化 |
| 噪声标签数据 | 0.1-0.2 | 更强的去噪效果 |
| 知识蒸馏(教师) | 0 | 避免擦除相对信息 |
| 选择性分类 | 慎用或用变体 | 考虑margin-based方法 |
| 类别不平衡 | 类别感知平滑 | 少数类用更小的$\varepsilon$ |
一个值得注意的细节:$\varepsilon$不应该设置得太大。当$\varepsilon$接近$1/K$时,平滑后的标签接近均匀分布,模型将难以学到有意义的模式。Szegedy等人在原始论文中指出,$\varepsilon=0.1$对于ImageNet(1000类)是一个合理的选择,因为平滑后的目标标签仍然保留了足够强的信号。
graph LR
A[选择ε值] --> B{数据量大小?}
B -->|大量数据| C[ε=0.1]
B -->|中小数据量| D[ε=0.05-0.1]
C --> E{标签噪声?}
D --> E
E -->|有噪声| F[可尝试ε=0.15-0.2]
E -->|无噪声| G[保持默认]
F --> H[验证集调优]
G --> H
理论分析:为什么0.1成为默认值?
Szegedy等人在选择$\varepsilon=0.1$时,给出了一个简洁的直觉:这个值足够小,不会显著改变模型的训练目标;但又足够大,能够有效防止过度自信。
从信息论角度,标签平滑可以看作是在目标分布中注入了一定的"熵"。对于$K=1000$类的ImageNet分类任务:
- 原始one-hot标签的熵:$H(y) = 0$
- 平滑后标签的熵:$H(y') = -\sum_k y'_k \log y'_k$
对于$\varepsilon=0.1$,$K=1000$的情况:
$$H(y') \approx -(0.9 \log 0.9 + 0.1 \times 999 \times \frac{0.1}{1000} \log \frac{0.1}{1000}) \approx 0.39$$这个熵值相对较小,意味着目标分布仍然相当"尖锐"。但这个小变化足以改变梯度行为,阻止logits无限增大。
从优化角度看,标签平滑改变了最优解的性质。不使用标签平滑时,最优解要求$z_{true} \to \infty$(对数几率无限大)。使用标签平滑后,最优解变为一个有限值:
$$z^*_{true} - z^*_{other} = \log\frac{(1-\varepsilon) + \varepsilon/K}{\varepsilon/K} \approx \log\frac{K(1-\varepsilon)}{\varepsilon}$$对于$\varepsilon=0.1$,$K=1000$,这个值约为$\log(9000) \approx 9.1$。这意味着模型学到的logits会被限制在一个合理的范围内,而不是无限增大。
总结
标签平滑是一个"小而美"的正则化技术。它通过一个简单的数学变换,将绝对的one-hot标签变成"保留不确定性"的软标签,从而解决神经网络过度自信的问题。
从实践角度看,标签平滑在以下场景特别有效:
- 大规模分类任务(如ImageNet)
- 需要良好校准的应用场景
- 训练数据存在噪声标签
但使用时也需要注意:
- 可能损害知识蒸馏的效果
- 可能影响选择性分类任务
- 参数选择需要根据具体场景调整
最后,标签平滑的成功揭示了一个深层次的道理:教模型"知道自己不知道什么",可能比教它"什么都知道"更重要。这种思路在机器学习领域正变得越来越重要,从置信度校准到不确定性估计,都是这一理念的体现。
在深度学习"大力出奇迹"的时代,标签平滑提醒我们:有时候,承认一点不确定性,反而能走得更远。
参考文献
-
Szegedy, C., Vanhoucke, V., Ioffe, S., Shlens, J., & Wojna, Z. (2016). Rethinking the Inception Architecture for Computer Vision. CVPR 2016.
-
Müller, R., Kornblith, S., & Hinton, G. E. (2019). When Does Label Smoothing Help? NeurIPS 2019.
-
Lukasik, M., Bhojanapalli, S., Menon, A. K., & Kumar, S. (2020). Does Label Smoothing Mitigate Label Noise? ICML 2020.
-
Vaswani, A., Shazeer, N., Parmar, N., et al. (2017). Attention Is All You Need. NeurIPS 2017.
-
Guo, C., Pleiss, G., Sun, Y., & Weinberger, K. Q. (2017). On Calibration of Modern Neural Networks. ICML 2017.
-
Pereyra, G., Tucker, G., Chorowski, J., Kaiser, L., & Hinton, G. (2017). Regularizing Neural Networks by Penalizing Confident Output Distributions. ICLR Workshop 2017.
-
“Towards Understanding Why Label Smoothing Degrades Selective Classification and How to Fix It”, ICLR 2025.