Skip to content

知识蒸馏 · 知识点

重点 蒸馏的本质是什么?

很多人把蒸馏理解成「大模型压成小模型」。更准的说法是:知识迁移(Knowledge Transfer)——让小模型学会大模型已经掌握的知识,压缩只是常见结果,不是本质。

说法表述问题 / 优点
传统理解蒸馏 = 把大模型压缩成小模型只看到体积变小,没说「学什么」
更准理解蒸馏 = 让小模型学习大模型的知识点出本质是迁移知识,小模型可部署、可加速是副作用

为什么要纠这个口

  1. 压缩是手段/结果 — 参数少、算力省、延迟低,是工程动机。
  2. 迁移是本质 — Teacher 把「怎么判、类间关系、决策边界」传给 Student。
  3. 没有 Teacher 也能训小模型 — 直接用硬标签训小模型也是压缩思路;蒸馏多出来的价值,是用 Teacher 的输出当更丰富的监督信号。

重点 什么是硬标签,什么是软标签?

蒸馏里监督信号分两种——硬标签只告诉「正确答案是谁」;软标签告诉「每一类有多可能」。

硬标签(Hard Label)软标签(Soft Label)
形式One-hot:正确类为 1,其余为 0概率分布:各类都有概率
例子(猫图)[猫=1, 狗=0, 鸟=0]Teacher 输出 [猫=0.8, 狗=0.15, 鸟=0.05]
告诉你什么只知道是猫还知道「像狗多于像鸟」
信息量

硬标签的局限 — 只标对错,不体现类间相似度;学生只能学「选对那一类」,学不到 Teacher 对整个类别空间的判断。

软标签从哪来 — 一般是 Teacher(大模型)对同一输入做前向,输出 softmax 概率(常配合温度 T 把分布「软化」),再拿去训 Student。

硬标签和软标签,哪个信息量更大?

软标签信息量更大。 多出来的那部分——类与类之间的相似度、Teacher 的相对置信——叫 暗知识(Dark Knowledge)

怎么从例子里看出来

  • 硬标签:[1, 0, 0] → 只知道是猫。
  • 软标签:[0.8, 0.15, 0.05] → 猫概率最高,同时 猫更像狗(0.15)而不像鸟(0.05)
  • 学生若只学硬标签,学不到「猫–狗近、猫–鸟远」;学软标签,就把 Teacher 对决策边界的理解一起迁过去。

和蒸馏本质的关系

  • 蒸馏要迁的,很大一块就是这些软标签里的暗知识。
  • 所以「只压缩参数、仍用硬标签训小模型」≠ 经典知识蒸馏;经典 KD 强调用 Teacher 的软分布当额外监督。

重点 温度系数 T 的作用是什么?

T 是概率分布「尖锐 ↔ 平滑」的调节器,用来让 Teacher 把更多暗知识露给学生。公式上是把 logits 除以 T 再 Softmax:softmax(z / T)。T 越大,分布越平;T=1 就是普通 Softmax。

例子:Teacher 看到模糊图,原始 logits = [猫=8, 狗=2, 鸟=1]

TSoftmax 输出(约)效果
T=1(常温)[0.99, 0.01, 0.00]概率极度偏向猫,狗/鸟信息几乎被抹掉 → 学生只能死记「这是猫」
T=5(高温)[0.64, 0.24, 0.12]分布被「摊平」→ Teacher 露出「有点像狗」等细微线索

高温为什么有用

  1. 保住类间相似度 — 猫更像狗(0.24)不像鸟(0.12),暗知识还在。
  2. 像专家直觉 — 不只给标准答案,还给出「次选、易混项」。
  3. 学生学到的是知识结构 — 不只记对错,还学类与类之间的内在联系。

工程用法(训推分离)

阶段T 怎么设目的
训练(蒸馏)高温,常用 3~10充分迁移暗知识
推理回到 T=1恢复自信判断,保证输出准确

损失函数与 LLM 蒸馏

蒸馏损失是 双师教学——学生既要对标准答案,也要学 Teacher 的解题思路。总损失是两项加权:

text
L_total = α · L_hard + (1 − α) · L_soft
算什么作用
L_hard学生输出 vs 真实标签交叉熵(CE)保证基本正确:猫就得认成猫
L_soft学生输出 vs Teacher 输出KL 散度学概率分布里的细微关系(暗知识)

KL 散度在干什么 — 量两个概率分布「差多远」。Teacher 给 [猫=0.7, 狗=0.2, 鸟=0.1] 时:

学生输出KL含义
[0.6, 0.3, 0.1]抓住了「像猫但带点狗味」,模仿了 Teacher 的犹豫
[0.9, 0.05, 0.05]硬答案也对(仍是猫),但丢掉了 Teacher 对次选的细腻判断

硬标签只奖「答对」;KL 还罚「分布形状不像 Teacher」。LLM 蒸馏同理:在 token / vocab 分布上对齐 Teacher 的 soft logits(常配合温度 T),再加一层对真实下一 token / 指令答案的 CE。

α 一般取多少?

设定效果
α ≈ 0.5~0.7(常用)不完全盲从 Teacher(Teacher 也会错),同时吸收解题直觉
α = 1退化为普通监督训练,蒸馏增益没了
α 过小过度贴 Teacher,真标签约束变弱,可能学偏

LLM 时代的蒸馏挑战是什么?

经典 KD 假设 Teacher / Student 能力接近、且能拿到 Teacher 的 logits。LLM 时代两条硬坎:能力鸿沟太大闭源只能拿文本

1. 能力鸿沟过大 → 学不动

  • 直接 72B → 1.5B,差距太大,学生往往学不好。
  • 类比:小学生硬啃研究生课——不是内容不对,是跨度太大。

解法:渐进式蒸馏(Progressive Distillation)

text
72B → 32B → 7B → 1.5B

每步跨度可控,学生能跟上。DeepSeek-R1 系列就采用了这类渐进思路。

2. 经典蒸馏 vs LLM / API 蒸馏

经典蒸馏API 蒸馏(闭源 Teacher)
Teacher 例子DeepSeek 等开源,能拿到内部概率GPT / Claude / Gemini,内部不可见
监督信号Teacher 的 概率分布 / logits + KLTeacher 的 输出文本
训练方式Softmax(T) + KL(+ 可选硬标签 CE)把 Teacher 文本当数据做 SFT
暗知识分布里直接有主要靠文本里的推理过程 / 答案格式间接带

案例:S1 — 典型 API 蒸馏;常被说成「约 50 美金 复刻 R1」那条线,流程见下一节。

推理时间预算怎么估、怎么调?

不知道每类题该「想多久」,就先用数据估平均预算,再用实验调多/少;线上可用档位粗控(快 vs 细)。

1. 用训练数据估

  • 按题型 / 难度看训练集里推理链平均要多长(常以 token 数 计)。
  • 实验里常把推理路径按长度分组,再据此给模型设提示或预算上限。

2. 用实验评估调多/少

  1. 先给一个初始时间预算,跑模型。
  2. 按题型记录 准确率生成答案长度
  3. 准确率不够 → 加预算;已经够准但太慢/太长 → 减预算

3. 用分类条件粗控(class-conditional control)

  • API 可设 reasoning_effortlow / medium / high
  • 控的是档位,不是精确算力;按「要响应速度」还是「要细节深度」选档即可。
手段解决什么精度
训练数据分析每类题大概需要多长估均值 / 分桶
实验评估调参预算该加还是该减按指标迭代
reasoning_effort线上快速粗调档位级,不精确

S1 的训练过程是怎样的?

业界常说的「李飞飞团队 / Stanford 约 50 美金复刻 R1」,指的就是 s1:用 Gemini 推理文本做 API 蒸馏 + 小而精 SFT,再在测试时用 Budget Forcing 控思考长度——不是从头训 R1,是低成本把推理能力迁到开源底座上。

三步流程

步骤做什么要点
1. 数据准备约 5.9 万题里精筛 → s1K(1000 条)每条 = 问题 + Gemini 2.0 Flash Thinking 生成的推理路径 + 答案
2. 选模 + SFT底座 Qwen2.5-32B-Instruct,用 s1K 做监督微调只训这 1K 高质量样本,不堆海量脏数据
3. Budget Forcing(测试时)控推理算力超预算 → 强制插入「结束思考」;想多想 → 追加 "Wait" 促使继续探索

成本量级(论文/公开资料)

  • 硬件:16× H100
  • 时间:约 26 分钟
  • 对外说法:算力成本大约 50 美金 量级(随当时云价波动,别死磕精确账单)

和前面知识点的挂钩

  1. API 蒸馏 — Teacher 是 Gemini(闭源),只能拿文本推理链,不能做 logits/KL。
  2. 质量 > 数量 — 5.9 万筛到 1K,强调精选。
  3. 推理预算 — Budget Forcing 就是「预算限制」的工程落地:少想就截断,多想就 Wait。

蒸馏 + SFT + RLHF 在项目中如何使用?

实际项目里这三样很少单打,而是分阶段组合:先蒸馏/SFT 学会「格式 + 知识」,再用强化学习(常说成 RLHF 一族,工程上多见 GRPO)学会「推理策略」。

text
阶段一:SFT 蒸馏(学格式 + 知识)

阶段二:GRPO 强化学习(学推理策略)
阶段一:SFT 蒸馏阶段二:GRPO 强化学习
学什么基本格式遵循 + 领域知识在阶段一基础上再抬推理能力
数据Teacher 生成的高质量答案(API 蒸馏数据只需「问题 + 标准答案」(如 GSM8K
训法普通 SFT,Teacher 输出当标签GRPO,用奖励函数引导推理过程
效果能答题,但推理能力仍有限会展示推理过程,答案正确率提升

怎么串起来记

  1. 阶段一 — 把闭源/大 Teacher 的答法迁过来,学生先「像样」:格式对、领域词对、能答。
  2. 阶段二 — 不再依赖 Teacher 全文;有题有标答即可,靠奖励逼出更好的 CoT / 解题策略。
  3. 和 s1 / R1 的关系 — s1 偏「只做阶段一(API 蒸馏 + SFT)」;完整推理模型流水线常是 SFT(可含蒸馏)→ RL(GRPO 等)。标题里的 RLHF 是对齐/偏好大类说法,落地算法可以是 PPO / DPO / GRPO

DeepSeek-R1-Distill 系列的训练路径是怎样的?

R1-Distill 就是上一节「阶段一 +(可选)阶段二」的官方产品化:用 R1(671B) 当 Teacher,把带推理过程的数据 SFT 蒸馏Qwen2.5 小规格上,部分规格再上 GRPO

text
DeepSeek-R1 (671B Teacher)
        ↓ 生成含推理过程的大量数据
   SFT 蒸馏 → Qwen2.5 系列

DeepSeek-R1-Distill-Qwen-1.5B / 7B / 14B / 32B
        ↓(部分模型)
      GRPO 再优化
步骤做什么
1. 选 TeacherDeepSeek-R1(671B)
2. 造数据生成大量含 推理过程 的训练数据(不只最终答案)
3. SFT 蒸馏Qwen2.5 做监督微调 → 得到 Distill-Qwen 1.5B / 7B / 14B / 32B
4. 再优化(可选)部分模型继续用 GRPO 抬推理

和 s1 对比

s1R1-Distill
TeacherGemini(API 文本)自家 R1 开源/可部署,数据量级更大
学生底座Qwen2.5-32B 一条Qwen2.5 多规格全家桶
后处理测时 Budget Forcing部分规格 GRPO
定位低成本证明「1K SFT 也能出推理样」正式发布的蒸馏产品线

重点 教师-学生模型选择原则是什么?

选师生三句话——Teacher 尽量强(但算 API 账)Student 按部署选规格参数比别离谱,大约 4:1~10:1,跨太大就渐进蒸馏。

原则口径注意
Teacher 越强越好信号质量更高,学生上限更高API / 造数成本要控;闭源贵就少而精(如 s1K)
Student 看部署端侧 / 服务器 / 高性能不同档见下表
师生参数比一般 4:1~10:1远超(如 72B→1.5B)易学不动 → 渐进蒸馏

学生规格怎么选

部署场景常用规格
端侧部署1.5B~3B
服务器部署7B~14B
高性能需求32B+

和前面知识点挂钩

  1. R1-Distill 同时出 1.5B/7B/14B/32B,就是按部署档位铺学生规格。
  2. 比例如 671B→1.5B 远超 10:1,工程上仍常见——要么接受上限有限,要么中间加跳板(渐进)。
  3. 开源 Teacher 可自己跑;闭源 Teacher 强但贵,原则变成「够强 + 造得起」。

如何训练自己的 R1 模型?

一条常见线是 Unsloth + GRPO 的「迷你 R1」:底座 Instruct → 规定 <reasoning>/<answer> 格式 → GSM8K + 多奖励 → GRPOTrainer 训 → 多格式导出。对应前面「阶段二学推理策略」,不是从零训 671B。

text
加载底座(4bit + LoRA)
    → GSM8K + 格式约束
    → 设计奖励函数
    → GRPO 训
    → 保存导出

这条线在训:结构化推理<reasoning> / <answer>)+ GRPO + 格式/正确性奖励。自家「小 R1」多是 Instruct 底座 + GRPO;官方 Distill 另有 R1 产数据再 SFT。要分清「蒸馏路径」和「自训 GRPO 路径」。

GRPO 如何「长出」<reasoning>?数据从哪来?

GSM8K 确实只有 question / answer,没有 <reasoning> 列。 GRPO 不需要现成推理标注;靠 奖励函数 引导模型自己生成带标签的内容。<reasoning> 里的文字不是数据集抄来的,是模型在 RL 里为拿高分「写出来」的。

一句话答疑

疑问答案
GRPO 能帮产生 <reasoning> 吗?——格式奖励专门催这个结构
推理文本从哪来?不是标注数据;底座预训练里已有推理能力,GRPO 逼它显式写出来并包进标签

奖励怎么催格式(公开规格)

python
reward_funcs = [
    xmlcount_reward_func,        # 检查 XML 标签用得对不对
    soft_format_reward_func,     # 是否包含 <reasoning> 和 <answer>
    strict_format_reward_func,   # 严格检查格式
    int_reward_func,             # 答案是否为数字
    correctness_reward_func,     # 最终答案是否正确
]

soft_format_reward_func 示例逻辑:用正则匹配

text
<reasoning>...</reasoning><answer>...</answer>

格式对给 0.5,不对给 0.0——直接把「愿意写标签」写进优化目标。

训练循环(为何不需要推理标注)

  1. 生成:同一题采样多条候选(如 num_generations = 6)。
  2. 打分:每条都过全部奖励函数(格式 + 正确性等)。
  3. 优化:组内相对高分的轨迹拉高策略 → 模型学会「用对标签 + 在 reasoning 里解题 + answer 答对」。

蓝条结论

  • Llama 等底座本来就会推理(预训练里学过)。
  • GRPO 用奖励把内部推理外显,并用 XML 标签组织,利于稳住最终正确性。
  • 对比:蒸馏路径的 CoT 来自 Teacher 文本;这条 GRPO 路径的 CoT 来自 RL 涌现 + 格式奖励

GRPO 训练与 SFT 的关键差异是什么?

SFT 是 模仿标准答案(CE);GRPO 是 多候选采样 + 奖励打分 + 组内相对优势更新。工程上差在:要不要开 vLLM、数据要不要带 CoT、学率更小、靠奖励链而不是贴标签。

维度SFTGRPO
学什么直接拟合标注文本最大化奖励(格式 + 正确性等)
每题用法一条(或少量)监督目标多候选(如 num_generations=6),比相对好坏
推理加速一般不强制常开 vLLMfast_inference=True
数据要不要 CoT有推理链更好(蒸馏/SFT)可以没有;System Prompt + 奖励催格式
学习率相对更大小一个数量级(如 5e-6),RL 要稳
保存全量 / LoRA 皆可常用 LoRA 专用保存

GRPO 同一题要多候选,常开快推理;格式靠 System Prompt + 奖励,不靠标注里的 CoT。奖励链同时打格式和正确性,SFT 只有交叉熵贴标签。模型本身已有推理能力,奖励把「先写推理、再给正确答」逼出来。

AI 大模型趋势

和本篇蒸馏 / 推理线对齐的三条趋势——小模型靠蒸馏上位合成数据成主力模型自出题自校验做 RL 自迭代(类比 AlphaGo-Zero)。

1. 小模型成主流:大模型蒸馏

  • 用蒸馏把大模型的推理能力迁到小模型,小模型成绩明显抬升。
  • 例子:DeepSeek-R1-Distill-Qwen-7BAIME 2024 上打赢 32B 量级模型——「小但会想」可碾压「大但不会想」。

2. 用合成数据训练成主流

  • 蒸馏数据是公开的秘密,但有些能力单靠蒸馏解释不了
  • 例:DeepSeek-V3 中文很「接地气」,更像预训练阶段大量用了数据合成,而不只是抄 Teacher 输出。

3. 模型自迭代:新的强化学习范式

让模型自己出题、自己答、自己校验,对的留下当下一轮数据:

text
① 自生成海量题并作答(如 1 亿题)

② 自校验答案对不对

③ 筛出校验通过的:结果 + 思维链 → 合成新训练数据
   (例:1 亿里过关 100 万,这 100 万条 CoT 进下一轮)

   持续迭代,探索人类尚未覆盖的区域(类比 AlphaGo-Zero)

和本章挂钩

趋势本章对应
小模型蒸馏R1-Distill、师生选型、API/logits 蒸馏
合成数据Teacher 造数、s1K、自校验留下的 CoT
RL 自迭代GRPO、奖励催 <reasoning>、无标注也能长出推理链

训练完成后,如何系统评估不同方法的效果?

别只凭感觉看几条 case。用同一套测试题,按四维指标打分,再横向比:基座 vs SFT vs GRPO。不同方法擅长不同事,综合分高不代表每项都赢。

评估对比维度

1. 微调前后定量对比

  • 同一批测试题,比基座 vs 微调后回答。
  • 看:格式遵循、答案准确、语言匹配。
  • 常见现象:微调前中文题容易用英文答,微调后对齐目标语言。

2. 方法对比:纯 SFT vs SFT + GRPO

模型强项弱项
SFT格式遵循、知识问答推理能力有限
GRPO推理、结构化输出(R1 向)可能牺牲一点对话流畅度

不同任务选不同训法,别用一个榜打天下。

3. 四维核心指标

指标查什么例子
a) 格式遵循是否按要求格式输出医疗:结构化;推理:是否有 <reasoning> / <answer>
b) 答案准确率与参考答案契合度可用关键词 / 字符级 F1
c) 推理链质量推理够不够长、分不分层、结不结论长度、步骤词、结论是否落地
d) 语言匹配输出语言是否符合预期中文题是否中文答

实现要点(EvalMetrics)

python
# 1. 格式遵循:xml → 查 <reasoning>/<answer>;medical → 长度或 ### 结构
# 2. 答案准确:字符集合重叠算简化 F1
# 3. 推理链质量:长度>50 + 步骤词(首先/然后/因此/1./2.)
# 4. 语言匹配:目标语种字符占比(如中文比例)
# 多模型:同一 test_cases 上跑各模型 → 综合分对比

对比评估示例

模型格式遵循答案准确语言匹配综合评分
基座(微调前)0.30.150.050.17
SFT 微调0.90.720.950.86
GRPO 强化学习0.950.680.880.84

读表:基座全面崩;SFT 综合略高、语言/准确更稳GRPO 格式(含 reasoning 标签)最强,准确/语言略让步——和「SFT 会答、GRPO 会想」一致。