知识蒸馏中的 temperature 有什么作用?
简化版
Temperature T 用来软化教师和学生的 Logits:T 越大,概率分布越平,非最大类别之间的相对关系更明显,这些“暗知识”能告诉学生哪些错误类别更相似。T=1 是原始 Softmax,T 过高则趋近均匀,信号变弱。
蒸馏通常同时优化软标签损失和真实硬标签损失,并把软损失乘 T²,补偿 Softmax 导数随温度缩小。T 与软/硬损失权重需在验证集联合调参,不能照搬固定值。
详细版
p_i(T) = exp(z_i / T) / Σ_j exp(z_j / T)
L = alpha × T² × KL(p_teacher(T) || p_student(T))
+ (1-alpha) × CE(y, p_student(1))
当教师极度自信时,较高 T 会暴露次优类别关系;当类别少、教师校准差或生成词表巨大时,过高 T 可能把大量噪声抬升。应观察验证质量、KL、校准和不同难度切片。
| 温度 | 分布特点 | 常见风险 |
|---|---|---|
| T<1 | 更尖锐 | 接近硬标签,暗知识少 |
| T=1 | 原始分布 | 教师过度自信仍尖 |
| 1<T<高值 | 更平滑 | 通常适合搜索 |
| 极高 T | 接近均匀 | 有效对比被稀释 |
完整版教学
1. Temperature 改变了什么
Softmax 前把 Logit 除以 T。T 增大时类别差异被压缩,尾部概率上升;T 减小时分布更尖锐。
它不改变 Logit 排序,但改变不同类别之间的相对概率和梯度。
2. 什么是暗知识
硬标签只说正确类别是谁;教师软分布还表达“猫比汽车更像狗”。这种类别相似性可帮助小模型学到决策边界。
如果教师输出几乎 one-hot,次优类别差异难以传递,升温可放大可见度。
3. 公式如何理解
p_i(T) = softmax(z_i / T)
例如 Logit [6, 3, 1] 在 T=1 时很尖,T=3 后第二、第三类获得更明显概率,但第一类仍最大。
4. 为什么常乘 T²
升温会让 Softmax 对 Logit 的梯度缩小,蒸馏项梯度量级大致随 1/T² 变化。乘 T² 用于保持不同 T 下软损失梯度可比。
具体框架的 KL reduction 和实现方向会影响常数,需检查代码,不能只背公式。
5. 软标签与硬标签为何并用
教师可能错误或带偏差,真实标签提供锚点;软标签传递类别结构。alpha 控制两者权衡。
| 教师情况 | 建议倾向 |
|---|---|
| 教师明显强且校准好 | 提高软损失权重 |
| 标签高可信、教师偶有错 | 保留较强硬损失 |
| 无人工标签 | 依赖验证与过滤 |
| 教师学生差距大 | 可能需中间教师/特征蒸馏 |
alpha 与 T 共同影响梯度,必须联合搜索。
6. T 太低会怎样
分布接近原始尖锐输出,蒸馏退化为模仿教师 Top-1,学生得到的类别关系有限。
若教师本身校准好且任务类别边界明确,T=1 也可能足够,不能假设升温必然提升。
7. T 太高会怎样
概率趋于均匀,教师重要偏好被稀释;大量低概率错误类别被抬高,可能向学生注入噪声。
在超大词表语言模型中,这一点更明显,因此可考虑 TopK Logits、序列蒸馏或针对任务的候选集合。
还应观察教师分布熵与学生梯度:若不同类别概率几乎相同、软损失梯度很小,继续升温已没有有效监督价值。
8. 分类与生成任务有何区别
分类任务类别固定,完整 Soft Logits 易保存;生成模型每个 Token 有巨大词表和长序列,Logit 蒸馏存储/计算昂贵。
生成场景常使用教师生成序列做硬目标,或在线获取 TopK Logits,并配合隐藏层/注意力蒸馏。
TopK 蒸馏需妥善处理未保存词表的剩余概率质量;直接重新归一化可能夸大候选概率,应在实现和评测中保持一致口径。
9. 教师校准如何影响温度
过度自信教师可通过升温暴露更多结构,但温度不能修正系统性错误。先在独立集评估教师准确率与校准。
若教师在某切片偏差严重,应过滤、换教师或降低该切片软损失,而不是无限提高 T。
10. 如何选择温度
在合理网格如 1、2、4、8 上搜索,同时调 alpha;固定数据、训练预算和 Seed,多次运行看稳定性。
选择依据是独立验证任务指标、校准、安全和长尾,不是训练 KL 最低。学生容量变化后需重新调参。
11. 是否可以动态温度
可按教师熵、样本难度或类别调整 T:教师太尖时升温,分布本就不确定时避免过度平滑。
动态策略增加复杂度,需与固定 T 基线比较,并限制范围以防异常样本产生极端梯度。
例如按教师熵分桶选择少数温度档位,比为每个样本连续预测 T 更易复现与部署;每个桶仍需独立检查质量和样本规模。
12. 实现中常见错误
教师和学生必须用同一 T 计算软分布;硬标签 CE 通常仍用 T=1。教师 Logits 应停止梯度。
soft_t = softmax(teacher_logits / T).detach()
log_s = log_softmax(student_logits / T)
loss_kd = kl_div(log_s, soft_t) * (T * T)
确认 KL 的参数方向与 reduction,避免符号/尺度错误。
13. 如何做实验诊断
记录硬损失、软损失、梯度范数、教师/学生熵和各难度切片表现。若高 T 下训练稳定但验证退化,可能在学习尾部噪声。
对比无蒸馏、T=1 和多组 T,并检查同等训练预算;上线还要验证实际延迟和成本收益。
Temperature 的作用是控制教师概率结构暴露多少,而不是一个越大越能传递知识的旋钮。
14. 常见误区与追问
- 误区:T 越高暗知识越多。 极高会趋于均匀并放大噪声。
- 误区:蒸馏只需要软标签。 硬标签可约束教师错误。
- 误区:乘 T² 是经验装饰。 它用于补偿梯度尺度变化。
- 误区:所有任务用同一温度。 教师校准、类别数和学生容量不同。
- 误区:训练 KL 最低就是最优。 应看独立任务、校准和安全指标。
- 追问:语言模型为何常不用全 Logits? 词表×序列存储和计算成本很高。
- 追问:如何选择 T? 与 alpha 联合网格搜索并做切片验证。
15. 加强记忆
- 先记公式:Logit 除以 T。
- 再记效果:T 大更平,T 小更尖。
- 再记暗知识:次优类别关系。
- 再记 T²:补偿软损失梯度尺度。
- 再记双损失:软教师加硬标签。
- 再记边界:高温均匀、低温接近硬标签。
- 最后记调参:T 与 alpha 联合,以独立验证为准。