推理究竟在求解什么目标?用 token 空间寻路视角重新理解推理模型
What objective is reasoning solving?
文章提出把推理视为 token 空间中的寻路:每个采样路径 z 从提示 x 出发,落入验证器判定正确的答案集合 S_x 即成功,成功率 p_x 是所有命中路径概率之和。best-of-k 采样可让成功率从 p_x 升至 1-(1-p_x)^k,但 RL 训练只最大化找到路径的概率,并不保证单条链收敛到正确答案,这也解释了过度思考反而变差、思维链不忠实与 reward hacking 等现象。
将推理视为在 token 空间中的寻路。
关于推理,有一个直观但简化的图景:让模型思考更长时间,它就更有可能正确。这与我们人类的直觉相符:在思考上投入更多时间和精力,我们就更有可能得出正确答案。
但这个图景似乎无法解释一切。在 RL 训练中,模型学会写出更长的思维链,并且随着思维链变长,它们变得更准确。然而,如果你拿一个训练好的模型,强制让任意一条链运行更长时间,它会在一段时间内有帮助,然后就不再有帮助了。1 有时答案甚至会变得更差,就好像它想得太多了一样。2 如果一条思维链真的在收敛到某个最优解,更多的步骤不应该让它变得更差。那么,在推理时真正有帮助的,真的是每条链的长度吗?还是某种更微妙的东西?
这篇文章是我试图通过将推理视为在 token 空间中寻路来澄清这一困惑(主要是为我自己)。我们将看到,RL 最大化了找到一条从 $x$ 到 $\Scal_x$ 的路径的概率,但单条路径并不保证收敛到正确答案。作为额外收获,这一视角澄清了关于推理模型的一些奇怪观察,比如不忠实的思维链和奖励黑客。
将推理视为寻路#
向一个推理模型问同一个数学问题十次,你会得到十条不同的思维链。与其将推理视为一个朝着答案前进的神秘过程,不如将其视为在 token 空间中的寻路。从问题到正确答案有许多路径,模型在每次采样时遍历其中一条。
考虑这个问题:“$1 + 2 + 3 + \cdots + 10$ 等于多少”?一种解法是逐个相加:1、3、6、10,依此类推直到 55。另一种方法是从外向内配对:$1 + 10$、$2 + 9$、$3 + 8$、$4 + 7$ 和 $5 + 6$ 各得 11,五对 11 得 55。这两条路径都落在正确答案 55 上。
我们可以将推理视为遵循这种一般模式。我们被给定一个起点,即提示,我们称之为 $x$。 我们想要找到一条从 $x$ 出发、终止于正确答案 $y$ 的路径 $z$。为了判断一条路径是否落在正确的位置,我们假设有一个验证器 $r(x, y)$,如果 $y$ 正确则返回 1,否则返回 0。
因此,给定一个起点 $x$,我们想要找到一条 token 路径 $z$,它落在集合
$$\Scal_x = \{y : r(x, y) = 1\}.$$
本文顶部的图勾勒了这一图景。每条灰线都是一条采样路径:它从左侧的提示出发,通过采样 $z$ 在 token 空间中蜿蜒前行,其中一些路径落在 $\Scal_x$ 中。
由于许多路径都落在 $\Scal_x$ 中,成功概率是所有这些路径的总和。设 $\pi(z \mid x)$ 为模型在给定提示 $x$ 时生成路径 $z$ 的概率,$y(z)$ 为 $z$ 末尾的最终答案。成功概率是生成每条路径的概率,乘以该路径落在 $\Scal_x$ 中的概率,再对所有路径求和:
$$p_x = \prob{\text{a path lands in } \Scal_x \mid x} = \sum_{z} \underbrace{\pi(z \mid x)}_{\text{samples path } z}\; \underbrace{\prob{y(z) \in \Scal_x \mid z}}_{\text{path } z \text{ lands in }\Scal_x}.$$
第二个因子在路径落入 $\Scal_x$ 时为 1,否则为 0,因此我们只对落入 $\Scal_x$ 的路径概率求和:
$$p_x = \sum_{z} \pi(z \mid x)\, \ind{y(z) \in \Scal_x} = \sum_{z \,:\, y(z) \in \Scal_x} \pi(z \mid x).$$
我们将 $p_x$ 称为成功概率。最大化这个概率意味着我们的模型更有可能采样到落入 $\Scal_x$ 的路径。
注意,有两种方式可以提高这个概率。要么模型可以采样多条通往同一答案的路径,每条路径的概率都很小;要么模型可以以非常高的概率采样到一条通往答案的路径。成功概率并不关心我们得到的是哪一种,但在实践中,我们可能希望优先考虑特定路径或确保样本的多样性3。
我们如何提升成功概率?#
Best-of-$k$ 采样#
最简单的路径寻找方式是让模型 $\pi$ 不断采样路径 $z$,直到有一条落入 $\Scal_x$。
由于我们假设有一个验证器,我们可以进行 best-of-$k$ 采样,即采样 $k$ 条路径并寻找成功。每条路径失败的概率为 $1 - p_x$,因此所有 $k$ 条都失败的概率为 $(1-p_x)^k$,成功概率从 $p_x$ 提升到
$$\prob{\text{at least one of } k \text{ paths lands in } \Scal_x \mid x} = 1 - \underbrace{(1-p_x)^k}_{\text{all } k \text{ paths miss}}.$$
这是一个有保证的计算扩展轴。只要 $p_x > 0$,成功概率就会随着我们采样更多路径而单调增加,因此在更多样本上花费更多计算总是有帮助的,正如 Brown et al. 2024 早期所展示的那样。 然而,这里的扩展是样本数量上的扩展,而不是路径长度(思考更久)上的扩展。
训练模型生成更好的样本#
到目前为止模型是固定的,因此 $p_x$ 也是固定的。我们能否改变模型来提高 $p_x$ 本身?
这里有一个简单的方法。收集许多答案可以检查的提示。对于每个提示,从模型中采样一些路径。我们保留落入 $\Scal_x$ 的路径,并在保留的路径上训练模型。然后重复。每一轮,我们训练模型对其采样的成功路径赋予更多权重。这个循环称为拒绝采样微调,STaR 是其在推理方面的早期版本。
带可验证奖励的强化学习,即当今推理模型的训练方式,结果几乎做的是同样的事情。设 $\pi_\theta$ 为权重为 $\theta$ 的模型。那么由于 $r(x, y(z)) = 1$ 恰好当 $y(z) \in \Scal_x$ 时成立:
$$ \begin{aligned} p_x &= \sum_{z \,:\, y(z) \in \Scal_x} \pi_\theta(z \mid x) \\ &= \sum_{z} \pi_\theta(z \mid x)\, \ind{y(z) \in \Scal_x} \\ &= \sum_{z} \pi_\theta(z \mid x)\, r(x, y(z)) \\ &= \ev[z \sim \pi_\theta(\cdot \mid x)]{r(x, y(z))}, \end{aligned} $$
这意味着期望的二值奖励恰好就是成功概率 $p_x$。
通过对数导数技巧计算成功概率的梯度,我们得到
$$\grad_\theta\, p_x = \ev[z \sim \pi_\theta(\cdot \mid x)]{r(x, y(z))\, \grad_\theta \log \pi_\theta(z \mid x)},$$
这正是策略梯度,也称为 REINFORCE 估计器。 现在用 $N$ 条采样路径 $z_1, \dots, z_N$ 来估计这个梯度。失败的路径 $r = 0$ 并消失,而落入 $\Scal_x$ 的路径 $r = 1$。如果 $N$ 条路径中有 $M$ 条成功,则估计为
$$\grad_\theta\, p_x \approx \frac{1}{N} \sum_{i \,:\, \text{landed}} \grad_\theta \log \pi_\theta(z_i \mid x) = \underbrace{\frac{M}{N}}_{\text{成功率}} \cdot \underbrace{\frac{1}{M} \sum_{i \,:\, \text{landed}} \grad_\theta \log \pi_\theta(z_i \mid x)}_{\text{成功路径的对数似然}}。$$
这个梯度包含两项:经验成功率 $M/N$ 和成功路径的平均对数似然。
换句话说,使用二值奖励的 REINFORCE 的一步,就是在模型自己采样的路径上做拒绝采样微调的一步,并按当前成功率 $M/N$ 缩放。
这也解释了引言中的第一个观察:在 RL 训练过程中,思维链会变长。每一步都会把模型拉向那些成功落地的路径,因此如果成功的路径往往比失败的路径更长(例如因为它们包含回溯行为、从环境中收集更多反馈,或者只是运气好),模型就会学会写出更长的路径。
摊销与泛化#
在 RL 训练期间,我们花费大量算力来搜索好的路径,然后训练模型直接生成这些路径。训练完成后,模型无需再花费这些额外算力采样多条路径就能给出答案。这被称为对搜索进行摊销:我们在训练时一次性付出代价,这样每次向模型提问时就不必再付出代价。4 由于我们在许多提示上训练单个模型,该模型有可能泛化到它从未见过的新提示。
下图展示了四个提示的情况,每个提示都有自己的 $\Scal_x$,并在训练前后的模型之间切换。训练期间,我们从每个提示中采样路径,保留成功的路径,并对它们做 SFT。百分比显示了给定每个提示时的经验成功率。空心提示是新的,模型之前没有见过,但训练后模型能泛化到这个新提示。随着新提示离训练分布越来越远,其准确率会下降(试着拖动它!)。
重新审视一些关于推理的观察#
一旦我们把推理模型看作一个经过训练、在给定任意 $x$ 时落入 $\Scal_x$ 的分布,关于这些模型的一些奇怪事实就变得清晰了。
思维链并不保证忠实#
我们上面的验证器只检查答案是否正确。如果 $y(z) \in \Scal_x$ 则奖励为 1,否则为 0,因此中间 token $z$ 只是模型得到答案的一种方式。没有任何东西要求这些 token 为真,或解释随后的答案,尽管由于模型的预训练,这些通常确实相关。
如果我们想要有意义的思维链,就需要调整奖励或训练目标。
奖励黑客既来自验证器,也来自采样器#
我们还假设验证器从不出错,即 $r(x, y)=1$ 当且仅当 $y$ 确实是 $x$ 的正确答案。但在实践中,验证器可能并不完美。 那么 $\Scal_x$,即验证器接受的答案集合,就与正确答案集合不同:它可能包含错误答案,也可能遗漏正确答案。这种错误设定打开了 $\Scal_x$ 中的一些区域,模型可能会学会落入这些区域,即使这并非我们本意。
因此,奖励黑客行为源于不完美的验证器——它未能捕捉到我们真正想要的东西,也源于不完美的采样过程——它未能避开这些捷径区域。
在下图中,虚线圆圈是正确答案的集合,红色椭圆是 $\Scal_x$。椭圆向提示词方向延伸,因此其中的错误答案最容易到达,训练之后大多数路径都会落在那里。
这一可视化也说明了为什么扩大 RL 规模(生成更多样本和更长样本)会让奖励黑客行为更可能发生。我们越是广泛地“模糊测试”验证器,就越可能找到一条落入 $\Scal_x$ 中错误指定区域的路径。一旦模型找到这条捷径,训练就会把模型推向类似的行为。
那么推理到底在求解什么目标?#
推理实际上并没有在求解任何目标。一条路径并不保证收敛到正确答案。只有在路径分布的总体上,我们才能获得较高的成功概率。
RL 训练通过花费大量算力搜索成功路径,然后训练模型复现这些路径,直接提高了成功概率 $p_x$。我们归功于“思考更久”的收益,来自训练期间我们付费进行的搜索,而非推理时。更长的思维链在训练期间往往与成功相关,随后这一点被训练进模型。采样的成本被摊销进权重中,因此在推理时模型很可能用单次采样就成功,但任何单次采样并不保证成功。
Muennighoff et al. 2025 通过每当模型试图停止时就追加“Wait”来迫使它继续思考。准确率起初上升,随后趋于平缓。 ↩︎
一个很好的例子是 Gema et al. 2025,它发现了一些任务,其中更长的推理反而导致更差的准确率。 ↩︎
我们可能会在未来的文章中重新讨论这一点。 ↩︎
用昂贵的搜索找到一个更好的答案,然后训练网络廉价地输出该答案,这一想法也出现在语言模型之外。AlphaZero 在自我对弈的每一步都运行树搜索,并训练其策略网络偏好搜索中找到的走法(专家迭代是同样的思路)。物理学家和天气预报员用模拟器做同样的事:他们运行昂贵的手工构建的模拟来得到答案,然后训练神经网络直接预测该答案。 ↩︎
来源:Hacker News · alexwang.ai