对应 Maps to:CMU 10-423 / 10-623 / 10-723 Generative AI(Aran Nayebi、Matt Gormley),Lecture 20 · Mon 30-Mar · Reasoning Models + Mechanistic Interpretability(slides:lecture20-reasoning)。 阅读材料:Wei et al. (2022), Chain-of-Thought Prompting;Kojima et al. (2022), Large Language Models are Zero-Shot Reasoners;Zelikman et al. (2022), STaR;OpenAI (2024), Learning to Reason with LLMs(o1 的博客);Shao et al. (2024), DeepSeekMath(GRPO);DeepSeek-AI (2025), DeepSeek-R1;Elhage et al. (2022), Toy Models of Superposition;Lindsey et al. (2025), On the Biology of a Large Language Model。 依据说明:本讲按原课第 20 讲公开的 slides 展开:思维链提示与零样本思维链(回顾);o1 解一道密码题的思考过程(结论是”strawberry 里有三个 r”);o1 只公开思考的摘要;STaR;AIME 数据集;o1 的两个结果(训练时计算、测试时计算越多越好)和”为什么描述这么含糊”;开源模型追上来:DeepSeek-R1;PPO vs GRPO;R1-Zero 的训练方法、基于规则的奖励、结果(AIME 越训越好、思考越来越长)、问题(可读性差、语言混杂);R1 的多阶段流程;后半讲的机制可解释性:叠加让解释变难、归因图。所有实验是本讲义自己设计的,不代表课堂上讲了什么。 配套代码 Code:
code/lecture20/(5 个脚本 + 1 个模块;01、03 第一次各约 1–2.5 分钟,其余几秒到 1 分钟) 预计阅读时间:2.5 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
学完这一讲,你应该能够:
- 说明”推理模型”和”会用思维链的模型”差在哪里:训练时用强化学习教它想,测试时让它想得更久。
- 区分两种测试时计算——串行(想得更长)和并行(采样多次、投票或用验证器挑),说出各自什么时候有效。
- 描述 STaR 的循环,指出它的前提(模型要能”偶尔做对”)和弱点(蒙对的思考链)。
- 写出 GRPO 的优势和目标函数,说明它为什么不需要价值模型、省了多少显存。
- 解释 R1-Zero 的”思考越练越长”在机制上可能是怎么来的,以及基于规则的奖励的好处。
- 用玩具模型解释叠加,说出稀疏自编码器怎样把叠加的特征拆开。
0.2 先修与本讲范围 Prerequisites & scope
| 默认你已经会 Assumed | 本讲只给直觉,后面再展开 Previewed only |
|---|---|
| 第 11 讲 §4:思维链;第 3 讲:采样 | 过程奖励模型(PRM)的训练、蒙特卡洛树搜索 |
| 第 12 讲 §3:REINFORCE、PPO、KL 惩罚 | o3、R1 之后的推理模型细节(博客为主,公开信息少) |
| 第 15 讲:训练计算;第 17 讲:显存账 | 归因图的完整方法(转码器、剪枝) |
0.3 本讲地图 Map
§1 从思维链到推理模型:o1 的密码题、训练时和测试时计算 (slides)
§2 一个"会选择想多久"的小模型 ← 代码 01
§3 测试时计算:串行与并行 ← 代码 02
§4 STaR:用自己写对的思考链训练自己 ← 代码 03
§5 强化学习:DeepSeek-R1-Zero、GRPO、"越想越长" ← 代码 04
§6 R1:多阶段训练 (slides)
§7 机制可解释性:叠加与稀疏自编码器 ← 代码 05
§8–12 小结、误区、练习、延伸阅读、下一讲
本讲的实验都在 reason_lab.py 的一个小世界里:模型要算 k 个数字的和(取模 10),可以选择直接回答、简略地想、或完整地想。
1. 从思维链到推理模型 · From CoT to reasoning models
1.1 回顾:思维链
slides 先回顾第 11 讲:思维链提示(Wei et al., 2022)在少样本例子里写出推理过程,模型就会模仿着先推理、再回答;甚至只说一句”Let’s think step by step”(Kojima et al., 2022)也有用。第 11 讲 §4.2 给过一个计算上的解释:Transformer 每生成一个 token 只做固定层数的计算,写下的中间结果就是它的草稿纸。
思维链提示是”推理时请它想”;推理模型(reasoning model)是”训练它想”——它在回答之前先生成很长的”思考”,而这种行为是用强化学习专门练出来的。
1.2 o1 解一道密码题
slides 展示了 OpenAI o1 博客里的例子。题目:已知 “oyfjdnisdr rtqwainr acxz mynzbhhx” 解码后是 “Think step by step”,请解码另一串密文。o1 的思考(节选):
- 先数字母:明文 “Think step by step” 去掉空格是 15 个字母(它先说成 18,再一个词一个词数出 15——“Hmm.”);密文是 30 个字母。
- “密文的每个词恰好是明文对应词的两倍长(10 vs 5、8 vs 4、4 vs 2、8 vs 4)”——“也许要每两个字母还原一个”。
- 试 “oy” → “T”:o = 15、y = 25,和 = 40,但 T = 20……(最后发现是两个字母序号的平均)。
- 一千两百多行之后:解出的明文是 “THERE ARE THREE R’S IN STRAWBERRY”。
这个结论本身是个玩笑:早期的 LLM 常常数错 “strawberry” 里有几个 r。原因在第 3 讲讲过的分词:模型看到的不是字母,而是 “str”、“aw”、“berry” 这样的 token,“有几个 r”这种信息不在它的输入里,只能靠记忆”这个 token 里有哪些字母”。推理模型会先把单词逐个字母拼出来、再数——又一次”把计算写在纸上”。
slides 还指出:o1 选择不公开思考的原文,只给用户看一段摘要。
1.3 o1 的两个结果
o1 用强化学习训练,生成思维链式的推理过程(“思考 token”)再回答。博客的两张图:
- 训练时计算越多(更多的强化学习),AIME 上的准确率越高;
- 测试时计算越多(想得越久),准确率也越高。
AIME 是美国数学邀请赛,每道题的答案是 0–999 的整数——答案对不对一目了然,这一点后面很重要(§5)。o1 在数学、推理、常识、编程等题目上都明显超过 GPT-4o。
slides 自问自答:“为什么这些描述如此含糊、不技术?因为 OpenAI 只发了一篇博客,这差不多就是它说的全部。“闭源模型明显领先于开源模型,“于是我们等着开源模型追上来……”——这就是 §5 的 DeepSeek-R1。
2. 一个”会选择想多久”的小模型(代码 01)
2.1 任务
题目:k 个数字(k = 2…8),答案是它们的和取模 10。题目写在固定宽度的 8 个格子里(空格子是 ”_”)。模型在 ”=” 之后先写一个格式记号:
直接回答 A: <s> 3 5 9 2 7 _ _ _ = A 6 </s>
简略思考 S: <s> 3 5 9 2 7 _ _ _ = S 8 9 6 A 6 </s> 每两个数字写一次累加和:一步加两个数
完整思考 T: <s> 3 5 9 2 7 _ _ _ = T 3 8 7 9 6 A 6 </s> 每个数字写一次累加和:一步只加一个数
直接回答只生成 3 个 token,完整思考要 k + 4 个。基础模型(第 2 讲的 GPT,20 万参数、4 层)先只练思考链 2000 步,再用三种格式 50% / 30% / 20% 的数据练 1500 步——它学会了三种写法,但更常”偷懒”。(为什么分两个阶段:三种格式一开始就混在一起时,模型 5000 步都停在平台上——见 README。)
2.2 强制用某种写法
| k | 直接 A | 简略 S | 完整 T |
|---|---|---|---|
| 2 | 0.958 | 1.000 | 1.000 |
| 4 | 0.270 | 0.980 | 1.000 |
| 6 | 0.095 | 0.892 | 0.998 |
| 8 | 0.105 | 0.880 | 0.993 |
(贪心解码,每格 400 道新题。)同一个模型、同样的参数,差别只在”写不写、写多细”:直接回答 k ≥ 5 时就退到瞎猜(0.1),完整思考到 k = 8 还是 0.993。
要小心解读:“直接回答差”不等于”一次前向算不出来”。求和满足结合律,4 层的网络原则上可以像一棵树那样两两相加(log₂8 = 3 层);我们训练的一个试验模型多练了直接回答,k = 8 直接回答能到 0.85(README)。基础模型只是还没学会这种一步到位的算法——而”每步只加一个数”容易学得多。真正必须串行的问题(不满足结合律的多步推理)上,思考的作用更不可替代。
2.3 让模型自己选
温度 1 采样,模型自己决定写法:
| k | 选直接 | 选简略 | 选完整 | 答对 | 平均长度 |
|---|---|---|---|---|---|
| 2 | 0.47 | 0.31 | 0.22 | 0.968 | 4.3 |
| 5 | 0.43 | 0.32 | 0.25 | 0.598 | 5.8 |
| 8 | 0.48 | 0.29 | 0.22 | 0.495 | 6.5 |
它选格式的比例就是”预训练”数据里的比例,和题目难易无关——它学会了怎样想,却没学会什么时候该想。所有 k 平均只答对 0.677。这就是一个”会思维链、但不是推理模型”的基础模型。接下来两条路:测试时多花计算(§3),训练时教它多想(§4、§5)。
3. 测试时计算 · Test-time compute(代码 02)
在难题(k = 6、7、8)上比较两种增加测试时计算的方式。
3.1 串行:想得更久
| 写法(温度 1) | 每道题生成的 token | 答对 |
|---|---|---|
| 直接 | 3.0 | 0.083 |
| 简略 | 7.7 | 0.880 |
| 完整 | 11.0 | 0.967 |
| 自己选 | 6.4 | 0.567 |
强制它”想完整”——这就是 o1 那张”测试时计算越多越准”的图最简单的版本。
3.2 并行:采样 N 次
每道题采样 N 条回答(模型自己选写法),三种挑法:
- 多数投票(自一致性,Wang et al., 2023):取出现最多的答案;
- 验证器:挑一条中间步骤全对的(只用题目本身逐步检查加法,不需要知道标准答案);
- pass@N:N 条里只要有一条对就算对——“有一个完美的判官”时的上限。
| N | 每道题的 token | 多数投票 | 验证器 | pass@N |
|---|---|---|---|---|
| 1 | 6 | 0.583 | 0.583 | 0.583 |
| 4 | 26 | 0.770 | 0.937 | 0.957 |
| 16 | 103 | 0.940 | 0.997 | 1.000 |
| 32 | 206 | 0.957 | 1.000 | 1.000 |
投票有效,是因为直接回答的错误答案散落在 10 个数字上、互相抵消,而思考链给出的答案彼此一致、“抱团”。验证器更强:它能认出哪条是对的。但它只能检查有中间步骤的回答——“把推理写出来”的另一个好处是它可以被检查。R1 用规则检查最终答案(§5),过程奖励模型(PRM)则给每一步打分。
3.3 同样的预算:长回答还是很多短回答?(k = 8)
| 做法 | token | 答对 |
|---|---|---|
| 直接回答 × 16 条,投票 | 48 | 0.160 |
| 简略思考 × 1 条 | 8 | 0.900 |
| 完整思考 × 1 条 | 12 | 1.000 |
16 条直接回答投票(48 个 token)还不如 1 条完整思考(12 个 token)。这个模型一次前向做不完 8 个数的加法,直接回答采样再多次,也只是在错误答案里挑;完整思考把它拆成 8 次”加一个数”,每一步它都会。在模型”一步做不完”的题上,串行地想得更久,是并行采样替代不了的(Snell et al., 2024 系统比较了两种测试时计算)。反过来,如果模型一步就能做对,多想只是浪费——§5.4 会回到这一点。
4. STaR:用自己写对的思考链训练自己(代码 03)
4.1 算法
slides:Self-Taught Reasoner(Zelikman et al., 2022)。
- 数据:少量人写的思考链 + 大量只有答案、没有思考链的题。
- 反复做:用少量例子(上下文学习)让模型为没有思考链的题生成思考链;答案错了,就给它答案作为提示、让它重新生成一条通向正确答案的思考链(“合理化” rationalization);用所有得到正确答案的思考链微调。
关键在过滤:只留”答案对了”的思考链——不需要人检查过程,只需要知道答案。
4.2 我们的实验
起点模型只见过 150 条人写的完整思考链(k = 2…8),其余训练数据都是只有答案的直接回答。题库 2000 道题、只有答案。每一轮:让上一轮的模型对每道题强制完整思考、采样 4 次,留下第一条答案对的;从起点模型出发用这些思考链微调 600 步(STaR 每一轮都从原模型重新开始)。
| 轮 | 留下的思考链 | 其中 k ≥ 7 | 答案对、思考链错 |
|---|---|---|---|
| 1 | 1753(87.6%) | 360 | 17(1.0%) |
| 2 | 1970(98.5%) | 513 | 17(0.9%) |
| 3 | 1992(99.6%) | 533 | 13(0.7%) |
完整思考的准确率(贪心):
| 模型 | k = 2 | 4 | 6 | 7 | 8 |
|---|---|---|---|---|---|
| 起点 | 1.00 | 0.94 | 0.83 | 0.76 | 0.47 |
| STaR 第 1 轮 | 1.00 | 1.00 | 0.98 | 0.97 | 0.88 |
| STaR 第 2 轮 | 1.00 | 1.00 | 0.99 | 0.99 | 0.94 |
| STaR 第 3 轮 | 1.00 | 1.00 | 0.96 | 0.98 | 0.90 |
| 对照:只用答案微调,直接回答 | 0.98 | 0.14 | 0.12 | 0.09 | 0.11 |
k = 7、8 的完整思考:起点 0.61 → 第 1 轮 0.93 → 第 2 轮 0.97 → 第 3 轮 0.94。模型没有再看到任何人写的思考链,只靠”自己写、留下答案对的、再学”。第 1 轮的提升最大:起点模型在长题上已经有一半左右能写对,这些写对的思考链就是新的训练数据;之后留下的已经接近题库的全部,再多几轮也学不到更多。对照组用同样的题、同样的答案直接微调,长题的直接回答毫无起色(0.11 → 0.10)——STaR 多做的只是”先让模型写出过程,再挑对的学”。
4.3 STaR 的前提与弱点
- 蒙对的思考链:答案只有 10 种,错的思考链有约 1/10 的机会蒙对。STaR 只看答案,会把它们也学进去。这里只占 1% 左右,因为模型多数时候写得对,而且错法五花八门、互相抵消。
- 前提是”偶尔能做对”:我们的第一版实验用一个只学过 k ≤ 4 的起点模型,想让 STaR 自己把能力扩展到更长的题。结果它在 k = 5 的题上几乎写不出第 5 步:第 1 轮留下的 928 条思考链里,k > 4 的只有 23 条,而”答案对、思考链错”的有 25 条——长题上留下来的基本是蒙对的;4 轮之后 k ≥ 5 的完整思考仍然只有 0.04–0.13(README 记录了这个失败)。STaR 不能从 0 学起;论文的”合理化”(给出答案让模型倒推过程)就是为了从做不对的题里也拿到训练信号。
STaR 是后来”拒绝采样微调”(R1 的第三阶段,§6)和强化学习式推理训练的前身:用可以自动检查的答案,代替人写的推理过程。
5. 强化学习:DeepSeek-R1-Zero 与 GRPO(代码 04)
5.1 R1-Zero 的训练方法
slides:DeepSeek-R1 是 6710 亿参数、开源权重的模型,在 DeepSeek-V3 基础模型上精心调出来,性能和 o1 相当。先看它的前身 R1-Zero:
- 完全用强化学习训练,没有任何 SFT;从预训练的 DeepSeek-V3-Base 出发,不用人类偏好。
- 是最早的大规模”只用 RL”训练 LLM 的例子之一;想看推理能力能不能只靠 RL 涌现出来、不需要标注数据。
- 奖励模型不是神经网络,而是基于规则的两部分:准确率奖励(答对没有——数学题对答案、编程题跑测试)和格式奖励(有没有把思考写在
<think>和</think>之间)。
基于规则的奖励不会被”钻空子”(第 12 讲 §3.4 的奖励欺骗),这正是 AIME 这类”答案一目了然”的任务适合 RL 的原因,也叫可验证奖励的强化学习(RLVR)。
5.2 GRPO
slides:DeepSeekMath 提出了 GRPO——一个类似 PPO 的 RL 算法,但去掉了价值模型,大大减少了显存需求。
回顾第 12 讲:PPO 需要一个价值模型 给出基线,优势 由它(和 GAE)估计。GRPO 的做法:对每道题 ,用旧策略采样一组 个回答 ,得到奖励 ,组内标准化:
回答 的每个 token 都用这个优势。目标函数(每个回答在自己的 token 上平均、再在回答之间平均):
KL 项用 DeepSeekMath 的无偏估计(逐 token):(总是 ≥ 0)。和第 12 讲的 PPO 相比:同一道题的几个回答互相当基线——比平均好的被加强、比平均差的被削弱,不需要另一个网络去估计”平均能得多少分”。
04 第 4 部分算了 8B 策略时的显存账(混合精度 Adam,16 字节 / 参数):策略 128 GB、参考模型 16 GB、奖励模型 16 GB、价值模型 128 GB(和策略一样大、也要训练)。PPO 共约 289 GB,GRPO(规则奖励,不要奖励模型)约 145 GB——几乎省一半;代价是每道题要采样一组回答。
5.3 R1-Zero 的结果
- AIME 2024 的 pass@1 随 RL 训练从 15.6% 涨到 71.0%(多数投票 cons@64:86.7%);slides:“训练得越久越好,最终超过了 o1 的表现”。
- 思考越来越长:slides:“模型逐渐学会用越来越长的思考 token 序列;这完全来自强化学习的目标;没有任何直接增加推理长度的做法。“论文还描述了一个”aha moment”:模型在思考中途停下来重新审视自己的做法。
- 问题:可读性差(人看不懂它在写什么);语言混杂(英文、中文混成一种”洋泾浜”)。
5.4 我们的 GRPO(代码 04)
从 §2 的基础模型出发(它常常偷懒直接回答),每步 16 道题 × 每题 8 个回答(k = 2…8),奖励 = 答对 1 + 格式完整 0.1,学习率 1e-4,150 步:
| 做法 | 答对(前 25 步 → 最后 25 步) | 回答长度 | 直接回答的比例 | 完整思考的比例 |
|---|---|---|---|---|
| GRPO,β = 0.04 | 0.848 → 0.971 | 6.5 → 7.9 | 0.23 → 0.01 | 0.32 → 0.47 |
| GRPO,β = 0 | 0.847 → 0.991 | 6.5 → 8.0 | 0.23 → 0.00 | 0.32 → 0.51 |
| REINFORCE,不减基线 | 0.717 → 0.650 | 5.5 → 5.1 | 0.45 → 0.54 | 0.22 → 0.12 |
(第 1 步时三者相同:答对 0.727、直接 / 简略 / 完整 = 0.37 / 0.35 / 0.27。)
- “越想越长”的小模型版:奖励里没有任何一项鼓励写长;长度变长,是因为写出思考过程的回答更常答对,在同一道题的一组回答里优势为正、被一点点强化;直接回答在长题上常错、优势为负、被压下去。要注意我们的模型本来就会思考——RL 只是让它更常去用;R1-Zero 的基础模型从预训练里也学到了很多推理的写法,RL 是把它们”选”出来。
- 基线很重要:不减基线的 REINFORCE 越练越差、越练越懒。所有奖励都 ≥ 0(答错但格式完整也有 0.1),每个被采到的回答都会被加强一点,模型本来最常做的事(直接回答)被加强得最多。组内平均做基线,“比平均差”的回答才会得到负的优势。
- KL 惩罚在 150 步、这么小的学习率下影响不大(最后的 KL:β = 0.04 时 0.100,β = 0 时 0.062)。
训练之后,按题目长短看它怎样选(温度 1):
| 模型 | k | 答对 | 选直接 | 选完整 | 平均长度 |
|---|---|---|---|---|---|
| 基础模型 | 2 | 0.968 | 0.39 | 0.29 | 4.5 |
| 基础模型 | 8 | 0.573 | 0.40 | 0.27 | 7.1 |
| GRPO | 2 | 1.000 | 0.01 | 0.52 | 5.5 |
| GRPO | 8 | 0.978 | 0.01 | 0.51 | 10.0 |
GRPO 之后,连 k = 2 的易题也几乎不再直接回答——它没有学会”易题少想、难题多想”,而是处处都想。原因很简单:奖励里没有长度的代价,易题上多想不吃亏。这和真实推理模型的一个常见批评(“想得太多”,overthinking)是同一回事;后来很多工作在奖励里加入长度惩罚或思考预算。
6. DeepSeek-R1:多阶段训练
slides:R1 在 R1-Zero 的基础上用了混合的训练策略,解决 R1-Zero 的问题(重复、语言混杂),强调可读性、连贯性和准确率:
- 冷启动:先用几千条高质量的长思维链数据做 SFT——让输出可读、有固定的格式;
- 面向推理的 RL:和 R1-Zero 一样的规则奖励,另加语言一致性奖励(思考里目标语言的词占的比例),减少语言混杂;
- 拒绝采样 + SFT:用上一步的模型对大量题目采样,只留正确的回答(约 60 万条推理数据——这就是 §4 的 STaR 思路,规模大得多),再加约 20 万条非推理数据(写作、问答等),从基础模型重新做 SFT;
- 面向所有场景的 RL:推理题继续用规则奖励,一般问题用奖励模型(有用性、无害性)。
R1 的论文还把 R1 的推理能力”蒸馏”到小模型:用 R1 生成的 80 万条数据直接 SFT Qwen、Llama 的小模型,效果比在小模型上直接做 RL 还好。
7. 机制可解释性:为什么难——叠加(代码 05)
7.1 slides 的问题
slides 后半讲转向机制可解释性:我们能不能打开模型,看它在”想”的时候内部到底做了什么?“为什么可解释性难?叠加(superposition)是一个主要问题:‘特征’很少只在一个位置被激活;一个人能理解的特征,它的激活几乎总是分散在网络的很多位置上——跨注意力头、跨 MLP 神经元、跨层。”
7.2 玩具模型里的叠加(代码 05 第 1、2 部分)
Elhage et al. (2022) 的最小例子:20 个”特征”,每个以概率 出现(出现时取 [0, 1] 的均匀值),重要性 递减;压进 5 维的隐藏向量 ,再还原 。
| 模型 | 稀疏度 S | 被表示的特征 | 每个特征占几维 |
|---|---|---|---|
| 线性输出 | 0 / 0.9 | 5 / 5 | 1.00 |
| ReLU 输出 | 0 | 5 | 1.00 |
| ReLU 输出 | 0.7 | 8 | 0.63 |
| ReLU 输出 | 0.9 | 9 | 0.56 |
| ReLU 输出 | 0.99 | 11 | 0.39 |
- 线性模型不管多稀疏都只表示最重要的 5 个特征,每个独占一维——就是主成分分析的解。
- 加上 ReLU、特征又稀疏时,5 维里放下了远多于 5 个特征。特征越稀疏,同时出现、互相干扰的机会越小,模型越愿意把它们挤进同一个空间,代价是串扰;ReLU 能把小的负串扰截成 0,这是非线性让叠加”划算”的原因。没被表示的是最不重要的那些(第 11 个特征的重要性只有 0.020)。
- 里出现了”对跖对”:S = 0.9 时有 4 对特征方向几乎相反(余弦 −1.00)——两个特征共用一维、一正一负,它们很少同时出现。
后果:如果你去看隐藏层的某一维(或真实网络的某个神经元),它同时对好几个不相关的特征有反应(多义神经元,polysemantic)。逐个神经元去解释网络,从一开始就走不通。
7.3 稀疏自编码器把它拆开(代码 05 第 3 部分)
既然特征是”很多方向、稀疏地出现”,那就去找这些方向:训练一个稀疏自编码器(SAE,Bricken et al., 2023),只看隐藏向量 ,用一个比 宽得多的字典(这里 40 列)重建它,并加 L1 惩罚让每次只用很少几列。S = 0.9 的模型里被表示的 9 个特征,9 个都在字典里找到了余弦 > 0.9 的方向——SAE 没见过真实的特征,只靠”稀疏地重建”就把挤在 5 维里的特征拆了出来。
7.4 归因图
slides 最后展示了 Anthropic 的”归因图”(attribution graphs,Lindsey et al., 2025 On the Biology of a Large Language Model):先用 SAE 的变体(转码器 transcoder)把每一层的激活拆成可解释的特征,再追踪”这个回答是由哪些特征、经过哪几步算出来的”。论文里的例子包括:回答”达拉斯所在州的首府”时,模型内部先出现”得克萨斯”的特征、再到”奥斯汀”——一个真实的两跳推理;写押韵的诗时,模型在写下一行之前就”计划”好了要押的词。这让我们可以检查推理模型写出来的思考,和它内部真正的计算是否一致——第 11 讲 §4.3 的”思维链是否忠实”问题,第 26 讲还会回来。
8. 小结 · Summary
- 推理模型 = 训练时用 RL 教它”想”,测试时让它”想得更久”;o1 的两条曲线就是这两种计算的规模定律。
- 测试时计算:串行(想得更长)在”一步做不完”的题上不可替代;并行(投票、验证器)能把一个不稳定的模型变稳定;能被检查的思考过程让验证器成为可能。
- STaR:只用答案过滤自己生成的思考链,就能把 150 条人写的思考链放大成 2000 条;前提是模型能偶尔做对,弱点是蒙对的思考链。
- GRPO:组内标准化的奖励代替价值模型,省一半显存;基于规则的可验证奖励不会被钻空子。
- “越想越长”可以完全来自”答对”这一个奖励:写出过程的回答更常答对、优势为正;没有长度代价时,模型会处处都想。
- 叠加让单个神经元无法解释;稀疏自编码器能把叠加的特征拆回来,归因图在此之上追踪推理的步骤。
9. 常见误区 · Common pitfalls
- “推理模型的能力来自 RL 发明的新技能。” 在我们的实验里,RL 只是把模型本来就会、但很少用的写法(完整思考)选了出来(0.27 → 0.51)。R1-Zero 的基础模型同样从预训练里学过大量推理文本。
- “采样越多次越好。” 模型一步做不完的题,16 条直接回答投票(0.160)还不如 1 条完整思考(1.000)。
- “不加基线的 REINFORCE 只是方差大一点。” 奖励全为正时它会强化模型已有的习惯:我们的模型越练越懒(直接回答 0.45 → 0.54)、越练越差。
- “思考越长越好。” 没有长度代价时模型在 k = 2 的易题上也写完整的思考链;真实系统要在准确率和延迟、成本之间取舍。
- “直接回答答不对,说明一次前向算不出来。” 我们的基础模型只是没学会;多练了直接回答的试验模型 k = 8 能到 0.85。
- “STaR 只要题目和答案,什么都能学会。” 起点模型在某类题上一次都做不对时,留下来的只有蒙对的思考链,学不到东西。
- “一个神经元对应一个概念。” 叠加让一维里塞进好几个特征(我们:5 维放下 9–11 个)。
10. 练习 · Exercises
练习 1(多数投票)。 一个模型每次答对的概率是 0.6,答错时等可能地给出另外 9 个答案之一。采样 3 次多数投票(三个都不同时取第一个),答对的概率是多少?
参考答案
至少两次答对:;只有第一次答对、另外两个错且不相同(此时三个各不相同,取第一个):。共 0.733。投票的收益来自”错误答案分散、正确答案集中”;如果错误答案也集中在某一个值上,投票就不灵了。
练习 2(GRPO 的优势)。 一组 8 个回答的奖励是 [1.1, 1.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1](两个答对,所有格式都对)。用样本标准差算每个回答的优势。如果 8 个都答对呢?
参考答案
均值 0.35,样本标准差 0.463:答对的 ,答错的 。8 个都答对时奖励全相同、优势全为 0——这道题不提供任何学习信号(太容易或太难的题都一样)。所以 GRPO 的训练数据要”难度合适”,很多工作会筛掉全对或全错的题。
练习 3(为什么不减基线会变懒)。 用 §5.4 的设定解释:只有正奖励时,REINFORCE 的梯度期望为什么会增加”已经很常见的行为”的概率?加一个常数基线 为什么不改变梯度的期望、却改变了这件事的结果?
参考答案
梯度 :每个被采到的 都被往上推 的量。期望上它等于 ——方向本身没错,但单次估计里,被采到的(常见的)行为总是被推高,没被采到的被动地变低;在小批量、有限步数下,这让分布向常见行为集中(“富者愈富”),尤其是常见行为的奖励并不低时(我们的直接回答在易题上是对的,答错也有 0.1)。减去基线后 同一个期望(因为 ),但单次估计里低于平均的回答被往下推,方差小得多,学习的方向更接近真实梯度。
练习 4(STaR 的蒙对率)。 一个模型的思考链有一半是错的;错的思考链的答案在 10 个数字上均匀分布。STaR 留下的思考链里,蒙对的占多少?
参考答案
留下的 = 对的 0.5 + 蒙对的 ,蒙对的占 。思考链对的比例越低,这个比例越高:只有 10% 写对时,蒙对的占 ——这就是我们第一版”从 k ≤ 4 扩展”失败的原因。
练习 5(显存)。 用 §5.2 的算法,策略是 70B 时 PPO 和 GRPO(规则奖励)各要多少显存(不算激活值)?
参考答案
70B × 16 字节 = 1120 GB(策略);参考模型 140 GB;奖励模型 140 GB;价值模型 1120 GB。PPO ≈ 2520 GB,GRPO ≈ 1260 GB。每一项都还要用第 17 讲的 ZeRO / 张量并行切到很多块 GPU 上。
练习 6(叠加)。 玩具模型里,ReLU、S = 0.99 时每个特征占 0.39 维、表示了 11 个特征。(a) 约是多少?(b) 为什么线性模型永远只表示 5 个?
参考答案
(a) 每个特征占的维数定义为 ,所以 (11 个特征的 都略大于 1)。(b) 线性输出时 , 的秩最多是 5,最小化加权平方误差的解就是保留最重要的 5 个方向(主成分);任何串扰都直接进入输出、没法被截掉,所以叠加从来不划算。
11. 延伸阅读 · Further reading
- 思维链与测试时计算:Wei et al. (2022);Kojima et al. (2022);Wang et al. (2023), Self-Consistency;Lightman et al. (2023), Let’s Verify Step by Step(过程奖励);Snell et al. (2024), Scaling LLM Test-Time Compute Optimally。
- 自举与 RL:Zelikman et al. (2022), STaR;Shao et al. (2024), DeepSeekMath(GRPO);DeepSeek-AI (2025), DeepSeek-R1;Lambert et al. (2024), Tülu 3(RLVR);Liu et al. (2025), Understanding R1-Zero-Like Training(Dr. GRPO:组内标准化和长度归一化的偏差)。
- 可解释性:Elhage et al. (2022), Toy Models of Superposition;Bricken et al. (2023), Towards Monosemanticity;Templeton et al. (2024), Scaling Monosemanticity;Ameisen et al. (2025), Circuit Tracing;Lindsey et al. (2025), On the Biology of a Large Language Model。
12. 下一讲预告 · Next lecture
第 21 讲:状态空间模型与混合模型。推理模型要写很长的思考、长上下文要读很长的输入——而 Transformer 的 KV 缓存随长度线性增长(第 19 讲 §1.3)。有没有一种模型,训练时像 Transformer 一样并行,推理时像 RNN 一样只用常数大小的状态?状态空间模型(S4、Mamba)给出了肯定的回答:同一个模型有连续、递推、卷积三种写法。我们会看到线性注意力和 SSM 其实是一回事,也会看到”固定大小的状态”在联想记忆任务上的极限——以及为什么 Jamba、Nemotron-H、Qwen3-Next 都选择把少量注意力层和大量线性层混在一起。