模型蒸馏:把大模型的知识压进小模型

什么是模型蒸馏

知识蒸馏(Knowledge Distillation)由 Hinton、Vinyals 与 Dean 在 2015 年的论文《Distilling the Knowledge in a Neural Network》(arXiv:1503.02531)中系统提出。其核心思想是:训练一个体积小、推理快的「学生模型」(student),让它去模仿一个已经训练好的、能力强但笨重的「教师模型」(teacher)的输出行为,从而把教师模型里蕴含的知识「蒸馏」到小模型中。

传统监督学习只用硬标签(hard target),例如一张图标注为「猫」。但硬标签丢失了大量信息:模型并不能知道这张图「有几分像狗、几分像狐狸」。教师模型的输出分布则暴露了这些类间相似性,是更丰富的监督信号。

软标签与温度 softmax

蒸馏的关键技巧是「软标签」(soft targets):不直接用教师模型 argmax 后的硬类别,而是用它在 softmax 之后、经过「温度」调节的概率分布作为监督。温度 softmax 公式为:

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

其中 z_i 是教师模型倒数第二层(logits)的第 i 个输出,T 为温度系数。T 越大,输出分布越平滑,那些「非正确答案」类之间的相对概率(例如狗比狐狸更像猫)被放大,学生模型能学到更多类间结构信息。训练学生时,同样用温度 T 的 softmax 计算其输出,并用 KL 散度对齐教师软标签;推理阶段再把温度设回 1(标准 softmax)即可。

软标签相比硬标签的另一个好处是「信息量大、梯度方差小」,因此即便用少量数据训练,学生模型也较容易收敛到接近教师的水平。

代表工作 DistilBERT

DistilBERT(Sanh 等人,arXiv:1910.01108)是把知识蒸馏用到预训练语言模型的代表。它在 BERT 的预训练阶段就用蒸馏,让一个参数量更小的模型学习原版 BERT 的行为。论文给出三组关键数据:模型体积减少 40%,在语言理解能力上保留约 97%,推理速度提升约 60%。

其损失函数由三部分组成:语言建模损失(language modeling loss)、蒸馏损失(distillation loss,对齐教师软标签)、以及余弦距离损失(cosine distance loss,拉近师生隐层表示)。DistilBERT 说明了「在预训练阶段蒸馏」就能得到通用、可微调的小模型,而不必为每个任务单独蒸馏。

蒸馏 vs 量化

蒸馏和量化(quantization)都能让模型更适合部署,但作用层面不同。

蒸馏改变的是「模型结构与参数本身」:它训练出一个新的、更小的网络,用教师分布当监督。量化不改变网络结构,而是把权重和激活从高精度(如 FP32)压缩到低位宽(如 INT8),降低存储与计算开销。

简单说,蒸馏是「训练一个小模型来替代大模型」,量化是「把同一个模型用更少的比特表示」。二者不冲突,常结合使用:先用蒸馏得到小模型,再量化进一步压缩,最终在手机、嵌入式等边缘设备上线。

实践与局限

实践中,蒸馏流程一般为:选好教师模型,定义软标签温度与损失组合,用师生同分布数据训练学生。温度 T 是重要超参,过小则软标签退化为硬标签、失去意义,过大则信号过平、难学。

局限方面:蒸馏依赖一个已经很强的教师,若教师本身有偏,学生也会继承;训练学生需要额外算力与调参;对于某些任务,学生很难追平教师上限,存在明显的「容量天花板」。因此蒸馏更适合「教师已定型、要降本部署」的场景,而非替代从零训练。

小结

知识蒸馏用「软标签 + 温度 softmax」让小模型模仿大模型的输出分布,是低成本部署大模型的关键技术。DistilBERT 证明预训练阶段蒸馏即可在体积减 40% 的同时保留约 97% 能力。它与量化互补:蒸馏换小模型,量化压比特,二者叠加是把大模型搬上边缘设备的常用路径。

参考与延伸阅读

本文累计阅读