模型蒸馏
模型蒸馏是一种训练技术,让一个小型"学生"模型学会模仿一个大得多的"教师"模型,方法是用教师的输出(或其内部概率分布)而非原始标签来训练。其结果是得到一个模型,它以远小的体量、延迟和成本,保留了教师的大部分能力。
模型蒸馏是一种训练技术,让一个小型"学生"模型学会模仿一个大得多的"教师"模型,方法是用教师的输出(或其内部概率分布)而非原始标签来训练。其结果是得到一个模型,它以远小的体量、延迟和成本,保留了教师的大部分能力。
为什么重要
前沿模型与廉价模型之间的权衡过去十分残酷:为一个聪明 5% 的模型付出 10 倍代价,否则就只能将就。蒸馏弥合了这道差距。GPT-4o-mini、Claude Haiku、Gemini Flash、Llama 3 8B Instruct,主流实验室的每一个"小、快、廉"档位,实际上都是某个旗舰模型经过蒸馏而来的后代。蒸馏也是首选的专门化手段:一个从 GPT-4 在客服对话上蒸馏出来的 7B 模型,可以在那一项任务上击败原模型,而部署成本却只有其百分之一。对于开发者而言,蒸馏把"我该用哪个模型"从"我负担得起的最大模型"重新定义为"仍能胜任我工作的最小模型"。
工作原理
1. 挑选一个教师:通常是一个大型、强大的模型(GPT-4、Claude Opus、Llama 70B)。
2. 生成训练数据:可选其一:
- 输出蒸馏:在大量输入上运行教师并保存其回答。用这些(输入,教师回答)对来训练学生。
- logit 蒸馏:捕获教师在每个 token 上对整个词表的完整概率分布(即"软目标"),并训练学生去匹配它。
3. 训练学生:标准的有监督微调,但使用教师输出作为标签。学生的损失是它与教师输出之间的差异,而非与人工标注的标准答案之间的差异。
4. 可选的任务聚焦:在特定领域(代码、对话、数学、客服)的数据上蒸馏,得到一个专门化的小模型。
5. 评估:在留出基准上比较学生与教师。目标是以教师不到 10% 的成本,达到其 80% 至 95% 的质量。
输出蒸馏 vs logit 蒸馏
| 方面 | 输出(回答)蒸馏 | logit(软目标)蒸馏 |
|---|---|---|
| 数据 | 仅教师的文本输出 | 教师的完整 token 概率 |
| 所需访问权限 | 仅 API | 需要原始模型权重 |
| 质量 | 良好 | 更好(每个 token 信号更丰富) |
| 成本 | 廉价 | 更高(捕获成本) |
| 适用场景 | 从闭源 API 蒸馏 | 从开源或自有模型蒸馏 |
输出蒸馏是大多数团队的做法,因为他们无法获得 GPT-4 或 Claude 的权重级访问权限。logit 蒸馏是学术界的标准做法,但需要开源模型。
著名的蒸馏模型
DistilBERT(Hugging Face,2019):开山之作。体量为 BERT 的 60%,性能为其 95%,速度快 60%。
Alpaca / Vicuna(斯坦福 / LMSYS,2023):从 GPT-3.5 输出蒸馏而来的 Llama。让小型指令跟随模型变得廉价。
GPT-4o-mini、Claude Haiku、Gemini Flash:据传分别从各自的旗舰模型蒸馏而来,不过细节并未公开。
Llama 3.2 1B / 3B:Meta 从更大的 Llama 变体蒸馏而来、用于端侧使用的小型模型。
DeepSeek-R1-Distill(2025):将 DeepSeek-R1 的推理能力开源蒸馏到更小的 Llama 和 Qwen 基座上的版本。
TinyLlama、Phi-3:采用类蒸馏技术训练、以小博大的小型模型。
何时使用蒸馏
成本驱动型产品:你需要大部分质量,但无法在每次请求上都负担 GPT-4 或 Claude Opus。
延迟敏感型体验:聊天助手等场景,回答必须在亚秒级完成。
专门化:在窄任务(意图分类、JSON 提取、代码补全)上,一个经过微调的小模型胜过通用旗舰模型。
端侧或隔离环境:在无法运行 70B 模型的场合。
大批量处理:每天数百万次的文档分类,旗舰模型成本过高。
何时不该使用它
你没有足够的教师数据:至少需要数千对高质量的(输入,教师输出)。
开放式创意任务:蒸馏模型往往会丢失细微之处和创造力。
前沿推理:数学、编程和复杂推理仍然得益于运行真正的前沿模型。
快速变化的领域:蒸馏模型是一个快照。如果领域每周都在变,蒸馏就会滞后。
权衡取舍
质量上限:学生无法超越教师。蒸馏是迁移,而非创造。
对陌生输入的脆弱性:小模型泛化能力较弱。分布外输入会让性能迅速退化。
偏见继承:教师的偏见(连同错误和幻觉)会被固化进学生模型中。
前期 API 成本:从闭源 API 蒸馏,需要在数据生成阶段为数千次教师推理付费。
合规风险:某些闭源 API 的服务条款禁止使用其输出来训练竞品模型。请仔细阅读条款。
常见误区
不做评估就蒸馏:没有留出基准,你就无法判断学生是否匹配教师。
学生太小、教师太复杂:一个 1B 的学生无法捕获 1750 亿教师的全部行为。让规模匹配你的目标。
忽视数据质量:糟糕的教师输出(幻觉、跑题)会被固化为学生的糟糕行为。
没有专门化:从一个通用模型蒸馏出另一个通用模型,往往得到一个更差的通用模型。要针对一项任务来蒸馏。
合规盲区:悄悄用竞争对手的 API 输出来训练,是一颗法律定时炸弹。请确认服务条款。
Sources: