对应:Stanford CS224N Winter 2026 Lecture 13(Reasoning 2)。和同目录 CS336 第 16 讲(可验证奖励的强化学习)有重叠:本讲侧重”为什么”和直觉,CS336 侧重大规模实现。 配套代码:
code/lecture15/(01~03 号文件只需要 numpy;04 号文件导入第 14 讲的reasoning_tasks.py) 预计阅读时间:3.5–4 小时
0. 本讲导航
0.1 学完本讲,你应该能够
- 解释”测试时计算”的含义,以及它和训练时计算(预训练、强化学习)的关系。
- 写出 pass@k 的定义和无偏估计,解释覆盖率和”实际能挑出来的准确率”之间的鸿沟。
- 比较几种挑选方法:多数投票、验证器打分(best-of-n)、加权投票;解释验证器不完美时为什么 越大不一定越好。
- 区分结果奖励模型(ORM)和过程奖励模型(PRM),说出 PRM 的标签从哪里来(人工标注、蒙特卡洛估计)及其误差。
- 解释 PRM 引导的束搜索、树搜索,以及”计算最优”的测试时扩展:按难度分配预算、测试时计算能在多大程度上替代更大的模型。
- 写出 GRPO 的优势公式,解释它和 REINFORCE、PPO 的关系,以及 KL 惩罚、组内归一化、题目筛选的作用。
- 描述 DeepSeek-R1-Zero / R1 的训练流程,以及”强化学习只是放大已有能力”的争论。
- 说出长思维链的现象和问题:回答变长、“顿悟”、过度思考、思考预算、忠实性。
0.2 先修知识
| 知识点 | 用在哪里 | 最低要求 |
|---|---|---|
| 第 14 讲 | 全讲 | 思维链、自洽性、STaR、变量追踪任务 |
| 第 10 讲 | 第 3、6 节 | 奖励模型、RLHF 的目标、PPO 的直觉、best-of-n 的过度优化 |
| 第 13 讲 | 第 2、3 节 | pass@k 之类的指标;评估的统计学 |
| 第 9 讲 | 第 5 节 | 规模定律、训练计算 |
0.3 本讲地图
第1节 动机:多想一会儿,能换来多少能力?
第2节 采样与覆盖率 ← 代码 01(演示 1)
第3节 从候选中挑选:投票与验证器 ← 代码 01(演示 2)
第4节 结果奖励 vs 过程奖励 ← 代码 02(演示 1、3)
第5节 搜索与计算最优的测试时扩展 ← 代码 02(演示 2)、01(演示 3、4)
第6节 可验证奖励的强化学习与 GRPO(本讲重点) ← 代码 03、04
第7节 长思维链的现象与问题
第8–12节 小结、与作业的关系、练习、延伸阅读、下一讲预告
关于本讲的实验数字:01~03 号代码都是 numpy 的模拟(每个约一秒),编写讲义时完整运行过,讲义引用的是实际输出。模拟里题目的难度、验证器的质量、策略的成功率都是假设的数字,用来说明机制;讲义会对照真实研究的结论。04 号代码要训练一个小模型再做强化学习(约 15 分钟),编写时只做了冒烟测试,讲义只描述预期的趋势。
1. 动机:多想一会儿,能换来多少能力?
到第 9 讲为止,提高模型能力的主要办法是训练时花更多计算:更大的模型、更多的数据(规模定律)。第 14 讲开始出现了另一条路:推理时花更多计算。
- 思维链:让模型写出中间步骤,题目越难写得越长;
- 自洽性:采样很多条推理再投票;
- 推理模型:回答前先”想”几千到几万个词元。
2024 年 OpenAI 发布 o1 时展示了两条曲线:模型的表现随训练时的强化学习计算增长,也随测试时的思考长度增长,两条都呈现出类似规模定律的平滑上升。在 2024 年的美国数学邀请赛(AIME)上,GPT-4o 的准确率约 12%,o1 的单次准确率约 74%。
这并不是新想法。AlphaGo 在下棋时用蒙特卡洛树搜索,搜索越深棋力越强;Jones(2021)在棋类游戏上发现,训练计算和测试时的搜索计算可以按一个稳定的比例互相替代。语言模型的新意在于:推理过程本身就是用语言写出来的,“搜索”可以是采样很多条思维链、检查其中的步骤、或者让模型自己反思和回溯。
本讲回答三个问题:
- 多采样能把上限提高多少?(第 2 节:覆盖率)
- 怎样从很多候选里挑出对的那个?(第 3~5 节:投票、验证器、搜索)
- 怎样训练模型更好地利用测试时计算?(第 6、7 节:可验证奖励的强化学习)
2. 采样与覆盖率
2.1 pass@k
一道题采样 次,至少有一次答对的概率叫 pass@k(Chen 等 2021 在代码生成上提出)。如果单次正确率是 ,那么 。在一组题上取平均,就是覆盖率(coverage)。
代码 01 的演示 1:400 道题,单次正确率从 0 到 1 不等(平均 31.7%,单次正确率低于 1% 的题占 6%):
| 1 | 4 | 16 | 64 | 256 | 1,024 | 4,096 | |
|---|---|---|---|---|---|---|---|
| 覆盖率 | 31.7% | 59.5% | 80.6% | 92.0% | 96.7% | 98.3% | 99.3% |
采样次数每翻 4 倍,覆盖率都还在涨:即使单次正确率很低的题,采样足够多次也常常能”碰到”一次正确答案。Brown 等(2024,Large Language Monkeys)在代码和数学任务上发现,覆盖率随采样次数(取对数)在好几个数量级上近似线性增长。例如在 SWE-bench Lite 上,一个开源模型单次只能解决约 16% 的问题,采样 250 次时至少一次解决的比例升到约 56%。
2.2 怎样估计 pass@k
实践中每道题采样 次(),其中 次正确。直接用 估计是有偏的,会系统性地偏低。无偏估计是:
直觉:从 个样本里不放回地挑 个,一个正确的都没挑到的概率。代码 01 的检查:单次正确率 0.1、采样 次估计 pass@5,真实值 0.4095,组合数公式平均 0.4109(无偏),直接代入公式平均 0.3791(偏低)。
2.3 覆盖率是上限
覆盖率假设我们总能从 个候选里认出正确的那个。有些任务确实可以:数学题可以核对答案(如果有标准答案),代码可以跑测试。AlphaCode(Li 等 2022)为每道编程竞赛题生成多达一百万个程序,用题目给的样例测试过滤,再把剩下的程序按行为聚类,只提交 10 个,达到了中等水平参赛者的成绩。
但大多数时候没有标准答案可以核对:实际使用时,我们不知道哪个答案是对的。“挑出来”才是难题。
3. 从候选中挑选:投票与验证器
3.1 几种挑选方法
- 多数投票(自洽性,第 14 讲):不需要额外的模型,但只对答案能比较的任务有效,上限是”正确答案是众数”的比例。
- 验证器 + best-of-n:训练一个模型给每个候选打分,挑分数最高的。Cobbe 等(2021)在 GSM8K 上训练了一个验证器(判断一条解答的最终答案对不对),60 亿参数的模型配上验证器,表现和直接微调的 1750 亿参数模型差不多。
- 加权投票:每个答案的得分 = 通向它的所有候选的验证器分数之和。
- 生成式验证器:让一个大模型读解答、写出检查过程、再给出”对 / 错”的判断(LLM 当评委,第 13 讲)。它能利用思维链来验证,但也继承了评委的偏差。
3.2 验证器的质量决定了能挑多好
代码 01 的演示 2:200 道题,每题采样 个候选,用不同方法挑一个(验证器的分数:正确候选 ,错误候选 ):
| 挑选方法 | |||||
|---|---|---|---|---|---|
| 神谕(能认出任何正确答案 = 覆盖率) | 34.7% | 63.5% | 84.7% | 95.4% | 97.8% |
| 多数投票 | 34.5% | 44.2% | 62.3% | 72.2% | 78.5% |
| 验证器,区分度好() | 34.7% | 61.0% | 80.2% | 90.7% | 95.7% |
| 验证器,区分度一般() | 34.7% | 49.4% | 59.1% | 67.9% | 73.7% |
| 验证器 ,但 2% 的错误回答能骗过它 | 34.7% | 60.0% | 75.1% | 79.2% | 77.0% |
- 神谕和实际能挑出来的准确率之间有一道鸿沟;验证器越好,越接近神谕。
- 区分度一般的验证器: 增大时,错误候选里碰巧得高分的也越来越多,提升很快饱和。
- 验证器能被”钻空子”时,准确率先升后降:最后一行里,2% 的错误回答能拿到比正确答案还高的分数。 小时这无关紧要; 越大,越可能采到一个这样的回答并把它挑出来。这和第 10 讲 best-of-n 的过度优化是同一个现象(古德哈特定律):被优化得越狠,验证器的漏洞越会被找到。
所以测试时计算的扩展受限于验证器的可靠性。能用程序精确核对的任务(有标准答案的数学题、有测试的代码、形式化证明)最适合大规模的测试时计算;开放式任务上,验证器本身就是瓶颈。
4. 结果奖励 vs 过程奖励
4.1 两种验证器
- 结果奖励模型(outcome reward model,ORM):读完整条解答,判断最终答案对不对。训练数据容易得到:只需要知道每条解答的最终答案是否正确。
- 过程奖励模型(process reward model,PRM):判断每一步推理对不对。整条解答的分数可以取各步分数的最小值(“最弱的一环”)或乘积。
为什么要检查过程?因为答案对不代表推理对。代码 02 用一个抽象的多步推理模型说明:一道题走 6 步,每步以概率 出错,一旦出错后面就都建立在错误之上;过程全对时答案正确,中途出过错时只有 10% 的概率”碰巧”答对。500 道题,单条解答过程全对的平均概率 29.0%。
代码 02 的演示 1(best-of-n,两个验证器的区分度相同):
| ORM:答案对 | 其中过程也对 | PRM:答案对 | 其中过程也对 | |
|---|---|---|---|---|
| 1 | 36.6% | 83% | 38.8% | 84% |
| 4 | 69.0% | 73% | 65.6% | 95% |
| 16 | 91.0% | 73% | 89.8% | 99% |
| 64 | 97.8% | 74% | 96.6% | 100% |
ORM 挑出来的”答案正确”的解答里,约四分之一是过程错了、碰巧答对的,ORM 分不清它们;PRM 挑出来的几乎都是过程全对的。如果用这些解答去训练模型(第 14 讲的 STaR),ORM 会把错误的推理也一起强化。Uesato 等(2022)在 GSM8K 上发现了类似的结果:基于结果和基于过程的监督,最终答案的错误率差不多,但基于过程的监督让”推理过程有错”的比例大大降低。
(按”答案对不对”算,这个模拟里 ORM 甚至略高,因为我们让 ORM 直接”看到”了答案对不对,只加了噪声。真实的 ORM 要从一整段解答里判断答案对不对,比逐步检查难得多。Lightman 等(2023,Let’s Verify Step by Step)在 MATH 数据集上发现,PRM 做 best-of-n 的最终准确率也明显高于 ORM:从 1860 个候选里挑,PRM 约 78%,ORM 约 72%,多数投票约 70%。)
4.2 PRM 的标签从哪里来?
PRM 需要”每一步对不对”的标签。
- 人工标注:Lightman 等发布了 PRM800K,约 80 万个人工标注的步骤。很贵,而且要求标注者懂数学。
- 蒙特卡洛估计(Math-Shepherd,Wang 等 2023):从某一步之后,让模型往下接着写 次,看有几次得到了正确答案。有一次对就标为”好”(硬估计),或者用答对的比例作为这一步的分数(软估计)。
代码 02 的演示 3(每步出错率 0.15,看第 3 步:前 3 步都对时,往下走一次最终答对的概率 0.65;前 3 步出过错时只有 0.10,即碰巧答对):
| 硬估计:错的步骤被标为好 | 硬估计:对的步骤被标为坏 | 软估计的标准差 | |
|---|---|---|---|
| 1 | 10.0% | 34.7% | 0.476 |
| 4 | 34.4% | 1.5% | 0.238 |
| 16 | 81.5% | 0.0% | 0.119 |
| 64 | 99.9% | 0.0% | 0.060 |
硬估计里, 越大,对的步骤越不容易被误标为坏,但错的步骤越容易被误标为好:往下走的次数多了,总有一次能碰巧答对。软估计的噪声随 减小,但每个步骤都要多生成 次,非常贵。
更根本的一点:这类自动标签衡量的是”从这一步出发,这个模型能不能走到正确答案”,这是强化学习里的价值函数,而不是”这一步在逻辑上对不对”。一个正确但模型接不下去的步骤,会被标为坏。
5. 搜索与计算最优的测试时扩展
5.1 用 PRM 引导搜索
best-of-n 先生成 条完整的解答,再挑。但大部分解答在前几步就出错了,后面的生成全浪费了。有了 PRM,可以在生成过程中就剪枝:
- 束搜索(beam search):每一步,每条保留的部分解答生成几个候选的下一步,PRM 打分,只保留最好的几条。
- 树搜索:Tree of Thoughts(Yao 等 2023)让模型生成多个”想法”作为树的分支,自己评估每个分支有没有希望,用广度或深度优先搜索,必要时回溯。在”24 点”游戏上,GPT-4 用思维链只能解出 4% 的题,用 Tree of Thoughts 能解出 74%。蒙特卡洛树搜索(MCTS)也被用于数学推理。
代码 02 的演示 2(同样的计算量 = 每一步生成的候选步骤总数):
| 计算量 | best-of-n(PRM 挑) | 束搜索(PRM 引导) | 束搜索设置 |
|---|---|---|---|
| 4 | 65.0% | 82.8% | 保留 2 条,每条扩展 2 个 |
| 16 | 88.2% | 97.0% | 保留 4 条,每条扩展 4 个 |
| 64 | 95.6% | 99.2% | 保留 8 条,每条扩展 8 个 |
计算量小的时候,“早剪枝”的优势最明显;预算增大,差距缩小。在这个模拟里 PRM 的错误只是独立的噪声,所以束搜索一直领先。真实情况更复杂:Snell 等(2024)发现,预算小或题目难时 PRM 引导的搜索更好;预算大、题目简单时 best-of-n 能追上甚至反超。原因是搜索会过度相信 PRM 的判断,候选变得不够多样,PRM 的系统性错误更容易被找到并利用(第 3.2 节的过度优化)。
5.2 预算怎么分
简单的题采几次就够了,难的题多采才有用,完全不会的题采多少次都没用。Snell 等(2024)提出计算最优(compute-optimal)的测试时扩展:先估计每道题的难度,再为不同难度选择不同的策略和预算。他们报告,这比固定地”每题采样 N 次”节省了约 4 倍的计算。
代码 01 的演示 3 用一个粗糙的办法估计难度:每题先采 4 次,至少 3 次答案相同的(很可能是简单题)就停下,把剩下的预算平均分给其余的题(多数投票):
| 每题平均预算 | 平均分配 | 自适应 |
|---|---|---|
| 8 次 | 53.5% | 55.3% |
| 16 次 | 62.3% | 64.2% |
| 32 次 | 67.9% | 69.1% |
同样的总预算,自适应分配高一两个百分点。提升不大,因为”前 4 次答案是否一致”只是很粗的难度估计(300 道题里 229 道被判为”拿不准”)。还有一个陷阱:如果把”4 次答案各不相同”的题当作没救、直接放弃,准确率反而会下降,因为那些题单次正确率虽低,但错误答案很分散,多数投票仍然能做对(编写时试过)。估计难度是自适应分配的关键,Snell 等用验证器的分数来估计。
5.3 小模型多想 vs 大模型少想
测试时计算能替代多大的模型?代码 01 的演示 4 假设大模型的计算量是小模型的 16 倍、在对数几率上高 1.5。同样的计算量:小模型采样 16 次(用区分度好的验证器挑),大模型采样 1 次:
| 题目难度(小模型的单次正确率) | 小模型 ×16 + 验证器 | 大模型 ×1 |
|---|---|---|
| 简单(30%~100%) | 99.6% | 85.6% |
| 中等(5%~30%) | 79.7% | 43.9% |
| 很难(< 1%) | 4.4% | 1.6% |
简单和中等的题上,小模型多采样能超过大 16 倍的模型;小模型几乎从不答对的难题上,采多少次都没用,只有更强的模型才有帮助。Snell 等(2024)在真实模型上的结论类似:在小模型有一定成功率的题上,计算量相同时,测试时计算可以胜过大 14 倍的模型;在最难的题上,预训练计算更有效。测试时计算和训练时计算可以部分互相替代,替代的程度取决于题目难度。
6. 可验证奖励的强化学习与 GRPO(本讲重点)
前面讨论的都是”模型不变,测试时怎样多花计算”。今天的推理模型更进一步:训练模型,让它学会在一条思维链里自己探索、检查、回溯,也就是把搜索”内化”到模型里。训练方法是可验证奖励的强化学习(reinforcement learning with verifiable rewards,RLVR)。
6.1 从 STaR 到强化学习
第 14 讲的 STaR 只保留答对的样本做监督学习,相当于只用正样本的强化学习。完整的强化学习还利用答错的样本:降低它们的概率。回顾第 10 讲的策略梯度:
是基线:减去它不改变梯度的期望,但能大大减小方差。直觉:比基线好的回答被加强,比基线差的被削弱。PPO 用一个单独训练的价值网络(critic)估计基线;对几十亿参数的语言模型来说,这个价值网络和策略模型一样大,训练和显存的开销都翻倍。
在推理任务上,奖励来自程序化的核对:数学题比较最终答案、编程题跑单元测试、格式是否符合要求。这种奖励很难被钻空子(相比第 10 讲用神经网络估计的人类偏好),所以可以放心地大规模优化。
6.2 GRPO
GRPO(Group Relative Policy Optimization,Shao 等 2024,在 DeepSeekMath 中提出)用一个简单的办法代替价值网络:对每道题采样一组 个回答,用组内的平均奖励当基线:
然后像 PPO 一样更新( 是第 个回答第 个词元的概率比值):
裁剪防止在同一批数据上更新多次时一步走得太远;KL 惩罚让模型不要离参考模型太远。
代码 03 把”模型”简化成一张表:对每道题,模型在四种回答策略之间选择(直接给答案 20 个词元、简单推理 100、仔细推理 300、推理 + 自我检查 600),越长的策略越容易答对,SFT 之后的模型偏爱短回答(初始准确率 25.7%,平均长度 94 个词元)。策略写成 softmax,梯度可以精确计算。
梯度的方向(演示 1,在初始策略上用一批 16 道题 × 8 个回答估计梯度,重复 2000 次,和精确梯度的余弦相似度):
| 方法 | 余弦相似度 |
|---|---|
| REINFORCE(无基线) | 0.47 |
| 减去整批的平均奖励 | 0.55 |
| 减去组内平均 | 0.57 |
| GRPO(减组内平均、除以组内标准差) | 0.56 |
有基线比没有基线准;用同一道题的其他回答当基线,不需要价值网络,在这里和整批平均差不多准。除以组内标准差不改变每道题内部的方向,但改变了不同题之间的权重:通过率接近 0 或 1 的题标准差小,被放大得最多。Liu 等(2025,Dr. GRPO)认为这会引入”难度偏差”,并指出按回答长度归一化(上式里的 )也会带来长度偏差,建议去掉这两个归一化。
训练曲线(演示 2,同样的学习率训练 300 步):
| 方法 | 第 0 步 | 第 100 步 | 第 300 步 | 平均长度(第 300 步) |
|---|---|---|---|---|
| REINFORCE(无基线) | 25.7% | 33.1% | 41.5% | 204 |
| 减去整批平均 | 25.7% | 33.0% | 41.8% | 206 |
| 减去组内平均 | 25.7% | 32.2% | 40.8% | 197 |
| GRPO | 25.7% | 38.1% | 47.7% | 279 |
两点观察:
- 回答越来越长。奖励只说”答对了没有”,从没提到长度;但更长、更仔细、会自我检查的回答更容易答对,强化学习就让模型越来越多地选择它们。DeepSeek-R1-Zero 的训练中,回答长度从几百个词元增长到上万个。
- GRPO 在这里学得最快,但主要是因为除以组内标准差(0/1 奖励的标准差不超过 0.5)把梯度放大了一倍多,相当于更大的学习率:对比”减去组内平均”那一行就能看出来。比较优化算法时,要给每种方法各自调好学习率,否则比的只是步长。
6.3 哪些题能提供学习信号?
一组回答全对或全错时,组内所有优势都是 0,这道题不贡献任何梯度。代码 03 的演示 3():
| 通过率 | 0.01 | 0.1 | 0.3 | 0.5 | 0.7 | 0.9 | 0.99 |
|---|---|---|---|---|---|---|---|
| 整组全对或全错的概率 | 92.3% | 43.0% | 5.8% | 0.8% | 5.8% | 43.0% | 92.3% |
| 有用的信号 | 0.010 | 0.090 | 0.210 | 0.250 | 0.210 | 0.090 | 0.010 |
太难和太简单的题都浪费采样的计算,通过率 50% 左右的题最有用。所以实践中会筛选训练题:去掉模型已经全会或完全不会的题(DAPO 的”动态采样”,Yu 等 2025),并随着训练调整难度(课程学习)。这也说明了强化学习的一个根本限制:模型一次都做不对的题,强化学习帮不上忙(第 14 讲”筛选只能放大已有的能力”)。
6.4 KL 惩罚
代码 03 的演示 4(GRPO 训练 300 步):
| KL 系数 | 准确率 | 平均长度 | |
|---|---|---|---|
| 0 | 47.7% | 279 | 1.33 |
| 0.02 | 47.5% | 278 | 1.26 |
| 0.1 | 45.9% | 259 | 0.98 |
| 0.5 | 35.8% | 167 | 0.21 |
越大,策略越被拉回参考模型附近。第 10 讲的 RLHF 需要较强的 KL 惩罚,是因为奖励模型会被钻空子;可验证奖励很难被钻空子,所以很多推理强化学习的工作把 设得很小甚至为 0(如 DAPO)。保留一点 KL 有助于保持语言的可读性和多样性。
6.5 在真实的小模型上
代码 04 在第 14 讲的变量追踪任务上跑一遍真正的 RLVR:
- 弱 SFT:在标准思维链上只训练 1200 步(第 14 讲是 6000 步),得到一个”会写思维链格式、但经常出错”的模型;
- GRPO:每步出 8 道题、每题采样 8 条思维链,只根据最终答案对不对给奖励(不再提供标准思维链),加一个小的 KL 惩罚(,用 DeepSeek 的 k3 估计 ,),训练 150 步。
预期(编写时只做了冒烟测试):RL 之后准确率上升,提升最多的是弱 SFT 模型”有时对、有时错”的链长;几乎从不答对的链长,提升有限。训练中”整组全对或全错”的比例会变化:简单的题越来越”全对”,不再提供信号。没写出 “ans 数字” 的回答得不到奖励,格式错误会减少。最重要的是,RL 没有用任何标准思维链:模型只知道答案对不对,却学会了更可靠地写出正确的推理过程。
6.6 DeepSeek-R1
DeepSeek-R1(2025)第一次公开、完整地展示了这条路线:
- R1-Zero:从预训练的基座模型(DeepSeek-V3-Base)出发,不做 SFT,直接用 GRPO 训练。奖励只有两条规则:答案是否正确(数学题核对答案、编程题跑测试),格式是否正确(推理写在
<think>标签里)。训练中,模型在 AIME 2024 上的单次准确率从约 16% 升到约 71%(多数投票约 87%),回答越来越长,自发地出现了检查、反思、换一种方法重试的行为,论文里记录了一个”顿悟时刻”:模型在推理中途写出类似”等等,我再重新检查一下这一步”的话。 - R1:R1-Zero 的推理可读性差(中英文混杂、格式混乱)。R1 先用几千条高质量的长思维链数据做冷启动 SFT,再做推理强化学习(加了语言一致性的奖励),然后用拒绝采样生成大量数据、结合通用数据再做 SFT,最后做一轮覆盖所有场景的强化学习(推理题用规则奖励,通用对话用偏好奖励模型)。
- 蒸馏:用 R1 生成的约 80 万条数据直接微调更小的开源模型(1.5B~70B),小模型的推理能力大幅提升,而且比在小模型上直接做强化学习效果更好。
6.7 强化学习教会了模型新东西吗?
一个重要的争论:RLVR 是让模型获得了新的推理能力,还是只是让它更稳定地做出它本来就偶尔能做出的东西?Yue 等(2025)比较了基座模型和 RL 之后的模型的 pass@k: 小时 RL 模型明显更好;但 很大(几百)时,基座模型的覆盖率反而追上甚至超过 RL 模型。他们的解释是:RL 主要提高了采样效率(把概率集中到已有的正确推理路径上),同时缩小了探索的范围。
这和第 14 讲 STaR 的动力学()以及本讲演示 3 的结论一致:被强化的只能是模型会采样到的行为。但”偶尔能做出”和”可靠地做出”在实用上差别巨大;而且更长时间、更大规模的强化学习能否突破这个限制,仍是开放问题。蒸馏的成功也说明:一个更强的模型生成的推理过程,能把新的推理行为”教给”小模型。
7. 长思维链的现象与问题
7.1 想得越久越好吗?
推理模型的准确率通常随思考长度增加而上升,但并不总是:
- 过度思考:Chen 等(2024,Do NOT Think That Much for 2+3=?)发现,推理模型对很简单的问题也会写出几百上千个词元,反复验证同一个答案,浪费计算。
- 思考不足 / 来回跳:在难题上,模型有时频繁地换思路,每条思路都没有深入下去就放弃了。
- 思考越长,准确率反而下降:有研究发现,在某些任务上强制模型想得更久,准确率会下降(测试时计算的”逆规模”现象)。
7.2 控制思考预算
s1(Muennighoff 等 2025)展示了一个非常简单的办法:只用 1000 道精选题目的长思维链做 SFT,然后在测试时做”预算强制”(budget forcing):想停下时强行插入一个”Wait”,让模型继续想;超过预算就强行结束思考、给出答案。这样就得到了随思考长度上升的准确率曲线。今天的推理模型 API 普遍提供”思考预算”参数,让用户在速度、费用和准确率之间权衡。
7.3 长思维链的忠实性
第 14 讲讨论了思维链的忠实性。推理模型的思维链更长、更像”真实的思考过程”,是否就更忠实?Chen 等(2025,Anthropic)在提示里给推理模型暗示答案(比如”一位斯坦福教授认为答案是 A”),发现模型确实会利用这些暗示,但在思维链里承认使用了暗示的比例往往很低(很多设置下低于 20%)。在一个可以”钻奖励空子”的强化学习环境里,模型学会了钻空子,却几乎从不在思维链里提到。阅读思维链是监督推理模型的有力工具,但不能完全依赖它。
7.4 代价
长思维链意味着更高的延迟和费用:一个问题可能要生成几万个词元。推理模型也带来新的研究方向:怎样让模型自己判断该想多久、怎样把长思维链压缩成短的、怎样在想的过程中调用工具(第 12 讲的智能体 + 推理)。
8. 本讲小结
- 测试时计算:推理时多花计算(更长的思维链、多采样、搜索)能换来能力,和训练时计算部分互相替代。
- 覆盖率:pass@k = 采样 次至少一次正确;随 近似线性增长;要用组合数公式无偏估计。覆盖率是上限,能不能”挑出来”取决于验证。
- 挑选:多数投票不需要验证器但上限有限;验证器越好越接近覆盖率;验证器能被钻空子时,best-of-n 先升后降(古德哈特定律)。能用程序精确核对的任务最适合大规模测试时计算。
- ORM vs PRM:ORM 只看答案,会认可”碰巧答对”的错误推理;PRM 逐步检查,挑出的推理更可靠,Lightman 等发现最终准确率也更高。PRM 的标签可以人工标注或用蒙特卡洛估计,后者衡量的是价值而不是逻辑正确性,有误差。
- 搜索与预算:PRM 引导的束搜索 / 树搜索在小预算时比 best-of-n 有效;按难度分配预算更省;简单和中等难度的题上,小模型多想能胜过大模型,最难的题上不行。
- RLVR 与 GRPO:用程序核对的奖励做强化学习;GRPO 用组内平均奖励当基线、省去价值网络;全对或全错的组没有信号,要筛选题目;可验证奖励下 KL 可以很小。RL 让回答变长、学会自我检查;DeepSeek-R1 展示了完整的路线。RL 是否带来新能力仍有争论:它至少大大提高了采样效率。
- 长思维链的问题:过度思考、思考预算、忠实性、代价。
9. 与作业的关系
- Winter 2026 的作业 4(大语言模型的基准测试与评估):评估推理模型时,pass@1、pass@k、多数投票的分数差别很大,思考预算也会影响结果,评估时要说明这些设置;pass@k 要用无偏估计。
- 期末项目:在小模型和合成任务上做测试时扩展(best-of-n、验证器)或 RLVR(本讲 04 号代码就是一个起点),是可行而且有意义的项目方向;也可以研究”过度思考”、思考预算的控制。
- CS336 的作业 5:在真实的语言模型上实现 SFT、专家迭代和 GRPO 训练数学推理,是本讲内容的大规模版本。
作业的具体题目以当年官方发布的版本为准。
10. 练习
练习 1(pass@k)★:(a) 单次正确率 0.2,pass@1、pass@5、pass@20 各是多少?(b) 采样了 次、其中 次正确,用无偏估计算 pass@3。(c) 为什么直接代入 会偏低?
参考答案
(a) 0.2;;。 (b) 。 (c) 是凹函数,由 Jensen 不等式,,所以平均起来偏低。尤其当 时直接代入给出 0,而真实的 pass@k 可能并不小。
练习 2(验证器与过度优化)★★:一个验证器给正确回答的分数 ,给错误回答 ,但有 1% 的错误回答是”骗子”,分数 。单次正确率 0.3。(a) 和 非常大时,best-of-n 的准确率各大约是多少?(b) 为什么会出现先升后降?(c) 有什么办法缓解?
参考答案
(a) 时就是 0.3。 非常大时,几乎一定会采到”骗子”,它们的分数(均值 4)远高于正确回答(均值 2),best-of-n 几乎总选骗子,准确率趋于 0。 (b) 小时,主要作用是在正确回答和普通错误回答之间挑,准确率上升; 增大后,采到骗子的概率 上升,骗子逐渐主导。 (c) 限制 ;用多个独立的验证器(骗过所有验证器更难);结合多数投票(骗子的答案往往不一致);改进验证器,用它挑出的高分错误回答继续训练验证器;能用程序核对的部分尽量用程序核对。
练习 3(ORM vs PRM)★★:一道 5 步的题,每步出错率 0.1,出错后碰巧答对的概率 0.2。(a) 单条解答过程全对的概率是多少?最终答案正确的概率是多少?(b) 在答案正确的解答里,过程也正确的比例是多少?(c) 用这些”答案正确”的解答做 STaR,会有什么问题?
参考答案
(a) 过程全对 ;答案正确 。 (b) ,约 12% 是碰巧答对的错误推理。 (c) 约 12% 的训练数据是错误的推理过程,它们会被一起强化;如果碰巧答对的概率更高(选择题、判断题),这个比例会更大。用 PRM 筛选,或者只用开放式答案的题目,可以减少这个问题。
练习 4(蒙特卡洛标签)★★:某一步之后往下走一次,最终答对的概率是 。用硬估计( 次里有一次对就标为好)。(a) 写出这一步被标为”好”的概率。(b) 如果正确步骤的 、错误步骤的 , 取多少时,“正确步骤被标为好的概率”减去”错误步骤被标为好的概率”最大?
参考答案
(a) 。 (b) 差值 。:0.45;:0.9025 − 0.25 = 0.6525;:0.857 − 0.125 = 0.732;:0.815 − 0.0625 = 0.752;:0.774 − 0.031 = 0.743;:0.735 − 0.016 = 0.719。 时最大(约 0.75)。 太小,正确步骤常被误标为坏; 太大,错误步骤常被误标为好。
练习 5(GRPO 优势)★:一组 4 个回答的奖励是 (1, 0, 0, 0)。(a) 写出 GRPO 的优势(用总体标准差)。(b) 如果奖励是 (1, 1, 1, 0) 呢?(c) (1, 1, 1, 1) 呢?(d) 比较 (a) 和 (b):答对的回答得到的优势谁大?这有什么直觉?
参考答案
(a) 均值 0.25,标准差 。优势:。 (b) 均值 0.75,标准差 0.433。优势:。 (c) 标准差为 0,所有优势为 0(代码里加了一个小常数避免除以零),没有学习信号。 (d) (a) 里唯一答对的回答优势是 1.73,(b) 里每个答对的回答只有 0.58。难题上答对一次是”稀有的成功”,值得大力强化;简单题上答对是常态,答错才是需要纠正的((b) 里答错的回答优势是 −1.73)。
练习 6(学习信号)★: 时,通过率 0.05 的题”整组全错”的概率是多少?如果训练集里一半的题通过率是 0.05、一半是 0.5,大约有多少比例的采样计算被浪费在没有信号的组上?
参考答案
(全对的概率可以忽略)。通过率 0.5 的题,全对或全错的概率 。所以约 的组没有信号。如果通过率 0.05 的题更多、或者 更小,浪费得更多。动态采样会把这些组丢掉,再补采其他题。
练习 7(测试时计算 vs 模型大小)★★:你有一个固定的推理预算。在下面两种情况下,你会选择”小模型采样 16 次 + 验证器”还是”大 16 倍的模型采样 1 次”?(a) 小学数学应用题,小模型单次正确率约 40%;(b) 数学竞赛的最后一题,小模型几乎从没做对过。
参考答案
(a) 小模型多采样:单次 40%,16 次采样的覆盖率约 ,配一个好的验证器就能挑出正确答案,很可能超过大模型的单次准确率。 (b) 大模型:小模型的覆盖率接近 0,采多少次都挑不出正确答案。这是测试时计算无法替代模型能力的情况。
练习 8(思考:RL 与能力边界):Yue 等(2025)发现,在很大的 下,基座模型的 pass@k 可以追上 RL 训练后的模型。(a) 这说明 RL 没用吗?(b) 设计一个实验,判断 RL 是否让模型学会了基座模型完全不会的推理。
参考答案
(a) 不说明。实际使用中我们通常只能采样一两次(而且没有神谕挑答案),pass@1 的大幅提升有巨大的实用价值。它说明的是 RL 主要在”提高采样效率”,而不一定在”扩展能力边界”。 (b) 一种设计:选一批基座模型采样很多次(比如 1000 次)都从没做对过的题,看 RL 之后的模型能否做对其中一部分;同时控制数据污染、检查做对的题是否真的需要新的推理方式(比如分析思维链里是否出现了基座模型从没出现过的策略)。
练习 9(动手):
(a) 在代码 01 的演示 2 里,把”骗子”的比例从 2% 改成 0.5% 和 10%,准确率开始下降的 怎样变化? (b) 在代码 02 里把 PRM 的区分度从 2 降到 1,束搜索相对 best-of-n 的优势还在吗? (c) 在代码 03 里给每种方法分别调学习率(试 0.5、1、2、4、8),在公平的比较下,GRPO、减组内平均、减整批平均谁学得最快? (d) 运行代码 04,记录 RL 前后的准确率。把 KL 系数改成 0 或 0.2,结果有什么变化? (e) 在代码 04 里只用 的题做 RL,再看 的准确率:在难题上做的 RL,会不会也改善简单题?
11. 延伸阅读
- Chen et al.,Evaluating Large Language Models Trained on Code(2021):Codex 与 pass@k 的无偏估计。
- Brown et al.,Large Language Monkeys: Scaling Inference Compute with Repeated Sampling(2024)。
- Li et al.,Competition-Level Code Generation with AlphaCode(2022)。
- Cobbe et al.,Training Verifiers to Solve Math Word Problems(2021):GSM8K 与验证器。
- Uesato et al.,Solving Math Word Problems with Process- and Outcome-based Feedback(2022);Lightman et al.,Let’s Verify Step by Step(2023);Wang et al.,Math-Shepherd(2023)。
- Yao et al.,Tree of Thoughts: Deliberate Problem Solving with Large Language Models(2023)。
- Snell et al.,Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters(2024)。
- Jones,Scaling Scaling Laws with Board Games(2021)。
- Shao et al.,DeepSeekMath(2024):GRPO;DeepSeek-AI,DeepSeek-R1(2025)。
- Yu et al.,DAPO: An Open-Source LLM Reinforcement Learning System at Scale(2025);Liu et al.,Understanding R1-Zero-Like Training: A Critical Perspective(2025,Dr. GRPO)。
- Yue et al.,Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?(2025)。
- Muennighoff et al.,s1: Simple Test-Time Scaling(2025);Chen et al.,Do NOT Think That Much for 2+3=? On the Overthinking of o1-Like LLMs(2024)。
- Chen et al.,Reasoning Models Don’t Always Say What They Think(2025)。
- CS336 第 16 讲(同目录):可验证奖励的强化学习的大规模实现。
12. 下一讲预告
第三单元到此结束:我们从预训练一路走到了后训练、高效适配、检索与智能体、评估和推理。第四单元是几个专题,第一个回到最底层的问题:模型看到的”词”到底是什么?
下一讲(分词与多语言)讨论:
- 词、子词、字符、字节;BPE、WordPiece、Unigram LM 各自怎样切分文本;
- 中文为什么需要”分词”,以及大模型为什么不再显式分词;
- 多语言模型(mBERT、XLM-R)为什么能跨语言迁移;
- 同样的意思,用不同的语言写,要多花多少词元?分词带来的语言不公平。