跳到主要内容

大纲 — Build a Reasoning Model (From Scratch) 拆解

第二版(2026-08-29)。 第一版被审大纲的人退回,16 处要改。 本版逐条落实,凡与审读意见不同的取舍都在文末「与审读意见的三处不同」里写明理由。

切分:14 章 + 总纲。对原书结构:

我们的章原书我们的章原书
01ch1(1.1 / 1.4 / 1.5)08ch4(4.6 + 表 4.1)
02ch1(1.2 / 1.3 / 1.6 前半 / 1.7)09ch5(全章)
03ch2(2.1 / 2.4 / 2.6 / 2.7)+ ch1 1.6 后半10ch6(6.1 / 6.2 上半 / 6.4 / 6.5 / 6.6)
04ch2(2.3 / 2.5 / 2.8 / 2.9)+ 附录 E、D11ch6(6.2 下半 / 6.7–6.12)
05ch3(全章)+ 附录 F12ch7(7.1–7.3)
06ch4(4.1 / 4.3)13ch7(7.4–7.6)
07ch4(4.4 / 4.5)14ch8(全章)

1.6 为什么被劈开: 它的前半是「推理不是越多越好、适合什么不适合什么」(概念,进 02), 后半是「推理模型为什么贵:每吐一个 token 走一遍完整前向 × 一道题要调用好几次」—— 后半的机制要等 03 讲完前向计算才成立,放在 02 是跳级。

6.6(Calculating rewards)归 10 不归 11: 它就是「第三个 rollout 答对却拿 0 分」那一段 (fallback=None),是 10 的主走查落点 [1,1,0,0] 的来源。

有意不覆盖的部分及理由(第一版整个漏了这一节)

原书部分篇幅怎么处理理由
2.2 装 Python 环境5.0k不进正文装机步骤,一年就过期;而且判据是「能不能把这本书讲给别人听」,不是「能不能跑起来」
3.2 / 3.3 / 4.2 / 5.2 / 6.3 / 8.5「加载模型」各 1–7k并进各章开头一句话重复的装机步骤。但 3.2 与 5.2 里各有一处非样板内容必须捞出来,见下
附录 A 参考文献14.2k当出处清单用,不单独讲写外部引用时先查它再上网(书自己核过 URL)
附录 B 练习答案34.1k表 B.1(MATH-500 平均回答长度)并进 12 章;表 B.2(不同数据规模下的准确率)并进 14 章其余是习题解答,不是新机制
附录 C Qwen3 源码34.3k整份指向 build-large-language-model,在 04 的「边界与局限」说明一句书自己就说「架构当黑盒,我们不改它」;架构本体是作者前作的题目,我们书架已有完整拆解
附录 D 换更大模型11.3k并进 04 的「可带走的」操作建议,不是机制
附录 E 批处理与吞吐19.3k并进 04§3.5(延迟 vs 吞吐)+ 表 E.1正文多处指向它;讲「为什么书里的实现慢」必引
附录 F 其他评测法35.1k整体挪到 05 章末尾的「边界与局限」它讲的是这本书没做的另外三种量法;放在 05§3.1 会和「验证器」抢首现、且一节塞不下
附录 G 聊天界面17.3k02§3.2 点一句「聊天界面是另一层」+ 并进 04 的「可带走的」(多轮历史要按上下文窗口裁剪)书自己在 1.2 和 2.6 两处指向它,不提就是断链

两处必须从「装机小节」里捞出来的内容:

  1. 原书 3.2 text/18-ch03-02-….txt:196:227:base 模型对那道走查题的完整分步输出, 以及作者的判断「这很可能是因为 Qwen3 团队在预训练阶段就掺了思维链数据」——去 05§3.2;
  2. 原书 5.2 text/37-ch05-02-….txt:205:217:作者对「短就是好吗」的表态 (短的不一定更好;给中间步骤打分仍是活跃研究方向;过程奖励模型实践中并不总是更好)——去 09§3.2

切分依据是新词密度,不是字数(逐条理由见文末「为什么是 14 章」)。 下面每行是大章内「核心原理」层的节线:进来时以为… → 出去时知道…(两头的知识状态)。 每章末尾两行:主走查(红线二要求的、贯穿全章的那一个具体输入)与承重词


全书一条主线(总纲第 3 节的骨架)

一个 6 亿参数、数学只能考 15 分的小模型,怎么变成能考 47 分的推理模型 —— 而且每一步都要能自己动手做出来、自己量出来。

海拔口径(第一版栽在这里): 每一步只留「上一步逼出什么问题 + 这一步的效果句 + 一个数」。 机制一律退回章节层。全线只准出现六个数:15.2 / 40.6 / 52.0 与 85 倍 / 47.4 / 45.0

① 一道逻辑题:「所有鸟都会飞。企鹅是鸟。企鹅会飞吗?」一个不是推理模型的 GPT-4o 答对了 —— 可它并没有在推理。 ▼ 那「推理」这个词到底该指什么?

② 这本书给的是工程定义:答题之前先把中间步骤写出来。 ▼ 可是,「多写几步」凭什么值钱、又凭什么贵?

③ 因为每多吐一个字,整台机器就要从头算一遍。写得越长,算得越多、等得越久 —— 这就是推理模型贵在哪。于是第一件事不是提分,是先让它在自己的机器上跑得动。 ▼ 跑得动之后,怎么知道改进到底有没有用?

先造尺子,再改东西。 手写一把能自动判数学题对错的尺子,量出起点:15.2%。 以后每一次改进都回来和它比。 ▼ 这把尺子还有第二个用途 —— 记住它,第 10 章会把它原样变成奖励。

⑤ 最便宜的一招是往提示词后面加一句话:15.2% → 40.6%。 它不给模型任何新知识,只改变它使用已有知识的方式。 ▼ 那这条路的上限在哪?

⑥ 让它多答几遍再投票:52.0%。代价是同一批题的耗时涨了 85 倍。 这就是这条路的全部交易:拿算力换准确率。 ▼ 不改模型本身,还有别的花法吗?

⑦ 有:让它改自己的作业。但书老实交代,在这个模型这个任务上它不如投票。 ▼ 到这里,不动模型能拿的基本拿完了。要再往上,只能动模型本身。

⑧ 动模型的办法叫强化学习:让它试,好的加强、坏的削弱。 卡在「谁来评好坏」上 —— 而数学题的对错机器能判,第 ④ 步那把尺子直接就是评委。 ▼ 有了评委,怎么把「对错」变成模型内部那几亿个数的改动?

⑨ 让同一道题的几个回答互相比:比这一组的平均好的加强,差的削弱。 50 步训练,15.2% → 47.4%,已经贴近官方推理版。 ▼ 那多训几步不是更好?

⑩ 不是。跑久了会崩,而且代码是对的也会崩。 三种补救各有各的失手方式, 而每一种失手都是一张能读的曲线。 ▼ 可这条路要 12 小时、70 GB 内存。有没有更便宜的?

⑪ 有:抄作业。让一个大得多的模型把题全做一遍,小模型去学它的答案 —— 3 小时、15 GB,45.0%。而这里冒出全书最反直觉的一条:更强的老师不一定教出更好的学生。

落点: 五条路最后都通向同一把尺子上的一个分数。 这本书真正教会读者的,是那把尺子怎么造、以及怎么读懂尺子上的数。


承重词首现处与讲解处(写正文时照着走,免得漂)

这张表是第一版最大的漏洞(四个承重词的首现早于讲解处)。写每一章之前先核这一行。

承重词首现处 = 讲解处后面哪里回指(只回指,不重述)
推理(reasoning)01§3.3全书
思维链(chain-of-thought / CoT)01§3.3(定义推理时同段留名)02 主走查 · 06§3.2(讲它怎么变成一个提示技巧,不再命名)
模式匹配01§3.502§3.1
自回归01§3.4 就地讲明(拿自己刚写下的字当输入接着写)03§3.3–§3.5 走查它的每一步具体是什么数
权重 / 参数02§3.102§3.4 的「动不动权重」、11、14
预训练02§3.102§3.3、10§3.5
「权重到底怎么被改」02§3.2(新增节线)11§3.3(损失)、11 主走查(反向传播)、14§3.5(交叉熵)
base 模型02§3.404§3.1、10§3.5
强化学习02§3.5 就地讲明(让它试,好的加强坏的削弱)10§3.1 展开:它为什么现在才用得上
蒸馏02§3.514§3.2 展开硬 vs 软
token / 词元03§3.1全书
词表03§3.207、14
logits03§3.307§3.2、09、11
贪心解码03§3.407§3.1(当前提用,不重述)
KV 缓存04§3.3
吞吐 / 延迟04§3.5
验证器05§3.1 就地讲明05§3.2 展开成八步、10§3.3 变成奖励
符号等价05§3.5
推理时扩展06§3.107§3.6、08§3.5
温度07§3.208、10、11
softmax / 概率分布07§3.209§3.3、12§3.4
top-p07§3.4
自洽(self-consistency)08§3.109§3.1
对数概率09§3.311§3.2、14§3.5
自我精修09§3.5
策略(policy)10§3.1 就地讲明(被加强被削弱的那个东西,就是模型本身那套挑下一个词的办法)11§3.3「策略梯度损失」、13§3.1「裁剪策略比率」
RLVR / 可验证奖励10§3.312、13
rollout10§3.411、13
优势 / 组相对11§3.112§3.3
12§3.413§3.4
裁剪策略比率13§3.1
KL 项13§3.3
交叉熵14§3.5

01 「推理」到底指什么(原书 1.1、1.4、1.5)

  • §3.1 进来时以为「答对逻辑题 = 会推理」→ 出去时知道一个不是推理模型的 GPT-4o 也答对了企鹅那道题,于是「什么才算推理」这个问题必须先回答,不能绕
  • §3.2 进来时以为这道题只有一个标准答案 → 出去时知道两种读法各自成立:只认提示里那两条前提,该答「会飞」;允许用常识,就该发现矛盾并反问澄清 —— 而模型两种都没做
  • §3.3 进来时以为「推理」是个说不清的词 → 出去时拿到这本书的工程定义:答题前先生成中间步骤,把力气花在过程上而不是直接跳结论;写出来给人看和裹在 <think> 标签里藏起来,两种都算(思维链这个名字在同一段句末留下)
  • §3.4 进来时以为它是照着规则一步步推的 → 出去时知道它是拿自己刚写下的字当输入、按概率再写下一小块(自回归),而定理证明器同样输入必然同样输出 —— 所以「看着有说服力」和「逻辑上成立」是两件事
  • §3.5 进来时不知道它凭什么答对 → 出去时知道那叫模式匹配,并知道它会在哪两种场合崩:逻辑情形是训练里没见过的新情形、或者要推的层数太多
  • §3.6 进来时以为「推理模型」是个开关 → 出去时知道它是连续谱(o1 之前的模型也会写中间步骤),并知道有一派(苹果《The Illusion of Thinking》)认为这整套东西仍然只是精巧的模式匹配器
  • 主走查: 企鹅那道题 —— 「All birds can fly. A penguin is a bird. Can a penguin fly?」闭世界读法答「会飞」/ 开世界读法该反问 / GPT-4o 实际答对了 / 书给的归因是训练数据里的统计关联
  • 承重词: 推理(§3.3,现象在 §3.1–§3.2)· 模式匹配(§3.5)

02 一个模型是怎么造出来的,以及让它更会推理的三条路(原书 1.2、1.3、1.6 前半、1.7)

  • §3.1 进来时以为模型是被人教会规则的 → 出去时知道第一段叫预训练:喂海量没人标注过的文本、只让它猜下一块;而「它」其实就是几亿个可以调的数,这些数叫权重
  • §3.2 (新增) 进来时不知道这些数怎么会自己变对 → 出去时知道那个朴素得出奇的循环:给它一道题 → 看它答得离对的差多远 → 把每个数朝「差得少一点」的方向挪一丁点 → 换下一道题,重复几万亿次;几千块 GPU 跑几个月、花掉几百万美元,而翻译和写代码这些能力没人专门教过
  • §3.3 进来时以为预训练完就能用 → 出去时知道它只会续写,要它听指令得再做指令微调,要它语气合人心意还要偏好微调;而且这三段做完它仍然不是聊天机器人,聊天界面是另一层
  • §3.4 进来时以为该拿最好的模型起步 → 出去时知道这本书偏要用那个没调教过的 base 模型,理由只有一个:归因 —— 只有这样,后面涨的分才能确定是推理方法带来的,而不是调教带来的
  • §3.5 进来时以为提升推理只有「再训一遍」这一条路 → 出去时知道有三条,分界是动不动权重:答题时多花算力(不动)、用强化学习改权重(动,就地讲明:让它试,好的加强坏的削弱)、抄更强模型的作业(动,叫蒸馏)
  • §3.6 进来时以为「蒸馏」「强化学习」是通用词 → 出去时知道两个会让人出门认错的陷阱:LLM 圈说的蒸馏只学老师生成的文本(和深度学习传统里同名的那件事不是一回事,差别第 14 章讲);推理用的 RL 和 RLHF 底层同源,只差奖励是人给的还是机器判的
  • §3.7 进来时以为推理越多越好 → 出去时知道它适合谜题、高等数学、难代码和 agent,不适合摘要翻译知识问答,而且会「想太多」反而想岔;并拿到全书四阶段路线图:先造尺子,再改东西,改完回来复量
  • 主走查: Qwen3 0.6B base 这一个具体模型 —— 它走完了流水线的哪几段、没走哪几段,以及为什么它出厂就会写分步解法(Qwen3 团队在预训练阶段就掺了思维链数据)
  • 承重词: 预训练(§3.1,从「没人教它规则」这个现象讲起)· 权重怎么被改(§3.2)
  • 书架分工: 「损失 / 梯度 / 反向传播 / 优化器」的完整机制指向 shelf=ai-book-reference/build-large-language-model#06-pretraining.md;§3.2 只讲到「朝差得少一点的方向挪」这一级,不展开链式法则

03 它是怎么一个字一个字吐出来的(原书 2.1、2.4、2.6、2.7 + 1.6 后半)

  • §3.1 进来时以为模型读的是字 → 出去时知道它读的是切碎的小块:"Explain" 被切成 "Ex" + "plain",空格也算进块里(" large"),这套切法叫字节对编码(BPE),每一块叫一个 token
  • §3.2 进来时以为词表越大越好 → 出去时知道那是笔账:词表大则查表层和输出层都更大、每个 token 更贵,但序列更短;而序列长一倍算力大致也贵一倍(Qwen3 约 15.2 万,对照 GPT-2 约 5 万、Llama 3 约 12.8 万)
  • §3.3 进来时以为一次前向算出一个词 → 出去时知道它给每个位置都算了一整套分数(形状 [6, 151936]),生成时只用最后一行;而那一行原始分数的名字叫 logits
  • §3.4 进来时以为「挑分最高的那个」是唯一选法 → 出去时知道那个动作叫贪心解码,20286 解回来是 " Large";并知道还有别的选法(第 07 章讲)
  • §3.5 进来时以为模型知道该在哪停 → 出去时看到不给停止条件它答完正事会接着瞎写,而 <|endoftext|>(ID 151643)就是它自己打的那个句号
  • §3.6 进来时以为「让它多想」只是多等一会儿 → 出去时知道每多吐一个 token 就要把整个模型重算一遍,所以「输出更长」和「一道题要调用好几次」这两件事,就是推理模型贵的全部原因(原书 1.6 后半)
  • 主走查: "Explain large language models." → 6 个 token ID(840 / 20772 / 3460 / 4128 / 4119 / 13)→ 一次前向得 [6, 151936] 的分数表 → 取最后一行 → argmax → 20286" Large" → 接回输入再来一遍 → 撞到 <|endoftext|> 停下
  • 承重词: token / 分词(§3.1)· 一次前向出一整张分数表(§3.3)
  • 书架分工(第一版漏了这一处): 我们书架已有 shelf=ai-book-reference/build-large-language-model#02-text-to-numbers.md(分词 / 词元 / 词表 / BPE / 嵌入)。 本章仍然自己讲透(不能把读者赶去读另一本),但增量写死为四条: ① Qwen3 那 15.2 万词表的账 ② [6, 151936] 这个形状 ③ logits 这个名字 ④「每多一个 token 多一次前向 ⇒ 推理模型贵」这条落点。脚注里指回那一章

04 让它在自己的电脑上跑得动(原书 2.3、2.5、2.8、2.9 + 附录 E、D)

  • §3.1 进来时以为要跑就得跑大模型 → 出去时知道这本书用 6 亿参数的 Qwen3 0.6B,权重文件 1433 MiB、普通笔记本装得下 ——这一节只管「跑得动」这一个轴,base 还是推理版的取舍已经在 02§3.4 讲完,这里只回指
  • §3.2 进来时以为自己也能训一个底座 → 出去时知道那是 2048 张显卡跑 11 周、约 550 万美元、620 兆瓦时(约等于一个美国家庭用 55 年的电);所以这本书只训改进,不训底座
  • §3.3 进来时以为生成慢是因为模型大 → 出去时知道每吐一个新词都把整段重算了一遍,而把算过的中间结果存下来复用(KV 缓存),就把工作量从「随长度平方涨」压回「成正比」:5 → 29 tokens/秒
  • §3.4 进来时以为「编译」只对编译语言有意义 → 出去时知道它把一堆小算子合并、减少每一步的固定开销,第一次跑反而更慢(要先编译);配上 KV 缓存后 68 tokens/秒,7.94 秒变 0.60 秒
  • §3.5 进来时以为加速就是加速 → 出去时知道要分两件事:一条提示多快出答案(延迟)、固定时间能处理多少条(吞吐);批处理管的是后者,代价是内存从 1.8 GB 涨到 23.39 GB,而且在慢机器上只快 1.6 倍(附录 E 表 E.1)
  • 主走查: 同一段 100 个 token 的生成,在同一台 Mac Mini M4 的 CPU 上四种跑法:朴素 5 tokens/秒(7.94 秒)→ 只编译 6(6.78 秒)→ 只开 KV 缓存 29(1.40 秒)→ 两个都开 68(0.60 秒)
  • 承重词: KV 缓存(§3.3,从「越写越慢」这个现象讲起)· 吞吐与延迟(§3.5)
  • 可带走的里并进附录 D(换更大模型的内存账:bfloat16 下每参数约 2 字节,4B 约 8 GB、32B 约 64 GB,且这只是下界)与附录 G(多轮对话要把历史拼进提示词并按上下文窗口裁剪)
  • 边界与局限里说明:模型架构本体(注意力、RMSNorm、旋转位置编码)书自己就说当黑盒,附录 C 才给代码;我们指向 shelf=ai-book-reference/build-large-language-model#03-attention-core.md

05 先把尺子造出来(原书第 3 章 + 附录 F)

  • §3.1 进来时以为改进了就该直接上 → 出去时知道这本书的主张是先造尺子再改东西,而尺子在这里是一段自己写的代码:拿模型的答案和标准答案比,对得上就算对(这段代码叫验证器);并知道为什么挑数学题 —— 它既要一步步推,又能自动判对错
  • §3.2 进来时以为「判对错」就是把字符串比一比 → 出去时拿到图 3.3 那八步:① 加载模型 ② 让它生成答案 ③ 抽出 \boxed{} ④ 归一化 ⑤ 符号判等 ⑥ 打分 ⑦ 加载 MATH-500 ⑧ 全量跑;并当场看到 base 模型对那道走查题写出了完整的分步解法(作者的判断:很可能因为 Qwen3 预训练时就掺了思维链数据)
  • §3.3 进来时以为抽答案用正则表达式就行 → 出去时知道 \boxed{\dfrac{14}{3}} 里还套着花括号,得手写一个配平扫描;并知道书为什么明确反对「让另一个模型来抽」:机械活用代码做才确定、可复现、便宜
  • §3.4 进来时以为同一个答案只有一种写法 → 出去时知道模型会写成 \frac{14}{3}14/3$14/3$\text{[...]} 好几种,所以要先用一串固定的改写规则把它们统一成同一种写法
  • §3.5 进来时以为统一了写法就能比 → 出去时知道 28/614/3 字面完全不同却是同一个数,所以要让符号数学引擎去判「两者之差化简后是不是 0」
  • §3.6 进来时以为尺子造完就万无一失 → 出去时看到它在「两个数一组」的答案上当场翻车、怎么补的,以及 16 条用例划出的边界:0.5 等于 1/2,但 0.3333333333 等于 1/350% 等于 1/2
  • §3.7 进来时以为量出来的分数就是模型的真实水平 → 出去时拿到基线,并且当场把口径写死:第 3 章自己跑出来的是 base 15.3% / 官方推理版 50.8%(H100,13.3 min → 185.4 min),而全书后面统一改用第 4 章表 4.1 的 15.2% / 48.2%(DGX Spark),因为那一批数才是同一台机器上跑的、彼此可比;还会知道把提示里的 Question: 换成 Problem: 分数就动 20 个点、干脆不用模板还能再动 50 个点 —— 小模型对措辞极其敏感,而且基准分还可能被「题目本来就在训练数据里」抬高
  • 主走查(八步与八节一一对应): 那道题 —— 已知 a+b=3ab=13/6,求 a²+b²(正确答案 14/3)。加载 base 模型 → 模型输出 \boxed{\dfrac{14}{3}} → 抽框得 \dfrac{14}{3} → 归一化成 (14)/(3) → 换 28/6 再试一次,符号引擎化简后判等 → 分段打分 → 加载 MATH-500 的 500 道题 → 全量跑,得 15.3%
  • 边界与局限: 附录 F 那三种这本书没做的量法(选择题 / 人类投票排行榜 / 让另一个模型当裁判),外加验证器本身的代价(只能用在数学、代码;把一部分评测负担转移给了外部工具)
  • 承重词: 验证器(§3.1)· 符号等价(§3.5)

06 一句话就多考 25 分:思维链(原书 4.1、4.3)

  • §3.1 进来时已经知道有一条不动权重的路(02§3.5 讲过),但不知道它具体把算力花在哪、也不知道书凭什么从十几种技术里只选了三种 → 出去时知道这条路的名字叫推理时扩展(inference-time scaling,也叫 test-time scaling),它花的是答题那一刻的算力;三种入选的理由是「这个模型上确实涨分 + 代表主要范式 + 简单到能从零手写」,它们覆盖两种模式:把回答写长、生成多个回答
  • §3.2 进来时以为那得改代码 → 出去时知道最便宜的一招是在提示词后面加一句「Explain step by step.」:这道题就从答 20(错)变成答 83(对),全 500 题上 15.2% → 40.6%;这一招叫思维链提示(名字在 01§3.3 已经讲过,这里只讲它怎么变成一个可用的提示技巧)
  • §3.3 进来时以为「写出步骤」等于「想清楚了」 → 出去时知道书给的两条机制:把步骤写出来等于给了它自我纠正的机会,而且分步解法本来就贴合训练数据的写法 —— 它不给模型任何新知识,只改变它使用已有知识的方式
  • §3.4 进来时以为这一招哪都能用 → 出去时知道简单题上它可能反而更差(模型编出错误的解释把自己带偏),而对已经训好的推理模型它既不需要也没收益
  • §3.5 进来时以为提分是白赚的 → 出去时看到账单:同一批题从 10.1 分钟涨到 84.5 分钟,因为回答变长了 —— 这是推理时扩展要付的第一笔钱
  • 主走查: 「$3x-9$ 的一半等于 $x+37$,求 $x$」(正确答案 83)。贪心解码答 \boxed{20}(错)→ 提示词尾巴加一句 Explain step by step. → 答 \boxed{83}(对)→ 全 500 题:15.2% → 40.6%,10.1 min → 84.5 min
  • 承重词: 推理时扩展(§3.1)

07 让它每次答得不一样:温度与 top-p(原书 4.4、4.5)

  • §3.1 进来时以为同一句话问两遍应该得到同一个答案 → 出去时知道为什么它真的会一模一样:贪心解码每一步都挑分最高的那个,分数表不变,挑出来的字就不变(回指 03§3.4,不重述定义);所以想让它给出第二种解法,只能动「挑词」那一步
  • §3.2 进来时以为「温度」是个玄学旋钮 → 出去时知道它的全部动作就是把 logits 除以一个数,再用 softmax 把这些数变成加起来等于 1 的概率(这一整套加起来等于 1 的数叫一个概率分布):数小则分布变尖(更自信)、数大则变平(更敢冒险),实现只有一行
  • §3.3 进来时以为分布变了看不出来 → 出去时看到 1000 次抽样的真实分布:T=5.0 时没有任何一个词出现超过 2 次而且全是废话,T=0.35 时 ' Berlin' 出现 435 次,连 ' Munich'' Hamburg' 都还沾边;并知道 0.3–0.8 是常用区间,0.0 就是贪心解码
  • §3.4 进来时以为温度调低就安全了 → 出去时知道低温也会偶尔抽到完全不着调的词,所以再加一道闸:把词按可能性排队、凑够 p 就不再往下看(这个旋钮叫 top-p,又叫核采样);砍完必须重新归一,否则剩下的概率加起来不等于 1
  • §3.5 进来时以为 top-p 和 top-k 是一回事 → 出去时知道 top-k 固定留 k 个、top-p 留几个是浮动的;并看到加上 top_p=0.8 之后 Berlin 从 435 涨到 534,而 Munich、Hamburg 被整个滤掉了
  • §3.6 进来时以为调好这两个旋钮就能提分 → 出去时知道它们几乎不提分(15.2% → 17.8%),耗时却从 10.1 涨到 30.7 分钟 —— 它们本身不是推理时扩展技术,只是让「多答几遍」成为可能
  • 主走查: "The capital of Germany is" → 5 个 token ID(785 / 6722 / 315 / 9856 / 374)→ 一次前向取最后一行 logits(取值约 −8 到 20)→ 除以温度 → softmax 变成概率 → 按概率抽一个。T=5.0 时 " Berlin" 只有 0.0003、抽出来是 " mistress";T=0.5 时涨到 0.3398;抽 1000 次,T=0.35 得 435 次,再加 top-p=0.8 得 534 次
  • 承重词: 温度(§3.2)· top-p(§3.4)
  • 书架分工(第一版漏了这一处): 我们书架已有 shelf=ai-book-reference/build-large-language-model#07-decoding-and-weights.md(解码策略 / 贪心 / multinomial 采样 / 温度 / top-k)。 本章仍然自己讲透,增量写死为两条:① top-p(那本书只讲到 top-k) ② 「这两个旋钮本身几乎不提分」这个反直觉结论。脚注里指回那一章

08 多答几遍,然后投票(原书 4.6 + 表 4.1)

  • §3.1 进来时以为随机性只会让答案更不可靠 → 出去时看着整个动作走完一遍:同一道题采 5 次得到 83、22、54、83、61,计票选 83 —— 对了;配上思维链再采 5 次,5 次全是 83。这套「采多个 → 各自抽出短答案 → 选出现最多的」的做法,名字叫自洽(self-consistency),说穿了就是简单多数投票(第一版把这一节和「留个名字」那一节写重了,已合并)
  • §3.2 进来时以为它哪都能用 → 出去时知道两个缺口:平局它直接返回「没有」(第 09 章会做一把打分尺来当裁判),而且它要求答案短到能互相比较 —— 开放式回答根本套不上
  • §3.3 进来时以为「采样次数越多越准」 → 出去时看到 n 从 3 加到 10 只从 29.6% 爬到 31.6%,而且 n=5(27.8%)比 n=3(29.6%)还低;更意外的是单独加采样会把思维链弄坏(33.4% 对 40.6%)
  • §3.4 进来时以为一张成绩表就是一张成绩表 → 出去时会读表 4.1 那十二行的账:每一行都是「准确率 + 耗时」一对数,而不是一个分数;官方推理版自己也吃到了投票的红利(48.2% → 55.2%)
  • §3.5 进来时以为最好的那个组合就该用 → 出去时看到全书最贵的一行:自洽 n=10 + 思维链 = 52.0%,而耗时从 10.1 涨到 862.6 分钟 —— 准确率涨 3.4 倍,时间涨 85 倍。这就是推理时扩展的全部交易:拿算力换准确率
  • 主走查: 同一道「3x−9 的一半等于 x+37」,采 5 次得到 83、22、54、83、61 → 计票 → 选 83;再把这条走查放大到全 500 题,就是表 4.1 那十二行
  • 承重词: 自洽(多数投票)(§3.1)

09 让它改自己的作业,以及怎么给一个答案打分(原书第 5 章)

  • §3.1 进来时以为有验证器就够了 → 出去时知道打分和评测是两回事:评测时手里有标准答案,打分时假定不知道正确答案 —— 所以要另造一把尺
  • §3.2 进来时以为打分一定很复杂 → 出去时知道最土的一把就够用:能干净抽出答案框给 2 分、只抽得出一个数给 1 分,再加一个最多 1.5 分的「短一点」奖励;两个都答对 83 的回答,533 字符的那个(2.517)胜过 1419 字符的那个(2.088)。并知道作者本人对「短就是好吗」的保留(原书 5.2):短的不一定更好,给中间步骤打分仍是活跃研究方向,过程奖励模型实践中并不总是更好;唯一确定的是同等质量下短的更便宜
  • §3.3 进来时以为「模型有多大把握」量不出来 → 出去时知道就是把答案里每个词的概率乘起来;但连乘会迅速小到计算机直接当成 0(下溢),所以改成各自取对数再相加:Berlin 那句 −16.6250,Bridge 那句 −29.8750,越接近 0 越有把握
  • §3.4 进来时以为直接拿这个数比就行 → 出去时知道还要改两处:把提示词那几个 token 排除掉、以及求平均而不是求和(否则长答案天然吃亏);改完是 −0.2041 对 −3.8906
  • §3.5 进来时以为让模型改自己的答案得靠另一个模型 → 出去时知道三步都是同一个模型换个提示词:出初稿(答 18,错)→ 让它当审稿人挑毛病(批评里直接把 83 算了出来)→ 照批评重写(答 83);而且批评本身可以是错的,仍然有用
  • §3.6 进来时以为加个打分器把关一定更好 → 出去时看到实测相反:base 模型上不打分反而最好(25.0%),两把尺都可能让错答案盖掉本来正确的初稿;而「模型有多大把握」那把最差 —— 它量的是这答案有多像模型预期的样子,不是对不对,所以会偏爱自信的错误
  • §3.7 进来时以为自我精修是更高级的一招 → 出去时知道在这个模型这个任务上它不如投票(25.0% 对 52.0%);而 2025 年 11 月 DeepSeekMath-V2 证明专门训一个批评模型可以做到竞赛金牌级 —— 差别就在有没有额外训练
  • 主走查: "The capital of Germany is Berlin""…Bridge" —— 逐词概率前四个一模一样,只差最后一个(0.16895 对 2.98e-07)→ 相乘得 5.9372e-08 对 1.0481e-13 → 改成取对数相加得 −16.6250 对 −29.8750 → 排除提示词、改求平均得 −0.2041 对 −3.8906
  • 另起一处(失效路径): 两轮自我精修 —— 第 1 轮 10(错)→ 83(对),分数 −0.855 → −0.226,接受;第 2 轮 83 → 83,分数掉到 −1.320
  • 承重词: 对数概率(§3.3)· 自我精修(§3.5)

10 奖励从哪来:把「对错」变成训练信号(原书 6.1、6.2 上半、6.4、6.5、6.6)

  • §3.1 进来时以为不改权重能拿到 52% 就够了 → 出去时知道那要 862 分钟而且到顶了;要再往上只能动模型本身,办法就是 02§3.5 提过的强化学习(不重述定义)。而被加强、被削弱的那个东西有个名字:策略(policy) —— 在这里它就是我们要训的那个模型本身,那一整套「看到题面之后怎么挑下一个词」的办法
  • §3.2 进来时以为 ChatGPT 那一套照搬就行 → 出去时知道 RLHF 要先花人力对回答排序、再训出一个会打分的模型,而那个模型的大小和成本常常和被训的模型相当 —— 这条路对我们太贵
  • §3.3 进来时以为奖励只能靠人打 → 出去时知道数学题的对错机器能判:第 05 章那把尺子直接当奖励(对得 1、错得 0),RLHF 的两步就塌缩成一个循环,这叫 RLVR;代价是它只能用在数学、代码这类能确定判对错的地方(回指 05§3.1 那条「为什么挑数学题」,不重述)
  • §3.4 进来时以为「同一道题答一遍」就够 → 出去时知道要采好几遍(每一遍叫一个 rollout),并看到第三个 rollout 答案 83 明明是对的却拿 0 分 —— 因为没写成 \boxed{}:格式约束不用另写规则,编进奖励里就行
  • §3.5 进来时以为强化学习必须排在指令微调之后 → 出去时知道 DeepSeek 证明了可以直接加在 base 模型上,准确率一般弱些但推理行为清晰(「为什么从 base 起步」的归因论证在 02§3.4,这里只回指、不重讲)
  • §3.6 进来时以为训练就用评测那 500 题 → 出去时知道用的是原始 MATH 里另外 12000 道、和那 500 题完全不重叠;而且数据里带着完整解法,书故意不用它去评中间步骤,免得把模型锁死在一种解法上
  • 主走查: 还是那道「3x−9 的一半等于 x+37」(答案 83)。用温度 0.8 / top-p 0.9 采四个回答:\boxed{83}The correct answer is \boxed{83}The final answer is 83We get \boxed{38} → 拿第 05 章那把尺子逐个打分 → [1, 1, 0, 0]
  • 承重词: 策略(policy)(§3.1)· RLVR / 可验证奖励(§3.3)

11 GRPO:让一组回答互相比出学习信号(原书 6.2 下半、6.7–6.12)

  • §3.1 进来时以为有了奖励就能直接改权重 → 出去时知道要先换算成「比这一组的平均好多少」:[1,1,0,0][0.87, 0.87, −0.87, −0.87],这个数叫优势,正的抬高产生它的可能性、负的压低、接近零的几乎不起作用 ——「组相对」三个字的全部意思就在这里
  • §3.2 进来时以为对数概率上一章已经讲完 → 出去时知道这里要改回求和:GRPO 给的是整条回答一个奖励,所以对数概率也得反映产生整条序列的可能性;副作用是求和的值随长度线性变负,会隐含地鼓励模型早点收尾
  • §3.3 进来时以为损失是个吓人的公式 → 出去时知道它就是「优势 × 对数概率」取平均、再乘 −1(因为优化器只会最小化),四个数算出来是 −2.5764;这个数叫策略梯度损失 —— 名字里的「策略」就是 10§3.1 那个策略;并知道优势要 detach:只更新影响对数概率的那些参数
  • §3.4 进来时以为每一步都在学东西 → 出去时看到一次真实的「什么都没发生」:两个 rollout 都答错 → 奖励全 0 → 优势全 0 → 损失 −0.0 → 权重一动不动。一组回答好坏一致时,GRPO 学不到任何东西
  • §3.5 进来时以为训练循环要重写 → 出去时知道八步里只有一步是新的(损失由 GRPO 算,其余全是 02§3.2 那个标准循环),并知道日志怎么读:reward_avg=0.25 是四个里对了一个,损失上下跳是正常的,该看的是多步平均的奖励和准确率在不在涨
  • §3.6 进来时以为训出推理模型要几十万美元 → 出去时看到 50 步把 15.2% 推到 47.4%,贴近官方推理版的 48.2%;平均回答长度从 79 涨到 586 个 token;并知道训练时的长度上限是一条隐形的塑形力 —— 卡太死,它就学不会写长
  • 主走查: 接上一章的 [1, 1, 0, 0] → 优势 [0.8659, 0.8659, −0.8659, −0.8659] → 四个回答各自的序列对数概率 [−7.9243, −20.1546, −16.6130, −23.3677] → 损失 −2.5764 → 反向传播(02§3.2 那一步)→ 50 步之后 15.2% → 47.4%
  • 承重词: 优势 / 组相对(§3.1)· 策略梯度损失(§3.3)

12 训练跑久了会崩:该盯哪几个数(原书 7.1–7.3)

  • §3.1 进来时以为第 11 章那 50 步只是开头、多训更好 → 出去时知道跑到 400 步左右奖励和准确率会掉下来,而且代码是对的也会崩 —— 评测始终是同一批 500 道题,所以不可能是「后面的题更难」
  • §3.2 进来时以为看损失就知道训得好不好 → 出去时知道在 GRPO 里损失只当健全性检查,平均奖励才是主表;而且奖励升到 1.00 反而是坏消息 —— 全对就没什么可学,该早停省钱
  • §3.3 进来时以为一张奖励表就够 → 出去时知道还要看优势:它的均值按算法恒为 0(漂了说明代码有 bug),而标准差才有信息 —— 接近 1 说明信号缩放得好、很小说明学习信号在消失、等于 0 说明整组同分(现象与机制在 11§3.4,这里只讲怎么把它做成一个能长期盯的仪表)
  • §3.4 进来时以为「模型越确定越好」 → 出去时知道那可能是塌缩:熵量的是它挑下一个词时有多不确定,7 个词的玩具例子算出来 1.3700;约 0–0.5 是近乎确定性、1–2 是稳定训练的典型状态,而一路走低往往意味着它开始复读
  • §3.5 进来时以为看懂一个指标就能下判断 → 出去时知道必须几个一起看:那次长跑 200 步后熵在涨,但奖励也在涨、优势标准差没消失,所以判成「还算健康的探索」;而这和准确率停在 30%–40% 一致 —— 每个指标只讲故事的一部分
  • 主走查: 一次 500 步的长跑,四个仪表上分别发生了什么 —— 前约 50 步奖励与准确率快涨(15% → 40%),之后收益递减;约 200 步熵明显上升;约 400 步奖励与准确率明显下滑。配两组小对照:奖励 [1,1,0,0] → 优势标准差 0.9998,奖励 [0,0,0,0] → 标准差 0.0000
  • 另外要并进来的: 附录 B 表 B.1(MATH-500 上的平均回答长度)
  • 承重词: (§3.4)· 优势的标准差(§3.3)

13 三种补救,以及它们各自怎么失手(原书 7.4–7.6)

  • §3.1 进来时以为一步迈大点没关系 → 出去时知道要比同一个回答在更新前后的可能性变了多少(比率 1.0 就是没变),第一个回答变了 20 倍,把它卡到 11 —— 这一招叫裁剪策略比率(名字里的「策略」就是 10§3.1 那个);DeepSeek-R1 用的界是 10(很松),RLHF 里的 PPO 常用 0.1(很紧)
  • §3.2 进来时以为我们做的就是 DeepSeek 那一套 → 出去时知道这是个便宜近似:人家一次生成 8192 个回答再切 16 个小批,我们只采 8 个、重新采一批再来一次;但效果实打实 —— 400 步那次下跌不见了
  • §3.3 进来时以为再加一道保险总没错 → 出去时知道 KL 项管的是另一件事(裁剪管每一步之间的跳动,KL 管整条训练轨迹上的长期漂移),代价是内存里要多留一份原始模型
  • §3.4 进来时以为加了它会更稳 → 出去时看到它把模型训成了吐乱码:奖励塌到 0 之后策略梯度不再贡献任何梯度,KL 项成了唯一还活着的东西,把模型推向接近均匀的词分布;而且它用的是求和的对数概率,序列越长值越大,还顺带鼓励模型写超长。作者试过调小系数,不够 —— 多家的建议是数学任务上干脆不要这一项
  • §3.5 进来时以为把「按格式写」也奖励一下总是好事 → 出去时看到模型找到了捷径:光守 <think> 格式就赚够了分,于是对答案对不对用力不够、准确率反而下滑;改法是给格式奖励降权,或者改成「答对了才给」
  • §3.6 进来时以为 GRPO 就是标准答案 → 出去时知道后面还有十几种改法(DAPO、Dr. GRPO、GSPO、CISPO、GDPO……)各自在修哪一处;而作者的态度是算法会一直变,重要的是懂底层原理
  • 主走查: 还是那四个回答。更新前的序列对数概率 [−10.9243, −20.3546, −14.6130, −23.3677] 对更新后的 [−7.9243, −20.1546, −16.6130, −23.3677] → 比率 [20.0855, 1.2214, 0.1353, 1.0000] → 卡进 [−9, 11][11.0000, 1.2214, 0.1353, 1.0000] → 损失从 −2.5764 变成 −2.3998
  • 另起两处(失效路径): ① KL 项那次崩溃 —— 前 50 步 15% → 40%,约 200 步奖励塌到 0,之后吐出 "framework.raises Self profess(import",准确率归零;② 格式奖励被刷分 —— 平均奖励基本不变而准确率下滑,回答同时在变短
  • 承重词: 裁剪策略比率(§3.1)· KL 项(§3.3–§3.4)

14 抄作业:蒸馏(原书第 8 章)

  • §3.1 进来时已经知道抄作业是三条路之一(02§3.5 讲过),以为它是退而求其次 → 出去时知道它换来什么:同一台机器上 12 小时 / 70 GB 变成 3 小时 / 15 GB,准确率 45.0%,只比 GRPO 的 47.4% 低 2.4 个点
  • §3.2 进来时以为「蒸馏」是一件事 → 出去时知道硬蒸馏只学老师生成的文本(说白了就是拿合成数据做监督微调),软蒸馏还要学老师在整个词表上的那一整套概率(02§3.6 欠下的那笔账在这里还);LLM 圈几乎只用前者,因为闭源模型不给这套概率、师生还得共用同一套分词器、长轨迹也存不起 —— 并知道这么做可能受各家服务条款限制
  • §3.3 进来时以为老师的数据得自己造 → 出去时知道那 12000 道题喂给 DeepSeek-R1 花了约 50 美元、产出 107 MB;并知道老师和学生差多远:MATH-500 上 91.2% 对 15.2%
  • §3.4 进来时以为数据拿来就能训 → 出去时知道最长一条有 42005 个 token,只留 ≤2048 的就砍掉了 44%(12000 → 6695),平均从 2946 降到 1180 —— 控制序列长度是让蒸馏在小机器上跑起来的主要手段
  • §3.5 进来时以为这是一套全新的损失 → 出去时知道交叉熵就是把那些 token 的对数概率取负再求平均(−16.6250 → 16.6250 → 除以 5 = 3.325),和第 09 章那套是同一个东西;并知道为什么只在答案那几个 token 上算损失 —— 提示词是给定的上下文,不该因为「没背下指令」罚它
  • §3.6 进来时以为老师越强学生越好 → 出去时看到相反:91.2% 的老师教出 33.6%,92.4% 的老师教出 45.0% —— 因为后者和学生同属一个模型家族,分词器和风格更对得上、更好模仿;而那个「官方推理版」本身也是这么蒸出来的,只是用了大得多的数据集
  • §3.7 进来时以为五条路要挑一条 → 出去时拿到同一把尺子上的总账(15.2% 起步:思维链 40.6% / 投票 52.0% / 自我精修 25.0% / GRPO 47.4% / 蒸馏 45.0%,各带耗时),并知道作者的建议是组合着用,以及这个领域接下来往哪走
  • 主走查: 12000 道题里的一条 —— 题面 + 老师给的推理轨迹和最终答案 → 拼成 <think>{推理}</think>\n\n{答案} → 套聊天模板(答案部分不能再套一次)→ token 化,超过 2048 就整条丢掉 → 只在答案那几个 token 上算交叉熵,得 1.68(和用第 11 章那个对数概率函数算出来的一样)
  • 另外要并进来的: 附录 B 表 B.2(不同数据规模下的准确率)
  • 承重词: 蒸馏(硬 vs 软)(§3.2)· 交叉熵(§3.5)

自查:任意两行「出去时知道」同义就合并

第一版逐条过了一遍留下五处裁决;审读又抓出三处真重复。合并后的裁决表:

疑似重复裁决
03§3.4「挑最高分叫贪心解码」 vs 07§3.1不合并。 03 给这个动作命名,07 拿它当前提推出「为什么必须动挑词那一步」;07§3.1 只回指,不重述定义
09§3.3(取对数)· 11§3.2(改回求和)· 14§3.5(取负求平均 = 交叉熵)不合并,是一条链。 三处分别回答「为什么取对数」「为什么这里求和不求平均」「它和训练损失是什么关系」;每一处都必须显式回指上一处
11§3.4「全组同分 → 权重一动不动」 vs 12§3.3「标准差等于 0」不合并,但分工写死。 11 讲现象与机制,12 只讲怎么把这件事做成一个能长期盯的仪表并回指 11
02§3.6「蒸馏的两义」 vs 14§3.2「硬 vs 软蒸馏」不合并,是许诺—兑现。 02 只给一句话辨析(只学文本),14 才展开三条理由 + 服务条款警告 + 第三种做法。记进总纲兑现表
02§3.6「推理 RL 和 RLHF 只差奖励从哪来」 vs 10§3.2「RLHF 两步与它的代价」同上,02 挂牌、10 讲透。记进兑现表
05§3.1「数学题既要推理又能自动判」 vs 10§3.3「RLVR 只能用在数学代码」不合并。 前者是选评测领域的理由,后者是同一性质带来的奖励信号限制;10 显式回指 05
07§3.1 vs 08§3.1(审读抓出)已改。 07§3.1 的落点改成「贪心解码为什么必然一模一样」,不再靠「下一章那一招」吊着
08§3.1 vs 08§3.2(审读抓出)已合并成一节。 走查走完之后名字放在同一段句末。合并后把原「表 4.1」那一节拆成「n 怎么选」和「怎么读这张账本」两节,08 仍是五节
06§3.1 与 14§3.1 的入口 vs 02§3.5(审读抓出)已改。 两处入口从「有没有这条路」改成「怎么做 + 换来多少」
02§3.3 / 04§3.1 / 10§3.5 三处讲「为什么用 base」(审读抓出)分工写死。 02§3.4 只管「base 还是调教过的」这一个轴,归因论证只在这里出现一次;04§3.1 只管「跑得动」;10§3.5 只留新事实(DeepSeek 证明 RL 可以直接加在 base 上),理由回指 02§3.4

结论:14 章成立,无待合并项。

为什么是 14 章(不是上一位交底里的 11 章)

上一位建议 11 章,方向对,但有三处按「一节最多 5 个生面孔 / 一章的节数多到读者找不着北就该拆章」压不下去。每一处都是拆,不是砍解释:

  1. 原书第 4 章劈成三章(06 / 07 / 08),不是两章。 上一位切在「让一次回答更好 vs 多答几遍」,但那样温度和 top-p 会被拆到两章去,而它们是同一件事的两半(「低温也会误伤,所以再加一道闸」)。改切在两处:思维链自成一章;温度 + top-p 一章;自洽投票 + 那张十二行的账本一章。附带的好处是 07 能落在一个反直觉的结论上(这两个旋钮本身几乎不提分,15.2% → 17.8%),正好把读者逼进 08。
  2. 原书第 6 章劈成两章(10 / 11)。 书自己给了缝:「RLVR 决定有什么学习信号可用,GRPO 决定这个信号怎么拿去改权重」。合成一章要 7 节、8 个承重词(强化学习 / 策略 / 奖励模型 / RLHF / RLVR / rollout / 优势 / 策略梯度损失),塞不下。劈开后两章各有一条完整走查,而且是同一道题的前半段和后半段其中「策略」在第一版被拆丢了(10、11 都没给它位置),本版补回 10§3.1。
  3. 原书第 7 章劈成两章(12 / 13)。 12 是「怎么读训练曲线」这门独立手艺,13 是三种补救各自怎么失手。合成一章要 8 节;而且 13 光失效路径就有两条(KL 崩溃、格式奖励被刷分),按红线二「一章最多另起两处」正好用满。

另外三处与上一位不同的安排:

  • 原书 1.6 劈成两半:适用边界那半留在 02§3.7,成本那半移到 03§3.6。理由:成本的机制是「每吐一个 token 都要把整个模型重算一遍」,而前向计算要到 03 才讲。放在 02 是跳级;放在 03 末尾,它正好成为 03 的落点,又成为 04(提速)的开场问题。
  • 附录 D(换更大模型的内存账)不单开一节,并进 04 的「可带走的」。它是操作建议,不是机制。
  • 第 05 章保留 7 节(全书最多)。这是有意的:它是全书方法论的枢纽,而且它的七节和图 3.3 的八步严格对齐——§3.2 一节里装了第 ①②两步(加载模型 + 生成答案),其余六节各对应一步。读者每读完一节,走查就往前走一步。

篇幅与硬边界

  • 预估 14 章 × 12k–18k ≈ 200k 字符,加总纲约 18k。原书正文(不含附录)约 396k,但其中大量是代码清单和逐行注释 —— 红线一,不搬
  • 写 05 章之前必须先完整读附录 F(35k,另外三种评测法),写 04 章之前必须先完整读附录 E(19k,批处理与吞吐)。本版两份都已读完,取材见各章节线。
  • 三处贯穿全书的输入(尽量不再新造):① 那道 a+b=3, ab=13/6 的题(只在 05);② 「$3x-9$ 的一半等于 $x+37$」答案 83(06、08、10、11、13 全用它);③ "The capital of Germany is"(07、09)。03 用的是 "Explain large language models.",因为书只在那里给了完整的六个 token ID 和张量形状。
  • 书架分工写死(本版补了三条):
    • GRPO 的算法谱系(DAPO / Dr. GRPO / GSPO / CISPO 各修什么病)不在这里重写,13§3.6 只列名字并指向 shelf=ai-book-reference/the-rlhf-book-reinforcement-learning-from#06-grpo-generation.md;
    • PPO 的本体指向 shelf=ai-book-reference/the-rlhf-book-reinforcement-learning-from#05-policy-gradient-ppo.md;
    • OpenClaw 指向 shelf=ai-agent-reference/openclaw#index.md;
    • (新)分词 / 词表 / BPE 指向 shelf=ai-book-reference/build-large-language-model#02-text-to-numbers.md,但 03 章自己讲透,增量见 03 的书架分工行;
    • (新)解码策略 / 贪心 / 温度 / top-k 指向 shelf=ai-book-reference/build-large-language-model#07-decoding-and-weights.md,但 07 章自己讲透,增量见 07 的书架分工行;
    • (新)损失 / 梯度 / 反向传播 / 优化器指向 shelf=ai-book-reference/build-large-language-model#06-pretraining.md,02§3.2 只讲到「朝差得少一点的方向挪」这一级;
    • Transformer 与注意力指向 shelf=ai-book-reference/build-large-language-model#03-attention-core.md(在 04 的「边界与局限」说明)。

与审读意见的三处不同(其余 13 条照单全收)

  1. 思维链的首现处,审读给的两条路我都没走,选了第三条:提前到 01§3.3 就地留名。 理由:原书 1.1 的「Chain-of-Thought」边栏就紧挨着 reasoning 的定义,CoT 和「先生成中间步骤」讲的是同一件事; 在 02 改说「带分步解法的数据」会让 02 的主走查失去指称,而在 06 才命名又会造成 「思维链(输出形态)」和「思维链提示(技巧)」的一词二义。提前到 01 定义处留名,两个问题一起消掉。
  2. 验证器的首现处放在 05§3.1 而不是挪走。 审读建议把四种量法整节移走以免抢首现 —— 移走照办了, 但「验证器」这个名字本身留在 §3.1:因为 §3.1 的落点就是「先造尺子」,而尺子在这本书里就是验证器, 不给名字反而是躲词。§3.2 的职责因此从「命名」改成「把它展开成八步」。
  3. 08 合并后没有减到四节,而是仍保持五节。 审读给了「拆表 4.1 那一节」和「重新考虑 07/08 合并」两个选项, 取前者:表 4.1 十二行里其实是两件事(「n 怎么选」是方法论,「怎么读这张账本」是全书唯一一张纵向对照表的读法), 本来就该分开。07 与 08 不合并,理由见「为什么是 14 章」第 1 条。