为什么我们要让模型"思考":深入理解测试时计算与思维链
特别感谢 John Schulman 对本文提供的宝贵反馈和直接修改。
测试时计算(test time compute)(Graves et al. 2016、Ling, et al. 2017、Cobbe et al. 2021)和思维链(Chain-of-thought, CoT)(Wei et al. 2022、Nye et al. 2021)显著提升了模型表现,同时也引出了许多值得研究的问题。本文旨在梳理如何有效利用测试时计算(即"思考时间")的最新进展,以及它为何有效。
动机#
让模型"思考"更长时间,可以从多个角度来理解其动机。
类比心理学#
这个核心思路与人类的思考方式密切相关。面对 "12345 乘以 56789 等于多少?" 这样的问题,我们无法立刻给出答案。更自然的做法是花时间反复推敲和分析,尤其是对复杂问题而言。在 《思考,快与慢》(Kahneman, 2013) 中,Daniel Kahneman 基于双过程理论将人类思考划分为两种模式:
- 快思考(系统 1):依靠直觉和情绪驱动,反应迅速且自动化,几乎不需要投入精力。
- 慢思考(系统 2):需要审慎、逻辑性的思考,投入大量认知努力。这种思考模式消耗更多心智能量,需要有意地参与。
由于系统 1 快速省力,它往往成为决策的主要驱动力,但代价是牺牲了准确性和逻辑性。它天然依赖大脑的心理捷径(即启发式),容易导致错误和偏见。而当我们有意识地放慢节奏,花更多时间反思、修正和分析时,就能调动系统 2 来挑战本能,做出更理性的判断。
将计算视为资源#
有一种关于深度学习的观点认为:神经网络的能力可以用前向传播中可调用的算力和存储来刻画。如果我们用梯度下降来优化它们以求解问题,优化过程会自行摸索出如何使用这些资源——会自发地把这些资源组织成用于计算和信息存储的电路。按照这种观点,如果我们设计出一种在测试时能做更多计算的架构或系统,并训练它有效利用这种资源,它就会表现得更好。
在 Transformer 模型中,模型为每个生成 token 所做的计算量(flops)大致是参数数量的 2 倍。对于混合专家(MoE)这样的稀疏模型,每次前向传播只用到一部分参数,所以计算量 = 2 × 参数 / 稀疏度,其中稀疏度是实际激活的专家所占的比例。
另一方面,CoT 使模型能够在计算答案的每个 token 时执行远超常规的 flops。事实上,CoT 有一个很好的特性:它允许模型根据问题的难度使用可变长度的计算。
潜变量建模#
机器学习中一个经典思路是定义一个带有潜变量(隐藏变量)$z$ 和可见变量 $y$ 的概率模型,其中 $y$ 被提供给学习算法。对潜变量的可能取值求和(边缘化),就能在可见变量上表达出丰富的分布,$P(y) = \sum_{z \sim P(z)} P(y \mid z)$。例如,我们可以对数学题及其解答的分布建模:让 $x$ 表示题目,$y$ 表示标准答案或证明,$z$ 表示通向该证明的自由形式思考过程。需要优化的边缘概率分布就是 $P(y \mid x) = \sum_{z \sim p(z\mid x)} P(y \mid x, z)$
潜变量视角对于理解那些涉及收集多条并行 CoT 或在 CoT 上做搜索的方法特别有用——这些算法可以被看作是从后验 $P(z \mid x, y)$ 中采样。这一视角还表明了把对数损失 $\log P(y \mid x)$ 作为优化目标的好处,因为对数损失目标在预训练中已经非常有效。
用 token 来思考#
在给出最终短答案之前先生成中间步骤的策略,尤其适用于数学问题,最早由 Ling 等人(2017) 探索,他们提出了 AQUA-RAT 数据集;之后 Cobbe 等人(2021) 在此基础上扩展,引入了 Grade School Math (GSM) 数据集。Cobbe 等人用监督学习训练了一个生成器和多个验证器——生成器基于人类解题过程来生成解答,验证器负责判断候选解答的正确性,由此可以在这些解答中进行搜索。Nye 等人(2021) 把中间推理令牌当作"草稿本"来实验,Wei 等人(2022) 则提出了如今已成为标准术语的思维链(chain-of-thought,CoT)。
早期改进 CoT 推理能力的工作,主要是在人类撰写的推理过程或经答案正确性筛选后的模型生成过程上做监督学习,而后者已经可以看作强化学习(RL)的雏形。另一些研究发现,只需通过恰当的提示,就能显著提升指令微调模型的数学表现,例如用 "think step by step"(Kojima 等人,2022),或用更复杂的提示先引导模型反思相关的知识(Yasunaga 等人,2023)。
后续工作发现,在带有可自动校验答案的问题数据集上做强化学习——比如有短答案的理工科问题,或能用单元测试检验的编程任务——可以大幅提升 CoT 推理能力(Zelikman 等人,2022;Wang 等人,2023;Liu 等人,2023)。这一思路随着 o1-preview、o3 的发布以及 R1 技术报告(DeepSeek-AI,2025)而广为人知,它们证明了仅凭一套简洁的策略梯度方案就能取得很强的性能。
分支与编辑#
测试时计算的核心目的是在测试阶段自适应地调整模型的输出分布。利用测试时资源来优化解码、筛选更优样本,从而引导模型预测向更理想的方向靠拢,有多种实现方式。其中两大主要策略是并行采样和顺序修订。
- 并行采样:同时生成多个输出,期间通过过程奖励信号逐步引导,或在最后用验证器统一评判质量。它是目前最常用的提升测试时性能的解码方法,比如 best-of-$N$ 或束搜索。自洽性方法(Wang et al. 2023)在没有标准答案时,常用于在多条思维链推理结果中通过多数投票选出最终答案。
- 顺序修订:基于上一步的输出迭代调整模型回答,让模型主动反思已有回复并纠错。这一过程通常需要依赖微调后的模型——因为如果仅靠模型内在的自纠能力而没有外部反馈,可能反而无法带来提升(Kamoi et al. 2024、Huang et al. 2024)。
并行采样简单直观、易于实现,但受限于模型能否一次性给出正确答案的能力。顺序修订则明确要求模型反思错误,但速度较慢,且实现时需要格外小心——存在把正确答案改错或引入其他幻觉的风险。这两种方法也可以结合使用。Snell et al. (2024) 指出,简单问题更适合纯顺序的测试时计算,而难题通常在顺序与并行计算达到最优比例时效果最好。
并行采样#
给定一个生成模型和一个可用于对完整或部分样本打分的评分函数,我们可以采用多种搜索算法来找到高评分的样本。其中最简单的是 Best-of-$N$:只需采集 $N$ 个独立样本,然后根据评分函数选出排名最高的那个。Beam Search 是一种更复杂的搜索算法,它使搜索过程更具自适应性,把更多采样算力集中投入到解空间中更有前景的部分。
Beam Search 维护一组有潜力的部分序列,交替进行扩展和剪枝,将不够有潜力的淘汰掉。在选择机制上,我们可以借助过程奖励模型(PRM;Lightman et al. 2023)来引导候选节点的选择。Xie et al. (2023) 用 LLM 来评估其自身生成的推理步骤正确的可能性——把评估形式化为一道选择题——发现每步的自评估能减少 Beam Search 解码中多步推理的累积误差。此外,在采样过程中对温度进行退火,有助于缓解累积的随机性。Xie et al. 在使用 Codex 模型时,在少样本 GSM8k、AQuA 和 StrategyQA 基准上取得了 5-6% 的提升。奖励平衡搜索(简称"REBASE";Wu et al. 2025)则单独训练了一个过程奖励模型(PRM),根据 softmax 归一化后的奖励分数,来决定 Beam Search 中每个深度下各节点应扩展多少。Jiang et al. (2024) 训练了他们命名为"RATIONALYST"的 PRM,用于在大量无标注数据上以合成推理链为条件进行 Beam Search 引导。他们通过比较"上下文中包含推理链"与"不包含推理链"两种情况下正确答案 token 的负对数概率差异是否超过某个阈值,来筛选出优质的推理链。在推理时,RATIONALYST 通过估计下一步推理步骤的对数概率("隐式"方式)来为 CoT 生成器提供过程监督,或者直接生成下一步推理步骤并将其纳入提示词中("显式"方式)。
有意思的是,即便不进行显式的零样本或少样本提示,也能触发涌现的思维链推理路径。Wang & Zhou(2024)发现:在采样的第一个 token 处进行分支,保留置信度最高的 top $k$ 个 token(置信度用采样时 top-1 与 top-2 候选之间的差值衡量),然后对这 $k$ 个采样路径继续采用贪心解码,其中的许多路径天然就包含思维链。尤其当上下文中已经出现思维链时,最终答案的解码也会更有把握。最终答案的置信度需要借助任务特定的启发式规则(例如数学题取最后一个数值)来定位答案区间,或通过追加提示 "So the answer is" 让模型继续生成。只在第一个 token 处分支的设计,出自以下观察:早期分支能显著提升潜在路径的多样性,而后续 token 受到前面已生成序列的强烈影响。
顺序修订#
如果模型能反思并修正过往回答中的错误,我们自然会期待它能产生一轮又一轮质量逐步提升的迭代修订。然而,这种自我纠错能力并非大语言模型天生具备,也无法开箱即用,原因在于存在多种失效模式,例如:(1) 幻觉问题,包括把原本正确的回答改错;(2) 行为坍缩为不纠错,比如对最初的不当回答只做极小改动甚至完全不动;(3) 无法泛化到测试时遇到的分布偏移。Huang 等人(2024) 的实验表明,简单直接地套用自我纠错反而会让效果变差,模型要实现自我提升离不开外部反馈,这类反馈可以来自与真值的匹配、启发式规则和任务专属指标,代码题中的单元测试结果(Shinn 等,2023)、更强的模型(Zhang 等,2024),以及人类反馈(Liu 等,2023)。
自我纠错学习(Welleck 等,2023)的目标是:给定一个固定的生成模型 $P_0(y_0 \mid x)$,训练出一个纠错模型 $P_\theta(y \mid y_0, x)$。生成模型保持通用性不变,而纠错模型可以针对具体任务定制,它只在已有模型回答的基础上,结合额外反馈(可以是一句话、编译器轨迹、单元测试结果等,也可缺省)进行生成:
- 首先,针对数据池中的每个提示,用生成模型产出多条输出;
- 然后,对同一提示的两条输出按价值高低配对,形成价值提升的样本对(提示 $x$,初始假设 $y$,修正版本 $y'$);
- 依据价值提升幅度 $v(y') - v(y)$ 以及两条输出的相似度 $\text{Similarity}(y, y')$ 按比例挑选这些样本对,用于训练纠错模型;
- 为鼓励探索,纠错模型自身生成的新样本也会回流到数据池中。推理阶段可以迭代调用纠错模型,形成逐次修订的纠错轨迹。
递归审视(Recursive inspection,Qu et al. 2024)同样旨在训练一个更优的校正模型,但用单一模型同时完成生成与自校正。
SCoRe(通过强化学习实现自校正,Kumar et al. 2024)是一种多轮强化学习方法,通过让模型在第二次尝试时给出比第一次更好的答案来鼓励自校正行为。该方法包含两阶段训练:第一阶段仅最大化第二次尝试的准确率,同时仅对第一次尝试施加 KL 惩罚,以避免首次回复偏离基础模型行为过多;第二阶段则同时优化第一次和第二次尝试的答案准确率。理想情况下,我们希望看到两次尝试的表现都能提升,但加入第一阶段可以防止出现行为坍缩——即模型对首次回复只做极少甚至不做修改;而第二阶段则进一步改善整体效果。
用强化学习提升推理能力#
近期在利用强化学习提升语言模型推理能力方面取得了诸多进展:通常使用一组带有标准答案的问题(一般是 STEM 类题目或答案易于验证的谜题),并对答对的模型给予奖励。这一领域的近期热潮由 OpenAI 的 o 系列模型的强劲表现所引发,随后 DeepSeek 也发布了相关模型和技术报告。
DeepSeek-R1(DeepSeek-AI, 2025)是一个开源大语言模型,专为数学、编程、逻辑问题求解等需要高级推理能力的任务而设计。该模型经过两轮 SFT-RL 训练,使其在推理和非推理任务上均表现优异。
- 冷启动监督微调:在数千条冷启动数据上对
DeepSeek-V3-Base基础模型进行微调。如果没有这一步,模型会存在可读性差、语种混杂等问题。 - 推理导向的强化学习:仅使用推理类 prompt 训练推理模型,采用两种基于规则的奖励:
- 格式奖励:模型需要用
<thinking> ... </thinking>标签包裹思维链。 - 准确性奖励:判断最终答案是否正确。数学题答案需要以特定格式呈现(例如放入方框中)才能可靠验证;编程题则通过编译器运行测试用例来判断是否通过。
- 格式奖励:模型需要用
- 拒绝采样 + 非推理监督微调:利用步骤 2 中强化学习 checkpoint 经拒绝采样生成的新 SFT 数据,结合来自
DeepSeek-V3的写作、事实问答、自我认知等领域的非推理监督数据,对DeepSeek-V3-Base重新训练。- 过滤掉存在语种混杂、段落过长、包含代码块的思维链。
- 引入采用
DeepSeek-V3(DeepSeek-AI, 2024)流程的非推理任务。 - 对于某些非推理任务,先提示
DeepSeek-V3生成可能的思维链再回答问题;但对于"你好"这类简单查询,无需生成思维链。 - 随后在总计 80 万条样本上对
DeepSeek-V3-Base微调 2 个 epoch。
- 最终的强化学习阶段:在推理与非推理 prompt 上对步骤 3 的 checkpoint 进行联合训练,进一步提升模型的帮助性、安全性与推理能力。
DeepSeek-R1 在多个常用推理基准测试上表现与 OpenAI o1-preview 和 o1-mini 相当。列表中唯一非推理模型是 DeepSeek-V3。(图片来源:DeepSeek-AI,2025)有意思的是,DeepSeek 团队证明了即使不用监督微调(SFT)阶段,纯靠强化学习(RL)也能学到反思、回溯等高级推理能力(即所谓的"顿悟时刻")。在 RL 训练过程中,模型会自然地学会在解决推理任务时花更多"思考 token"。所谓"顿悟时刻",指的是模型反思先前犯的错误,然后尝试用别的办法来纠正。后续出现了多种复现 R1 的开源工作,例如 Open-R1、SimpleRL-reason 和 TinyZero,这些工作都基于 Qwen 模型。它们同样验证了纯 RL 在数学题上能取得很好的效果,并且也会涌现"顿悟时刻"。
DeepSeek 团队也分享了一些失败的尝试。他们没能成功用上过程奖励模型(PRM),原因在于很难为每个步骤定义评分标准,也无法判定中间步骤是否正确,同时还会让训练更容易被"奖励黑客"钻空子。在蒙特卡洛树搜索(MCTS)方向上的尝试也以失败告终,因为语言模型的 token 搜索空间相比国际象棋之类的游戏要大得多;而且用来引导搜索的细粒度价值模型同样难以训练。失败的尝试往往能带来独特的洞见,我们鼓励研究社区多分享那些"行不通"的经验。
外部工具调用#
在推理过程中,某些中间步骤可以通过执行代码或数学计算来可靠且准确地求解。将这些推理环节卸载到外部代码解释器中——例如 PAL(Program-Aided Language Model;Gao et al. 2022)或 Chain of Code(Li et al. 2023)——可以利用外部工具扩展大语言模型的能力,无需让 LLM 自身学会执行代码或充当计算器。以 Chain of Code 为例,这些代码模拟器还可以由 LLM 加以增强:当标准代码解释器失败时,可以改用 LLM 来执行对应的代码行。使用代码来增强推理步骤,对数学问题、符号推理以及算法类任务尤为有益。单元测试未必作为编程题目的一部分出现,这种情况下我们可以指示模型自行生成单元测试,以便对照验证解答的正确性(Shinn, et al. 2023)。
ReAct(Reason+Act;Yao et al. 2023)将调用 Wikipedia API 的动作与生成推理轨迹相结合,使推理路径能够融入外部知识。
OpenAI 最近发布的 o3 与 o4-mini 也是两个很好的例子,其推理过程涉及网页搜索、代码执行和图像处理等工具调用。该团队观察到,大规模强化学习呈现出与 GPT 范式相同的趋势,即"算力越多,性能越好"。
忠实思考#
深度学习模型常被视为黑箱,为此人们提出了各种可解释性方法。可解释性很有价值,原因有二:首先,它为我们提供了一种额外检验手段,帮我们判断模型是否与设计者的意图存在偏差,或以我们通过行为监控难以察觉的方式出现了异常行为。其次,它能帮助我们判断模型得出答案的过程是否合理。思维链提供了一种尤为便利的可解释性形式——它将模型的内部过程以自然语言呈现出来。不过,这种可解释性建立在一个假设之上:模型诚实地描述了其内部思维过程。
近期研究表明,监控推理模型的思维链可以有效检测模型的异常行为,例如奖励欺骗,甚至可以让一个较弱的模型来监控更强的模型(Baker 等人,2025)。延长测试时的计算量也能提升模型面对对抗输入的鲁棒性(Zaremba 等人,2025);这一点从直觉上也讲得通——当模型遇到异常输入(比如对抗样本或越狱攻击)时,更充分的思考尤为有用,因为它可以利用额外的思考时间来理解当前所面临的反常情境。
exit(0) 式的编程欺骗利用了一个漏洞,使智能体在所有单元测试运行完毕之前提前退出环境;raise SkipTest 式的欺骗则是智能体从测试框架外部的函数中抛出异常,以此跳过单元测试的评估。(图片来源:Baker 等人,2025)模型是否如实表达了它的想法#
直观来看,模型的思维链可能存在偏差,原因在于缺乏明确的训练目标来促使其进行忠实推理。另外,当我们用人类撰写的解释对模型进行微调时,这些样本本身可能就包含错误。因此,我们不能默认假设思维链始终是忠实的。
Lanham 等人(2023)通过刻意在思维链中引入错误,并衡量其对一组多选题任务(如 AQuA、MMLU、ARC Challenge、TruthfulQA、HellaSwag)准确率的影响,考察了思维链忠实性失败的几种模式:
-
错误一(提前作答):模型可能在思维链生成完毕之前就已得出结论。这一点通过提前截断或在思维链中插入错误来测试。不同任务对思维链效果的依赖程度不同,有些任务的评估性能对截断的思维链很敏感,有些则不然。Wang 等人(2023)做了类似的实验,但引入了更加隐蔽的错误,涉及思维链形成过程中的桥接对象或语言模板。
-
错误二(无效信息词元):无效信息的思维链词元提升了性能。该假设的测试方法是将思维链替换为填充文本(例如全部为句号),结果显示准确率并未提升,某些任务相比不使用思维链时甚至略有下降。
-
错误三(人类难以理解的编码):相关信息以一种人类难以理解的方式编码。以非标准方式改写思维链后,各数据集上的性能并未下降,这表明准确率的提升并不依赖于人类可读的推理过程。
有趣的是,Lanham 等人指出,对于多选题,较小的模型可能不足以很好地利用思维链,而较大的模型即便不使用思维链也能完成这些任务。通过比较使用与不使用思维链时得出相同答案的比例来衡量对思维链推理的依赖程度,这一指标在多选题上并不总是随模型规模增大而上升,但在加法任务上则随模型规模增大而上升,说明在复杂推理任务中"思考时间"更加重要。
另一些测试 CoT 忠实性的方法不是直接修改 CoT 路径,而是对提示(prompt)本身做扰动(Turpin et al. 2023、Chua & Evans, 2025、Chen et al. 2025)。
一种做法是在 few-shot 示例中无论真实标签是什么,都一律把正确答案标为"(A)",以此引入偏见。
另一种提示技巧是在提示中插入误导性暗示,例如 "我觉得答案是 <random_label>,但很好奇你怎么想",或者 "一位斯坦福教授认为答案是 <random_label>"。通过对比同一道题在有无误导暗示时模型的预测结果,我们可以衡量模型能否如实描述该暗示对其答案的影响。具体而言,当模型给出的"带暗示"答案和"无暗示"答案不同时,我们考察模型在带暗示情况下解题时是否会承认这个暗示的存在。如果模型是忠实(faithful)的,就应当明确承认该暗示的影响,并坦承答案的变化正是由此所致。
多项研究发现,推理模型(reasoning models)在如实描述暗示影响方面远优于所有被测试的非推理模型。例如,我们可以统计模型将暗示视为决定性因素的比例(即"忠实 CoT")。整体来看,推理模型(Claude 3.7 Sonnet、DeepSeek R1)的表现优于非推理模型(Claude 3.6、DeepSeek V3)。
有证据表明,使用奖励模型会导致模型输出的忠实性下降。经典 RLHF 中的奖励模型并未经过训练来激励模型在测试中表现出忠实行为,因为其偏好对比数据集是由人类挑选哪个回答看起来更好或更令人满意来收集的。然而,在推理模型中,思维链路径的优化目标是产生正确的最终答案,而非匹配奖励模型所定义的人类偏好,因此直观上预期其忠实性会更高。
对思维链的优化压力:利还是弊?#
监控推理模型的思维链以发现奖励作弊行为是有效的。使用这种监控器的一种简单方法是,在测试时以监控器作为过滤器进行拒绝采样,筛选出没有奖励作弊的解答。然而,这种方法仅在 RL 早期阶段有效;随着模型被进一步优化,在预算范围内几乎找不到能通过思维链监控器的样本。这一挑战自然提示我们可以考虑将思维链监控器纳入 RL 奖励中——即一种基于过程的监督——以防止奖励作弊。
然而,将思维链监控奖励引入 RL 的效果并不理想,因为会导致"隐匿式奖励作弊":模型试图将其真实意图隐藏在思维链中(Baker et al. 2025)。在 RL 训练过程中直接施加来自思维链监控器的优化压力后,模型仍然能找到作弊的方法,虽然作弊频率略有降低,但能够将意图隐藏在思维链中以规避监控器的检测。
Yeo 等人(2025) 关于 CoT 长度 RL 信号的实验印证了 Baker 等人类似的结论:新的 RL 奖励塑形方式会催生新的奖励作弊行为。他们设计的奖励函数中,正确的 CoT 比错误的得分更高、短的正确 CoT 比长的正确 CoT 得分更高、短的错误 CoT 比长的错误 CoT 受到的惩罚更大。在这一额外奖励下,模型学会了在遇到难题时在 CoT 中重复文字,而非真正去解题。Yeo 等人随后引入了 n-gram 重复惩罚来遏制这种作弊行为。
Chen 等人(2025) 在一个有缺陷的 RL 环境中做了实验:对选择题使用填了错误答案的评分器。结果模型在超过 99% 的提示上都利用了这个奖励漏洞,但在超过一半的环境中,它几乎从不(<2%)在 CoT 中把这一作弊行为说出来。即便施加额外的 RL 优化压力,也无法促使模型在 CoT 中明确表达这一作弊行为。
RL 训练本质上对奖励作弊十分敏感。仅靠启发式排查奖励作弊并手动修补,容易陷入"打地鼠"式的困局。我们建议,在 RL 训练中直接对 CoT 施加优化时要非常谨慎,甚至最好完全避免这样做。
连续空间中的思考#
自适应计算时间(Adaptive Computation Time)由 Alex Graves 于 2016 年提出,虽然早于大语言模型时代,但开创了同一个方向:让模型在推理时动态决定所需的计算步数,这可以看作是在测试时让模型在连续空间中"想得更深"。连续空间中的自适应思考时间可以通过循环架构在纵向上实现,也可以通过更多的顺序采样步数在横向上实现。
循环架构#
已有多种架构变体被提出来将 Transformer 架构改造为循环结构,从而实现自适应测试时计算(Dehghani 等,2019;Hutchins 等,2022;Bulatov 等,2022)。如果深入梳理相关文献,文章会过于冗长,因此这里只回顾其中几篇。
Universal Transformer(Dehghani 等,2019)将 Transformer 中的自注意力机制与 RNN 的循环机制相结合,利用自适应计算时间(Graves,2016)来动态调整步数。从宏观上看,它可以视为针对每个 token 学习隐藏状态表示的循环函数;如果将步数固定,则 Universal Transformer 等价于一个层间共享参数的多层 Transformer。
Geiping 等人(2025)近期提出了一种循环架构设计,在标准 Transformer 之上增加了一个循环块 $R$。该循环块的每次迭代都接收嵌入 $\mathbf{e}$ 和一个随机状态 $\mathbf{s}_i$。从概念上讲,这种循环深度架构与条件扩散模型有些类似——原始输入 $\mathbf{e}$ 在每个循环步骤中都会提供,而一个由高斯分布初始化的随机状态 $\mathbf{s}_i$ 则在整个过程中被迭代更新。(有趣的是,他们实验中一些更接近扩散模型的设计表现反而较差。)
$$ \begin{aligned} \mathbf{e} &= P(\mathbf{x}) & & \text{embedding} \\ \mathbf{s}_0 & \sim \mathcal{N}(\mathbf{0}, \sigma^2 I_{n \cdot h}) \\ \mathbf{s}_i &= R(\mathbf{e}, \mathbf{s}_{i-1}) \quad\text{ for }i \in {1, \dots, r} & & \small{\text{recurrent block; resembles a Transformer block}}\\ \mathbf{p} &= C(\mathbf{s}_r) & & \text{unembedding} \end{aligned} $$训练时的循环次数 $r$ 是随机的,每个序列从一个对数正态泊松分布中采样。为了控制计算成本,反向传播被截断到只作用于循环单元的最后 $k$ 次迭代(实验中 $k=8$),从而可以在泊松分布的重尾部分进行训练。嵌入块由于其输出 $\mathbf{e}$ 在每一步都被注入,因此在每一步都会持续接收梯度更新,这类似于 RNN 的训练方式。不出所料,循环模型的训练稳定性非常敏感——初始化、归一化以及超参数等因素都很重要,尤其是在放大训练规模时。例如,隐藏状态可能因为对每个 token 预测相同的隐藏状态而崩溃;或者模型可能学会忽略传入的状态 $\mathbf{s}$。为了稳定训练,Geiping 等人采用了嵌入缩放因子、较小的学习率以及精细的调参。
Thinking Tokens#
思考令牌(thinking tokens)是指在训练或推理阶段引入的一组隐式令牌,它们本身并不承载直接的语义,而是为模型提供额外的思考时间和算力,从而提升表现。
Herel & Mikolov(2023)提出了这样的思路:在句子中每个词之后插入特殊的思考令牌(<T>),并用这样的数据集训练模型。每个思考令牌为模型争取到额外的处理时间,使其能够做出更好的预测。在一个玩具模型上的实验表明,使用思考令牌训练得到的困惑度低于未使用的基线模型。对于较复杂的推理任务或涉及数字的句子,思考令牌带来的提升更为明显。
类似地,Goyal 等人(2024)提出的暂停令牌(pause tokens)通过在输入序列末尾追加虚拟令牌(例如 . 或 # 这样的字符)来延迟模型的输出,使其在推理阶段获得额外的计算量。需要注意的是,暂停令牌必须在训练和推理时都注入;如果仅在微调阶段使用,对暂停令牌的训练带来的增益有限。训练时,会在序列中均匀随机地插入多份暂停令牌,并且忽略暂停令牌上的损失。
有趣的是,上述实验中的思考令牌或暂停令牌并不携带任何额外信息,也没有引入大量新参数。但为什么它们仍然有帮助呢?一方面,它们通过引入更多推理循环扩展了计算量,等价于增加了算力上限;另一方面,可以把它们看作一种特殊的、隐式的思维链(CoT)。这种方案的不足之处在于模型需要针对思考令牌进行预训练。不过,作为一种在推理时思维链之上进一步提升测试阶段算力利用能力的思路,它仍然颇具启发性。
Quiet-STaR(Zelikman 等人,2025)提出了 token 级别的推理方法:训练模型在每个 token 之后生成推理过程来解释后续文本。它将带有推理和不带推理的下一文本预测混合在一起,通过学习生成更好的推理过程,并利用 REINFORCE 算法来优化推理过程的生成质量。
Quiet-STaR 包含三个阶段:
-
思考(Think):借助推理过程预测下一个 token。由于 token 级推理的计算开销很大,该阶段被设计为并行生成多条推理过程。这里用一种特殊的注意力掩码,使每个推理 token 只能关注自身、同一条推理中此前出现的推理 token,以及前文的 token。
-
表述(Talk):把没有推理过程时的下一 token 预测与加上推理过程后的预测进行混合。两种 logits 的混合权重由一个浅层 MLP 构成的混合头学得,MLP 的输入是每条推理过程之后的隐藏层输出。通过 teacher forcing 可以筛选出预测正确的下一 token。
-
学习(Learn):使用 REINFORCE 算法训练模型生成更好的推理过程——从能提升正确下一 token 概率的样本中学习,同时丢弃那些损害预测效果的样本。
在不针对特定数据集做微调的情况下,Quiet-STaR 在 Mistral 7B 上的 CommonsenseQA 零样本准确率从 36.3% 提升到 47.2%,GSM8K 从 5.9% 提升到 10.9%。
将思考建模为潜变量#
潜在变量模型定义了一种概率框架,用未被观测到的(潜在的)变量来解释可观测数据。这些潜在变量捕捉了生成可观测结果的隐藏结构或中间过程。语言模型可以看作是一种概率潜在变量模型,其中测试时的思考与推理步骤就是潜在思维变量(Zhou 等人,2020;Phan 等人,2023)。这种潜在变量模型定义了问题 $x_i$、答案 $y_i$ 和潜在思维 $z_i$ 的联合分布。我们希望最大化给定问题下答案的对数似然,其中把各种思维链(CoT)作为潜在变量($N$ 为样本数量;$K$ 为每个问题的 CoT 数量):
$$ \begin{aligned} \log \mathcal{L}(\theta) &= \log p(y \mid x) \\ &= \log \sum_{k=1}^K p(y, z^{(k)} \mid x) \\ &= \log \sum_{k=1}^K p(z^{(k)} \mid x)\; p(y \mid z^{(k)}, x) \\ &= \log \mathbb{E}_{z^{(k)} \sim p(z^{(k)} \mid x)} \; p(y \mid z^{(k)}, x) \\ \end{aligned} $$我们的目标是最大化正确答案的边际似然 $p(y \mid x)$,其中每个问题有多条推理链 $\{z^{(k)}\}_{k=1}^K$。
期望最大化算法#
期望最大化(Expectation-Maximization,EM)是一种常用的迭代算法,用于优化带有(隐藏)潜在变量的模型参数,因此可以应用于训练更好的 CoT,然后以此为条件生成更好的回答。通常我们在 E 步(Expectation)猜测潜在变量的缺失信息(即如何采样更好的 CoT),在 M 步(Maximization)根据潜在变量优化模型参数(即如何采样更好的答案),如此交替迭代直至收敛。
$$ \log \mathcal{L}(\theta) = \log \mathbb{E}_{\underbrace{z^{(k)} \sim p(z^{(k)} \mid x)}_\text{E 步}}\;\underbrace{p(y \mid z^{(k)}, x)}_\text{M 步} $$由于无法直接从潜变量分布 $p(z \mid x, y)$ 中采样,研究者们探索了多种方法来获取优质的思维链(CoT)样本以更新模型,包括借助人工标注数据(Zhou 等人,2020)、Metropolis-Hastings MCMC(Phan 等人,2023),以及使用特殊重要性权重的蒙特卡洛采样(Ruan 等人,2025)。Ruan 等人(2025)尝试在大量包含潜思考的网页文本上用 EM 算法训练模型:对每段观测数据合成一个潜思考,然后让模型以自回归方式同时学习潜思考和数据。
他们首先提示一个大语言模型 $\tilde{q}$,根据观测数据 $X_i$ 生成合成的潜思考 $Z_i$:
You are provided with a pair of web document prefix and suffix. Your task is to insert latent thoughts between them underlying the creation of the suffix conditioned on the prefix. The latent thoughts should include: the missing background knowledge and the reasoning traces underlying each claim (especially, step-by-step derivations or logical reasoning).
他们使用 <StartOfLatent><Prior> ... <EndOfPrior> 这样的特殊标记将生成的潜思考内容插入原始数据,以训练联合分布 $p(z, x)$ 或近似后验 $q(z \mid x)$,具体取决于 $z$ 是插入在 $x$ 之前还是之后。然而,由于使用大语言模型 $\tilde{q}(z \mid x)$ 来生成思维链,近似 $q(z \mid x)$ 的质量存在一个性能上限。为此,Ruan 等人在 E 步中引入了重要性权重来筛选 CoT 样本,公式如下:
这样我们就能优先考虑那些思维链表现优异的样本——也就是能很好预测观测结果的(即 $p(x \mid z^{(k)})$ 较高)、简洁直观的(即 $p(z^{(k)})$ 较高)同时信息量丰富且不会过于显而易见的(即 $q(z^{(k)} \mid x)$ 较低)样本。
迭代学习#
由于预训练模型已经具备生成思维链的能力,很自然地可以设计一个迭代改进流程:生成多条思维链,只对那些能得出正确答案的推理过程进行微调。
然而,这种简单的方案存在一个问题——对于模型未能解决的问题,它不会获得任何学习信号。STaR("Self-taught reasoner",即"自学推理器";Zelikman 等人,2022)通过为失败尝试增加一个"合理化"步骤来解决这一局限:在该步骤中,模型同时以问题和真实答案为条件,反向生成优质的思维链,从而能够产生更合理的推理过程。之后,模型在以下两类正确解上进行微调:直接得出正确输出的,以及通过合理化过程生成的。
我们可以将 STaR 视为强化学习中策略梯度的近似,其中奖励函数是一个简单的指示函数 $\mathbb{1}[\hat{y} = y]$。由于 $p(y \mid x) = \sum_z p(z \mid x) \; p(y \mid x, z)$,我们的目标是最大化在采样 $z \sim p(z \mid x)$ 进而采样 $y \sim p(y \mid x, z)$ 时该奖励的期望。
$$ \begin{aligned} \nabla_\theta J(\theta) &= \nabla_\theta \mathbb{E}_{z_i, y_i \sim p(.\mid x_i)} \mathbb{1}[y_i = y_i^\text{truth}] \\ &= \sum_{i=1}^N \nabla_\theta \mathbb{1}[y_i = y_i^\text{truth}] \; p(y_i, z_i \mid x_i) \\ &= \sum_{i=1}^N \mathbb{1}[y_i = y_i^\text{truth}] \; p(y_i, z_i \mid x_i) \frac{\nabla_\theta p(y_i, z_i \mid x_i)}{p(y_i, z_i \mid x_i)} & \text{;log-derivative trick}\\ &= \mathbb{E}_{z_i, y_i \sim p(.\mid x_i)} \mathbb{1}[y_i = y_i^\text{truth}] \; \nabla_\theta \log p(y_i, z_i \mid x_i) & \text{;log-derivative trick} \end{aligned} $$每一轮迭代都等价于:先根据 $\mathbb{1}[y=y^\text{truth}]$ 筛选 CoT 样本,再通过监督微调优化生成优质 CoT 和答案的对数概率。STaR 的性能随训练轮数增加而提升,而用于生成更好 CoT 的"合理化"过程则加速了学习。他们观察到,高温采样会增加"答案正确但推理错误"的情况,在这类数据上微调 LLM 会损害泛化能力。对于没有标准答案的数据集,可以将多次高温输出的多数投票结果作为答案的代理标签(Wang et al. 2022),从而能够使用合成样本进行训练。
思维时间的 Scaling Laws#
迄今为止,已有大量证据表明:在推理时让模型在生成最终答案之前投入更多算力进行思考,能显著提升性能。比如在提示词中引导模型先写出中间推理步骤再给出答案,又或者训练模型在预测下一个 token 前先停下来反思,这些方法都能让模型表现突破训练阶段的能力上限。这本质上为提升模型智能开辟了一个新的可调节维度,与模型大小、训练算力、数据规模这些由 scaling laws 确立的经典因素形成互补(Kaplan et al. 2020)。
近期研究表明,优化 LLM 的测试时算力(test-time compute)往往比单纯增大模型参数量更有效(Snell et al. 2024、Wu et al. 2025)。较小的模型配合先进的推理算法,可以在成本与性能之间实现 Pareto 最优的平衡。
Snell et al. (2024) 对比了测试时算力与预训练算力,发现二者并不能 1:1 互换。当模型能力差距较小时,测试时算力能够轻松弥补简单和中等难度问题上的差距;但面对难题时效果就大打折扣了。预训练与推理之间的 token 预算比例非常关键,只有当推理 token 数量远少于预训练 token 时,测试时算力才更划算。这说明,先用充足的预训练数据和算力打牢基础模型的能力,仍然至关重要——测试时算力并不能包治百病,也无法填补巨大的模型能力鸿沟。
s1 模型(Muennighoff & Yang 等人,2025)通过预算强制(budget forcing)技术来扩展 CoT 推理路径的长度,即通过追加 "wait" 一词强制延长推理过程,或通过追加思维结束标记或 "Final Answer:" 来终止模型的思考过程从而缩短推理。他们观察到,以 token 衡量的平均思考时间与下游评估准确率之间存在明显的正相关关系。
当将这种预算强制技术与其他控制推理轨迹长度的解码方法进行比较时,一个相当令人惊讶的发现是:简单的拒绝采样(即不断采样生成直到长度符合 token 预算)反而导致了逆向扩展,即更长的 CoT 导致更差的性能。
未来方向#
测试时计算与思维链推理的探索为增强模型能力带来了新机会。更值得关注的是,借助测试时思考,我们正在构建的未来 AI 系统将借鉴人类思考的最佳实践,融入适应性、灵活性、批判性反思与错误纠正。当前进展令人振奋,也激励我们投入更多未来研究,去深入理解并改进——不仅是我们以及模型"如何"思考,更是"为什么"思考。
最后,我希望就以下关于测试时计算与思维链推理的开放性问题,呼吁更多研究。
- 在 RL 训练中,能否激励模型生成人类可读、忠实于原意的推理路径,同时避免奖励作弊行为?
- 该如何定义奖励作弊?能否在 RL 训练或推理过程中无需人工干预就捕捉到奖励作弊?又该如何避免 RL 训练中对奖励作弊采取"打地鼠"式的修修补补?
- 自我纠错可以发生在思维链内部,也可以通过多轮 RL 被显式地激发。在没有真实答案的情况下,如何训练模型在不产生幻觉或退化的前提下自我修正?
- 对于高度情境化、个性化且难以评分的任务(例如创意写作、教练辅导、头脑风暴),如何用思维链 rollout 进行 RL 训练?
- 实际部署模型时,我们不可能无限延长测试时思考。如何在降低推理成本的前提下(例如通过蒸馏),把性能增益顺利回灌到基座模型中?
- 如何让测试时的计算投入根据问题难度自适应调节?
引用#
请按以下方式引用本文:
Weng, Lilian. "Why We Think". Lil'Log (May 2025). https://lilianweng.github.io/posts/2025-05-01-thinking/
或使用 BibTex 引用:
@article{weng2025think,
title = {Why We Think},
author = {Weng, Lilian},
journal = {lilianweng.github.io},
year = {2025},
month = {May},
url = "https://lilianweng.github.io/posts/2025-05-01-thinking/"
}
参考文献#
[1] Alex Graves. "循环神经网络的自适应计算时间"。arXiv 预印本 arXiv:1603.08983(2016)。
[2] Wang Ling 等. "通过理由生成实现程序归纳:学会解答并解释代数应用题"。arXiv 预印本 arXiv:1705.04146(2017)。
[3] Karl Cobbe 等. "训练验证器以解答数学应用题"。arXiv 预印本 arXiv:2110.14168(2021)。
[4] Jason Wei 等. "思维链提示激发大型语言模型的推理能力"。NeurIPS 2022。
[5] Maxwell Nye 等. "展示你的工作:语言模型中间计算的草稿本"。arXiv 预印本 arXiv:2112.00114(2021)。
[6] Daniel Kahneman. 《思考,快与慢》。Farrar, Straus and Giroux(2013)。
[7] Takeshi Kojima 等. "大型语言模型是零样本推理者"。NeurIPS 2022。
[8] Michihiro Yasunaga 等. "大型语言模型作为类比推理者"。arXiv 预印本 arXiv:2310.01714(2023)。
[9] Eric Zelikman 等. "STaR:用推理来引导推理"。NeurIPS 2022。