3. 软标签与硬标签

做知识蒸馏,绕不开一个核心问题:老师到底该教学生什么?

我刚开始接触蒸馏时,以为直接把老师模型的预测结果拿过来训练学生就行了。后来发现,事情远没那么简单。老师模型输出的“0”或“1”,其实丢失了大量有价值的信息。真正值钱的东西,藏在那些概率分布里。

3.1 硬标签的局限:你丢掉了老师的“思考过程”

先看一个例子。假设我们做一个手写数字识别,输入一张图片,它看起来像“7”,但也有点像“1”。

硬标签(Hard Label)长这样:

类别: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
硬标签: [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]  // 只告诉你是“7”

但老师模型内部的 Softmax 输出可能是这样的:

软概率: [0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.85, 0.00, 0.15]
// 85% 是“7”,15% 是“9”

看到了吗?硬标签把“15% 像 9”这个信息直接扔掉了。学生模型只学到“这是7”,完全不知道“7和9在某些笔画上很像”。

核心观点:硬标签只传递“答案”,不传递“知识”。老师模型在错误类别上的概率分布,恰恰包含了类别之间的相似性信息——这才是蒸馏的价值所在。

我在项目中遇到过这样一个场景:用硬标签蒸馏一个 BERT 小模型,效果始终上不去。后来换成软标签,同样的学生结构,准确率直接提升了 3 个点。说白了,硬标签把老师模型“压箱底”的经验全浪费了。

3.2 软标签的概念与生成

软标签(Soft Label)就是老师模型输出的完整概率分布。它保留了每个类别的置信度信息。

生成软标签的公式很简单:

q_i = exp(z_i / T) / Σ_j exp(z_j / T)

其中:
- z_i 是模型最后一层的 logits(未归一化的分数)
- T 是温度系数(Temperature)
- q_i 是软化后的概率

当 T=1 时,就是标准的 Softmax。当 T>1 时,概率分布会变得更“平滑”。

举个例子,假设 logits 为 [2.0, 1.0, 0.1]:

温度 T 类别 A 概率 类别 B 概率 类别 C 概率 分布特点
T=1 0.659 0.242 0.099 尖锐,接近硬标签
T=3 0.414 0.328 0.258 平滑,保留类别关系
T=5 0.366 0.333 0.301 接近均匀分布
T=10 0.345 0.335 0.320 几乎均匀,信息稀释

我的经验:软标签的生成不需要额外训练。你只需要在推理时把温度系数调高,保存 Softmax 输出即可。我一般会在验证集上跑一次,把 T=2~5 的软标签都存下来,方便后续对比实验。

3.3 温度系数 T:软化概率分布的“旋钮”

温度系数 T 是蒸馏中最关键的调节参数。它的作用,说白了就是控制概率分布的“软硬程度”。

为什么会这样?

你想想看,Softmax 本质上是一个“赢家通吃”的函数。当 T 很小时(比如 T→0),最大的 logit 会被放大到接近 1,其他类别趋近于 0——这就退化成硬标签了。当 T 很大时(比如 T→∞),所有类别的概率趋近于相等——信息完全丢失。

所以 T 的取值,决定了你从老师模型那里“提取”多少知识。

3.3.1 T 的物理意义

  • T < 1:分布更尖锐,强调“正确答案”,忽略类别间关系
  • T = 1:标准 Softmax,常规概率分布
  • T > 1:分布更平滑,暴露类别间的相似性结构
  • T 过大:分布过于均匀,噪声淹没信号

我曾经踩过的坑:一开始做蒸馏时,我直接把 T 设成 5,觉得越大越好。结果学生模型学出来一团糟——因为软标签太平滑了,学生根本分不清主次。后来才明白,T 不是越大越好,而是要在“保留类别关系”和“保持信号强度”之间找平衡。

3.4 知识蒸馏中的软标签流程

整个流程其实就三步:

  1. 训练老师模型:用标准方式训练一个大模型,得到 logits
  2. 生成软标签:用温度 T 对老师模型的 logits 做 Softmax,得到软化后的概率分布
  3. 训练学生模型:学生模型同时学习硬标签(真实标签)和软标签(老师输出)

损失函数通常写成:

L = α * L_hard + (1-α) * L_soft

其中:
- L_hard 是学生与真实标签的交叉熵
- L_soft 是学生与老师软标签的 KL 散度(或交叉熵)
- α 是平衡系数,通常取 0.1~0.5

注意:学生模型在计算 L_soft 时,也要使用相同的温度 T 来软化自己的输出。否则分布尺度不匹配,梯度会出问题。

3.5 软标签 vs 硬标签:一张图看懂

下面这张 SVG 图展示了从硬标签到软标签的演变过程,以及温度系数 T 在其中的作用:

软标签与硬标签对比及温度系数作用 软标签 vs 硬标签:温度系数 T 的作用 硬标签(T→0) 类别: [0, 1, 2, 3, 4] 输出: [0, 0, 1, 0, 0] 只保留最大值,其余归零 温度系数 T 调节 T=1 → 标准 Softmax T>1 → 分布平滑 T 越大,分布越均匀 软标签(T>1) 类别: [0, 1, 2, 3, 4] 输出: [0.05, 0.10, 0.70, 0.10, 0.05] 保留类别间相似性信息 关键对比 • 硬标签:信息量少,只传递“正确答案”,丢失类别间关系 • 软标签:信息量丰富,保留“像什么”的分布信息,是蒸馏的核心 • 温度 T:控制信息提取的“粒度”,T 越大,暴露的类别关系越多 老师模型 软标签生成 学生模型 蒸馏流程:老师 → 软标签(T调节) → 学生

3.6 实际项目中的 T 调优建议

调 T 这件事,我个人的经验是:先粗调,再细调。

  • 粗调阶段:在 [2, 4, 6, 8, 10] 这几个值上各跑一次,看学生模型的收敛速度和最终指标
  • 细调阶段:在粗调找到的最佳值附近,以 0.5 为步长做网格搜索
  • 经验范围:分类任务通常 T=2~5,检测任务 T=3~8,生成任务 T=5~10

一个小技巧:如果你发现学生模型训练初期 loss 下降很慢,大概率是 T 太大了,软标签太均匀,学生找不到学习方向。这时候把 T 调小一点,先让学生学会“正确答案”,再慢慢增加软标签的权重。

3.7 本章小结

软标签和硬标签的区别,说白了就是“教答案”和“教思路”的区别。硬标签告诉你结果是什么,软标签告诉你老师是怎么思考的。温度系数 T 就是调节这个“思考过程”详细程度的旋钮。

记住三点:

  • 硬标签信息量太少,蒸馏必须用软标签
  • T 控制概率分布的平滑程度,不是越大越好
  • 软标签的生成和蒸馏训练要用相同的 T