对应:Stanford CS329A Autumn 2025 Lecture 15(Mon 11/10),客座讲座:Denny Zhou(Google DeepMind),题目 LLM Reasoning。课程主页没有列阅读材料,也没有公开这次的幻灯片。讲者在 2025 年 4 月 Stanford CS25 上做过同名的公开演讲(幻灯片公开在讲者的主页上),本讲依据那份幻灯片的主线和其中引用的论文编写。第 6 节的”局限”来自讲者团队的三篇论文(讲者在 2024 年的公开课程里也讲过这部分)。不代表这次课堂的具体内容。 配套代码:
code/lecture12/(只用 Python 标准库,每个文件 1 秒以内) 预计阅读时间:2.5 小时(含运行代码)
0. 本讲导航
0.1 学完本讲,你应该能够
- 说出讲者对”LLM 推理”的定义:输入和输出之间的中间 token;以及”中间 token 为什么重要”的理论结论(常数深度的 Transformer + O(T) 个中间 token 能解决电路规模为 T 的问题)。
- 说出引出推理的三类方法:提示(few-shot CoT、“Let’s think step by step”、least-to-most)、解码(CoT-decoding)、训练(SFT → RL finetuning),以及每类的优缺点。
- 说出 CoT-decoding 怎样做:在第一个 token 处分支,按答案的置信度 Δ 挑选;以及它说明了什么:“预训练模型本来就会推理,只是贪心解码没走到”。
- 解释讲者为什么说 RL finetuning 胜过 SFT、可靠的 verifier 比 RL 算法更重要。
- 用”边缘化”解释 self-consistency:LLM 解码的是 ,我们要的是 。
- 说出推理的三个局限:被无关信息干扰、对前提的顺序敏感、没有外部反馈时不能自我纠正;并能说出最后一个和第 1、3 讲的 generation–verification gap 的关系。
0.2 先修知识
| 知识点 | 用在哪里 | 最低要求 |
|---|---|---|
| 第 1 讲 | 第 1、3 节 | toy world 的 CoT vs direct、depth capacity;随机错误 vs 系统错误 |
| 第 2 讲 | 第 5 节 | self-consistency(多数投票)、revise |
| 第 3 讲 | 第 4、6 节 | verifier;generation–verification gap |
| 第 6 讲 | 第 4 节 | STaR、RLVR |
0.3 本讲地图
第1节 什么是 LLM 的推理:中间 token;为什么中间 token 重要(理论)
第2节 用提示引出推理:CoT 提示、zero-shot CoT、least-to-most
第3节 不用提示:CoT-decoding ← 代码 01
第4节 训练出推理:SFT、RL finetuning、verifier 是关键
第5节 聚合与检索:self-consistency 是边缘化;USC;类比与 step-back
第6节 三个局限:无关信息、前提顺序、自我纠正 ← 代码 02
第7节 讲者的总结与展望
第8–11节 小结、练习、延伸阅读、下一讲预告
0.4 本讲的代码
01_cot_decoding.py:一个没有被提示的模型,第一个 token 的 10 个候选里,概率最高的是”直接回答”,其余有一半是”推理的开头”。比较贪心、按长度挑、CoT-decoding(最大 Δ / 按答案聚合 Δ)、不提示的自洽性、CoT 提示、CoT 提示 + 自洽性。02_reasoning_limits.py:三个局限的 toy 演示。每个演示加了一个设定的机制(打乱顺序让”找前提”更难、无关的话有一定概率被算进去、复查时被暗示”有问题”),演示的是机制带来的后果。
关于本讲的数字:论文里的数字注明出处;模拟实验的数字都来自 01、02 号代码的实际输出(固定随机种子,Python 3.9 与 3.13 逐字相同)。
1. 什么是 LLM 的推理
1.1 中间 token
讲者给出一个非常朴素的定义:推理 = 输入和输出之间的中间 token(intermediate tokens)。
例子(讲者常用的”末字母拼接”任务):问”把 artificial intelligence 每个词的最后一个字母拼起来是什么?”
- 不推理:“答案是 le。”
- 推理:“artificial 的最后一个字母是 l,intelligence 的最后一个字母是 e,拼起来是 le。所以答案是 le。”
用自然语言写出中间步骤,最早可以追溯到 Ling et al. 2017(AQuA 数据集,用自然语言的”理由”解代数应用题)。在那之前,中间步骤通常用符号语言(程序、逻辑式)表示——讲者早年也做过神经符号的程序合成。
这个定义刻意不谈”模型是不是真的在思考”。它只关心一件可以观察、可以操作的事:模型在给出答案之前,有没有生成中间 token。
1.2 为什么中间 token 重要:一个理论结果
Li, Liu, Zhou & Ma(ICLR 2024)证明了:
- 对任何能用规模为 T 的布尔电路解决的问题,常数大小的 Transformer 生成 O(T) 个中间 token 就能解决;
- 如果直接生成最终答案(不写中间 token),要么需要非常深的网络,要么根本解决不了(常数深度、有限精度的 Transformer 只能解决一类很”浅”的、可以高度并行的问题)。
直觉:Transformer 一次前向传播的串行计算步数受层数限制。很多问题本质上是串行的(例如多步算术:第 3 步要用第 2 步的结果)。写出中间 token,等于把”这一步的结果”存进上下文,下一个 token 的前向传播可以接着算——用输出的长度换取计算的深度。
第 1 讲的 toy world 正是这样设计的:direct 模式下,一次前向传播能可靠完成的步数(depth_capacity)有限,超出的步骤错误率大增;CoT 模式把每一步摊到不同的 token 上。
讲者从这个结果引出一个问题:扩展推理能力时,该扩展什么? 答案是扩展输出的长度(更多的中间 token),而不只是扩展模型的深度——这就是第 2 讲 test-time compute 和今天”推理模型”思考很长的理论依据。
注意:这里的”chain of thought”指的是中间 token 本身,和”CoT 提示”(一种引出中间 token 的方法)是两回事。讲者特别强调不要混淆。
2. 用提示引出推理
2.1 Few-shot CoT 提示
Wei et al. 2022:在提示里放几个带推理过程的例子,模型就会模仿着先推理再回答。在 PaLM 540B 上,GSM8K 从约 18%(标准提示)提高到约 57%。
2.2 Zero-shot CoT:“Let’s think step by step”
Kojima et al. 2022:不需要例子,只在问题后面加一句”Let’s think step by step”。在 MultiArith 上,text-davinci-002 从 17.7% 提高到 78.7%。
2.3 Least-to-most 提示
Zhou et al. 2023:先让模型把问题分解成一系列更简单的子问题,再按顺序逐个解决,前面子问题的答案作为后面的输入。它的目标是组合泛化(compositional generalization):测试题比例子里的题更难、更长时,CoT 提示容易失败,least-to-most 更稳。在 SCAN(把指令翻译成动作序列的组合泛化任务)上,用 14 个例子达到 99.7%,CoT 提示只有约 16%。第 5 讲的 ADaPT(按需分解)是这个思路在 agent 上的延伸。
2.4 提示的优缺点
讲者的评价:
- 优点:简单、有效。
- 缺点:few-shot CoT 需要针对任务写例子;“Let’s think step by step”通用,但比 few-shot 差很多。
- 而且提示的方式很奇怪:你问别人一个问题时,会先给他看几道类似的题和解答吗?会在问题末尾加一句”让我们一步一步地想”吗?当然不会。一个真正会推理的模型,不应该需要这些。
这引出了下一个问题:不提示,模型会不会推理?
3. 不用提示:CoT-decoding
3.1 “常见的看法是错的”
常见的看法是:预训练模型不经过提示工程或微调,就不会推理。讲者的回答是:错。预训练模型已经准备好推理了,需要的只是解码。
例子:问预训练模型”我有 3 个苹果,爸爸比我多 2 个,我们一共有几个?”
- 贪心解码(第一个 token 选概率最高的):“5 个苹果。“——错了。
- 但如果第一个 token 换成第 2、第 3……名的候选,后面接着贪心解码,会出现:“我有 3 个苹果,爸爸比我多 2 个,所以他有 5 个。3 + 5 = 8。我们一共有 8 个苹果。”
推理路径本来就在模型的解码空间里,只是贪心解码没有走到它们。 原因可以这样理解:预训练语料里,大量的问答是直接给出答案的;但也有不少文本是一步一步推理的。第一个 token 决定了模型”进入”哪一种模式。
3.2 怎样挑:按长度?按置信度
在第一个 token 处取 top-k 个候选(论文里 k = 10),每个候选后面接着贪心解码,得到 k 条路径。怎样挑出好的那条?
- 按长度:有推理的路径更长。但长的路径不一定对(例如”……3 + 5 = 8。答案是 5”)。
- 按答案的置信度:Wang & Zhou(NeurIPS 2024)发现,有推理的路径,模型对最终答案的置信度明显更高。定义
即在答案的每个 token 上,第 1 名和第 2 名候选的概率差,再取平均。选 Δ 最大的路径。还可以把答案相同的路径的 Δ 加起来,选总和最大的答案(“聚合”)。
3.3 论文的结果
- GSM8K:Mistral-7B 从 9.9%(贪心)提高到 25.1%(CoT-decoding);PaLM-2 Large 从 34.8% 提高到 63.2%。
- 不需要任何提示,也不需要微调;对指令微调过的模型也有提升。
- 推理路径出现得越频繁的任务(在预训练语料里常见的任务),CoT-decoding 越有效;在高度合成、预训练中少见的任务上,推理路径很少出现在 top-k 里。
3.4 toy world 里的 CoT-decoding
01 号代码的设定:200 道 36 步的题。第一个 token 的 10 个候选,概率按排名指数下降;第 1 名总是直接回答,第 210 名各有 50% 的概率是推理的开头。分支之后用 temperature 0.7 继续解码(toy world 里的贪心解码不现实地强,前几讲都这样处理)。Δ 的计算:CoT 路径看写最后一步时模型对结果的分布;直接回答的路径用 64 次采样估计答案的分布。
实际输出(准确率):
| 做法 | 1B | 10B | 100B |
|---|---|---|---|
| 贪心(不提示) | 0.055 | 0.310 | 0.660 |
| 按长度挑(第一条有推理的路径) | 0.220 | 0.520 | 0.875 |
| CoT-decoding(最大 Δ) | 0.265 | 0.540 | 0.900 |
| CoT-decoding(按答案聚合 Δ) | 0.280 | 0.675 | 0.975 |
| 自洽性(不提示,10 个样本) | 0.200 | 0.520 | 0.860 |
| CoT 提示(1 个样本) | 0.195 | 0.620 | 0.850 |
| CoT 提示 + 自洽性(10 个样本) | 0.350 | 0.715 | 0.975 |
| 10 个分支的覆盖率(oracle) | 0.560 | 0.900 | 0.995 |
分支的诊断:
| 1B | 10B | 100B | |
|---|---|---|---|
| CoT 分支:正确率 / 平均 Δ | 0.210 / 0.234 | 0.554 / 0.599 | 0.842 / 0.824 |
| 直接回答分支:正确率 / 平均 Δ | 0.062 / −0.076 | 0.255 / −0.016 | 0.629 / 0.238 |
| 答对 / 答错的 CoT 分支:平均 Δ | 0.411 / 0.187 | 0.726 / 0.441 | 0.877 / 0.545 |
读这两张表:
- 不提示也能推理:只要在第一个 token 处多看几个候选,按 Δ 挑一条,1B 从 0.055 提高到 0.265,和论文里 Mistral-7B 的 9.9% → 25.1% 是同一个现象。
- Δ 为什么有用:CoT 分支的平均 Δ 远高于直接回答分支(直接回答时,答案是”在脑子里”一次算完的,分布很分散);答对的 CoT 分支又高于答错的。
- Δ 的局限:它只看答案 token。如果错误发生在前面的步骤,最后一步仍然可以”很自信地”算出一个错的答案。所以按 Δ 挑只比”随便挑一条有推理的路径”好一点点(0.540 vs 0.520)。
- 聚合明显更好(10B:0.540 → 0.675):把答案相同的路径加起来,就是第 5 节要讲的”对推理路径求边缘分布”。
- 和提示相比:同样是 10 条路径,聚合后的 CoT-decoding 好于不提示的自洽性;1B、10B 上不如”CoT 提示 + 自洽性”(提示让 10 条路径都先推理),100B 上打平。分支的覆盖率(oracle)高得多——挑选仍是瓶颈(第 2、3 讲的老问题)。
3.5 讲者从中得到的问题
CoT-decoding 说明推理能力”藏”在预训练模型里。讲者接着问:能不能重塑模型的输出分布,让有推理的回答自然地排到第 1 名? 提示是一种办法(第 2 节),但更根本的办法是训练。
4. 训练出推理:从 SFT 到 RL finetuning
4.1 SFT:用人写的解答训练
做法:收集一批问题和人写的分步解答,最大化模型生成这些解答的似然,然后到处使用。代表工作:Ling et al. 2017、Cobbe et al. 2021(GSM8K,同时提出训练 verifier)、Nye et al. 2021(scratchpad)。
讲者的评价:通用,但泛化不好,而且扩大规模帮助不大。例子:用”末字母拼接”和”苹果问题”的分步解答微调之后,问”strawberry 里有几个 r”,模型未必会。模型学到的是这些解答的样子,而不是解题的能力。
4.2 RL finetuning:用模型自己生成的解答训练
把 SFT 的第一步换掉:
- 收集一批问题,让模型自己生成分步解答;
- 提高正确解答的似然,降低错误解答的似然;
- 重复。
这就是第 6 讲的 STaR(只保留正确的)和 RLVR(正确的加分、错误的减分)。讲者提到这个做法被几个团队独立发现;学术文献里较早的一篇是 ReFT(Luong et al. 2024,Reasoning with Reinforced Fine-Tuning)。
为什么用模型自己生成的、而不是人写的? 讲者给出的理由是机器学习的第一原理:直接优化你想要的东西。我们想要的是”模型生成的回答的质量”(数学题的正确率、翻译的 BLEU 等)。SFT 优化的是”模仿人写的回答”,只是间接的代理;RL finetuning 直接对”模型生成的回答的质量”做梯度上升,其余的只是计算梯度的技术细节。
另一个直觉(第 6、9 讲也讨论过):人写的解答来自人的分布,未必是模型最容易学会、最容易泛化的推理方式;模型自己生成的正确解答,是它”够得着”的推理方式。
4.3 Verifier 是关键
讲者引用 Rich Sutton 2001 年的一篇短文的标题:“Verification, the key to AI”,并给出一个判断:在 RL finetuning 里,可靠的 verifier 比 RL 算法本身更重要。
这和整门课的主线一致:
- 第 3 讲:verifier 的强弱决定了 best-of-N 和 PRM 引导搜索的上限;
- 第 6 讲:粗糙的 verifier 会让 STaR 学到错误的推理;
- 第 9 讲:奖励能被钻空子,RL 就会钻;
- 第 10 讲:软件工程最先成功,因为有测试。
RL finetuning 的优缺点因此是:在能自动验证的任务上泛化得很好;但不是所有任务都能自动验证。
4.4 “推理之美”
讲者展示了 Gemini 2.0 thinking 模式(2024 年 12 月)解一道题的思考过程:用 1 到 10 每个数恰好一次、只用加法和乘法,凑出 2025。模型的思考是这样展开的:“2025 是一个比较大的数,乘法应该是主要的……2025 = 45 × 45,这给了我们一个量级感……”最后找到 (10 × 4 + 5) × (9 × 3 + 8 + 7 + 2 + 1) = 45 × 45。
讲者的评论:像人一样的推理过程,是从逐个 token 的生成中涌现出来的,而不是像经典 AI 那样依赖穷举搜索。 他对比了深蓝(1997 年击败卡斯帕罗夫的国际象棋程序):卡斯帕罗夫事后说,深蓝的”智能”和一个可编程的闹钟差不多。并引用 Sutton 的《苦涩的教训》(The Bitter Lesson):我们想要的是能像人一样去发现的 AI,而不是装着我们已有发现的 AI。
5. 聚合与检索
5.1 解码的目标和我们的目标不一致
讲者提醒:永远记住,LLM 是被训练来预测下一个 token 的概率模型,不是人。
“先生成推理、再给出答案”这个范式里,贪心(或接近贪心)的解码在找的是
即最可能的”推理 + 答案”组合。但我们真正想要的是
即最可能的答案,不管它是通过哪条推理路径得到的。两者不一致:一个答案可能有很多条各自概率不高的推理路径支持,加起来却是最可能的答案。
5.2 Self-consistency 就是边缘化
修正的办法是边缘化(marginalization):对推理路径求和。精确求和做不到,就用采样近似:
- 随机采样多个回答(每个都有推理和答案);
- 选出现次数最多的答案(不是最常见的推理路径)。
这就是 self-consistency(Wang et al. 2023,第 2 讲)。在 PaLM 540B 上,GSM8K 从 56.5%(CoT 提示)提高到 74.4%。01 号代码里”按答案聚合 Δ”比”最大 Δ”好得多,也是同一个道理。
讲者还观察到:一致性越高,准确率越高。投票里第一名的得票比例可以作为一个很好的置信度:得票集中的题,答案多半是对的。
讲者留了两个问题(答案见练习 3):
- Q1:如果模型不写中间步骤、直接给答案,还要采样多次、选最常见的答案吗?
- Q2:如果让模型一次生成多个回答(而不是独立采样多次),再选最常见的答案,这样做有道理吗?
5.3 Universal self-consistency
答案是自由文本(例如”哪些国家的人比墨西哥人喝的咖啡少?“)时,没法数”相同的答案”。Universal self-consistency(Chen et al. 2023)让 LLM 自己读所有回答,选出和其他回答最一致的那个。这把”投票”推广到了没有唯一标准答案的任务。
5.4 检索 + 推理
“推理还是检索?“讲者的回答:两个都要。
- 类比提示(analogical prompting,Yasunaga et al. 2024):让模型先”回忆一个相关的问题”,再解当前的问题。例子:求四个顶点坐标给定的正方形的面积,模型先回忆”两点间距离公式”,再用它算边长。
- Step-back 提示(Zheng et al. 2024):先退一步,问更抽象的问题(“这道题涉及哪些物理原理?”),再用答案指导具体的推理。
- 第 8 讲的 Search-o1 是”推理中途主动检索外部知识”的版本。
6. 三个局限
讲者在多次公开演讲里强调:理解推理的局限,和理解它的能力一样重要。下面三个局限都来自讲者团队的论文。
6.1 前提的顺序
Chen et al. 2024(Premise Order Matters in Reasoning with Large Language Models):把题目里前提的顺序打乱,逻辑上题目完全不变,但 LLM 的准确率可以下降超过 30%。前提的顺序和推理需要的顺序一致时,模型表现最好。他们据此构建了 R-GSM(打乱顺序的 GSM8K)。
人不太受这种影响:我们会先通读题目,整理好前提再推理。LLM 是按顺序读、按顺序生成的,前提的位置会影响它”找到”需要的信息。
toy 演示(02 号代码演示 1):6 步的题,各步打乱顺序写出(标着”第几步”)。设定的机制:下一个需要的前提不紧跟在上一个后面时,这一步更难(correct 的 logit 减去 0.2 × 跳过的位置数,最多 3 份)。
| 前提的顺序 | 准确率 |
|---|---|
| 原顺序 | 0.396 |
| 轻微打乱(逆序对 1~4) | 0.333 |
| 大幅打乱(逆序对 5~10) | 0.278 |
| 完全倒序 | 0.266 |
倒序时准确率相对下降约三分之一,和论文的量级相当。这个机制是我们设定的,所以 toy 只是在说明”如果找前提有代价,打乱顺序就会这样伤害准确率”。
6.2 无关的信息
Shi et al. 2023(Large Language Models Can Be Easily Distracted by Irrelevant Context):在数学应用题里加一句和问题无关的话(GSM-IC 数据集),模型的准确率明显下降。缓解办法包括:在提示里明确说”忽略无关的信息”、self-consistency、在 few-shot 例子里也放上无关信息。
toy 演示(02 号代码演示 2):每道题插入 2 句无关的话,每句有一个”迷惑性” c(每道题固定)。设定的机制:模型每次以 sigmoid(6 × (c − 0.85) − 指令效果) 的概率把它当成一步算进去。
| 设定 | 1 个样本 | 自洽性(10 个) |
|---|---|---|
| 没有无关的信息 | 0.560 | 0.720 |
| 有无关的信息 | 0.275 | 0.520 |
| 有无关的信息 + 提示”忽略无关信息” | 0.485 | 0.680 |
按迷惑性拆开(有无关的信息、不加提示,重新采样):
| 题目 | 1 个样本 | 自洽性(10 个) |
|---|---|---|
| 两句话的迷惑性都 ≤ 0.85(156 道) | 0.397 | 0.558 |
| 至少一句的迷惑性 > 0.85(44 道) | 0.136 | 0.205 |
读这两张表:
- 两句无关的话让准确率大约减半;提示”忽略无关信息”挽回一大部分。
- 自洽性对两种错误的作用不同:迷惑性不高的句子只是有时被算进去(随机错误),投票能消掉大部分;迷惑性高的句子大多数时候被算进去(系统错误),多数票就是错的,投票几乎帮不上忙。这又是第 1 讲”随机错误 vs 系统错误”的区别。
6.3 没有外部反馈的自我纠正
Huang et al.(ICLR 2024,Large Language Models Cannot Self-Correct Reasoning Yet)研究了内在自我纠正(intrinsic self-correction):模型回答后,被要求”检查你的答案,找出问题”,再”根据找到的问题改进答案”——没有任何外部反馈(没有测试、没有工具、没有标准答案)。
结果:
- GPT-3.5 在 GSM8K 上:75.9%(初始)→ 75.1%(第 1 轮)→ 74.7%(第 2 轮);在 CommonSenseQA 上:75.8% → 38.1%(第 1 轮)。不但没有提升,还会下降——模型把对的答案改成了错的。
- 一些早期论文报告的”自我纠正”提升,用了标准答案来决定什么时候停止(答对了就不再纠正)。这样的提升在部署时是拿不到的。用了这种 oracle 标签,GPT-3.5 在 CommonSenseQA 上可以从 75.8% 提高到 89.7%。
- 多 agent 辩论(multi-agent debate)的提升,在相同的回答数下,并不比 self-consistency 更好。
toy 演示(02 号代码演示 3):2000 道题,10B 模型。
- 内在自我纠正:用同样的温度重算;结果不同就以 80% 的概率改成新结果;被暗示”有问题”,即使两次结果相同也有 15% 的概率”找到一个问题”而改错(设定的机制)。
- 复查比生成更可靠:用低温(0.3)重算,不被暗示”有问题”。
- oracle:只有答错时才让模型自我纠正。
| 做法 | 第 0 轮 | 第 1 轮 | 第 2 轮 | 对→错 | 错→对 |
|---|---|---|---|---|---|
| 内在自我纠正 | 0.550 | 0.504 | 0.484 | 734 | 601 |
| 复查比生成更可靠(低温重算) | 0.550 | 0.696 | 0.728 | 203 | 557 |
| 用标准答案决定要不要改(oracle) | 0.550 | 0.692 | 0.771 | 0 | 442 |
读这张表:
- 内在自我纠正越改越差:模型用和生成时一样不可靠的方式”复查”,把错的改对的同时,也把对的改错(734 次 vs 601 次)。不难证明:如果复查只是”同一个分布里再采一次”,平均效果是 0;再加上”被暗示有问题”的偏差,就变成负的。
- 复查本身更可靠时,自我纠正才有用。第 2 讲的
revise能提升,正是因为低温复查比生成更可靠——有 generation–verification gap(第 1、3 讲),而不是因为”自我纠正”本身有什么魔力。 - oracle 的提升是假的:对的永远不会被改错,准确率单调上升。评估一个自我纠正方法时,要检查它有没有偷偷用到标准答案。
和第 4 讲的对比:有外部反馈(执行结果、工具、测试)时,自我修改非常有效(RLEF、Reflexion、CodeMonkeys)。关键不在于”自己改”,而在于改的依据是否带来了新的、可靠的信息。
7. 讲者的总结与展望
讲者用四个”大于号”总结:
- 推理 > 不推理:中间 token 让模型能解决串行的问题(第 1 节)。
- RL finetuning > SFT:直接优化生成的质量;前提是有可靠的 verifier(第 4 节)。
- 聚合多个回答 > 单个回答:对推理路径求边缘分布(第 5 节)。
- 检索 + 推理 > 只推理(第 5.4 节)。
下一个大的突破在哪里?讲者的两个方向:
- 解决没有唯一可验证答案的任务(写作、研究、设计……)——RL finetuning 的优势在这些任务上还用不上(第 14 讲的 GDPval、第 17 讲的开放问题)。
- 构建真实的应用,而不只是解 benchmark。
讲者最后引用费曼:“真相总是比你想的更简单。“整场演讲的风格也是如此:用最朴素的定义(中间 token)、最朴素的原则(直接优化你想要的东西;对推理路径求和),解释了推理模型为什么有效。
8. 小结
- 推理 = 中间 token。理论上,常数大小的 Transformer 写 O(T) 个中间 token 就能解决规模为 T 的电路能解决的问题;不写中间 token 则需要很深的网络或根本解决不了。扩展推理 = 扩展输出长度。
- 提示(few-shot CoT、zero-shot CoT、least-to-most)简单有效,但需要针对任务设计,而且”很奇怪”。
- CoT-decoding:在第一个 token 处取 top-k 分支,按答案的置信度 Δ 挑选。预训练模型本来就会推理,贪心解码只是没走到(Mistral-7B 的 GSM8K:9.9% → 25.1%)。toy world 里 1B 从 0.055 到 0.265;Δ 和”有没有推理""推理对不对”都相关,但只看答案 token,看不到前面的错误;按答案聚合 Δ 明显更好。
- 训练:SFT 泛化不好;RL finetuning 直接优化生成的质量,泛化好;可靠的 verifier 比 RL 算法更重要;局限是不是所有任务都能自动验证。
- 聚合:LLM 解码找的是最可能的”推理 + 答案”,我们要的是最可能的答案;self-consistency 用采样做边缘化(PaLM 540B GSM8K:56.5% → 74.4%);一致性越高,准确率越高;USC 推广到自由文本。检索 + 推理:类比提示、step-back。
- 局限:前提的顺序(打乱可以下降超过 30%)、无关的信息(自洽性只能消掉随机的干扰,消不掉系统的干扰)、没有外部反馈的自我纠正(GPT-3.5 GSM8K 75.9% → 74.7%;oracle 标签会制造虚假的提升)。自我纠正有没有用,取决于复查是否比生成更可靠、是否带来了新的信息。
9. 练习
1. 中间 token 与深度(第 1.2 节) (a) 用自己的话解释:为什么”把 k 步运算压缩进一次前向传播”比”每个 token 只做一步”难? (b) 在第 1 讲的 toy world 里,100B 模型 direct 模式能可靠完成 4 步。01 号代码里 100B 的”贪心(直接回答)“是 0.660,比 1B、10B 高得多。为什么?如果题目都是 8 步的,你预计会怎样?
参考答案
(a) Transformer 一次前向传播的串行计算受层数限制;多步算术每一步都依赖上一步的结果,是串行的。写出中间结果后,下一步的前向传播可以从”已经写在上下文里”的结果继续算,每个 token 只需要完成一步。 (b) 100B 的 depth capacity 是 4,3~6 步的题里有不少完全在能力范围内,direct 模式也能做对;1B 只有 2 步。题目都是 8 步时,100B 的直接回答也会大幅下降,CoT 的优势会更明显。
2. CoT-decoding 的置信度(第 3.2、3.4 节) (a) 为什么”直接回答”路径的 Δ 通常很小? (b) 构造一个例子:一条 CoT 路径的 Δ 很高,但答案是错的。 (c) 为什么”按答案聚合 Δ”比”最大 Δ”好?它和 self-consistency 有什么关系?
参考答案
(a) 直接回答时,模型要在一次前向传播里完成全部计算,对答案的分布很分散(每一步都可能出错,错的方式又各不相同),第 1 名和第 2 名的概率差小。 (b) 前面某一步手滑(例如 23 × 4 写成 82),后面的步骤在这个错误的中间结果上正确地算下去。最后一步的计算本身很确定,所以 Δ 很高,但答案是错的。Δ 只看答案 token,看不到前面的错误。 (c) 多条路径得到同一个答案,是这个答案”更可能”的证据;聚合相当于对推理路径求和(边缘化)。self-consistency 用的是等权投票,聚合 Δ 是用置信度加权的投票。
3. 讲者的两个问题(第 5.2 节) (a) Q1:模型直接给答案(不写推理)时,采样多次再投票有意义吗? (b) Q2:让模型一次生成多个回答,再选最常见的答案,有道理吗?
参考答案
(a) 意义不大。self-consistency 的作用是对推理路径求和;直接回答没有推理路径可以求和,采样投票只是在近似”答案分布的众数”,而这个分布本身就是模型一次前向传播给出的(直接看概率最高的答案即可,和贪心解码差不多)。在 01 号代码里,直接回答的准确率本来就低,投票改变不了”一次前向传播算不对”的事实。 (b) 没有道理。一次生成的多个回答不是从 里独立采样的:后面的回答会受前面回答的影响(倾向于重复或刻意不同),投票就不再是对边缘分布的估计。
4. 系统性的干扰(第 6.2 节) (a) 用 02 号代码演示 2 的数字说明:为什么自洽性对迷惑性高的句子几乎没用? (b) 提出一种能对付系统性干扰的方法(提示:第 5 讲的分解、或者让模型先”列出和问题有关的信息”)。在 02 号代码里怎样模拟它?
5. 自我纠正的算术(第 6.3 节) 假设模型在某道题上的正确率是 p,复查 = 从同一个分布里再采样一次,两次不同就以概率 s 改成新的答案(假设错的答案各不相同)。 (a) 证明:一轮之后,这道题的期望正确率不变。 (b) 如果复查的正确率是 q > p(更可靠的复查),一轮之后的期望正确率是多少? (c) 这和第 1 讲的 generation–verification gap 有什么关系?
参考答案
(a) 原来对(概率 p)、复查错(1 − p)、改掉(s):损失 。原来错(1 − p)、复查对(p)、改掉(s):收益 。两者相等,期望不变。 (b) 损失 ,收益 ,新的正确率 。q > p 时提升,q < p 时下降。 (c) 自我纠正有用的前提是”检查”比”生成”更可靠(q > p),这正是 generation–verification gap。没有外部反馈时,同一个模型的”检查”未必比”生成”可靠。
6. 识别 oracle 泄漏(第 6.3 节) 你读到一篇论文:“我们的自我纠正方法在 GSM8K 上把准确率从 70% 提高到 85%,最多纠正 3 轮,答对后停止。“你会问作者哪些问题?
参考答案
“答对后停止”是怎么判断的——是用标准答案,还是模型自己判断?如果用了标准答案,提升至少一部分是 oracle 泄漏。还要问:和相同计算量的 self-consistency(例如 4 个样本投票)比较过吗?报告过”对→错”的次数吗?
7. 动手改代码
(a) 01 号代码:把 P_COT_BRANCH 从 0.5 改成 0.2(推理路径更少出现在 top-k 里,对应”预训练中少见的任务”),CoT-decoding 的提升还剩多少?
(b) 02 号代码演示 3:把 PHANTOM 改成 0(没有”暗示有问题”的偏差),内在自我纠正的结果会怎样?和练习 5(a) 的结论一致吗?
(c) 02 号代码演示 1:给模型加一个”先把前提按顺序整理好”的步骤(例如:整理时每个前提以 5% 的概率抄错运算数),整理之后按原顺序计算。打乱顺序的伤害还剩多少?
10. 延伸阅读
讲者的公开演讲
- Denny Zhou. LLM Reasoning. Stanford CS25: Transformers United V5, 2025-04-29.(幻灯片在讲者的主页上)
本讲引用的论文
- Ling et al. 2017. Program Induction by Rationale Generation: Learning to Solve and Explain Algebraic Word Problems.
- Li, Liu, Zhou & Ma 2024. Chain of Thought Empowers Transformers to Solve Inherently Serial Problems.(ICLR 2024)
- Wei et al. 2022. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.
- Kojima et al. 2022. Large Language Models are Zero-Shot Reasoners.
- Zhou et al. 2023. Least-to-Most Prompting Enables Complex Reasoning in Large Language Models.
- Wang & Zhou 2024. Chain-of-Thought Reasoning Without Prompting.(NeurIPS 2024)
- Cobbe et al. 2021. Training Verifiers to Solve Math Word Problems.
- Luong et al. 2024. ReFT: Reasoning with Reinforced Fine-Tuning.
- Wang et al. 2023. Self-Consistency Improves Chain of Thought Reasoning in Language Models.(ICLR 2023)
- Chen et al. 2023. Universal Self-Consistency for Large Language Model Generation.
- Yasunaga et al. 2024. Large Language Models as Analogical Reasoners.(ICLR 2024)
- Zheng et al. 2024. Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models.(ICLR 2024)
- Chen et al. 2024. Premise Order Matters in Reasoning with Large Language Models.(ICML 2024)
- Shi et al. 2023. Large Language Models Can Be Easily Distracted by Irrelevant Context.(ICML 2023)
- Huang et al. 2024. Large Language Models Cannot Self-Correct Reasoning Yet.(ICLR 2024)
11. 下一讲预告
第 13 讲:迈向超人推理——AlphaProof、AlphaGeometry 与 IMO 金牌(客座:Thang Luong,Google DeepMind)
本讲的结论之一是”可靠的 verifier 是关键”。数学证明有一个完美的 verifier:形式化证明助手 Lean。第 13 讲讨论:
- AlphaGeometry:没有人类示范,用 1 亿个合成的定理和证明训练语言模型,让它提出”辅助构造”,交给符号推演引擎;
- AlphaProof:把一百万道自然语言的题自动形式化成 Lean,用 AlphaZero 式的 RL 训练证明器,比赛时还在测试时做 RL;IMO 2024 银牌水平;
- Gemini Deep Think:IMO 2025 用自然语言、在 4.5 小时内拿到金牌分数——不再依赖形式化。完美的 verifier 带来了什么,又付出了什么代价?