15. 知识蒸馏在大模型中怎么做?和微调有什么关系?
整理知识蒸馏在大模型中的做法与和微调的关系。
简单回答
知识蒸馏(Knowledge Distillation)是用一个大模型(Teacher)的输出来指导一个小模型(Student)的训练,让小模型获得接近大模型的效果。在大模型场景中,常见做法是用 Teacher 的输出 logits 或生成的文本来训 Student。它和微调的关系是:知识蒸馏可以看作一种特殊的微调——训练数据来自 Teacher 模型而不是人工标注。
详细解释
传统知识蒸馏 vs 大模型蒸馏
传统的知识蒸馏(Hinton et al., 2015)主要用 Teacher 的 soft logits(softmax 输出的概率分布)作为训练信号。Student 的 loss 由两部分组成:
其中 和 是 Teacher 和 Student 在温度 下的 softmax 输出。温度升高后分布更平滑,暗知识(dark knowledge)——Teacher 对各个类别的相对偏好——更容易被传递。
但在大模型场景中,logits 蒸馏的实操难度很大:Teacher 的 vocab 通常有几万到十几万个 token,存储和传输完整的 logits 分布开销极高。而且很多场景下你只能调用 Teacher 的 API,拿不到 logits。
所以大模型蒸馏更常用的是"黑盒蒸馏"——直接用 Teacher 生成的文本作为训练数据来训 Student。这种方式本质上就是用合成数据做 SFT,Alpaca 用 GPT-3.5 生成数据训 LLaMA 就是一个经典的黑盒蒸馏案例。
白盒蒸馏 vs 黑盒蒸馏
白盒蒸馏要求能获取 Teacher 的内部表示(logits、hidden states 等),信息量更丰富,蒸馏效果通常更好,但对 Teacher 的访问权限要求高。MiniLLM 等工作探索了用 KL 散度在序列级别做蒸馏的方法。
黑盒蒸馏只需要 Teacher 的文本输出,实操简单灵活,但信息损失更大——你只看到了 Teacher 概率最高的输出,没看到它对其他选项的判断。在大模型领域,黑盒蒸馏因为简单实用已经成为主流。
蒸馏的典型应用
第一,模型压缩。用大模型指导小模型训练,在可接受的效果损失下大幅降低部署成本。比如用 70B 模型蒸馏 7B 模型,服务端推理成本降低一个数量级。
第二,能力迁移。把大模型在某些任务上的能力(如推理、多语言)迁移给小模型。DeepSeek-R1 发布时就同步提供了从 R1 蒸馏到 Qwen 和 LLaMA 小模型的版本。
第三,数据生成。用大模型生成高质量训练数据,这和前面讲的合成数据做 SFT 本质上就是蒸馏。
蒸馏和微调的关系
两者并不互斥。蒸馏可以看作"训练数据来自 Teacher 模型的微调"。常见的做法是先用蒸馏数据做一轮训练,再用少量人工标注的高质量数据做第二轮精调,效果往往比单独做任何一种都好。蒸馏提供了基础能力的迁移,人工数据提供了质量和风格的精确控制。
蒸馏的局限
Student 的效果上限受 Teacher 能力约束。Teacher 不会的东西,Student 也学不到。另外蒸馏数据的多样性通常不如真实数据,容易出现前面提到的 Model Collapse 问题。
面试时可以这样答
知识蒸馏在大模型中主要有两种方式。白盒蒸馏用 Teacher 的 logits 或 hidden states 做训练信号,信息量大但对 Teacher 的访问要求高。黑盒蒸馏直接用 Teacher 生成的文本做训练数据,本质就是用合成数据做 SFT,Alpaca 就是典型案例。因为简单实用,黑盒蒸馏在大模型领域更主流。
它和微调的关系很直接——蒸馏可以看作训练数据来自 Teacher 的微调。实际中经常先用蒸馏数据做一轮训练迁移基础能力,再用人工数据精调做质量控制。
蒸馏的核心限制是 Student 上限不会超过 Teacher,而且蒸馏数据多样性不够容易导致 Model Collapse。所以蒸馏更适合做模型压缩和能力迁移,不适合做能力突破。
常见追问
- 白盒蒸馏中温度 τ 怎么设?对效果影响大吗?
- DeepSeek-R1 蒸馏到小模型的效果怎么样?蒸馏 reasoning 能力有什么特殊的做法?
- 蒸馏出来的模型和直接训练的同规模模型相比,能力分布上有什么不同?