\subsection{测试时缩放}

大语言模型的卓越性能在很大程度上得益于训练阶段的计算扩展——通过使用更多数据、更大模型和更多算力来提升能力。然而，对于数学证明、逻辑推理等复杂任务，仅靠训练扩展是不够的。这类任务需要模型按步骤进行逻辑推演，而所有可能的推理路径是无法在训练中穷尽的。一种更高效的理念是将部分计算资源从训练转移到推断阶段，让模型在运行时动态地构建推理过程，即“花更多时间思考”。这种在模型推断阶段通过增加计算量来提升推理表现的方法，就称为测试时缩放（test-time scaling，也称测试时扩展）。

测试时缩放的核心优势在于计算资源分配的灵活性。对于简单问题，模型可以快速作答；对于困难问题，则可以分配更多的算力，允许模型探索不同的推理思路，从而有更大概率得到正确答案。实践表明，一个规模较小的模型，若在测试时被给予额外的时间进行推理，其表现常常能超越那些被要求立即给出答案的大模型。正因如此，测试时缩放成为增强大语言模型推理能力的一条极具吸引力的技术路径。接下来的两个小节将分别从生成多条推理路径和构建搜索过程这两个角度，介绍实现测试时缩放的典型方法。

\subsubsection{采样多条推理路径}
\label{sec:sampling-reasoning-paths}

实现测试时缩放最直接的方法，就是为同一个输入生成多条不同的推理路径，而非仅生成一条。通过扩大推理路径的候选池，模型就获得了更多“尝试”不同逻辑走向并找到正确答案的机会。

要生成多样化的路径，需要在文本生成中注入可控的随机性。常用的策略是温度采样：在预测下一个词时，模型原本会输出一个概率分布。引入温度参数 $T>0$ 后，会在归一化指数函数之前对各个词的得分进行缩放。较高的温度会令概率分布变得平坦，使原本低概率的词也有机会被选中，从而鼓励模型探索更广泛的语言选择。为避免完全随机的退化输出，温度采样常与词表截断技术结合：

\begin{itemize}
  \item \textbf{Top-$k$ 采样}：每步只保留概率最高的 $k$ 个候选词，重新分配概率后从中采样。
  \item \textbf{核采样（Top-$p$ 采样）}：动态地选择累计概率刚刚超过阈值 $p$ 的最小候选词集合，适应不同语境下的不确定性。
\end{itemize}

通过这些策略，对于输入查询 $\mathbf{x}$，大语言模型可生成 $N$ 条候选推理路径：
\begin{eqnarray}
\mathcal{Y}^{\mathrm{top}} = \{\hat{\mathbf{y}}^1, \dots, \hat{\mathbf{y}}^N\}.
\end{eqnarray}
这里的 $N$ 代表了测试时计算预算。$N$ 越大，探索的路径就越多。接下来，需要从这组候选路径中选出最优的一条或综合出最终答案。两种经典方法是 Best-of-$N$（$N$选优）和自一致性。

\paragraph{1. Best-of-$N$ (BoN)}
该方法引入一个验证器 $v$ 为每条候选路径打分，分值反映其逻辑合理性与正确性。最终选择得分最高的路径：
\begin{eqnarray}
\hat{\mathbf{y}}_{\mathrm{best}} = \argmax_{\hat{\mathbf{y}} \in \{\hat{\mathbf{y}}^1, \dots, \hat{\mathbf{y}}^N\}} v(\mathbf{x}, \hat{\mathbf{y}}).
\end{eqnarray}
可以将其类比为一次课堂测验：$N$ 个学生各自写下解题过程，老师（验证器）批阅所有草稿并挑出得分最高的一份。显然，Best-of-$N$ 的效果严重依赖验证器的质量。如果验证器容易被表面上正确但逻辑谬误的答案欺骗，就可能导致选中的路径不可靠。验证器的设计将在第~\ref{sec:reasoning-verification}节中详细讨论。

\paragraph{2. 自一致性}
自一致性绕过显式的评分器，转而利用“多数真理”的直觉：对于复杂推理题，通常有多条不同的推理路径能导向同一个正确答案，而错误路径的答案则较为分散。因此，我们只需从每条路径中抽取出最终答案 $\hat{a}^k = \mathrm{Extract}(\hat{\mathbf{y}}^k)$，然后对 $N$ 个答案进行多数投票：
\begin{eqnarray}
\hat{a}_{\mathrm{sc}} = \argmax_{a \in A} \sum_{k=1}^N \mathbbm{1}(\mathrm{Extract}(\hat{\mathbf{y}}^k) = a),
\end{eqnarray}
其中 $\mathbbm{1}(\cdot)$ 是指示函数。这种方法简单且无需额外训练，在答案形式明确的任务中非常有效。

在使用以上方法时，一个不可忽视的实践要点是平衡路径的\textbf{多样性与质量}。较高的温度能提升多样性，增加覆盖正确推理的机会，但也可能使单条路径的文本质量下降，甚至出现逻辑混乱。因此，需要根据任务特点仔细调节采样参数（温度 $T$ 以及 $k$ 或 $p$ 的值），在探索的广度与单路输出的可靠性之间找到最优点。

\begin{importantnote}
测试时缩放通过增加推理时的计算量（如生成多条候选路径或进行树搜索）来提升复杂任务表现。其中，自一致性利用多数投票筛选答案，无需额外验证器；而 Best-of-N 则依赖可靠的评分模型。实践时需平衡路径多样性与质量，过高的温度虽能增加覆盖却可能引入噪声。缩放收益随计算量增加会趋于饱和，根本上限仍受模型自身知识储备制约。
\end{importantnote}

\subsubsection{推理的搜索策略}
\label{sec:search-strategies-for-reasoning}

除了通过增加采样数量来扩展候选池，测试时缩放还可以从更结构化的视角来实现：将寻找最优推理路径视为一个搜索问题。其核心思想是，当我们给予模型额外的算力去“思考”时，本质上是在允许它探索一个由中间推理步骤构成的逻辑空间，并以系统化的方式定位其中的高价值路径。

要应用经典搜索算法，首先需要将大语言模型的推理过程映射为搜索的标准组件：

\begin{itemize}
  \item \textbf{搜索状态}：状态是模型当前已构建的上下文。在步骤 $t$，状态 $s_t$ 由原始问题 $\mathbf{x}$ 和已生成的部分推理内容拼接而成。
  \item \textbf{动作}：生成下一个推理步骤，即一段文本片段 $\bar{\mathbf{y}}_{t+1}$。
  \item \textbf{状态转移}：将新生成的片段追加到当前状态末尾，形成 $s_{t+1} = (s_t, \bar{\mathbf{y}}_{t+1})$。
  \item \textbf{状态评估函数}：给当前状态打分，评估其通往正确答案的潜力。评估可基于简单规则，也可使用训练好的神经网络。
  \item \textbf{终止条件}：当模型输出明确的最终答案，或搜索步数达到预设上限时停止。
\end{itemize}

基于这套形式化描述，多种成熟的搜索算法便可直接用于推理。最简单的如广度优先或深度优先搜索，模型每步可以展开多个候选思路并向前探索，必要时回溯。对于需要长远规划或存在延迟反馈的任务，蒙特卡洛树搜索能够动态平衡探索新想法与利用已知有希望的方向，有时还会结合外部反馈或自我修正来改进搜索质量（例如思维树等工作 \cite{yao-etal:2024tree}）。

需要指出，通过搜索来扩展测试时计算虽能稳定提升推理表现，但其收益并非随搜索量线性增长。当搜索强度超过某个阈值后，性能提升会趋于饱和。根本原因在于，模型本身的知识储备构成了能力的上限：若模型完全不具备解决某一问题所需的核心知识，再庞大的搜索也无法凭空创造出正确的推理逻辑；而过量的搜索还容易生成大量语义重复的路径，徒增计算开销而贡献甚微。

% \subsection{测试时间缩放}

% 推断时推理（Inference-time Reasoning）与推断阶段的扩展（scaling during inference）密切相关。在本节中，我们将扩展之前的讨论，并更加关注如何提高大语言模型（LLMs）的推理性能。

% \subsubsection{推断时计算扩展}

% 大语言模型的成功在很大程度上依赖于计算能力的扩展。提高这些模型性能的一种常见方法是训练时扩展（training-time scaling）。通过简单地使用更多的训练数据、更大的模型规模以及更多的计算资源，研究人员已经构建出了非常强大的大语言模型 \cite{kaplan-etal:2020scaling,hoffmann-etal:2022training}。

% 然而，仅仅扩展训练过程对于复杂的推理任务来说是不够的。与简单的文本生成不同，推理需要一步步的逻辑和规划。在训练期间向模型展示所有可能的推理路径是不可能的。如果我们仅仅依靠训练来解决困难的数学或逻辑问题，我们将需要海量的数据。理想情况下，我们希望模型能够使用简单的逻辑步骤在运行时（on the fly）构建自己的推理路径。因此，在推断阶段激活这种推理能力更具吸引力。

% 正因如此，一个自然的想法是在推断阶段扩展计算资源。推断时扩展（inference-time scaling）允许模型在给出最终答案之前，花费更多时间探索不同的推理步骤，而不是在训练期间耗尽所有计算能力。

% 这种方法的一个明显优势是，它允许更灵活、更高效地利用计算资源。例如，对于复杂的数学或逻辑问题，大语言模型可以分配更多的时间和算力，从而“思考”更长的时间。在许多情况下，在推断阶段被给予额外时间进行推理的较小模型，甚至可以超越那些被迫立即给出答案的更大模型。

% 我们可以将推断时扩展视为一个\textbf{搜索扩展}（search scaling）问题。当我们给予模型额外的算力去“思考”时，本质上是在允许它探索更大的可能逻辑步骤空间，从而有更大的机会找到最优解。这引出了三个关键问题：

% \begin{itemize}
% \item \vspace{0.5em} 如何生成不同的推理路径？
% \item \vspace{0.3em} 如何在可能的步骤中搜索以找到最佳步骤？
% \item \vspace{0.3em} 如何检查中间步骤和最终答案是否正确？
% \end{itemize}
% \vspace{0.5em}

% % 在接下来的小节中，我们将通过讨论三个主题来解答这些问题：采样多条推理路径（第~\ref{sec:sampling-reasoning-paths}节）、推理的搜索策略（第~\ref{sec:search-strategies-for-reasoning}节）以及验证（第~\ref{sec:reasoning-verification}节）。

% \subsubsection{采样多条推理路径}
% \label{sec:sampling-reasoning-paths}

% 在推断时扩展计算资源最直接的方法是为单个输入生成多条（而不仅仅是一条）推理路径。通过生成多条不同的路径，我们为大语言模型提供了更多机会来找到正确的逻辑和相应的答案。

% 为了实现这一点，通常的做法是在文本生成过程中引入随机性。一种典型的方法是使用温度采样（temperature sampling），并结合top-$k$或核采样（nucleus / top-$p$ sampling）。在标准生成中，在每个位置 $i$，大语言模型基于其logits $u_{y_i}$，输出下一个token $y_i$在词表 $V$ 上的概率分布 $\Pr(\cdot | \mathbf{x}, \mathbf{y}_{< i})$。温度采样通过在应用Softmax函数之前，用温度参数 $T > 0$ 缩放logits来修改该分布：
% \begin{eqnarray}
% \Pr(y_i | \mathbf{x}, \mathbf{y}_{< i}) & = & \frac{\exp(u_{y_i} / T)}{\sum_{y'_i \in V} \exp(u_{y'_i} / T)}.
% \end{eqnarray}

% \noindent 较高的温度会使分布变得平坦，从而鼓励模型探索更广泛的推理步骤。然而，不受限制的随机性可能会导致退化或不符合逻辑的文本，因为它偶尔会从低概率token的“长尾”中进行采样。为了保持生成路径的质量，温度采样通常与词表截断方法结合使用：

% \begin{itemize}
% \item \vspace{0.5em} \textbf{Top-$k$采样}将采样池限制为最有可能的 $k$ 个下一个token，并在它们之间重新分配概率质量。
% \item \vspace{0.3em} \textbf{核采样（top-$p$采样）}使用动态截断策略。它选择累积概率超过阈值 $p$ 的最小排名靠前的token集合。
% \end{itemize}
% \vspace{0.5em}

% 通过应用这些随机解码策略，给定输入查询 $\mathbf{x}$，大语言模型可以采样出一组多样化的输出序列（即候选推理路径）：
% \begin{eqnarray}
% \mathcal{Y}^{\mathrm{top}} & = & \{\hat{\mathbf{y}}^1, \dots, \hat{\mathbf{y}}^N\}.
% \end{eqnarray}

% \noindent 这里的 $N$ 代表我们的推断时计算预算。$N$ 越大，我们花在探索不同推理路径上的算力就越多。一旦我们有了这组多样化的路径，下一个问题就是如何选择最佳路径。为此，有两种广泛使用的方法：Best-of-$N$（N选优）和自一致性（self-consistency）。

% \paragraph{1. Best-of-$N$ (BoN)}
% 我们在第 \ChapterLLMTuning\ 节中已经介绍了Best-of-$N$采样，作为推断时对齐（inference-time alignment）的一种方法。在那种情况下，我们使用奖励模型 $r(\mathbf{x}, \hat{\mathbf{y}})$ 来选择最符合人类偏好的输出。

% 对于推理任务，BoN采样的概念保持不变，但目标发生了转变。“评判者”通常不再是偏好奖励模型，而是一个旨在评估推理路径逻辑合理性的验证器（我们可以将其表示为通用评分函数 $v$）。验证器为每条采样路径分配一个分数 $v(\mathbf{x}, \hat{\mathbf{y}})$，我们选择最大化该分数的最佳推理路径 $\hat{\mathbf{y}}_{\mathrm{best}}$：
% \begin{eqnarray}
% \hat{\mathbf{y}}_{\mathrm{best}} & = & \argmax_{\hat{\mathbf{y}} \in \{\hat{\mathbf{y}}^1, \dots, \hat{\mathbf{y}}^N\}} v(\mathbf{x}, \hat{\mathbf{y}}).
% \end{eqnarray}

% \noindent 然后从这条得分最高的路径中提取最终答案。为了理解BoN过程，让我们考虑一个直观的类比。想象一个有 $N$ 个学生的班级在解决一个数学问题。一位老师（验证器）给他们的所有草稿纸打分，然后选出得分最高的学生。

% 虽然BoN采样很强大，但其有效性取决于验证器的质量。如果验证器较弱，它很容易被偶然得出正确最终答案的错误逻辑所欺骗（即奖励作弊，reward hacking）。验证器的设计将在第~\ref{sec:reasoning-verification}节中更详细地讨论。

% \paragraph{2. 自一致性}
% 通过学习的验证器选择最佳路径的另一种替代方法是自一致性。自一致性依赖于这样的直觉：在复杂的推理任务中，通常存在多条不同的逻辑路径可以得出相同的正确答案，而错误的推理路径则可能是多样的并导致随机错误。自一致性不对推理过程进行评分，而是通过对最终答案进行多数投票来直接边缘化（marginalizes out）推理路径。形式上，设 $A$ 为所有可能最终答案的集合。对于每条采样路径 $\hat{\mathbf{y}}^k$，我们提取其最终预测答案 $\hat{a}^k = \mathrm{Extract}(\hat{\mathbf{y}}^k)$。自一致性策略选择在 $N$ 条采样路径中出现频率最高的答案 $\hat{a}_{\mathrm{sc}}$：
% \begin{eqnarray}
% \hat{a}_{\mathrm{sc}} & = & \argmax_{a \in A} \sum_{k=1}^N \mathbbm{1}(\mathrm{Extract}(\hat{\mathbf{y}}^k) = a),
% \end{eqnarray}

% \noindent 其中 $\mathbbm{1}(\cdot)$ 是指示函数。

% \paragraph{3. 在采样中平衡多样性与质量}

% 在为推断时计算扩展采样多条推理路径时，我们需要在多样性和质量之间寻求权衡。在推理任务中，我们通常希望有一组多样化的采样路径，这增加了包含正确逻辑的机会。一个常见的启发式方法是提高采样温度。通过使分布更加均匀，采样过程避免了仅集中在少数几条高概率路径上。因此，低概率路径更有可能被选中，模型可以在 $N$ 个样本中探索更广泛的推理路径。然而，随着温度的升高，尽管样本的多样性提高了，但单条路径的平均逻辑质量可能会下降。

% 为了在多样性和质量之间取得平衡，一种直接的方法是在推断阶段通过引入显式的惩罚或奖励项来修改搜索目标。在这种设置下，多样性可以在数学上建模为一个与原始生成概率相结合的函数。更正式地，修改后的搜索目标可以写为：
% \begin{eqnarray}
% \mathrm{score}(\mathbf{x},\mathbf{y}) & = & \log \Pr(\mathbf{y}|\mathbf{x}) + \lambda D(\mathbf{y},\mathcal{Y}^{\mathrm{top}}). \label{diversity-quality-inference}
% \end{eqnarray}

% \noindent 这里的 $\log \Pr(\mathbf{y} | \mathbf{x})$ 倾向于概率较高的输出，而 $D(\mathbf{y},\mathcal{Y}^{\mathrm{top}})$ 则作为惩罚或奖励项，鼓励相对于采样路径 $\mathcal{Y}^{\mathrm{top}}$ 的多样性。超参数 $\lambda$ 控制这种权衡的强度。
% $D(\cdot)$ 的设计可以非常灵活。例如，一个简单的惩罚可能会降低在 $\mathcal{Y}^{\mathrm{top}}$ 中已经频繁出现的token或 $n$-gram的分数。相反，可以设计一个奖励函数来奖励明显的语义差异。这样，大语言模型就能产生新的推理结构，而不是对同一想法的微小重述。

% 从更宏观的角度来看，这种采样困境本质上是一个探索-利用（exploration-exploitation）权衡，这在强化学习（RL）中已被深入讨论 \cite{Sutton-and-Barto:2018RL}。例如，大语言模型对齐的最新方法将大语言模型视为一个策略 $\pi_\theta$，可以对其进行优化以生成既多样又高质量的推理路径。在基于RL的微调（如PPO）中，策略被训练为最大化奖励 $R$，同时受到针对参考模型 $\pi_{\mathrm{ref}}$ 的KL散度惩罚的约束，或者通过熵项 $\mathrm{Entropy}(\pi_\theta)$ 进行正则化。一个简单的训练目标采取以下形式：
% \begin{eqnarray}
% \max_{\pi_\theta} \mathbb{E}_{\mathbf{y} \sim \pi_\theta} [R(\mathbf{x}, \mathbf{y})] - \lambda D_{\mathrm{KL}}(\pi_\theta\ \| \ \pi_{\mathrm{ref}}), \label{diversity-quality-rl}
% \end{eqnarray}

% \noindent 其中 $R(\mathbf{x}, \mathbf{y})$ 代表奖励，用于衡量推理路径 $\mathbf{y}$ 对于给定问题 $\mathbf{x}$ 有多好。

% 如果我们将这个RL目标与上面讨论的推断时搜索目标进行比较，我们可以看到它们之间有明显的联系。具体来说，公式（\ref{diversity-quality-rl}）中的期望奖励项 $\mathbb{E}_{\mathbf{y} \sim \pi_\theta} [R(\mathbf{x}, \mathbf{y})]$ 对应于公式（\ref{diversity-quality-inference}）中的生成概率 $\log \Pr(\mathbf{y}|\mathbf{x})$。这两项都鼓励模型生成高质量的推理路径。同样，公式（\ref{diversity-quality-rl}）中的KL散度惩罚 $- \lambda D_{\mathrm{KL}}(\pi_\theta\ \| \ \pi_{\mathrm{ref}})$ 对应于公式（\ref{diversity-quality-inference}）中的多样性项 $\lambda D(\mathbf{y},\mathcal{Y}^{\mathrm{top}})$。KL惩罚防止模型每次崩溃为生成非常相似的响应。同样，多样性项迫使推断过程探索更广泛的路径，而不是重复最有可能的路径。

% 尽管有这种形式上的相似性，但需要注意的是，这两种方法在大语言模型开发的不同阶段起作用。RL是一种训练方法。一旦训练完成，模型就知道如何生成既好又多样的推理路径。然而，这通常需要额外的训练样本和计算资源，成本高昂。相比之下，推断时方法作用于已经训练好的模型。它们试图在文本生成过程中通过调整搜索规则来动态寻找这种平衡。但这种灵活性是以额外的人工调优为代价的。例如，必须为不同的任务仔细调整像 $\lambda$ 这样的超参数，以达到多样性和质量之间所需的平衡。


% \subsubsection{推理的搜索策略}
% \label{sec:search-strategies-for-reasoning}

% 在实践中，寻找最优推理路径可以直接转化为一个经典的搜索问题：我们从初始状态开始，采取行动生成一个推理步骤，将当前状态扩展为一组新状态，并重复这个过程直到满足终止条件。由于我们在第 \ChapterEncDec\ 章和第 \ChapterLLMInference\ 章中已经介绍了几种经典的搜索算法（如树搜索和束搜索），我们在这里不再重温这些算法的细节。相反，我们重点关注如何将推理路径的搜索映射到这些经典的搜索框架上。

% 为了将搜索算法应用于大语言模型推理，我们需要定义搜索问题的标准组件：

% \begin{itemize}
% \item \vspace{0.5em} \textbf{搜索状态}：对于大语言模型推理，状态是模型迄今为止构建的上下文。具体而言，在步骤 $t$，状态 $s_t$ 由原始查询 $\mathbf{x}$ 与到目前为止生成的部分推理路径组合而成：$s_t = (\mathbf{x}, \bar{\mathbf{y}}_1, \dots, \bar{\mathbf{y}}_t)$。
% \item \vspace{0.3em} \textbf{动作}：动作是生成下一个推理步骤（文本片段）$\bar{\mathbf{y}}_{t+1}$。
% \item \vspace{0.3em} \textbf{状态转移模型}：采取行动只是将新的文本片段附加到现有状态上。这会产生下一个状态：$s_{t+1} = (s_t, \bar{\mathbf{y}}_{t+1}) = (\mathbf{x}, \bar{\mathbf{y}}_1, \dots, \bar{\mathbf{y}}_t, \bar{\mathbf{y}}_{t+1})$。
% \item \vspace{0.3em} \textbf{状态评估函数}：这是一个评分函数，用于评估当前状态在通向最终答案过程中的逻辑正确性。例如，为了评估搜索状态，我们可以使用硬编码的启发式规则，或训练好的神经验证器。
% \item \vspace{0.3em} \textbf{终止条件}：停止搜索的标准。当模型显式生成最终答案序列，或者搜索达到预定义的计算预算（例如，探索节点的最大深度）时，就会发生这种情况。
% \end{itemize}
% \vspace{0.5em}

% 一旦将推理任务构建为搜索问题，就可以应用各种经典的搜索算法来有效地探索推理空间。例如，简单的树搜索方法，如广度优先搜索和深度优先搜索，可用于对大语言模型的推理过程进行建模。在这些方法中，模型在每一步探索多个候选想法并对其进行评估，以决定是继续沿路径前进，还是在遇到死胡同时回溯。对于具有较高不确定性或延迟奖励的任务，通常采用蒙特卡洛树搜索。这种方法有助于模型在探索新的推理路径和利用已知步骤之间取得平衡。有时它甚至结合外部环境反馈和自我反思来改进搜索 \cite{yao-etal:2024tree,hao-etal:2023reasoning,zhou-etal:2024language}。

% 为了解决树结构的冗余问题（即多条不同的推理路径可能会收敛于同一个中间结论），一些方法将推理空间建模为图（如有向无环图，DAG）\cite{zhang-etal:2025cumulative}。通过这种方式，模型可以构建更高效的搜索空间结构，并捕捉逻辑演绎的非线性相互依赖关系。除了外部搜索算法，还可以将搜索动态直接内化到大语言模型的参数中。例如，通过在A*等启发式搜索算法的执行轨迹上训练大语言模型，它们可以学习隐式地生成搜索过程和最优计划，而无需依赖外部控制脚本 \cite{lehnert-etal:2025beyond}。

% 虽然通过搜索扩展推断时计算是一种强大的策略，但搜索工作量与推理性能之间的关系并不是简单的线性关系。直觉上，我们可能期望给模型更多的时间来探索会持续产生更好的答案。然而，在实践中，性能的提升很快就会达到瓶颈。一个主要原因是大语言模型固有的能力上限：如果模型缺乏解决问题的知识，再多的搜索也无法凭空创造出正确的逻辑。此外，随着搜索工作量的增加，生成路径的多样性会下降，这意味着模型浪费算力去探索那些几乎提供不了新价值的冗余想法。