跳到主要内容

抄作业:蒸馏 — 便宜四分之三的那条路,以及为什么更强的老师教得更差

这一章讲什么: 第 02 章说过的第三条路,在这里走完。 做法说白了就是抄作业:找一个强得多的模型把一万两千道题全做一遍,让小模型去学它的答案。 这一章还会把第 09 章那套对数概率接到训练损失上 —— 它们其实是同一个东西。 最后给出全书最反直觉的一条发现,以及五条路的总账。

它在全书链条里的位置: 最后一环,也是性价比最高的一环。 第 11 章那条路要 12 小时、70 GB;这一条只要 3 小时、15 GB。 但成绩要看挑哪个老师: 书从头跑到尾的那一次(老师是 DeepSeek-R1)拿到 33.6%; 换一个和学生同家族的老师,分数能到 45.0% —— 那才是「只比第 11 章低 2.4 个点」的那一组, 而书没有给这一组的耗时和显存。

需要的基础: 第 09 章的对数概率,第 02 章第 5 节和第 6 节(三条路 + 蒸馏的两义)。

顶层全景:一条训练样本,从老师的回答到一个损失值

那 12000 道题里的一条
│ ① 老师(一个 6710 亿参数的模型)已经把它做过了,留下两样东西:
│ 推理过程 + 最终答案

② 拼成一条:<think>{推理过程}</think>\n\n{最终答案}
│ ③ 套上聊天格式的外壳(**但答案那部分不能再套一次**)

④ 切成小块。**超过 2048 块的整条丢掉** —— 12000 条砍剩 6695 条(丢了 44%)
│ ⑤ 只在答案那几块上算损失(提示词那几块不罚它)

⑥ 得到一个数:**1.68**

重复这个循环 3 遍 ⟹ **3 小时 5 分钟、15.02 GB,MATH-500 准确率 33.6%**
(这是本章从头跑到尾的那一次,老师是 DeepSeek-R1)

换一个老师(Qwen3 235B-A22B,和学生同一个家族),第 1 遍就到 **45.0%**
—— **但书只给了这一组的分数,没给它的耗时和显存。**

图说:整章就是这条流水线。第 ④ 步那个「砍掉 44%」是让它能在小机器上跑起来的关键,
第 ⑥ 步那个 1.68 和第 09 章那套算法是同一个东西 —— 第 5 节讲。
**成本和成绩分属两次不同的运行,第 6 节把两组数摆在一起说清楚,别把它们焊成一句话。**

1. 为什么需要这条路:最强的模型你根本用不起

动机很实在,书一句话说清1:

最强的那些推理模型大到没法直接用。举例:DeepSeek-R1 有 6710 亿个参数。 这种规模开发贵、部署贵,远远超出绝大多数从业者能在本地跑的东西。

——对照一下:本书用的模型是 6 亿个参数。6710 亿是它的一千多倍。

而 DeepSeek 团队自己就是这么做的2:拿那个 6710 亿的模型当老师, 蒸馏出一批小模型。 这一章做的是同一件事,只是规模小得多。

书给的成本对照是全书最有冲击力的一组数3 (同一台机器):

耗时内存
第 11 章那条路(强化学习)12 小时70 GB
这一章(蒸馏)3 小时15 GB

时间省四分之三,内存省近八成。

而且书直接引了 DeepSeek-R1 论文的结论4: 对小模型来说,蒸馏出来的效果可能比单纯用强化学习训还好。 论文里那批蒸馏出来的小模型,表现胜过了同规模、只用强化学习训出来的模型。

2. 「蒸馏」有两种,而这一章用的是简单那种

第 02 章第 6 节挂过牌,这里把账还了。

书把蒸馏分成两种5:

硬蒸馏(这一章用的)软蒸馏
学生学什么老师生成出来的文字 —— 把老师写的那些小块当成目标老师在整个词表上的那一整套可能性
需要老师给什么只要文字要那一整套打分
本质是什么就是拿合成的数据做一次指令微调经典的知识蒸馏

机器生成的、而不是人写的数据,这一行就叫合成数据。 而「硬蒸馏就是在合成数据上做监督微调」这句话是书自己说的6

还有第三种:两者结合。 那是更早在图像识别那一行推广开来的经典做法, 书给了它的源头论文7

为什么这一行几乎只用硬蒸馏,书给了三条

理由说明
拿不到那套完整的打分ChatGPT、Claude 这类系统不公开内部实现(这种叫闭源),它们会把生成的文字给你,但一般不给整个词表上的那套分布8
就算拿得到也麻烦师生通常得用同一套分词器,词表才对得齐 —— 所以这条路基本只在同一个模型家族内部好走9
存不起长推理轨迹的完整分布,存储和使用都贵得多;而存纯文本又便宜又简单9

一条法务警告,书专门加了,我们必须保留10: 把别人模型生成的文字拿去做蒸馏,可能受各家服务条款的限制 (书点名了 OpenAI 和 Anthropic 的服务条款)。 实践中用之前应当仔细审阅。

3. 数据从哪来:12000 道题,50 美元

训练题就是第 10 章那 12000 道(和考卷那 500 道严格不重叠)。 新东西是:这一次它们被喂给了一个老师。

12000 道 MATH 训练题
│ 全部喂给老师:DeepSeek-R1(6710 亿参数),通过一个第三方接口调用
▼ 收集它的回答,当作训练目标
总花费:约 **50 美元**的接口费用
产出的文件:约 **107 MB**

出处都在书里11那 107 MB 还有个小插曲:因为超过了 GitHub 的单文件上限, 作者把它放到了另一个平台上12 —— 这个细节顺带说明了「合成数据」的体量。

监督信号和第 10 章的差别,书画得很清楚13:

拿什么和什么比
第 10、11 章那条路学生的最终答案 vs 标准答案 → 验证器给出一个奖励
这一章学生生成的每一个小块 vs 老师生成的每一个小块 → 老师的回答直接就是目标

——注意这个差别有多大:前者只在最后给一个 0 或 1,后者在每一个位置都有目标。 信号密集得多,这也是它训得快的原因之一。

还有一条实务上的好处14:老师的数据可以提前一次性生成好,再开始训学生。

老师有多强?书当场量了

模型MATH-500 准确率
DeepSeek-R1(老师)91.2%(在那 12000 道训练题上是 90.6%,即 10871/12000)
Qwen3 0.6B 官方推理版50.8%
Qwen3 0.6B base(学生的起点)15.2%

出处在书里15这一眼就看出了老师和学生差多远:91.2% 对 15.2%,六倍。

一处口径提醒: 这里的 50.8% 是第 05 章那张表 3.1 的数(在 H100 上跑的), 不是全书统一用的 48.2%。书在这一处混用了两组基线 —— 我们照实转述,但做纵向比较时仍然用 48.2%(理由见第 05 章第 8 节)。

4. 数据预处理里最有信息量的一步:砍掉 44%

这一节看起来是琐碎的准备工作,其实是这一章能在小机器上跑起来的关键。

先看长度统计16:

12000 条全部成功切块,一条没跳过
│ 统计长度
▼ 平均 **2946** 个小块;最短 **236**;**最长 42005**(!)
↑ 书的判词:平均 2946「对推理模型来说是典型的」,而 42005「非常离谱」
│ 过滤:只留 ≤ 2048 个小块的
▼ 剩 **6695** 条 —— **砍掉了 5305 条,占 44%**
│ 重新统计
▼ 平均降到 **1180** 个小块
│ 固定随机种子打乱,切 25 条当验证集
▼ 训练集 **6670** 条 + 验证集 **25** 条

书对这件事下了一个判断,值得记17:

实践中,控制序列长度是让蒸馏能在较小硬件上跑起来的主要手段之一。

——把一半数据扔掉听起来很浪费,但它换来的是「这件事你的机器做得了」。 这是这本书一贯的取舍口径。

验证集为什么只留 25 条?书也说了:免得拖慢训练循环18(训练之后仍然会用完整的 500 道题来评测。)

两处机制值得单独讲

第一处:聊天格式的外壳,以及一个很容易踩的坑。

书用官方推理版的分词器,并打开「套聊天格式」这个开关, 它会自动在提示词外面包上一对特殊的起止标签(第 13 章讲过这种记号)19

但答案那一部分必须关掉这层包裹20:

❌ 提示词自带一个「助手开始说话」的标记
答案也自带一个
⟹ 拼成一条之后,里面出现了两个开始标记 —— 错的

✅ 只让提示词那一半带包裹,答案那一半关掉

第二处:什么是一个「轮」。 书就地解释了21:

完整过一遍训练集,就叫一个训练轮(epoch)。 训 3 轮,模型就把每条样本看 3 遍,通常每遍顺序不同。

书还说明了为什么蒸馏要预先切好块存起来22: 第 10、11 章里每条样本采一次就丢,而蒸馏要反复过很多遍,所以一次性处理好更划算。 ——这也是老师数据一旦收好之后,蒸馏比强化学习更好反复改进的原因之一。

5. 损失是什么:它和第 09 章那套是同一个东西

这一节把全书最后一处伏笔还上了。

书的说法只有一句23:

交叉熵就是把那些小块的对数概率取负、再求平均。

它拿第 09 章那个例子当场算给你看23:

"The capital of Germany is Berlin"
序列的对数概率 = **−16.6250** ← 第 09 章第 3 节那个数
│ 取负
▼ 16.6250
│ 除以待预测的目标个数(这里是 5 个)
▼ **3.325**
而交叉熵算出来也是 **3.325**。

并且和对数概率一样,越接近 0 越好。

书还在一条真实的训练样本上做了交叉验证24:

用什么算结果
第 11 章那个「求和的对数概率」函数(再求平均、取负)1.68
现成的交叉熵函数1.68

书的结论:现成的那个函数是在用更优化的方式做同一件核心计算,所以训练时用它24

——到这里,第 09 章那处伏笔完整兑现了:

第 09 章:把每个词的可能性取对数再相加 → 用来给答案打分(求平均)
第 11 章:同一套算法,改回求和 → 用来当学习信号
第 14 章:同一套算法,取负再求平均 → 就是训练损失(交叉熵)

图说:一套算法,三个用途,三种收尾方式。**它们不是三个东西。**

为什么只在答案那几块上算损失

书给的理由很清楚25:

提示词是给定的上下文。 蒸馏里模型的任务不是学会重建输入的指令, 而是在这个指令的条件下产出目标答案所以我们把提示词当上下文用,但不因为提示词那几块预测得不好而罚它。

顺带:该看训练损失还是验证损失

书专门讲了这一对26:

先认两个词。一个量测出来忽上忽下、掺着与真实情况无关的抖动,这种抖动就叫噪声。

而「模型换到没见过的数据上还灵不灵」这件事,就叫泛化。 有了这两个词,这一对就好讲了:

在哪儿算的可信度
训练损失当前正在被优化的那些样本上算噪声大 —— 会随样本顺序和刚刚的参数更新波动
验证损失在留出的那一小撮上算,不更新权重更干净的泛化信号,所以更可靠

6. 训练与结果:3 小时 5 分钟,以及两个老师两组成绩

训练循环和第 11 章几乎一样,只有两处不同27: ① 要多次重复过同一批数据(也就是多个训练轮);② 损失换成交叉熵,而不是那个策略梯度损失。

真实的完整训练:3 个训练轮,在 DGX Spark 上约 3 小时 5 分钟,约 15.02 GB 显存28这个耗时属于本章从头跑到尾的那一次 —— 喂进去的是 DeepSeek-R1 老师做的那一万两千道题, 命令行里写死的数据文件名就是它28记住这一点,下面那张成绩单有两组数,只有第一组配了耗时。

书解释了为什么比强化学习那条路便宜得多,这句话很关键28:

大部分昂贵的工作,已经被挪到了「一次性生成老师数据」那一步。

曲线的解读29:验证损失先陡降后走平 —— 模型确实在从这批数据里学,但继续训收益递减。

最终成绩单

全部 500 道 MATH-50030:

#训练用的老师训练轮最终验证损失MATH-500 准确率
1base(第 05 章)15.2%
2官方推理版(第 05 章)48.2%
3DeepSeek-R110.543630.6%
4DeepSeek-R120.534932.4%
5DeepSeek-R130.534333.6%
6Qwen3 235B-A22B10.404345.0%
7Qwen3 235B-A22B20.396343.8%
8Qwen3 235B-A22B30.394844.2%

这张表里藏着一处最容易被引错的地方,先说清楚:

第 3 到第 5 行是本章从头跑到尾的那一次运行(老师 DeepSeek-R1,跑满三个训练轮), 上面那个「3 小时 5 分钟、15.02 GB」量的就是它 —— 它的成绩是 33.6%第 6 到第 8 行是另一次运行,书自己的说法是「另外附上作个参照」, 换了老师(Qwen3 235B-A22B)、而且 45.0% 那一行只训了 1 轮28

本章跑的那一次:DeepSeek-R1 当老师,3 轮 ⟹ 3 小时 5 分钟 · 15.02 GB · 33.6%
另附的参照那次:Qwen3 当老师,1 轮 ⟹ 耗时?显存?**书没给** · 45.0%

图说:两个数各有各的出处,唯独「三小时拿到 45.0%」这句话在书里没有对应的运行。
下面凡是把成本和成绩放在一起说的地方,我们都会写清是哪一组。

7. 全书最反直觉的一条:更强的老师教出更差的学生

把第 5 行和第 6 行摆在一起看31:

老师老师自己的 MATH-500教出来的学生
DeepSeek-R191.2%33.6%
Qwen3 235B-A22B92.4%45.0%

两个老师的水平几乎一样(差 1.2 个点),教出来的学生差了 11.4 个点。

书给的解释31:

老师和学生同属一个模型家族。 这意味着分词器、提示词惯例、整体的回答风格都更对得上, 老师给的目标对这个小 Qwen3 学生来说更好模仿。

——注意这条解释和第 2 节那三条理由里的第二条是同一件事: 师生共用同一套分词器,词表才对得齐。

这条发现的实用价值极高:

错的直觉:挑老师就挑分数最高的
实际该问的:**这个老师说话的样子,我的学生学得像吗?**

图说:「对齐程度」比「绝对分数」更重要 —— 至少在这个实验里是这样。

书的另外三条解读32:

① 45.0% 已经很接近官方推理版的 48.2%。 而书顺带点破了一件事:那个「官方推理模型」本身也是蒸馏出来的 —— 只是用了一个大得多的、由 Qwen3 235B-A22B 生成的数据集书说:这就是蒸馏的核心权衡。

② 别指望学生追平老师。 老师是 92.4% / 91.2%,学生 45% —— 但我们仍然能在一个便宜得多的模型里,回收老师推理行为中有用的一部分。

③ 还能更高: 换一个更大的学生(比如 4B 或 30B 而不是 0.6B),但训练成本会涨。

判断(我们的,不是书里的): 那张表里还有一件书没有点破的事 —— Qwen3 老师那一组,验证损失一路在降(0.4043 → 0.3963 → 0.3948), 而准确率是 45.0% → 43.8% → 44.2%,不降反升地乱跳。 验证损失和你真正关心的那个分数,并不总是同向。 这一条对做训练的人极其实用:别拿验证损失当准确率的替身。 如果错,会错在: 三个点之间的差距(45.0 对 43.8)只有 1.2 个点, 在 500 道题上大约是 6 道题的差别,完全可能只是随机波动 —— 书没有重复实验取平均。若真是噪声,那么这条「不同向」的观察就不成立。

8. 五条路的总账,以及这个领域往哪走

这是全书的收尾。把五条路放在同一把尺子上(base 模型的起点是 15.2%):

走哪条路动权重吗分数代价
加一句「一步步解释」(第 06 章)不动40.6%85 分钟
多答几遍再投票(第 08 章)不动52.0%863 分钟
让它改自己的作业(第 09 章)不动25.0%85 分钟
试错训练 50 步(第 11 章)47.4%约 12 小时 + 70 GB
抄作业 · 本章跑的那次(DeepSeek-R1 当老师,3 轮)33.6%约 3 小时 + 15 GB
抄作业 · 另附的参照那次(Qwen3 当老师,1 轮)45.0%书没给
(参照)官方推理版48.2%182 分钟

蒸馏为什么占两行: 别的每一行都是「同一次运行里量出来的一对数」, 只有蒸馏这条路,书跑了两次、而只给了第一次的耗时。 硬要挤成一行,就得拿这一次的成本去配另一次的成绩 —— 那正是这张表最不该出的错。

所以「抄作业只比试错训练低 2.4 个点」这句话,口径是拿 45.0% 那一组说的; 若比的是书自己那一章从头跑到尾的 33.6%,差距是 13.8 个点,不是 2.4。

而作者最后给的建议不是「挑一条」,是组合着用33:

比如:先从一个强老师蒸馏出一个小模型,再用试错训练接着训, 部署的时候再叠上投票或者自我精修。 跑这类对照,往往是最快建立直觉的办法。

书对这个领域接下来往哪走的四条判断

这一段可以当外部坐标用,但要记住它是 2026 年初的看法34:

方向内容
① 继续打磨 DeepSeek-R1 那套配方旗舰模型用试错训练,小模型用蒸馏
② 推理时的自动调度模型不该对所有任务都写一样长的回答 —— 有的题该短答,有的该多花预算。书举的实例:OpenAI 2025 年发布 GPT-5 时加了一个自动模式来调节推理力度和轨迹长度
③ 改进奖励的产生方式目前重度依赖最终答案的奖励;检查中间步骤的那类奖励可能提供更丰富的信号
④ 推理模型成为那种「会自己动手办事」的程序的引擎(这一行管这种程序叫 agent)书点名了 OpenAI Codex、Claude Code、OpenClaw。在那类场景里,模型不只解题,还要规划、调工具、从失败里恢复、协调长流程 —— 这会把奖励设计推出数学和代码之外

第 ③ 条要和前面两处连起来读,它们构成一条时间线上的翻转:

出处说法
第 09 章第 2 节「专门给推理过程打分的那类模型,实践中并不总是更好」
第 10 章第 4 节DeepSeek-R1 团队试过,失败了;结论是只用最终答案的正确性
这一节DeepSeekMath-V2 论文最近证明了:训练时评判整条答案能显著提升推理表现34

同一个想法,先被否掉,后来又被做成了。 这条时间线本身就说明:这一行的「结论」保质期很短。

书最后给的态度很务实35:

核心思想比具体算法长寿。 仔细做模型评测、区分推理时的方法和训练时的方法、 真正搞懂损失和奖励信号是怎么算的 —— 这几条会一直有用。 新方法出来时,把它对回这些基本功 —— 很多新技术本质上是这些积木的变体或组合。

书还给了具体的跟进渠道,以及一句很清醒的提醒36: 那些 AI 助手和「深度研究」工具适合当过滤器,不能替代读原始论文和模型卡。

作者的判断与证据

说法性质
3 小时 / 15.02 GB,以及对照的 12 小时 / 70 GB书里的实测,同一台机器;这个耗时量的是 DeepSeek-R1 当老师那一次(33.6%),书没给 Qwen3 那一次的耗时
50 美元、107 MB、12000 条作者自述的真实数据
长度统计(2946 / 236 / 42005 / 6695 / 1180)书里印出来的实测
两种算法都得 1.68书里印出来的实测
表 8.1 全部八行书里的实测
老师的 91.2% / 92.4%书里的实测
「小模型上蒸馏可能比强化学习更好」书引的是 DeepSeek-R1 论文的结论,不是作者自己验证的
硬蒸馏为什么更常用的三条理由作者的归纳,都是实务观察
「更强的老师不一定教出更好的学生」有证据(45.0% 对 33.6%),但解释(同一个模型家族)是作者的推断,措辞是「一个可能的原因」
「官方推理版本身也是蒸馏出来的」作者的说法,没有列出处
未来四个方向作者的预判,不是事实
验证损失与准确率不同向这是我们从表里读出来的,书没有点破(见第 7 节那个判断块)

边界与局限

  1. 两组蒸馏实验各只跑了一次。 45.0% 和 33.6% 之间差 11.4 个点,这个差距够大; 但同一组内部 45.0 / 43.8 / 44.2 之间的差别就未必可信了。
  2. 书只给了其中一组的成本。 「3 小时 5 分钟、15.02 GB」量的是 DeepSeek-R1 那一组; 分数更高的 Qwen3 那一组,书从头到尾没有给耗时和显存。 所以「这条路多划算」这个问题,严格说书只答了一半 —— 想拿 45.0% 去和第 11 章的 12 小时比性价比,得先自己补上那次运行的账。
  3. 「同一个模型家族」这条解释没有被单独验证。 作者没有做「换掉分词器」之类的对照实验。
  4. 44% 的数据被长度过滤砍掉了。 那些长样本里可能恰恰有最难的题 —— 书没有讨论这个偏差。
  5. 老师数据不是你自己生成的。 书提供的是现成的文件;自己生成要花约 50 美元和不少时间。
  6. 法务风险真实存在(第 2 节那个警告)。拿别家模型的输出做训练,要先看服务条款。
  7. 只用了一个 0.6B 的学生。 书自己说换大的会更好,但没有跑。
  8. 未来那四个方向是 2026 年初的判断。 这本书是早期试读版,这一节最容易过期。

顺带一条测量口径,书在练习答案里给了,和这一章无关但值得记37: 拿 MATH-500 的前几道题试跑一下,得出的数很不可靠。 base 模型在前 10 道上是 30.0%、前 50 道 34.0%、前 100 道 27.0%,而全部 500 道是 15.3%; 官方推理版在前 10 道上是 90.0%、前 50 道 58.0%、前 100 道 56.0%,全部 500 道是 48.2%。 书的判词:前 10 个例子很不能代表全量的表现。

可带走的

  1. 最强的推理模型你用不起(6710 亿参数)。蒸馏就是把它的本事搬进一个小模型里。
  2. 这条路便宜得多:同一台机器上,12 小时/70 GB 变成 3 小时/15 GB。 省钱的原因是:昂贵的工作被挪到了「一次性生成老师数据」那一步。 但成本和成绩别焊在一句话里 —— 那个耗时量的是 DeepSeek-R1 当老师的那一次(成绩 33.6%); 「只比试错训练低 2.4 个点」说的是 Qwen3 当老师的 45.0% 那一组,书没给这一组的耗时。
  3. 这一行说的「蒸馏」几乎都是硬蒸馏:只学老师生成的文字。 它本质上就是拿合成数据做一次指令微调。
  4. 软蒸馏要学老师那一整套打分,而闭源模型不给你 —— 这是它用得少的第一个原因; 另外两个:师生要共用分词器、长轨迹的完整分布存不起。
  5. 拿别家模型的输出做训练,可能受服务条款限制。 用之前先看清楚。
  6. 蒸馏的信号比试错训练密集得多: 前者在每个位置都有目标,后者只在最后给一个 0 或 1。
  7. 控制序列长度是让蒸馏在小机器上跑得动的主要手段。 书砍掉了 44% 的数据(只留 ≤2048 个小块),平均长度从 2946 降到 1180。
  8. 交叉熵 = 把那些小块的对数概率取负再求平均。 它和第 09、11 章那套是同一个东西 —— 一套算法,三个用途,三种收尾方式。
  9. 只在答案那几块上算损失。 提示词是给定的上下文,不该因为「没背下指令」罚模型。
  10. 看验证损失,别看训练损失 —— 后者在正在被优化的样本上算,噪声大。
  11. 但验证损失也不是准确率的替身: 那张表里验证损失一路在降,准确率却在乱跳。
  12. 全书最反直觉的一条:更强的老师不一定教出更好的学生。 91.2% 的老师教出 33.6%,92.4% 的老师教出 45.0% —— 因为后者和学生同属一个模型家族。 挑老师要问的不是「它考多少分」,是「我的学生学得像吗」。
  13. 别指望学生追平老师(92.4% 对 45%)。你回收的是它推理行为里有用的一部分。
  14. 五条路不是单选题,作者的建议是组合着用: 先蒸馏一个小模型 → 再用试错训练接着训 → 部署时叠上投票或自我精修。
  15. 算法会一直变,核心思想长寿: 认真做评测、分清推理时和训练时的方法、 真正搞懂损失和奖励怎么算的。这三条是这本书唯一敢说不会过期的东西。

原文地图

主题原书章原文位置
最强的模型太大用不起8.1 Introduction to model distillation for reasoning taskstext/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:13(搜「671-billion-parameters」) · :19(搜「distilling the 671-billion-parameter teacher model」)
成本对照同上text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:25(搜「about 3 hours on a DGX S」)
小模型上蒸馏可能更好同上text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:31(搜「outperformed comparable models trained with reinforcement learning alone」) · :68(搜「can result in higher accuracy than training with reinforcement learning」)
硬蒸馏与软蒸馏同上text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:37(搜「hard distillation and soft distillation」) · :56(搜「supervised fine-tuning on synthetic data」) · :74(搜「not its logits」)
第三种做法同上text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:86(搜「Distilling the Knowledge in a Neural Network」)
为什么几乎只用硬蒸馏同上text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:92(搜「full teacher logits are usually inaccessible」) · :113(搜「require the same tokenizers」)
服务条款警告同上text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:105(搜「Terms of Service」)
监督信号的差别 · 可提前生成8.2 Generating a dataset for reasoning distillationtext/69-ch08-02-8-2-generating-a-dataset-for-reasoning-distillat.txt:32(搜「the teacher's response becomes the target sequence」) · :45(搜「generate the teacher dataset ahead of time」)
老师是谁 · 50 美元同上text/69-ch08-02-8-2-generating-a-dataset-for-reasoning-distillat.txt:51(搜「hosted via OpenRouter」) · :57(搜「approximately $50 in API usage」)
107 MB 与存放位置8.3 Loading the MATH training dataset for distillationtext/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:20(搜「approximately 107 MB」)
四个字段 · 拼成一条同上text/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:148(搜「message_thinking」) · :176(搜「{thinking}」)
老师有多强同上text/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:245(搜「10871/12000」) · :251(搜「91.2% accuracy」)
为什么预先切好块 · 什么是训练轮8.4 Building training examplestext/71-ch08-04-8-4-building-training-examples.txt:20(搜「loop over the same examples for multiple training epochs」) · :33(搜「one complete pass through the full training dataset」)
聊天格式的外壳与那个坑同上text/71-ch08-04-8-4-building-training-examples.txt:85(搜「apply_chat_template=True」) · :122(搜「their own assistant-start tokens」)
长度统计与过滤同上text/71-ch08-04-8-4-building-training-examples.txt:425(搜「Average: 2946 tokens」) · :439(搜「controlling the sequence length is one of the main steps」) · :476(搜「Original: 12000」) · :504(搜「Average: 1180 tokens」) · :545(搜「Number of train examples: 6670」) · :552(搜「keep the validation set purposefully small」)
交叉熵就是负平均对数概率8.6 Computing the training and validation lossestext/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:32(搜「Cross-entropy is simply the negative average」) · :83(搜「negative average log-probability is 1.68」) · :150(搜「implementing the same core calculation」)
只在答案上算损失同上text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:162(搜「not to learn to reconstruct the input instruction」)
训练损失 vs 验证损失同上text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:326(搜「often noisier because it is measured on the examples currently being optimized」)
循环的两处不同8.7 Implementing the training loop for distillationtext/74-ch08-07-8-7-implementing-the-training-loop-for-distillat.txt:20(搜「revisit the same training set multiple times across epochs」)
3 小时 5 分钟 / 15.02 GB8.8 Evaluating the distilled modeltext/75-ch08-08-8-8-evaluating-the-distilled-model.txt:56(搜「3 hours and 5 minutes」)
验证损失先陡降后走平同上text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:155(搜「drops sharply at first and then begins to flatten out」)
表 8.1同上:208(搜「Table 8.1」) · :263(搜「0.5436」) · :265(搜「30.6%」) · :278(搜「32.4%」) · :291(搜「33.6%」) · :304(搜「45.0%」) · :317(搜「43.8%」) · :330(搜「44.2%」),均在 text/75-ch08-08-8-8-evaluating-the-distilled-model.txt
更强的老师教出更差的学生同上text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:345(搜「come from the same model family」)
官方推理版本身也是蒸馏的 · 别指望追平同上text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:351(搜「which is itself a distilled model」) · :357(搜「we do not expect the smaller student to match the teacher」)
未来四个方向8.9 Future directions for reasoning modelstext/76-ch08-09-8-9-future-directions-for-reasoning-models.txt:19(搜「continued refinement of the training recipe」) · :25(搜「optimization at inference time」) · :31(搜「process rewards that check intermediate reasoning steps」) · :37(搜「OpenAI Codex, Claude Code, and OpenClaw」)
组合着用 · 核心思想长寿8.10 Conclusionstext/77-ch08-10-8-10-conclusions.txt:19(搜「start combining the methods from this book」) · :49(搜「The core ideas in this book tend to remain relevant」) · :79(搜「filters rather than substitutes」)
表 B.2 小样本很不可靠Appendix B. Exercise solutionstext/80-apx-b-appendix-b-exercise-solutions.txt:557(搜「Accuracies for different MATH-500 dataset sizes」) · :670(搜「not very representative」)

Footnotes

  1. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 13 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:13,搜「671-billion-parameters」)。

  2. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 19 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:19,搜「distilling the 671-billion-parameter teacher model」)。

  3. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 25 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:25,搜「about 3 hours on a DGX S」)。同一段给出了第 6 章那条路在同一台机器上的对照:约 12 小时、约 70 GB。

  4. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 31 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:31,搜「outperformed comparable models trained with reinforcement learning alone」)与第 68 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:68,搜「can result in higher accuracy than training with reinforcement learning」)。这是书转述 DeepSeek-R1 论文的结论,不是作者自己的实验。

  5. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 37 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:37,搜「hard distillation and soft distillation」)。软蒸馏那一半用的是「让学生去逼近老师在整个词表上那套分布」,衡量差异的量正是第 13 章那个 KL。

  6. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 56 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:56,搜「supervised fine-tuning on synthetic data」);「只需要文字、不需要那套打分」在第 74 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:74,搜「not its logits」)。

  7. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 86 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:86,搜「Distilling the Knowledge in a Neural Network」)。这篇论文的地址书写在附录里(见「Appendix A. References and further reading」第 593 段,text/79-apx-a-appendix-a-references-and-further-reading.txt:593,搜「1503.02531」)——那个地址我们没有另行打开核对。

  8. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 92 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:92,搜「full teacher logits are usually inaccessible」)。

  9. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 113 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:113,搜「require the same tokenizers」)。这一条会在第 7 节变成那条反直觉发现的解释。 2

  10. 出处:「8.1 Introduction to model distillation for reasoning tasks」第 105 段(text/68-ch08-01-8-1-introduction-to-model-distillation-for-reaso.txt:105,搜「Terms of Service」)。

  11. 出处:「8.2 Generating a dataset for reasoning distillation」第 51 段(text/69-ch08-02-8-2-generating-a-dataset-for-reasoning-distillat.txt:51,搜「hosted via OpenRouter」)与第 57 段(text/69-ch08-02-8-2-generating-a-dataset-for-reasoning-distillat.txt:57,搜「approximately $50 in API usage」)。

  12. 出处:「8.3 Loading the MATH training dataset for distillation」第 20 段(text/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:20,搜「approximately 107 MB」)。

  13. 出处:「8.2 Generating a dataset for reasoning distillation」第 32 段(text/69-ch08-02-8-2-generating-a-dataset-for-reasoning-distillat.txt:32,搜「the teacher's response becomes the target sequence」)。

  14. 出处:「8.2 Generating a dataset for reasoning distillation」第 45 段(text/69-ch08-02-8-2-generating-a-dataset-for-reasoning-distillat.txt:45,搜「generate the teacher dataset ahead of time」)。

  15. 出处:「8.3 Loading the MATH training dataset for distillation」第 245 段(text/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:245,搜「10871/12000」)与第 251 段(text/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:251,搜「91.2% accuracy」)。四个字段与拼接方式见第 148 段(text/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:148,搜「message_thinking」)与第 176 段(text/70-ch08-03-8-3-loading-the-math-training-dataset-for-distil.txt:176,搜「{thinking}」)。注意第 251 段里官方推理版用的是 50.8%,那是第 3 章表 3.1 的数;全书其余地方用的是 48.2%。

  16. 出处:「8.4 Building training examples」第 425 段(text/71-ch08-04-8-4-building-training-examples.txt:425,搜「Average: 2946 tokens」)是过滤前的三个长度;第 476 段(text/71-ch08-04-8-4-building-training-examples.txt:476,搜「Original: 12000」)是过滤前后的条数;第 504 段(text/71-ch08-04-8-4-building-training-examples.txt:504,搜「Average: 1180 tokens」)是过滤后的平均长度;切分结果在第 545 段(text/71-ch08-04-8-4-building-training-examples.txt:545,搜「Number of train examples: 6670」)。

  17. 出处:「8.4 Building training examples」第 439 段(text/71-ch08-04-8-4-building-training-examples.txt:439,搜「controlling the sequence length is one of the main steps」)。

  18. 出处:「8.4 Building training examples」第 552 段(text/71-ch08-04-8-4-building-training-examples.txt:552,搜「keep the validation set purposefully small」)。

  19. 出处:「8.4 Building training examples」第 85 段(text/71-ch08-04-8-4-building-training-examples.txt:85,搜「apply_chat_template=True」)。

  20. 出处:「8.4 Building training examples」第 122 段(text/71-ch08-04-8-4-building-training-examples.txt:122,搜「their own assistant-start tokens」)。

  21. 出处:「8.4 Building training examples」第 33 段(text/71-ch08-04-8-4-building-training-examples.txt:33,搜「one complete pass through the full training dataset」)。这是书里的一个边栏。

  22. 出处:「8.4 Building training examples」第 20 段(text/71-ch08-04-8-4-building-training-examples.txt:20,搜「loop over the same examples for multiple training epochs」)。

  23. 出处:「8.6 Computing the training and validation losses」第 32 段(text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:32,搜「Cross-entropy is simply the negative average」)。原文就是拿 −16.6250 除以 5 得到 3.325 演示的,而那 5 个正是待预测的目标个数。 2

  24. 出处:「8.6 Computing the training and validation losses」第 83 段(text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:83,搜「negative average log-probability is 1.68」)与第 150 段(text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:150,搜「implementing the same core calculation」);第三次验证在第 228 段(text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:228,搜「The resulting loss is 1.68 again」)。 2

  25. 出处:「8.6 Computing the training and validation losses」第 162 段(text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:162,搜「not to learn to reconstruct the input instruction」)。

  26. 出处:「8.6 Computing the training and validation losses」第 326 段(text/73-ch08-06-8-6-computing-the-training-and-validation-losses.txt:326,搜「often noisier because it is measured on the examples currently being optimized」)。

  27. 出处:「8.7 Implementing the training loop for distillation」第 20 段(text/74-ch08-07-8-7-implementing-the-training-loop-for-distillat.txt:20,搜「revisit the same training set multiple times across epochs」)。

  28. 出处:「8.8 Evaluating the distilled model」第 56 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:56,搜「3 hours and 5 minutes」)。那句「昂贵的工作已经挪到一次性的老师数据生成那一步」也在这一段。**这个耗时归哪一次运行,有两处硬证据:**第 44 段那行命令(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:44,搜「deepseek-r1-math-train.json」)写死了喂进去的是 DeepSeek-R1 老师的数据、--epochs 3;第 202 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:202,搜「used in this chapter」)明说表 8.1 里的 DeepSeek-R1 那一组才是「本章用的这一次」,Qwen3 那一组是「另外附上作参照」的第二次运行。书从头到尾没有给第二次运行的耗时和显存。 2 3 4

  29. 出处:「8.8 Evaluating the distilled model」第 155 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:155,搜「drops sharply at first and then begins to flatten out」)。

  30. 出处:表 8.1,「8.8 Evaluating the distilled model」第 208 段起(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:208,搜「Table 8.1」)。八行的数值见「原文地图」那一行列出的地址;书对 DeepSeek-R1 那一组的逐行解读在第 339 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:339,搜「improves from 30.6% after the first epoch」)。

  31. 出处:「8.8 Evaluating the distilled model」第 345 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:345,搜「come from the same model family」)。原文的措辞是「一个可能的原因」(One likely reason)。两个老师自己的分数见第 357 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:357,搜「92.4%」)。 2

  32. 出处:「8.8 Evaluating the distilled model」第 351 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:351,搜「which is itself a distilled model」)与第 357 段(text/75-ch08-08-8-8-evaluating-the-distilled-model.txt:357,搜「we do not expect the smaller student to match the teacher」)。

  33. 出处:「8.10 Conclusions」第 19 段(text/77-ch08-10-8-10-conclusions.txt:19,搜「start combining the methods from this book」)。

  34. 出处:「8.9 Future directions for reasoning models」第 19 段(text/76-ch08-09-8-9-future-directions-for-reasoning-models.txt:19,搜「continued refinement of the training recipe」)、第 25 段(text/76-ch08-09-8-9-future-directions-for-reasoning-models.txt:25,搜「optimization at inference time」)、第 31 段(text/76-ch08-09-8-9-future-directions-for-reasoning-models.txt:31,搜「process rewards that check intermediate reasoning steps」)与第 37 段(text/76-ch08-09-8-9-future-directions-for-reasoning-models.txt:37,搜「OpenAI Codex, Claude Code, and OpenClaw」)。第 31 段就是那条翻转的出处:书说 DeepSeek-Math-V2 那篇论文最近证明了训练时评判整条答案能显著提升推理表现。 2

  35. 出处:「8.10 Conclusions」第 49 段(text/77-ch08-10-8-10-conclusions.txt:49,搜「The core ideas in this book tend to remain relevant」)。

  36. 出处:「8.10 Conclusions」第 79 段(text/77-ch08-10-8-10-conclusions.txt:79,搜「filters rather than substitutes」)。书给的跟进渠道包括论文预印本的最新列表(但明说论文量已大到不可能读全,只该拿它扫主题)、新模型的技术报告(提示惯例、基准、局限往往写在这里),以及从业者社区(实现细节、复现、失败案例常常比论文更早出现)。

  37. 出处:表 B.2,「Appendix B. Exercise solutions」第 557 段(text/80-apx-b-appendix-b-exercise-solutions.txt:557,搜「Accuracies for different MATH-500 dataset sizes」);书的判词在第 670 段(text/80-apx-b-appendix-b-exercise-solutions.txt:670,搜「not very representative」)。注意这张表里的 base 全量成绩是 15.3%(第 3 章那一组),不是 15.2%。