上一章《RLVR 与 GRPO》用 RL 把模型的
2022 年有个发现简单到让人怀疑:
在提示词末尾加一句「Let's think step by step」,同一批数学题的正确率从 17.7% 跳到 78.7%
(MultiArith 数据集,Kojima 2022)。模型没有变,参数没有变,只是被要求把过程写出来——
这种写法后来叫
互动 · 同一道题,两种问法
为什么写出来就有用?因为 Transformer 是固定层数的。它做一次前向,能完成的"计算量"是固定的——
大概是几十亿次乘加,听起来很多,但一道需要 5 步、且每一步都依赖上一步的题,一次前向就算不完。
把中间步骤写进上下文之后,模型每生成一个
像心算和笔算。
心算 47 × 83 脑子会卡住;给你一张纸,同样的脑子就能算出来。
纸没有增加你的智力,但它让你把中间结果放在外面,不用全靠脑子记。
CoT 就是给模型的纸。
互动 · 一张纸,等于多算几次
| 路线 | 怎么花算力 | 需要额外训练吗 | 代表 |
|---|---|---|---|
| ① 采样 Sampling | 同一道题独立生成 k 条回答,然后投票 | 不需要,拿来即用 | Self-Consistency |
| ② 搜索 Search | 把解题当成一棵树,有策略地探索分支,走错了就回退 | 通常需要一个给每一步打分的评委(专门训练的叫过程奖励模型,第 4 节讲;也可以让模型自己评) | Tree of Thoughts、MCTS 等树搜索 |
| ③ 训练长 CoT | 用 RL 直接训练模型自己写更长的推理链 | 需要大规模 RL 训练(贵) | o1、R1 |
①② 是"推理时靠外部机制多想"——模型本身没变,是你在外面套了一层策略; ③ 是"把想的能力训进模型里"——训完之后,模型自己就会在回答前写很长一段推理。 成本结构因此不同:①② 是推理变贵,③ 是一次性训练很贵、之后推理也贵。 三条路线也不是三选一——一个已经训出长推理的模型,照样能多采几条投票。
互动 · 三条路线,各花多少钱
这一章从第 1 节到第 7 节,底下其实是同一个算式。 §1 那句「固定层数」翻成数字,就是一句大白话—— 模型每多写一个 token,就等于多做一整次前向。 写出来的推理越长,花掉的计算就越多。下面这张图把它画出来。
互动 · 多写推理,代价怎么涨
T 是那条当基准的长度(直接回答要写的字),
τ 是横轴上你拖到的位置(多写的推理),
C 是曲线的高度(相对代价)。
把 τ 拖到 9000、把 T 调到 300,曲线末端爬到 31 倍附近——这条线把「本来就要写的 300 token」
也算进去了(9300 ÷ 300);第 7 节那个「贵 30 倍」只比输出长度(9000 ÷ 300),差的 1 倍就是本来就要写的那段开头。
像考试:一道题写 3 行能得出答案,硬要写 300 行草稿,
你花掉的力气就是 100 倍——而草稿写得再多,脑子(层数)也没变,
只是把「想一次」拆成了「想很多次」。
CoT 买到的是「时间」,不是「更深的脑子」。
最朴素的做法就是多问几遍,取多数票。听起来很土,但它确实有效—— 不过有一个条件,而且这个条件经常被忽略。
互动 · 真的模拟几千次投票
把这件事写成式子:k 个人各自独立答题,每人答对的概率都是 p;超过一半的人答对,这次投票才算对。 所以只要把「答对的人超过一半」的所有情况加起来,就是投票后的准确率。
当单次正确率 低于 50% 时,投票不是帮忙,是帮倒忙——
采样越多,准确率越趋近于 0。
因为多数投票的前提是"多数人是对的"。如果模型的正确率还不如抛硬币,
那它的多数票就系统性地投出了错误答案。
这解释了一个真实的工程现象:self-consistency 只在模型"已经差不多会了"的题上有效。
对完全不会的题,多采样纯粹是浪费钱。
麻烦的是,事先你并不知道这道题的 p——只能靠题型判断:模型平时就做得差不多的题才值得投票。
像开会投票。如果大部分人懂这件事,投票能过滤掉个别失误,结论更可靠。
但如果大部分人都不懂、只有少数人懂——投票会把那个唯一懂的人投出去。
集体智慧的前提是"集体平均水平在及格线以上"。
路线 ② 需要判断"这一步走得好不好"。有两种做法,代价完全不同: ORM(结果奖励模型)只看最后答案对不对,PRM(过程奖励模型)给每一步打分、挑好的往下走。 下面这个互动模拟一道 6 步的题:横轴是允许花的模型调用次数上限(生成候选和打分都算一次), 纵轴是最终答对的概率。先看一张静态示意图,分清两种做法:
示意 · ORM 走到底,PRM 半路掉头
| 对比项 | ORM · 结果奖励 | PRM · 过程奖励 |
|---|---|---|
| 看什么 | 只看最终答案对不对 | 给每一步都打分 |
| 信号密度 | 走完一条完整解答(一条"轨迹")只有 1 个信号 | 每一步都有信号(一条轨迹 n 个) |
| 能不能提前剪枝 | 不能——必须走到底才知道行不行 | 能。发现这步不对就立刻放弃 |
| 标注成本 | 低,只要对答案 | 高:要人逐步标注"这一步对不对"。PRM800K 是人工标了 80 万步;后来多用模型自动构造(如 Math-Shepherd, 2023) |
互动 · 同样的算力预算,谁最终答对的概率高
两条曲线在低预算区差距最大——预算越紧,PRM 的优势越明显。 原因是结构性的:ORM 的钱全花在"把一条路走完"上, 而绝大多数路都是错的;PRM 的钱花在"评估岔路口"上,能在错的方向上及时止损。 但预算足够大时,ORM 靠蛮力采样也能追上——所以这是一个"用钱换效率"还是"用标注换效率"的选择。
既然多想有用,那是不是越多越好?不是。 实测下来,准确率随推理长度先升后降,像一个倒过来的 U(Wu et al. 2025,arXiv 2502.07266); 下面这条曲线按同样的形状画,是示意图。
互动 · 简单题和难题的最优长度不一样
模型开始反复自我怀疑:"等等,让我重新检查一下……嗯,之前那个应该是对的……
不过我再确认一遍……"
这种输出有两个问题:
① 成本:本来 200 token 能解决的题,变成 5000 token。
② 准确率反而下降:因为它在反复推翻一个本来正确的结论,
最后可能把对的改成错的。这不是"更谨慎",这是"想太多把自己绕进去了"。
正确的目标不是"让模型想得久",而是"把算力花在需要的地方": 简单题一步到位,难题才开长链。这是一个独立的研究方向, 阶段 8 的「自适应计算」会专门讲。
| 方法 | 年份 | 核心做法 | 需要训练吗 |
|---|---|---|---|
| Few-shot CoT(给例子) | 2022 | 在提示里给几个带推理过程的例子 | 不用 |
| Zero-shot CoT(不给例子) | 2022 | 只要一句 "Let's think step by step" | 不用 |
| Self-Consistency | 2022 | 采样 k 条,取多数票 | 不用 |
| Least-to-Most | 2022 | 先把问题拆成子问题,再逐个解决 | 不用 |
| Tree of Thoughts | 2023 | 把推理做成树搜索,可以回退 | 需要自己打分或额外的评估器 |
| PRM / Let's Verify | 2023 | 训练一个逐步打分的验证器,用它指导搜索 | 需要逐步标注数据 |
| STaR / 自举 | 2022 | 让模型生成推理链,只保留答对的,拿去 |
需要微调 |
| o1 / R1 | 2024-25 | 用 RL(RLVR/GRPO)直接训练模型生成长 CoT | 需要大规模 RL |
| s1 / 长度控制 | 2025 | 用"预算强制"控制思考长度:想停就强塞一句「等等」让它接着想,想太久就强制收尾——缓解过度思考 | 微调 |
把这张表压缩成一句话:2022 年人们发现"把过程写出来就有用", 2023 年在解决"怎么在众多过程里挑最好的", 2024 年之后在解决"怎么让模型自己学会写好过程"。 三个阶段:发现现象 → 外部引导 → 训进模型。
示意图 · 三个阶段的时间轴
| 坑 | 说明 | 什么时候真的会痛 → 换什么 |
|---|---|---|
| ① 成本暴涨 | 一条普通回答可能 300 token,一条长 CoT 回答可能 9000 token——
贵 30 倍。而且它是串行生成的,所以延迟也长 30 倍。 这是推理模型最实际的代价。 |
简单题也开长链、按输出长度计费 → 先估难度,限制最大长度(第 5 节) |
| ② CoT 不可信 | 模型说出来的推理过程未必是它真的计算过程。 有实验发现(Turpin 2023):给模型提示一个错误的答案,它会给出错误答案, 然后编一套"看起来合理"的推理来支持它——写出来的推理不一定是它真正的计算过程。 所以不能把 CoT 当成"解释"来做安全审计。 |
拿 CoT 当审计证据 / 事故解释 → 改读模型内部(机械可解释性,阶段 8) |
| ③ 不是所有任务都受益 | CoT 只对需要多步计算的任务有效(数学、逻辑、代码)。 对知识回忆("法国的首都是哪")和格式任务,写出步骤基本不帮忙—— Sprague et al. 2024 汇总 100 多篇论文发现,CoT 的增益几乎只出现在数学和逻辑上 | 知识问答 / 格式转换也硬开长链 → 先小规模对比一次,没提升就别开 |
很多人把 CoT 当作"
这个假设是错的。CoT 是模型生成的一段文本,它和其他输出一样可以被优化、被操纵。
模型完全可能"心里"走了一条捷径,但写出一条符合人类期待的推理链。
真正要理解模型内部在算什么,得看机械可解释性(阶段 8)——
直接读神经元和注意力,而不是读它写出来的话。
互动 · 为什么回答要等这么久
每生成一个
这一章属于「七条线」里的一条(那是解释深度学习为什么能行的七条主线), 它把那条线从训练时搬到了推理时。下面那张「暗线」表是另一套东西——拆方法时要问的六个问题,别和七条线混。
回到第 5 节那张「简单题和难题的最优长度不一样」:把「题目难度」滑块从“简单”拖到“很难”, 峰值向右移——那个瞬间就是「算力换成能力」;再往峰值右边拖,准确率会掉回来。
| 暗线 | 这一章的回答 |
|---|---|
| A 信息流动 | 数据形状:输入 prompt 的 token 数不变 → 模型输出的序列被拉长到几倍甚至几十倍
(300 → 9000)—— 多出来的全是中间步骤,它们又被拼回输入,进入下一轮前向。 所以这是全站一个特殊的形状变化:别的章在变特征图的宽度(通道、维度), 这一章在变序列的长度;而序列长度一旦变长,注意力按平方代价跟着涨 (见 《推理与 KV Cache》、《高效注意力》) |
| B 什么被牺牲了 | 延迟与成本换准确率。300 → 9000 token,钱和等待都跟着涨, 换到的是“本来做不对的题现在能做对”。代价还在可预测性上: 同一个模型,简单题和难题的合理推理长度差一个量级(第 5 节),花多少得先猜 |
| C 参数账本 | 参数量一点没变——7B 还是 7B。变的只有 token 数:
普通回答 ≈ 300 token;长 CoT 回答可达 9000 token(≈ 30×)。 贵的主因:这 30 倍的 token,每一个都要把整个模型跑一遍。生成时还要为每个 token 多存一份 中间结果(《推理与 KV Cache》 里的 KV Cache),它也按 token 数涨,是次要开销。 (这里的 30× 指单条回答的上下文长度;训练/推理的完整字节账在 《LoRA》、《硬件与算力账本》 里) |
| D 跑在什么上 | 等待时间几乎只跟输出长度成正比:生成时每写一个词,都要把整个模型从显存里读一遍—— 限制它的是显存带宽,不是 GPU 的并行算力。读入题目那一步另算,完整账见 《硬件与算力账本》 |
| E 它假设了什么 | 三层假设,第三层最容易被忽略: ① 题目可以被拆成中间步骤(数学、逻辑、代码可以;知识回忆不行); ② 写出来的中间结果真的会被后面的前向用到——每个新 token 都多给了一次前向; ③ 采样出来的多数答案是对的(≥ 50%)。这是 self-consistency 的硬前提 |
| F 违背了哪个直觉 | “多想一会儿总不会更糟”是错的。准确率随推理长度是倒 U 形——
模型会反复推翻自己本来正确的结论,把对的改成错的。 “多问几遍取多数票总不会更糟”也是错的(前提见 E 行:单次正确率要过一半) |
它接住了上一章的什么:《RLVR 与 GRPO》第 5 节那个“顿悟时刻”—— 模型在 RL 训练中自己学会了“回头检查”。这一章接着问:那这个“多想一会儿”值不值?
它给下一章留了什么:把“会想”训进模型里,最贵的那一步就是 RLVR/GRPO 本身的算力开销, 而它考验的是训练侧的显存。要便宜地改一个已经训好的模型,得看 《LoRA 与高效微调》。
现在你能给一道题估个价:值不值得让模型多想。
模型单次正确率不到一半时,采样投票反而更差;推理长度过了峰值,多想也会变差。
CoT 之所以有效,是因为它把"深度不够"换成了"时间够不够"——
模型每写一个中间步骤,就相当于多做一次完整前向。
三条花算力的路线:采样投票、搜索(PRM 能在错方向上及时止损,低预算时优势最大)、
训练长 CoT(把"会想"训进模型里;算上训练那笔账,是最贵的一档,训完也最强)。
两个必须记住的坑:想得久不一定更好(倒 U 形,简单题会被绕晕);
CoT 不是可信的解释——模型可以是先有结论、再补推理。
上面讲的都是「够用」的版本。想往下挖,这里有三个入口—— 它们不是必修内容,是给想再往前走一步的读者准备的。