返回专辑
·Johan·4 分钟阅读

标签平滑

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。

python
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 已变。平滑与蒸馏、混合增广同用时务必做联合消融。发版前在部署域单独评估校准曲线,平滑系数变更须与增广配置联合回归。新项目默认值应写入配置模板并按类别数分档,避免照搬大规模数据集超参。 审查训练配置时应确认平滑只作用于损失目标,推理阶段仍用硬标签评估业务指标。发版前对比平滑开关下的可靠性图,记录业务阈值如何随校准变化而调整。 类数较少时优先减小系数或关闭平滑,用可靠性图而非单一准确率判断发版。

← 全部文章

johan's blog