标签平滑
Label smoothing 把 one-hot 变成 soft target,减轻 overconfident logits——有时改善校准和泛化,过大 smoothing 会 hurt top-1 acc。

1. one-hot 鼓励 logit 无穷大
硬标签 one-hot 鼓励正确类 logit 趋于无穷、其余趋于负无穷——训练集上 acc 高,但 logits 过度自信,calibration 差,泛化有时也 hurt。Label smoothing(Szegedy 等)把 target 从 one-hot 变成 soft distribution,正确类 ,其余类均分 。
2. 公式与 PyTorch API
PyTorch 1.10+ 内置:nn.CrossEntropyLoss(label_smoothing=0.1)。 是 ImageNet 常见起点;过大(如 0.3)会明显 hurt top-1 acc。
criterion = nn.CrossEntropyLoss(label_smoothing=0.1)
loss = criterion(logits, targets)手动实现等价于对 soft target 做 KL 或 CE——用官方 API 避免 off-by-one。多标签任务 smoothing 语义不同,别直接套多分类公式。
3. 何时有用
大模型、大数据、label 有噪声时 smoothing 常改善泛化和 calibration。小数据集、类数少时 宜小或不用——soft target 引入错误监督。与 mixup/cutmix 叠用时 effective label 更 soft, 宜减小避免 double-soft。
知识蒸馏里 hard label 有时也做 smoothing——student 同时学 soft teacher 和 smoothed hard,权重需 ablation。
4. 与 calibration 的关系
smoothing 有时降低 ECE,因为阻止 overconfident logits。但 acc 和 calibration 不是同一指标——smoothing 后 acc 略降、ECE 改善,对 threshold 决策可能是 net positive。部署前仍要做 temperature scaling,smoothing 不替代 post-hoc calibration。
5. 失败模式
过大 → top-1 acc 明显下降,尤其类数少时。smoothing + 强 mixup → 欠拟合。eval 时忘记 smoothing 只影响 train target,不影响 inference——但若误在 loss 外又手动 smooth label 会 double-count。
6. 案例:平滑过大 hurt 细粒度
细粒度分类二十类, 导致 train acc 掉四个点、val 无 gain——改 0.05 后 calibration 略好且 acc 持平。类数少时 smoothing 宜保守。
7. 验收
- ablation:acc 与 ECE 权衡有记录。
- 与 mixup 同用时 减小或关闭其一。
- 使用
CrossEntropyLoss(label_smoothing=...)而非手搓重复逻辑。 - val 上同时报 acc 和 calibration(ECE 或 reliability diagram)。
- 小数据集 或不用。
8. 落地与衔接
把标签平滑系数写进损失配置,并与混合增广强度联动记录——两者叠用时有效软目标更软,宜减小其一。实验日志同时报告首位准确率与期望校准误差,准确率略降但校准改善时要在业务文档里说明阈值策略变化。部署前仍做温度缩放,平滑不替代事后校准。切换教师或改类别数时重新消融平滑系数,类别少时默认更保守。审查合并请求时核对是否误在推理路径重复平滑标签。
9. 案例复盘
某二十类细粒度项目平滑系数零点二导致训练准确率掉四个点、验证无增益,改零点零五后校准略好且准确率持平。复盘发现类数少时不应照搬大规模数据集默认值。团队现在在配置里按类数分档推荐系数,并与混合增广同开时自动减半。后续发版不再出现平滑过大悄然伤害细粒度任务的情况。该规则已写入损失函数选型指南,供新项目直接引用。
Label smoothing 是用 soft target 换 less overconfidence。默认 试起,acc 掉太多就减;calibration 改善不等于可以跳过 temperature scaling。把 acc 与 ECE 的权衡写进发版材料,避免业务方只看见 accuracy 波动却不懂 operating point 已变。平滑与蒸馏、混合增广同用时务必做联合消融。发版前在部署域单独评估校准曲线,平滑系数变更须与增广配置联合回归。新项目默认值应写入配置模板并按类别数分档,避免照搬大规模数据集超参。 审查训练配置时应确认平滑只作用于损失目标,推理阶段仍用硬标签评估业务指标。发版前对比平滑开关下的可靠性图,记录业务阈值如何随校准变化而调整。 类数较少时优先减小系数或关闭平滑,用可靠性图而非单一准确率判断发版。
相关
也可以看看
- ·4 分钟阅读
Dropout:推理要关掉
Dropout 训练时随机丢弃激活、推理时必须 eval 关闭——train mode 部署会让输出随机抖动,和 BatchNorm 一样要 model.eval()。
- ·16 分钟阅读
KV cache 分页与前缀复用:吞吐上去后正确性怎么验
沿 block table、前缀哈希与抢占回收拆开缓存一致性风险,说明错页复用为何表现为「偶发胡话」;用确定性前缀集、强制抢占和逐 token 对照验收。
- ·18 分钟阅读
混合精度下的梯度累积:loss 缩放、裁剪与 step 顺序
沿 autocast、GradScaler、unscale_、裁剪与 optimizer.step 的数据流说明静默错误;区分 micro-batch 平均与求和,并用等价性测试验收。
johan's blog