大模型蒸馏:把大模型能力迁到小模型
大模型效果好,但推理又慢又贵,难以部署在手机、边缘设备或高并发服务上。知识蒸馏(knowledge distillation)提供了一条路径:训练一个更小、更快的模型,让它去模仿大模型的行为,把大模型「教出来的能力」迁移过来。这样小模型既能跑得轻,又能保留大模型的大部分水平。
从 teacher 到 student
蒸馏里有两位主角:
- 教师模型(teacher):那个大而强的模型,只在训练阶段使用,负责提供「标准答案」之外的额外信号。
- 学生模型(student):小而快的模型,是最终要部署的对象,通过向 teacher 学习来提升自己。
与普通监督学习只用「硬标签」(例如类别 one-hot)不同,蒸馏的关键是利用 teacher 的「软标签」。
硬标签与软标签
- 硬标签:数据中给定的确定类别,例如「这是猫」。
- 软标签:teacher 对各个类别给出的概率分布,例如「猫 0.85、狗 0.12、其他 0.03」。这个分布蕴含了 teacher 的「类间相似性」知识(猫和狗比猫和汽车更像),信息量远大于一个孤立的硬标签。
为了把软标签里的暗知识放大,蒸馏引入温度(temperature)软化:在 softmax 前除以温度 T,让原本尖锐的分布变得更平滑,类间差异更明显,学生更容易学到。
典型训练流程
def distillation_loss(student_logits, teacher_logits, labels, T=4.0, alpha=0.7):
soft = kl_div(softmax(student_logits / T), softmax(teacher_logits / T)) * T * T
hard = cross_entropy(student_logits, labels) # 同时不丢真实标签
return alpha * soft + (1 - alpha) * hard # 软硬损失加权
for x, y in dataloader:
s = student(x); t = teacher(x).detach() # teacher 不更新
loss = distillation_loss(s, t, y)
loss.backward(); optimizer.step()
要点:student 同时向 teacher 的软标签和真实硬标签学习,权重由 alpha 平衡。
部署收益与精度折中
蒸馏的价值在于部署侧:
- 收益:学生模型参数量与推理延迟大幅下降,可在端侧或高并发场景落地,单位成本显著下降。
- 折中:能力通常略低于 teacher,尤其在最困难、最细分的样本上;蒸馏还需要 teacher 的推理过程,前期成本不低。
因此蒸馏常用于「用一次性的训练成本,换取长期、大规模部署的成本与延迟优势」,是模型压缩工具箱里与量化、剪枝并列的常用手段。
小结
知识蒸馏让小模型通过模仿大模型的软标签分布来迁移能力,借助温度软化把类间相似性等知识放大,并在训练中同时结合真实硬标签。它能在远低的推理成本下保留大模型的大部分水平,代价是顶端精度略有折中且需要 teacher 的前期推理。蒸馏与量化、剪枝一起,构成把大模型能力低成本落地的核心压缩手段。
参考与延伸阅读
- Hinton, Vinyals, Dean. Distilling the Knowledge in a Neural Network(2015)。提出温度软化与软标签蒸馏的经典工作。已核验。
- 面向大模型的蒸馏实践(如蒸馏出小尺寸对话模型)近年大量出现,具体方法与开源权重以各项目发布为准。待核实。
本文累计阅读 — 次