知识蒸馏:让小模型继承大模型的智慧

知识蒸馏(Knowledge Distillation)是模型压缩领域最重要的技术之一。通过让小模型(Student)学习大模型(Teacher)的知识,可以在保持接近大模型性能的前提下,大幅减少参数和计算量。本文深入解析蒸馏的原理与实践。

一、知识蒸馏的理论基础

1.1 为什么蒸馏有效

Teacher 模型不仅输出正确答案,还输出软标签(Soft Labels)——包含了类别间的相似性关系。这些"暗知识"(Dark Knowledge)比硬标签包含更多信息:

硬标签 (Hard Label):
  猫: 1.0, 狗: 0.0, 汽车: 0.0
  → 只告诉你"这是猫"

软标签 (Teacher, T=3):
  猫: 0.7, 狗: 0.25, 汽车: 0.05
  → 告诉你"这是猫, 但很像狗, 完全不像汽车"
  → 包含了类别间的关系信息!

1.2 温度参数

Teacher 使用温度 $T$ 平滑输出分布:

$$p_i^T = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}$$

温度越高,分布越平滑,暗知识越明显。常用 $T \in [2, 10]$。

1.3 蒸馏损失函数

$$\mathcal{L} = \alpha \cdot \mathcal{L}{KD} + (1 - \alpha) \cdot \mathcal{L}{CE}$$

其中:

  • $\mathcal{L}{KD} = T^2 \cdot \text{KL}(p^T{student} | p^T_{teacher})$ — 蒸馏损失
  • $\mathcal{L}{CE} = \text{CE}(y, p^1{student})$ — 标准交叉熵损失
  • $\alpha$ — 蒸馏权重,通常 0.5-0.9
  • $T^2$ 因子保证梯度尺度一致

二、Logit 蒸馏

2.1 标准 Logit 蒸馏

最直接的蒸馏方式:让 Student 模仿 Teacher 的 logit 输出。

class LogitDistillation:
    def __init__(self, teacher_model, student_model, T=4.0, alpha=0.7):
        self.teacher = teacher_model  # 冻结参数
        self.student = student_model
        self.T = T
        self.alpha = alpha
    
    def compute_loss(self, input_ids, labels):
        # Teacher 输出 (不计算梯度)
        with torch.no_grad():
            teacher_logits = self.teacher(input_ids)
        
        # Student 输出
        student_logits = self.student(input_ids)
        
        # 蒸馏损失 (KL 散度)
        kd_loss = F.kl_div(
            F.log_softmax(student_logits / self.T, dim=-1),
            F.softmax(teacher_logits / self.T, dim=-1),
            reduction='batchmean'
        ) * (self.T ** 2)
        
        # 标准交叉熵损失
        ce_loss = F.cross_entropy(student_logits, labels)
        
        return self.alpha * kd_loss + (1 - self.alpha) * ce_loss

2.2 Top-K 蒸馏

对于大词表(128K+),计算完整 softmax 的 KL 散度很昂贵。Top-K 蒸馏只关注 Teacher 预测概率最高的 K 个 Token:

$$\mathcal{L}{KD} = -\sum{i \in \text{TopK}} p_i^T \log p_i^S$$

优势:计算量从 $O(|V|)$ 降低到 $O(K)$,$K$ 通常取 5-20。

2.3 序列级蒸馏

对于生成任务,直接蒸馏 logit 不够——需要蒸馏整个生成序列:

  1. Teacher 生成多个回复
  2. Student 学习模仿 Teacher 的生成结果
  3. 使用标准交叉熵损失
Teacher 生成:
  Prompt: "解释量子纠缠"
  Teacher: "量子纠缠是指两个或多个粒子..."

Student 学习:
  输入: Prompt + Teacher 的生成
  损失: -log P_student(Teacher 的生成 | Prompt)

三、特征蒸馏

3.1 中间层蒸馏

除了输出层,Teacher 的中间层表示也包含丰富信息:

$$\mathcal{L}_{feature} = \sum_l | \phi_l(h^S_l) - h^T_l |^2$$

其中 $h^T_l$ 和 $h^S_l$ 是 Teacher 和 Student 在第 $l$ 层的隐藏状态,$\phi_l$ 是投影函数(对齐维度)。

┌────────────────────────────────────────────────┐
│            中间层蒸馏架构                       │
├────────────────────────────────────────────────┤
│                                                │
│  Teacher (80层)          Student (32层)        │
│                                                │
│  Layer 0  ──────┐        Layer 0  ──────┐     │
│  Layer 10 ──────┤        Layer 4  ──────┤     │
│  Layer 20 ──────┤  对齐   Layer 8  ──────┤     │
│  Layer 40 ──────┤◄──────►Layer 16 ──────┤     │
│  Layer 60 ──────┤        Layer 24 ──────┤     │
│  Layer 80 ──────┘        Layer 32 ──────┘     │
│                                                │
│  投影函数 φ: 维度对齐 + 层映射                 │
│                                                │
└────────────────────────────────────────────────┘

3.2 注意力蒸馏

Teacher 的注意力模式包含语义对齐信息:

$$\mathcal{L}{attn} = \sum_l | A^S_l - A^T{\pi(l)} |^2$$

其中 $A_l$ 是第 $l$ 层的注意力矩阵,$\pi(l)$ 是层映射函数。

TinyBERT 系列证明,注意力蒸馏对 NLU 任务特别有效。

3.3 MiniLM 蒸馏

MiniLM 方案专注于蒸馏 Teacher 的最后一层,包括:

  • Self-Attention 分布
  • Value-Relation 矩阵
  • 输出 logit
# MiniLM 蒸馏损失
def minilm_loss(teacher_attn, teacher_value, student_attn, student_value, T=2.0):
    # 注意力分布蒸馏
    attn_loss = F.kl_div(
        F.log_softmax(student_attn / T, dim=-1),
        F.softmax(teacher_attn / T, dim=-1),
        reduction='batchmean'
    ) * (T ** 2)
    
    # Value-Relation 蒸馏
    teacher_vr = F.softmax(teacher_value @ teacher_value.transpose(-1, -2) / T, dim=-1)
    student_vr = F.log_softmax(student_value @ student_value.transpose(-1, -2) / T, dim=-1)
    vr_loss = F.kl_div(student_vr, teacher_vr, reduction='batchmean') * (T ** 2)
    
    return attn_loss + vr_loss

四、2026 年蒸馏新范式

4.1 渐进式蒸馏

不一次性蒸馏到目标大小,而是逐步缩小:

Teacher (70B) → Student A (35B) → Student B (13B) → Student C (7B)

每步蒸馏的质量损失 < 2%
最终 7B 模型 ≈ 直接蒸馏的 13B

4.2 数据增强蒸馏

Teacher 生成多样化数据,Student 在增强数据上训练:

  1. Teacher 对同一 prompt 生成多个不同风格的回复
  2. Teacher 解释自己的推理过程(Chain-of-Thought)
  3. Student 学习这些丰富的训练信号
# 数据增强蒸馏
def generate_distillation_data(teacher, prompts):
    data = []
    for prompt in prompts:
        # 多样化生成
        for temperature in [0.3, 0.7, 1.0, 1.3]:
            response = teacher.generate(prompt, temperature=temperature, n=4)
            data.append({"prompt": prompt, "response": response})
        
        # Chain-of-Thought
        cot_prompt = prompt + "\n请逐步思考。"
        cot_response = teacher.generate(cot_prompt)
        data.append({"prompt": prompt, "response": cot_response})
    
    return data

4.3 自蒸馏

模型蒸馏自身——不需要更大的 Teacher:

  1. 训练一个大模型到收敛
  2. 复制为 Student,剪枝后微调
  3. Teacher 和 Student 共享部分参数

DeepSeek V4 在训练中使用自蒸馏:MoE 的共享专家作为 Teacher,路由专家作为 Student,形成隐式蒸馏。

4.4 在线蒸馏

Teacher 和 Student 同时训练,互相学习:

$$\mathcal{L}{online} = \mathcal{L}{CE}(y, p^S) + \beta \cdot \mathcal{L}{KD}(p^S, p^T) + \gamma \cdot \mathcal{L}{KD}(p^T, p^S)$$

双向蒸馏让 Teacher 也从 Student 获得反馈(反向蒸馏),有时能提升 Teacher 的泛化能力。

五、蒸馏效果评估

5.1 主要基准

Student蒸馏方式TeacherMMLUHumanEval速度
7B (从零训练)--54.828.21.0x
7B (Logit蒸馏)GPT-41.8T65.252.31.0x
7B (序列蒸馏)GPT-41.8T68.558.11.0x
7B (渐进式)70B→35B→7B70B72.162.51.0x
7B (数据增强+CoT)GPT-5未知75.365.81.0x
13B (从零训练)--62.138.50.55x

7B 蒸馏模型可以超越 13B 从零训练的模型——这就是蒸馏的价值。

5.2 蒸馏的"天花板"

蒸馏有一个理论上限:Student 的信息容量决定了它能学到多少。一个 7B Student 即使有完美的 Teacher,也无法达到 70B Teacher 的全部能力。

经验公式:

$$\text{Quality}{student} \leq \text{Quality}{teacher} \times \left(\frac{N_{student}}{N_{teacher}}\right)^{0.15}$$

这意味着 7B/70B = 0.1,质量上限约为 Teacher 的 $0.1^{0.15} = 0.71$ 倍。

六、工程实践

6.1 蒸馏流程

1. 选择 Teacher 模型 (冻结参数)
2. 准备蒸馏数据 (5M-50M 高质量 prompt)
3. Teacher 生成软标签 / 序列
   │  (可能需要数周, 使用大集群)
4. 训练 Student
   │  - 阶段1: 中间层蒸馏 (50K 步)
   │  - 阶段2: Logit + CE 混合训练 (200K 步)
   │  - 阶段3: 纯 CE 微调 (50K 步)
5. 评估与迭代

6.2 常见问题

问题原因解决方案
Student 过拟合 Teacher数据量不足增加数据多样性
Student 能力天花板低模型太小渐进式蒸馏
Teacher 生成质量差Teacher 不够强使用更强的 Teacher 或多 Teacher
训练不稳定蒸馏损失权重不当动态调整 α 和 T
领域偏移Teacher 和 Student 领域不同领域适应蒸馏

七、总结

知识蒸馏是大模型民主化的关键技术:

  1. Logit 蒸馏适合分类任务,序列蒸馏适合生成任务
  2. 渐进式蒸馏效果最好,但成本高
  3. 数据增强蒸馏(含 CoT)是 2026 年的最佳实践
  4. 蒸馏有理论天花板,但 7B 蒸馏模型已超越 13B 原生模型

蒸馏的哲学——“站在巨人的肩膀上”——让小模型也能拥有大模型的智慧,是 AI 普惠的关键。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。