DistillationLoss需用F.log_softmax与F.softmax配合F.kl_div,并乘T²;teacher_logits必须detach()且eval();T=4最常用,T=1时蒸馏失效;student精度下降优先检查容量、学习率与warmup。

DistillationLoss怎么写才不崩梯度
知识蒸馏的核心不是“模仿输出”,而是让学生网络的 logits 去拟合教师网络的 soft targets(加了温度 T 的 softmax 输出)。直接用 nn.MSELoss 或 nn.KLDivLoss 容易出错,因为:
• nn.KLDivLoss 要求输入是 log-probabilities,目标是 probabilities,顺序不能反
• 温度缩放后没做 log 就喂给 KLDivLoss,梯度会 NaN
• 教师输出没 detach,学生 loss 会意外反传进教师模型
正确写法是:
student_logits / T
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











