知识蒸馏
问题
什么是知识蒸馏?如何用大模型训练小模型?
答案
知识蒸馏(Knowledge Distillation) 是将大模型(Teacher)的能力迁移到小模型(Student)的技术。
一、蒸馏方式
| 方式 | 原理 | 优缺点 |
|---|---|---|
| 数据蒸馏 | 用 Teacher 生成训练数据,SFT Student | 简单易用,最常用 |
| 软标签蒸馏 | Student 学习 Teacher 的输出概率分布 | 效果更好,但需要 Teacher 的 logits |
| 特征蒸馏 | Student 模仿 Teacher 的中间层表示 | 效果最好,但实现复杂 |
二、数据蒸馏实践
# 1. 用 Teacher 模型为种子数据生成高质量回答
def generate_distillation_data(questions: list, teacher_model):
data = []
for question in questions:
response = teacher_model.generate(
question,
temperature=0.7, # 适当的多样性
max_tokens=2048,
)
data.append({
"instruction": question,
"output": response,
})
return data
# 2. 用生成的数据 SFT 训练 Student 模型
# 与普通 SFT 流程相同
三、典型案例
| 案例 | Teacher | Student | 方法 |
|---|---|---|---|
| Alpaca | GPT-3.5 | LLaMA-7B | 数据蒸馏(52K 指令) |
| Vicuna | GPT-4 | LLaMA-13B | ShareGPT 对话蒸馏 |
| Orca | GPT-4 | LLaMA-13B | 推理过程蒸馏 |
| DeepSeek-R1-Distill | DeepSeek-R1 | Qwen/LLaMA | 推理链蒸馏 |
| Phi-3 | 大模型合成 | 3.8B | 高质量合成数据 |
DeepSeek R1 蒸馏
DeepSeek 用 R1 大模型(671B MoE)的推理输出蒸馏到 Qwen-32B、LLaMA-70B 等小模型,蒸馏后的 32B 模型在数学推理上接近原始 671B 模型的能力。这表明推理能力可以通过蒸馏传递。
四、蒸馏 vs 微调 vs RAG
| 维度 | 蒸馏 | 微调 | RAG |
|---|---|---|---|
| 目标 | 压缩大模型能力 | 适应特定任务 | 注入外部知识 |
| 数据 | Teacher 生成 | 人工标注 | 知识库文档 |
| 成本 | 中(调用 Teacher) | 高(训练) | 低(无需训练) |
| 延迟 | 低(小模型推理快) | 取决于模型大小 | 高(检索+生成) |
常见面试问题
Q1: 蒸馏出来的小模型能超过 Teacher 吗?
答案:
- 通常不能在整体上超过 Teacher
- 但在特定任务上可能接近甚至超过(因为蒸馏数据更集中)
- DeepSeek R1 蒸馏的案例表明,推理链蒸馏可以让小模型获得远超同尺寸模型的推理能力
Q2: 蒸馏有什么法律风险吗?
答案: 许多商业模型(如 GPT-4、Claude)的使用条款禁止用其输出训练竞品模型。需要注意:
- 检查 Teacher 模型的 License 和使用条款
- 开源模型(LLaMA、Qwen)通常允许蒸馏
- 商业模型的 API 输出可能有限制