3、软标签与硬标签:Softmax与温度系数T的作用

这一章我们来聊聊知识蒸馏里最核心的概念——软标签和硬标签。说实话,我刚接触蒸馏时,觉得这俩不就是模型输出的概率和类别嘛,有啥好讲的?后来真正动手做项目才发现,这里面的门道比我想象的深得多。

你想想看,一个训练好的大模型,它输出的是什么?是 logits,经过 Softmax 变成概率,再取 argmax 得到类别。但蒸馏的精髓,恰恰在于那个「概率分布」——也就是软标签。为什么?因为软标签里藏着教师模型对样本的「理解」,而不仅仅是「判断」。

3.1 从 Softmax 说起

先回顾一下 Softmax 的公式:

Softmax(z_i) = exp(z_i) / Σ_j exp(z_j)

这个函数把任意实数向量映射成概率分布。每个值都在 0~1 之间,总和为 1。看起来很简单对吧?

但这里有个问题。当 logits 的数值差异很大时,Softmax 输出的分布会非常「尖锐」。比如某个类别的 logit 是 10,其他都是 1 或 2,那 Softmax 几乎把全部概率都给了那个最大类。其他类别的信息,就被「压死」了。

举个例子:

logits = [10, 2, 1, 0.5]
Softmax 输出 ≈ [0.9996, 0.0003, 0.0001, 0.0000]

看到没?除了第一个类别,其他概率几乎为零。这种输出,我们叫它「硬化的概率分布」。它告诉你的只有「这是类别 A」,但没告诉你「类别 A 和类别 B 有点像,和类别 C 完全不像」。

而知识蒸馏,恰恰需要后面这种信息。

3.2 温度系数 T 的引入

为了解决 Softmax 输出过于「极端」的问题,Hinton 在蒸馏论文里引入了温度系数 T。带温度的 Softmax 长这样:

Softmax(z_i, T) = exp(z_i / T) / Σ_j exp(z_j / T)

T 的作用是什么?说白了,就是「软化」概率分布。

  • T = 1:就是普通 Softmax,输出正常概率
  • T > 1:概率分布变平滑,小类别的概率被「抬起来」
  • T → ∞:所有类别概率趋近相等,完全均匀分布
  • T → 0:概率分布变成 one-hot,只有最大类为 1

我习惯把 T 叫做「信息放大镜」。T 越大,教师模型对「相似类别」的判断就越清晰。比如一张猫的图片,教师模型可能认为它 90% 是猫,8% 是狗,2% 是老虎。T=1 时,狗和老虎的概率几乎被淹没了。但 T=5 时,这些「次要类别」的概率会被放大,学生模型就能学到「猫和狗有点像,猫和老虎也有点像」这种知识。

核心观点:温度 T 控制的是「知识粒度」。T 越大,教师模型传递的「暗知识」越多;T 越小,越接近硬标签。

3.3 软标签的生成原理

软标签的生成过程,其实就三步:

  1. 前向传播:把输入样本喂给教师模型,得到 logits
  2. 温度缩放:用 T > 1 对 logits 做 Softmax,得到软化后的概率分布
  3. 输出软标签:这个概率分布就是软标签,直接用于训练学生模型

举个例子,假设教师模型对一张图片的 logits 是 [5, 1, 0, -1]:

T=1:  Softmax ≈ [0.928, 0.047, 0.017, 0.006]
T=3:  Softmax ≈ [0.635, 0.201, 0.122, 0.042]
T=5:  Softmax ≈ [0.478, 0.234, 0.172, 0.116]

你看,T=1 时,类别 2、3、4 的概率几乎可以忽略。但 T=5 时,类别 2 的概率有 23.4%,类别 3 有 17.2%。这些信息,就是学生模型需要学习的「暗知识」。

我在项目中遇到过一个问题:有些样本教师模型自己也拿不准,logits 分布比较均匀。这时候如果 T 设得太大,软标签就太「平」了,学生模型反而学不到有效信息。所以 T 的选择,其实是个经验活。

3.4 硬标签与软标签的对比

硬标签就是 one-hot 向量,比如 [0, 0, 1, 0]。它只告诉模型「正确答案是类别 3」,不提供任何类别间的关系信息。

软标签则是一个概率分布,比如 [0.1, 0.2, 0.6, 0.1]。它告诉模型「类别 3 最可能,但类别 2 也有一定可能,类别 1 和 4 可能性较小」。

两者的核心区别,我整理了一张表:

对比维度 硬标签 软标签
信息量 低,只有类别 ID 高,包含类别间相似度
监督信号 0/1 离散信号 连续概率分布
训练难度 容易过拟合 更平滑,泛化更好
对噪声鲁棒性 差,标签错误影响大 好,概率分布有容错
蒸馏中的作用 仅作为辅助损失 核心知识载体
计算开销 无额外计算 需要教师模型前向传播

我的经验:实际蒸馏时,我通常同时使用软标签和硬标签。软标签让学生模型学习「类间关系」,硬标签确保学生模型不偏离真实目标。两者加权求和,效果最好。

3.5 软标签 vs 硬标签:蒸馏中的配合

蒸馏损失函数通常长这样:

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

其中:

  • L_soft:学生模型输出与教师模型软标签的 KL 散度
  • L_hard:学生模型输出与真实硬标签的交叉熵
  • α:平衡系数,通常取 0.7~0.9

为什么要这样设计?

我曾经试过只用软标签训练学生模型。结果发现,学生模型虽然学到了类别间的相似关系,但在某些「易混淆」的类别上,准确率反而下降了。原因很简单:软标签是教师模型的「主观判断」,它不一定完全正确。如果教师模型在某些样本上判断失误,软标签就会传递错误信息。

加上硬标签的监督,相当于给学生模型加了一个「纠偏机制」。即使教师模型错了,真实标签还能把学生模型拉回来。

避坑指南:α 不是越大越好。我见过有人设 α=0.99,结果学生模型完全跟着教师模型走,教师模型的错误也被完整继承。建议从 α=0.7 开始调,观察验证集准确率的变化。

3.6 温度 T 的选择策略

温度 T 怎么选?这个问题没有标准答案,但我总结了几条经验:

  • 教师模型越强,T 可以越大:强模型的 logits 分布更「有信息量」,大 T 能充分释放这些信息
  • 学生模型越小,T 不宜太大:小模型容量有限,学不了太细的分布,T=2~4 比较合适
  • 分类数越多,T 可以适当增大:比如 ImageNet 有 1000 类,T=5~10 效果不错
  • 蒸馏和微调用不同 T:蒸馏阶段用大 T(4~8),微调阶段用小 T(1~2)

我记得有一次做 OCR 识别模型的蒸馏,教师模型有 200 多层,学生模型只有 18 层。一开始我设 T=10,结果学生模型完全学不动,loss 降不下去。后来把 T 降到 3,效果立竿见影。所以 T 的选择,真的得试。

3.7 本章知识结构图

下面这张图展示了软标签、硬标签、温度 T 之间的关系,以及它们在蒸馏流程中的位置:

知识蒸馏:软标签与硬标签核心流程 教师模型 学生模型 输入样本 x 教师 logits 学生 logits Softmax(T > 1) Softmax(T > 1) 软标签(教师) 软标签(学生) KL 散度(L_soft) 硬标签(真实类别) 交叉熵(L_hard) 总损失 L 温度 T 控制软标签的「平滑度」 T 越大,暗知识越丰富

3.8 小结

这一章我们聊了软标签和硬标签的本质区别。软标签不是简单的「概率输出」,它是教师模型对样本理解的「浓缩表达」。温度 T 则是调节这个表达「浓度」的旋钮。

记住几个关键点:

  • 软标签包含类间关系,硬标签只给类别 ID
  • 温度 T 越大,软标签越平滑,暗知识越多
  • 蒸馏时软标签和硬标签配合使用,效果最好
  • T 的选择需要根据教师/学生模型容量、任务复杂度来调