PAPER DEEP DIVE
ReST-RL:用统一自训练与价值引导搜索强化大模型推理
GRPO 是当前提升大模型推理能力的代表性强化学习方法,但它只在整条轨迹末端拿到一个稀疏奖励:一旦同组采样得到的奖励彼此接近,组内相对优势就退化成噪声,策略几乎学不到东西。ReST-RL 把策略优化与价值引导搜索重新接回同一条自训练流水线。第一阶段 ReST-GRPO 先按奖励标准差过滤掉信息量低的提示词,再从每个提示词的最高奖励轨迹中按离散指数分布抽取若干前缀,把它们当作在线 GRPO 的新起点——前缀只作为上下文,后缀一律重新采样并优化,而不是拿来模仿。第二阶段 VM-MCTS 在这个已静态化的策略下用 MCTS 自采价值目标,训练一个预测期望终端奖励的价值模型,推理时同一个模型既用于 UCT 搜索分配,也用于最终 Best-of-N 排序,搜索与验证共享同一套状态价值尺度。在 APPS、BigCodeBench、HumanEval 等代码基准上,Qwen3-8B 的平均分从 0.503 提升到 0.689;在匹配策略与价值模型的对照实验里,ReST-GRPO + VM-MCTS 在 APPS-500 上得到 0.642,而 GRPO + VM-MCTS 只有 0.538,说明第一阶段带来的轨迹分布改善确实穿过了价值学习环节存活下来。端到端算力核算上,ReST-GRPO 用 1752 GPU 小时对 GRPO 的 2080 小时,在 71 小时而非 207 小时达到 9% 的提升。仅用代码轨迹训练出的价值模型,在不做目标域微调的情况下迁移到 MATH、Omni-MATH 与 GPQA-Diamond 同样带来增益。
论文:ReST-RL: Reinforcing LLM Reasoning through Unified Self-Training and Value-Guided Search(arXiv:2508.19576v3,29 页,2026-09-07 更新)
作者:Sining Zhoubian(清华大学,工作在 Z.ai 实习期间完成)、Dan Zhang(清华大学计算机科学与技术系)、Jie Tang(清华大学计算机科学与技术系)
代码:已发布,GitHub THUDM/ReST-RL(本次核对的提交为 b86959b),含 MCTS、GRPO 训练、价值模型训练与评测全链路脚本
内容类型:大模型推理的强化学习训练 + 推理时价值引导解码,主实验域为代码生成,附带数学与科学的跨域迁移证据
一句话总结
ReST-RL 把「GRPO 的组奖励信息量不足」拆成两个可以分别下手的问题:第一阶段 ReST-GRPO 用奖励标准差过滤提示词、再按离散指数分布从高奖励轨迹里抽前缀当作在线 RL 的新起点,从而重塑策略诱导的轨迹分布;第二阶段 VM-MCTS 在这个已经静态化的策略下用 MCTS 自采价值目标,训练一个预测期望终端奖励的价值模型,并让同一个模型在推理时既做搜索分配又做最终验证。Qwen3-8B 在六个代码基准上的平均分从 0.503 提升到 0.689。
研究背景与动机
GRPO 已经是提升大模型推理准确率的代表性强化学习方法,它去掉了显式的价值网络,改用同组采样内的相对奖励差作为优势估计,因此训练开销远低于 PPO 式的在线 actor-critic。代价是它把奖励学习从 RL 回路里整个拿掉了:一条完整轨迹只在末端拿到一个标量奖励,组内相对优势完全依赖这一组奖励彼此的差异。论文引用的第一个短板就在这里——当同一提示词下采样出的若干解拿到的奖励彼此接近时,组内优势退化为噪声,这一组更新几乎不携带信息(论文图 1(a) 给出了这个现象的直接统计)。DAPO 用动态采样缓解它:反复重采直到攒够足够多「奖励方差非零」的组,配合解耦的裁剪上界与截断掩码。另一条路是提示词级课程,例如 E2H Reasoner 的余弦调度,让训练从易到难地换题。
论文对这两类补救的批评很具体:它们都仍然停留在「原始提示词」这个层面。DAPO 改变的是哪些组被保留,课程改变的是哪些题被呈现,两者都没有回到一条已经成功的轨迹内部,去重新利用那些明显携带信息的中间状态。换言之,它们优化的是「问什么」,而不是「从哪里接着问」。
第二个短板在验证侧。过程奖励模型(PRM)能给中间步骤打分,验证精度普遍高于只看最终输出的 ORM,但它依赖高质量人工步骤标注——PRM800K 那一类语料的采集成本是出了名的高,这直接限制了可扩展性。为了绕开标注,Math-Shepherd 与 ReST-MCTS* 改用蒙特卡洛模拟来估计过程奖励:从某个中间步骤出发多采几次,看最终答对的比例,把这个比例当作该步骤的「正确性」。问题是这套估计绑死在「答案匹配」这个任务特定的判定上,而且它预设了「单步正确性」这个固定概念。代码任务恰好两头都不满足:一个中间行本身既谈不上对也谈不上错,一段能跑通的解也可以由若干看起来奇怪的行组成;但完整解可以用测试用例自动判分。
于是论文把现状概括成一个三方权衡:数据采集成本、信息量充足的策略更新、细粒度的推理时引导,现有方法各自只拿到其中两项。它给出的设计目标因此非常克制——保留 GRPO 轻量策略更新的同时,把状态级的学习信号找回来,而且不回到在线 actor-critic 的完整成本与不稳定性。
这里有一个方法论上的细节值得单独指出,因为它决定了后面实验怎么读。论文明确区分了两个经常被混为一谈的角色:一个是「改善策略的训练分布」,另一个是「为推理时算力分配学一个价值信号」。它同时承认,把这两者连起来只有在一种情况下才算真的成立:第一阶段的策略改善必须能穿过一条匹配的价值学习流水线存活下来,而不只是产出一个更好的「纯策略」检查点。这句话在实验部分对应的是表 3(b),也是全文最有说服力的一组对照。
预备知识:任务如何被 MDP 化
一个推理任务由指令或问题 $q$ 描述,可能存在标准答案 $g$;对代码任务还额外存在测试用例 $t_{1,2,\dots,m}$。策略 $\pi_{\theta}$ 按预测的 token 概率逐步生成解,整个过程被建模为马尔可夫过程:策略依据已生成内容与指令,按 $\pi_{\theta}(a_i|a_{1,2,\dots,i-1},q)$ 逐步取动作 $a_i$,直到生成 eos 或停止串,形成最终解 $A=(a_1,a_2,\dots,a_k)$。
本文对「动作」的粒度选择是一行文本(以换行符分隔)。中间状态定义为指令与部分解的组合 $S_i=(q,a_{1,2,\dots,i})$,因此中间状态永远以换行结束;终端状态是 $S_{end}=S_k=(q,a_{1,2,\dots,k})$,以 eos 结束。状态转移被视为确定性的。附录 A.8 给出了选这个粒度的理由:相比 token 级动作,行级动作大幅降低树搜索的分支复杂度,且每次转移对应一个语义上更完整的单元,价值估计更稳定;相比「一整个推理步骤」或「一整个代码块」这类更粗的划分,行级不需要任何领域特定的切分规则或额外标注,因此跨域可直接复用。论文也承认这不声称是普遍最优,自适应或任务特定的动作抽象仍是开放方向。
奖励只在终端状态给出,记为 $R=R(S_{end})$,可以是规则式或模型式。在这个设定下,策略价值函数与 Q 函数被统一成同一个量:
$$V^{\pi}(S_i)=\mathbb{E}_{\pi}[R(S_{end})|S_i],\qquad Q^{\pi}(S_i,a_{i+1})=\mathbb{E}_{\pi}[R(S_{end})|S_{i+1}]=V^{\pi}(S_{i+1})$$
这个等式是全文的地基(论文式 1)。它说的是:因为只有终端状态有奖励,且转移确定,「在状态 $S_i$ 取值」与「在 $S_i$ 执行动作 $a_{i+1}$ 后取值」是同一个期望,只是条件不同。价值模型因此不需要学一个独立的 Q 头,学 $V^{\pi}$ 就够了,搜索时对子节点的估值直接就是 Q 值。
方法详解
整体框架:顺序连接,而不是联合优化
ReST-RL 由两个组件构成:策略优化阶段 ReST-GRPO,与奖励学习阶段 VM-MCTS。关键在于两者的连接方式是顺序的:ReST-GRPO 先在稀疏奖励空间上重塑轨迹分布,VM-MCTS 随后在已经固定的策略下估计价值。这个分离换来了状态级引导,同时避免了在线 actor-critic 的成本与不稳定。因为 $V^{\pi}$ 本身依赖策略,论文强调每个价值模型都必须与生成其训练轨迹的那个策略配对使用;表 3(b) 的对照实验正是按这个原则设计的,不引入策略与价值模型的分布错配。
图 1:ReST-RL 框架(论文图 2)。ReST-GRPO 通过过滤与组装高价值训练数据重塑策略诱导的轨迹分布,这个被优化过的分布改善价值模型学习,进而让 VM-MCTS 能执行更可靠的价值引导搜索与解码。
ReST-GRPO:前缀是上下文,不是模仿目标
ReST-GRPO 在 ReST 与 GRPO 之上加了两个动作:基于奖励的过滤,以及从部分状态启动。它与经典 ReST 式自训练有一处必须说清的区别。经典 ReST(以及 ReSTEM)把通过筛选的完整解当作监督目标去拟合;ReST-GRPO 把通过筛选的前缀只当作上下文,它的后缀是重新在线采样、并用 GRPO 目标优化的。因此存下来的轨迹只决定「在线 RL 可以从哪里重启」,不规定「策略接下来该生成什么」。这一点是本文与「模仿高奖励解」这一大类方法的分水岭,也是后面多样性实验(表 19)没有出现模式坍缩的原因。
每轮迭代包含三步,完整流程见论文算法 1,细化伪代码见附录算法 2;每一轮都从上一轮产出的检查点初始化:
第一步,预训练解采样。对原始数据集中的每个指令提示词,用当前策略采 $N$ 个解(默认 $N=30$),通过采样温度控制解的随机性与多样性,再用固定奖励函数为所有解打分,供后续过滤使用。
第二步,按奖励过滤。论文从「GRPO 的更新依赖组内相对优势」推出三条判断:其一,若策略在某题上的输出奖励彼此相似,它从这题学不到什么;其二,若某题动作空间巨大而只有极少数轨迹能拿到实质奖励,从初始状态正常采样对训练无效;其三,对策略表现不好的题,高奖励轨迹至关重要,而高奖励解往往共享某些模式,因此从高奖励解的部分状态出发采样,更有可能拿到更多高奖励轨迹。
对应的过滤规则是两道门。第一道用标准差衡量奖励多样性:某个提示词下所有解的奖励标准差低于阈值 $\sigma_0$(默认 0.05)就直接从训练集剔除,因为它几乎不会带来策略提升;通过的提示词连同原始提示词一起加入训练集。第二道针对高奖励锚点:剔除策略最高奖励仍低于 $r_0$(默认 0.9)的提示词,对剩下的提示词取出其奖励最高的那条解 $A^{*}=\arg\max_{A_i}r_i$。
第三步,训练数据组装。从 $A^{*}$ 的部分状态里抽一个子集 $D_A^{*}$,抽样服从一个离散有限指数分布,指数因子 $\alpha<1.0$(默认 0.95):
$$p(a_{1,2,\dots,j})=\frac{1-\alpha}{1-\alpha^{|A|}}\alpha^{j-1},\qquad j=1,2,\dots,|A|$$
这是论文式 2。相比均匀抽样,这个分布把更多质量放在更短、更靠前的前缀上,从而为在线探索保留更大的后缀动作空间。共采 $\beta|A|$ 个部分状态($\beta$ 默认 0.5,用于限制训练预算),每个都拼接到原始提示词 $p$ 后面。论文特别标注了一个退化情形:当 $\alpha\to 0$ 时质量集中到最短前缀,得到的起点接近普通 GRPO 式起点,但并不等同于「只用原始提示词」——这是个容易读错的细节。
第四步,GRPO 训练。策略更新用的就是标准 GRPO 目标,唯一的差别是输入提示词可以是「问题 + 采样得到的部分解」的组合,取自训练集 $P_Q^{+}$:
$$\mathcal{J}(\theta)=\mathbb{E}\big[p\sim P_Q^{+},\{o_i\}_{i=1}^{G}\sim\pi_{\theta_{old}}(O|p)\big]\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|o_i|}\sum_{t=1}^{|o_i|}\Big\{\min\big[\frac{\pi_{\theta}(o_{i,t}|p,o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|p,o_{i,<t})}\hat{A}_{i,t},\ \mathrm{clip}\big(\frac{\pi_{\theta}(o_{i,t}|p,o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|p,o_{i,<t})},1-\epsilon,1+\epsilon\big)\hat{A}_{i,t}\big]-\beta^{\prime}\mathbb{D}_{KL}[\pi_{\theta}||\pi_{ref}]\Big\}$$
这是论文式 3,rollout 组大小 $G=8$,所有策略方法学习率统一 1e-7。训练用的奖励在测试用例通过率之外还加了两项塑形(论文式 7),权重 $\omega_1=1\mathrm{e}{-3}$、$\omega_2=1\mathrm{e}{-6}$:
$$R_{\text{GRPO}}(q,A)=R_{\text{base}}(q,A)+\omega_1\cdot\mathbb{I}(s\subseteq A)-\omega_2\cdot n\_redundant\_char(A)$$
其中 $s$ 是必须出现的输出子串,第二项惩罚冗余字符。naive GRPO 基线用的是同一个 $R_{\text{GRPO}}$,差别只在训练数据:基线直接用 $Q_{\text{train}}$ 里的题,每题在单轮迭代中只用一次。
VM-MCTS:把「单步正确性」换成「期望终端奖励」
VM-MCTS 在一个静态策略下,用自采的 MCTS 目标训练价值模型,并在推理时用它做搜索与选择。它的目标是部分状态的期望终端奖励 $V^{\pi}(s)$,不是「最近这一行是否独立正确」。这个区别在可执行奖励的场景里特别有用:中间步骤往往难以标注,但完整解可以自动判分。价值模型承担两个角色——把搜索算力分配到有希望的推理子空间,以及给已完成的候选排序。
论文把它与 Math-Shepherd(M-S)的关系讲得很干净。M-S 定义中间步骤的质量为「它推出正确最终答案的潜力」,本质上已经是一个基于期望的评价目标,但 M-S 仍然把这个估计当作单步正确性的度量来用。VM-MCTS 直接把它归纳到式 1 的价值目标上,强调评价的是包含最后一个动作在内的整个部分状态。事实上 M-S 的软目标可以看成价值目标的一个特例——当奖励函数取
$$R(S_{end})=\mathbb{I}(a_A=a^{*}),\qquad s.t.\ \ S_{end}=(q,A)$$
即论文式 4 的答案匹配形式时,价值目标就退化回 M-S。反过来,代码任务把 $R$ 换成测试用例通过率,同一套价值学习机制无需改动即可复用,这正是本文能在代码域落地的原因。
价值数据采集。用 MCTS 采集训练数据(论文算法 3),因为它在「探索不同推理路径」与「利用有希望的中间状态」之间取得平衡。搜索树根节点是初始状态 $S_{init}=S_0=(q,\varnothing)$,其余节点表示中间状态或终端状态。节点选择用 UCT:
$$S\leftarrow\arg\max_{S^{\prime}\in\text{children}(S)}\left(v_{S^{\prime}}+c\sqrt{\frac{\ln N_S+1}{N_{S^{\prime}}+\epsilon}}\right)$$
其中 $c$ 是探索常数(采集时 0.4,测试时解码用 0.1),$\epsilon=0.1$ 是防零除的小常数,$N$ 是访问计数,$v$ 是当前的均值价值估计。展开阶段从 $S$ 采 $n=5$ 条轨迹,取每条轨迹的第一个动作建子节点;随后做 MC rollout,用奖励函数给这 $n$ 条完整轨迹打分,把这些终端状态的价值目标写入训练集 $D_{value}$;再沿路径回传,更新访问计数 $N$、奖励和 $U$,并令 $v=U/N$。整个搜索跑 $T=30$ 轮(主实验与匹配对照用 $T=20$)。与 M-S 的一次性估计不同,这里的部分状态价值是跨多轮模拟逐步精化的。搜索结束后,树上所有已展开节点的 $(S,v_S)$ 也写入 $D_{value}$。
价值模型训练。因为这些目标是在当前静态策略下采集的,价值学习的质量直接取决于策略诱导的轨迹分布——这正是前置的 ReST-GRPO 之所以关键的原因。价值模型 $V_{\phi}$ 由策略网络加一个分类头初始化,在 $D_{value}$(论文报告为 1.1M 条目标)上做回归:
$$\mathcal{L}_{\phi}=\mathbb{E}_{(S,v)\sim D_{value}}\big(V_{\phi}(S)-v\big)^{2}$$
即论文式 5。
辅助解码。推理时的搜索(论文算法 4)与采集时结构相同,但 rollout 换成了基于价值的单步 rollout:展开子节点后不再把每条轨迹跑到底,而是直接用 $V_{\phi}(S^{\prime})$ 给子节点估值,访问计数取展开阶段该节点被访问的次数,$U_{S^{\prime}}=N_{S^{\prime}}v_{S^{\prime}}$。最终输出选择走 Best-of-N 式的排序,用的仍然是同一个 $V_{\phi}$。这一点是设计上的收敛:搜索分配与最终验证共用同一个状态价值尺度,而不是把两个独立训练的引导模型和重排模型拼起来。
为什么价值 rollout 不会更差。附录 A.12 给了一个方差论证。设价值模型与奖励模型都是无偏估计、方差相同且噪声与状态独立:$V_{\phi}(S)=V(S)+\epsilon_V$,$R_{\lambda}(S_{end})=R(S_{end})+\epsilon_R$,$\mathbb{D}[\epsilon_V]=\mathbb{D}[\epsilon_R]$,$\mathbb{E}[\epsilon_V]=\mathbb{E}[\epsilon_R]=0$。在 $n$ 次模拟的预算下,两种估计量分别是
$$\hat{V}_v(S_i)=\frac{1}{n}\sum_{j=1}^{n}V_{\phi}(S_{i+1}^{(j)}),\qquad \hat{V}_r(S_i)=\frac{1}{n}\sum_{j=1}^{n}R_{\lambda}(S_{end}^{(j)})$$
论文证明两者都无偏(式 11:$\mathbb{E}[\hat{V}_r(S_i)]=\mathbb{E}[\hat{V}_v(S_i)]=V(S_i)$),但方差有序:
$$\mathbb{D}[\hat{V}_r(S_i)]\geq\mathbb{D}[\hat{V}_v(S_i)]$$
即式 12。直觉是:$\hat{V}_r$ 要对「从 $S_i$ 到终端」整条随机轨迹求平均,$\hat{V}_v$ 只对「一步之后」的随机状态求平均,后者的随机性被价值模型吸收掉了一部分。这为「用价值模型替代完整 rollout」提供了理论依据,也解释了为什么价值目标虽然引入了额外噪声,配合 MCTS 解码时反而表现更好。
flowchart TD
Q["训练提示词 Q_train 6945 条 来自 BCB 加 DS-1000 加 APPS"] --> S1["阶段一 ReST-GRPO 第 t 轮"]
S1 --> SAMP["用当前策略对每题采 N=30 个解 并用 R 打分"]
SAMP --> F1{"组内奖励标准差 大于等于 sigma_0 = 0.05"}
F1 -->|否| DROP["整题丢弃 组内优势近似噪声"]
F1 -->|是| KEEP["原始提示词 p 加入 P_Q_plus"]
KEEP --> F2{"最高奖励 大于等于 r_0 = 0.9"}
F2 -->|否| ON1["只用原始提示词做起点"]
F2 -->|是| STAR["取最高奖励轨迹 A_star"]
STAR --> PREF["按离散指数分布 p(j) 正比于 alpha^(j-1) 抽 beta 乘 len(A) 个前缀 alpha=0.95"]
PREF --> CTX["前缀仅作为上下文 拼到 p 后面 加入 P_Q_plus"]
CTX --> GRPO["在线采新后缀 用 GRPO 目标更新 策略 G=8 学习率 1e-7"]
ON1 --> GRPO
GRPO --> ITER{"还有下一轮"}
ITER -->|是 从上轮检查点初始化| S1
ITER -->|否 策略冻结| STATIC["静态策略 pi_theta"]
STATIC --> MCTS["阶段二 用 MCTS 采价值目标 T=30 n=5 c=0.4 eps=0.1"]
MCTS --> UCT["UCT 选点 展开取每条轨迹首个动作即一行文本"]
UCT --> ROLL["完整 MC rollout 用 R 给终端状态打分 回传 v = U / N"]
ROLL --> DV["D_value 约 1.1M 条 状态到价值目标"]
DV --> VM["训练价值模型 V_phi 策略网络加分类头 MSE 损失"]
VM --> DEC["推理时辅助解码 T=20 n=5 c=0.1"]
DEC --> VROLL["价值式单步 rollout 子节点估值直接取 V_phi"]
VROLL --> BON["最终 Best-of-N 排序 用同一个 V_phi"]
BON --> OUT["输出解"]
图 2:按论文算法 1、算法 3、算法 4 绘制的真实两阶段流程。注意阶段一到阶段二之间是「策略冻结」的单向依赖,价值模型的训练分布完全由第一阶段的过滤与前缀重启决定。
开源代码与论文方法的对应
仓库 THUDM/ReST-RL 已公开,核对提交 b86959b。以下几处可以直接把论文里的公式落到代码行上。
式 2 的指数前缀分布对应 utils/sample_utils.py 第 4-13 行:exponential_probability_distribution(n, alpha) 返回 [alpha ** i for i in range(n)],随后在 sample_with_exponential_distribution 里按总和归一化再用 random.choices 抽样。归一化常数正是 $\sum_{i=0}^{n-1}\alpha^i=(1-\alpha^n)/(1-\alpha)$,与式 2 的分母一致(代码里的 $i$ 对应论文里的 $j-1$)。
算法 1 第 4-8 行的两道过滤门与前缀组装对应 experiment/process_gen_data.py 第 135-168 行:std = np.std(rewards) 后 if std < args.std_accept_threshold_grpo: continue 是 $\sigma_0$ 门;max(completions, key=lambda x: x['reward']) 取 $A^{*}$,接着 if reward < args.completion_accept_threshold_grpo: continue 是 $r_0$ 门;然后 completion.split('\n') 逐行累加成 partial_completion,正是「动作 = 一行文本」的落地。
表 21 的默认超参与代码默认值逐一对上:experiment/process_gen_data.py 与 experiment/collect_grpo_data.py 中 --std_accept_threshold_grpo 默认 0.05($\sigma_0$)、--completion_accept_threshold_grpo 默认 0.9($r_0$)、--n_sample 默认 0.5($\beta$)、--alpha 默认 0.95($\alpha$)。
算法 3/4 的 UCT 选择对应 algorithms/MCTS/mcts.py 第 167-168 行:return node.V + self.exploration_constant * math.sqrt((1 + math.log(node.parent.numVisits)) / (self.eps + node.numVisits)),与论文公式逐项一致(exploration_constant 即 $c$,eps 即 $\epsilon$);同文件第 8 行的构造参数 num_sample=5 对应 $n$。
行级动作与子节点去重对应 algorithms/MCTS/mcts.py 的 expand()(第 96-140 行):action = sample_.split('\n')[0] + '\n' 取采样轨迹的第一行作为动作建树,若该动作已存在则只累加 numVisits 与 sumReward 而不重复建节点——这正是算法 3 里「用每条采样轨迹的第一个动作展开」的实现。
实验结果
实验设置
基座策略覆盖两类:代码专用模型 Qwen2.5-Coder-7B-Instruct、CodeQwen1.5-7B-Chat、DeepSeek-Coder-6.7B-Instruct、OpenCodeInterpreter-DS-6.7B;以及通用模型 Qwen3-8B、Llama-3-8B、Llama-3.1-8B-Instruct,用于检验代码能力的提升是否跨基座成立。训练集 $Q_{\text{train}}$ 由 BigCodeBench、DS-1000 与 APPS 三个开源代码数据集合并、剔除无测试用例的样本后得到 6945 条编程提示词。所有 APPS-500 结果使用同一个不可变随机子集,论文承诺公开其确切题号与评测脚本,同时也如实记录了历史子集构造种子已不可考。
基础奖励是规则式的测试用例通过率(论文式 6):
$$R_{base}(S_{end})=R_{base}(q,A)=\frac{1}{m}\sum_{i=1}^{m}\mathbb{I}\big(\text{eval}(A,t_i)=y_i\big)$$
其中 $t_i$ 是测试用例、$y_i$ 是期望输出。选择规则式而非模型式奖励的理由是后者会抬高奖励劫持(reward hacking)风险。评测基准为 HumanEval、HumanEval+、MBPP、MBPP+、APPS-500、BigCodeBench。
策略训练:ReST-GRPO 对 GRPO、DAPO、ReST-DPO
论文做了两轮串行迭代,表 1 报告四个基座的逐轮结果。ReST-GRPO 在每一个模型、每一轮迭代上都优于 ReST-DPO 与 naive GRPO;在主配置 Qwen3-8B 上还在全部六个基准都优于 DAPO,第一轮平均领先 3.4 分、第二轮领先 5.8 分。两轮之后四个模型的平均分分别提升 15.2%、6.7%、3.6%、4.5%,且没有任何一个基准退化。
| 训练方法(Qwen3-8B) | HumanEval | HumanEval+ | MBPP | MBPP+ | APPS-500 | BCB | 平均 |
|---|---|---|---|---|---|---|---|
| Base(第 0 轮,未训练) | 0.829 | 0.780 | 0.717 | 0.622 | 0.118 | 0.418 | 0.503 |
| ReST-DPO(第 1 轮) | 0.854 | 0.799 | 0.730 | 0.627 | 0.152 | 0.434 | 0.523 |
| GRPO(第 1 轮) | 0.799 | 0.750 | 0.754 | 0.651 | 0.346 | 0.439 | 0.566 |
| DAPO(第 1 轮) | 0.805 | 0.768 | 0.770 | 0.667 | 0.351 | 0.425 | 0.570 |
| ReST-GRPO(第 1 轮) | 0.872 | 0.817 | 0.780 | 0.672 | 0.377 | 0.469 | 0.604 |
| GRPO(第 2 轮) | 0.829 | 0.787 | 0.757 | 0.667 | 0.403 | 0.436 | 0.590 |
| DAPO(第 2 轮) | 0.811 | 0.773 | 0.770 | 0.676 | 0.428 | 0.444 | 0.597 |
| ReST-GRPO(第 2 轮) | 0.860 | 0.805 | 0.802 | 0.690 | 0.565 | 0.476 | 0.655 |
表 1:策略训练主结果(论文表 1 的 Qwen3-8B 块)。完整 DAPO 对比只在主配置 Qwen3-8B 上做,其余模型块保留原基线集合。最吃这一套的是 APPS-500:0.118 → 0.565,接近五倍,因为它是唯一需要长程规划、单条轨迹末端奖励极度稀疏的基准。
图 3:论文图 1。(a) ReST-GRPO 训练过程中奖励方差变得更有信息量;(b) ReST-RL 在代码上提升 Qwen3-8B,并在数学与科学任务上给出无目标域微调的迁移证据。论文同时提醒:奖励标准差只是「组内相对更新信息量」的代理指标,最终归因要看表 3。
训练效率。论文用 Llama-3-8B 训 10k 步、每 1k 步评测一次来比较 ReST-GRPO、DAPO 与 naive GRPO(图 3(a))。选通用基座是因为它给代码能力留的提升空间大,优化效率的差异比在高度代码特化的检查点上更容易观察。前 2k 步三者相当,之后 ReST-GRPO 的领先持续扩大:10k 步时提升 12.3%,而 naive GRPO 为 7.8%、DAPO 为 8.1%。
更关键的是表 4 的端到端算力核算,它把 ReST-GRPO 一次性的离线采样成本也算进去:
| 方法(Llama-3-8B,10k 步) | 预采样时间(h) | 总训练时间(h) | 总 GPU 小时 | 达到 6% 提升 | 达到 9% 提升 | 达到 12% 提升 |
|---|---|---|---|---|---|---|
| GRPO | 0 | 260 | 2080 | 52 h | 207 h | >260 h |
| ReST-GRPO | 10 | 219 | 1752 | 51 h | 71 h | 199 h |
表 2:端到端训练时间核算(论文表 4)。两种方法总步数与总样本数相同,ReST-GRPO 的预采样时间始终计入。
这组数字值得展开说:ReST-GRPO 多花了 10 小时离线采样,但总 GPU 小时反而少 328(1752 对 2080),达到 9% 提升只需 71 小时而不是 207 小时。附录 A.8 给的解释是 RL 训练的主要瓶颈在于反复的在线采样与策略优化,而离线预采样高度可并行、只带来有限额外延迟;更重要的是被过滤并部分重组后的训练数据让策略在更少的有效优化步内达到同等或更高水平。所以离线阶段的成本是被更少的在线小时摊销掉的,不是净增。
图 4:论文图 3(a)。Llama-3-8B 上 ReST-GRPO、DAPO、GRPO 在平均基准分上的训练效率曲线,训练 10k 步、每 1k 步评测。
组件归因与匹配对照:全文最硬的一组实验
论文很清楚「奖励方差上升」只是一个优化统计量,不能当作最终任务性能的证据,因此把诊断指标与下游归因分开报告。表 3(a) 在匹配优化器、匹配奖励、$G=8$、2000 次更新的条件下逐个拆组件,可复用的变体共享同一批离线轨迹:
| 表 3(a) 策略组件 | APPS-500 | BCB | 表 3(b) 匹配的策略-价值流水线 | APPS-500 | BCB |
|---|---|---|---|---|---|
| Naive GRPO | 0.180 | 0.416 | GRPO(仅策略) | 0.403 | 0.436 |
| 只做过滤 Filtering-only | 0.193 | 0.429 | GRPO + 匹配的 VM-MCTS | 0.538 | 0.449 |
| E2H-C 课程基线 | 0.189 | 0.418 | ReST-GRPO(仅策略) | 0.565 | 0.476 |
| 只做部分状态 Partial-only | 0.190 | 0.425 | ReST-GRPO + 匹配的 VM-MCTS | 0.642 | 0.506 |
| 均匀前缀 Uniform-prefix | 0.187 | 0.418 | 表 3(c) 近似匹配延迟:VM-BoN($N=260$)0.619 / 约 41.5 s;VM-MCTS($n=5,T=20$)0.642 / 41.5 s | ||
| 完整 ReST-GRPO | 0.207 | 0.440 | VM-BoN 的延迟是标定目标,两者每题耗时相同 | ||
表 3:论文表 3 的三个受控面板。3(a) 匹配优化器/奖励/$G=8$/2000 次更新;3(b) 让每个价值模型配对其生成策略;3(c) 固定策略与价值模型、近似匹配延迟。
表 3(a) 读出三件事:过滤单独有用(0.180→0.193),部分状态重启单独也有用(0.180→0.190),但两者合起来才最好(0.207/0.440)。E2H-C 课程基线只拿到 0.189/0.418——它改变的是「随时间在哪些原始提示词上采样」,而 ReST-GRPO 额外改变了「在线 RL 从轨迹的哪里恢复」。指数前缀采样也优于均匀采样(0.207 对 0.187),因为它偏向更靠前的前缀,留下的后缀动作空间更大。
表 3(b) 是回答前面那个方法论问题的实验。价值模型初始化、架构、1.1M 条目标、采集参数、优化步数、随机种子与 VM-MCTS 配置全部固定,唯一变量是生成这些轨迹的策略。GRPO 训练出的价值模型把自己的策略从 0.403 提到 0.538,说明「学一个状态局部化的价值模型」对任何策略都有益;而匹配的 ReST-GRPO 流水线达到 0.642/0.506。所以第一阶段的策略诱导优势确实穿过了匹配的价值学习与搜索存活下来,不只是产出了一个更好的纯策略检查点。论文还补了机制层证据(附录表 6):在同一套 MCTS 采集流程下,Base/GRPO/ReST-GRPO 的平均轨迹奖励分别是 0.37/0.56/0.68,中位数分别是 0.01/0.60/0.78。
表 3(c) 处理的是一个容易被忽略的公平性问题:候选数相同不等于延迟相同。固定同一个 ReST-GRPO 策略与同一个价值模型、把平均墙钟时间对齐到约 41.5 秒/题后,VM-MCTS 拿 0.642,而标定到 $N=260$ 的 VM-BoN 只有 0.619。因为策略、验证器与延迟都被控住,剩下的差异就干净地隔离出「价值模型是被用于树分配,还是只用于最终重排」。
解码与验证方法对比
表 2 在验证预算统一为 100 个候选的条件下比较 ReST-RL 与 ORM+BoN、PRM+BoN、ORM-MCTS、VM-MCTS。ORM 用 Skywork-Reward-Llama-3.1-8B-v0.2,PRM 用改进 M-S 方法训练的 Qwen2.5 过程奖励模型并取单条输出的最小动作级奖励作为验证分。因为候选预算相同,这张表量的是样本效率。
| 方法(全基准平均,验证均基于 100 个样本) | Qwen3-8B | Qwen2.5-Coder-7B-Instruct | DS-Coder-6.7B-Instruct | OpenCI-DS-6.7B |
|---|---|---|---|---|
| Base | 0.503 | 0.563 | 0.493 | 0.486 |
| ORM | 0.531 | 0.592 | 0.542 | 0.537 |
| PRM | 0.516 | 0.591 | 0.539 | 0.532 |
| ORM-MCTS | 0.538 | 0.588 | 0.547 | 0.535 |
| VM-MCTS | 0.615 | 0.652 | 0.576 | 0.569 |
| ReST-RL | 0.689 | 0.673 | 0.584 | 0.583 |
表 4:ReST-RL 与各验证方法在全基准上的平均结果(论文表 2)。ReST-RL 是与表 1 的最优策略组合后的全局最优。
VM-MCTS 相对最强基线的提升在四个基座上分别是 11.2%、8.9%、8.3%、8.3%。它对 ORM-MCTS 的领先尤其说明问题:两者都用 MCTS,差别只在引导信号是「给完整输出打分的 ORM」还是「给部分状态估值的 VM」,因此这个差距直接支持了「解码时使用状态局部化的价值估计,而不只是给已完成输出打分」这一主张。值得注意的是 PRM 在 Qwen3-8B 上(0.516)反而低于 ORM(0.531),这与「PRM 验证精度普遍高于 ORM」的常见说法相反,论文没有展开解释,但它的价值目标设定恰好绕开了 PRM 依赖标注、且「单步正确性」定义在代码域不成立这两个问题。
图 5:论文图 3(b)。CodeQwen 上 APPS-500 的预算受限验证对比,所有方法采样温度 0.7。VM-MCTS 在整个测试范围内保持领先;附录表 10 显示随分支因子 $n$ 增大,APPS-500 从纯策略的 0.565 平滑升到 0.652,说明这是平滑的算力-性能权衡而非依赖某一个分支因子。
延迟与 token 开销。附录表 18 给出等样本视角:在 base Qwen3-8B 策略上各生成 100 个候选,ORM-BoN 每题 16.0 秒拿到 APPS-500 的 0.214,VM-MCTS($n=5,T=20$)41.5 秒拿到 0.415,$n=10,T=10$ 是 36.4 秒/0.355,$n=20,T=5$ 是 28.6 秒/0.327。也就是说 VM-MCTS 比 ORM-BoN 慢 1.8 到 2.6 倍(取决于树形状),但准确率高出近一倍。论文对此的定位很明确:VM-MCTS 适用于「质量值得额外延迟」的场景,而不是严格实时场景。token 用量方面(附录表 8),CodeQwen 在 $N=100$ 时 Best-of-N 用 25564 token、VM-MCTS 用 22427,搜索并没有比纯采样更费 token。
图 6:论文图 4。Llama-3-8B 上 ReST-GRPO 与 naive GRPO 的训练时间与对应 GPU 小时核算,每 1000 步记录一次;注意此图未包含 ReST-GRPO 的预训练采样时间,完整端到端对比见表 2。
跨域迁移与多样性
表 5 检验「只在代码轨迹上训练的策略与价值模型,在域外任务和策略更新之后是否还有用」。论文对这一节的措辞非常谨慎:代码仍是主要经验域,这个实验测的是「无目标域微调下的迁移」,不是在宣称存在一个通用推理价值模型。
| Qwen3-8B 配置 | APPS-500 | BCB | MATH | Omni-MATH | GPQA-Diamond |
|---|---|---|---|---|---|
| Base(第 0 轮) | 0.118 | 0.418 | 0.780 | 0.234 | 0.449 |
| Base(第 0 轮)+ VM(第 0 轮) | 0.415 | 0.471 | 0.828 | 0.238 | 0.460 |
| ReST-GRPO(第 2 轮)+ VM(第 0 轮) | 0.630 | 0.496 | 0.862 | 0.246 | 0.480 |
| ReST-RL(第 2 轮,策略与 VM 匹配) | 0.642 | 0.506 | 0.872 | 0.256 | 0.490 |
表 5:Qwen3-8B 的初步跨域迁移结果(论文表 5)。价值模型只在代码轨迹上训练,不接受任何目标域微调;第三行故意把初始 VM 配到已更新两轮的策略上,用来评估对策略漂移的鲁棒性。
三点结论。第一,把代码训练的 VM 加到 base 策略上,MATH/Omni-MATH/GPQA-Diamond 从 0.780/0.234/0.449 升到 0.828/0.238/0.460,域外确实有增益。第二,初始 VM 在策略更新两轮之后仍然有用(0.862/0.246/0.480),说明它对中等程度的策略漂移有鲁棒性——这一点对工程落地很重要,因为 $V^{\pi}$ 在理论上依赖策略,如果每次策略微调都必须重训 VM,这套方法的价值会大打折扣。第三,把 VM 也更新到最终漂移后的策略上拿到最好的 0.872/0.256/0.490,匹配仍然优于不匹配。论文的解读是:域无关的目标 $V^{\pi}(s)=\mathbb{E}_{\pi}[R\mid s]$ 可以跨任务与策略漂移迁移。
多样性有没有坍缩。这是一个自然的质疑:把训练偏向高奖励轨迹,会不会削弱探索、导致模式坍缩?附录表 19 的 Self-BLEU(每题采 8 个答案计算,分数越高多样性越低)给出了否定回答:Base 0.610、GRPO 0.620、ReST-DPO 0.602、ReST-GRPO 0.613。ReST-GRPO 的 Self-BLEU 接近 base 且低于 GRPO。论文的解释与设计一致:ReST-GRPO 不确定性地重放某一条轨迹,而是把提示词级过滤与部分状态采样组合起来重塑训练分布,因此优化被偏向到有希望的区域,但后续 rollout 的可变性没有被消掉。如果增益主要来自坍缩到一小撮模式,Self-BLEU 会急剧上升,而它没有。
超参敏感性。附录表 9 单独变动 $\sigma_0$、$\alpha$、$r_0$(Qwen3-8B 各训 1k 步),性能区间相对窄,默认配置整体最强。论文还给了实用建议:奖励在 $[0,1]$ 时 $\sigma_0$ 可从小范围如 $(0,0.1)$ 起步,以免丢掉有信息的提示词;$\alpha$ 越小质量越集中在短前缀,接近 1 则趋于前缀长度上的均匀分布,0.95 在其设定下提供温和的早前缀偏好;$r_0$ 越严格,高奖励锚点越可靠;VM-MCTS 的 $n$ 与 $T$ 按可用延迟预算选。附录表 7 的代理分析显示过滤把平均奖励标准差从 0.104 提到 0.148,高奖励轨迹选择加部分状态采样进一步提到 0.168——但论文再次强调这只是训练信号的刻画,下游归因另见表 3。
图 7:论文图 5。不同基座策略在使用 ReST-RL 与各验证方法时于全部基准上的表现。所有验证基于 100 个样本,采样温度 0.7。
局限性
没有研究重复的多轮策略-价值耦合(作者自述)。论文只报告了两阶段流水线:训策略 → 冻结 → 训 VM → 推理。「更新后的策略与更新后的 VM 反复耦合多轮」这件事没有做。表 5 第三行是这条限制的一个侧影:初始 VM 配到已更新两轮的策略上仍然有效,但那是「不匹配却还能用」的鲁棒性证据,不是「迭代耦合会更好」的证据。理论上 VM 学到的是 $V^{\pi}$,策略每变一次目标就变一次,多轮耦合是否收敛、是否值得那个成本,全文没有回答。
VM-MCTS 在等候选数下延迟高于 BoN(作者自述)。作者明确承认这一点,并说明近似匹配延迟的受控实验只在 Qwen3-8B 与 APPS-500 上做,不覆盖所有部署形态。结合附录表 18,等样本下 VM-MCTS 比 ORM-BoN 慢 1.8 到 2.6 倍;表 3(c) 说明在匹配延迟后 VM-MCTS 仍然更好,但那只是一个数据点(0.642 对 0.619,差 2.3 分)。对延迟敏感的线上代码生成场景,这套方法不能直接照搬。
受控实验只有一个随机种子、一个基座模型(作者自述)。组件对照(表 3(a))与匹配 VM 实验(表 3(b))都是单种子、单基座。作者指出主要的 ReST-GRPO 结果由四次独立运行与多个模型家族支撑,但恰恰是全文最有说服力的那两组受控实验,样本量最小。0.538 与 0.642 之间 10 分的差距大概率是真实的,但表 3(a) 里 0.187/0.189/0.190/0.193 这几个变体之间的差异(都在 0.6 分以内)在单种子下基本无法判定显著性。
数学与科学实验不构成通用验证器(作者自述)。跨域结果只用了 Qwen3-8B 一个基座,展示的是「无目标域微调下的迁移」,而不是「存在一个通用推理价值模型」。Omni-MATH 上从 0.234 到 0.256 的绝对增益相当小(+2.2 分),GPQA-Diamond 从 0.449 到 0.490(+4.1 分),与代码域的 +52.4 分(APPS-500 从 0.118 到 0.642)完全不在一个量级。
价值目标的噪声与奖励塑形是两个未被量化干净的口子(笔者判断)。论文自己说「价值目标引入了一些额外噪声,但配合 MCTS 解码时表现更好」,并给了 A.12 的方差论证——可那个论证建立在「$V_{\phi}$ 与 $R_{\lambda}$ 都是无偏、同方差、噪声与状态独立」这组相当强的假设上,而一个在 1.1M 条自采目标上做 MSE 回归的模型是否真的无偏,全文没有测量。另外式 7 的奖励塑形(必须出现的子串 + 冗余字符惩罚)只在 ReST-GRPO 与 naive GRPO 上使用,两个基线共享它,因此对比是公平的;但它意味着报告的绝对分数依赖于这一层工程化奖励设计,换一个域就得重新设计 $\omega_1$、$\omega_2$ 与「必须子串」的定义。
行级动作粒度在代码域之外缺少消融(笔者判断)。A.8 用 LSR-MCTS、DISC、ReSCALE 等近期工作为「换行分隔的单元往往对应语义连贯的推理段」提供了旁证,也指出 PRM800K 式步骤通常按行组织。但这些是引用来的支持,不是本文自己的消融:论文没有在任何域上比较行级与 token 级、或行级与「推理步骤级」的实际性能差异,只说明了这个选择的动机与工程便利性。作者本人也把自适应或任务特定的动作抽象列为重要方向。
总结与展望
ReST-RL 的贡献可以读作两次「把信号接回来」。第一次接回的是训练侧的状态级信号:GRPO 为了轻量把奖励学习整个移出 RL 回路,本文用「奖励标准差过滤 + 高奖励前缀重启」在不引入价值网络的前提下,让在线 RL 可以从一条成功轨迹的中间恢复,而不是每次都从原始提示词重来。第二次接回的是推理侧的细粒度信号:不给完整输出打分的 ORM,也不给单步标注的 PRM,而是一个预测期望终端奖励、由自采 MCTS 目标训练、与静态策略配对的价值模型,并且让同一个模型同时负责搜索分配与最终选择。
这套设计最有价值的部分可能不是最终的 0.689,而是它对「怎么才算证明了」的态度。论文主动把奖励标准差降级为代理指标,把组件归因交给表 3(a) 的下游结果,把两阶段依赖性交给表 3(b) 的匹配对照,把「候选数相同不等于延迟相同」这个陷阱交给表 3(c) 的墙钟对齐。它甚至如实记录了 APPS-500 子集的历史构造种子已不可考、以及数学科学结果只是初步迁移证据。在一篇方法类论文里,这种把「诊断指标」与「任务性能」严格分开报告的自觉并不常见。
工程上的可迁移经验有两条。其一,端到端算力核算要包含离线阶段:ReST-GRPO 多花 10 小时预采样却省下 328 GPU 小时,因为高度可并行的离线采样换来了更少的有效在线优化步——这个权衡在很多「先离线造数据再在线训」的流水线里都成立。其二,价值模型的复用性比理论预期好:初始 VM 配到已更新两轮的策略上仍然有效(表 5 第三行),意味着实践中不必每次策略微调都重训 VM,这大幅降低了这套方法在持续迭代场景下的维护成本。
剩下的开放问题也很清楚:多轮策略-价值耦合是否收敛且值得;$V_{\phi}$ 的无偏性能否被实测而非假设;行级动作粒度在非代码域是否需要自适应抽象;以及在延迟预算严格时,表 3(c) 那 2.3 分的优势还能不能保住。论文给出的定位是克制的——它不声称造出了一个通用推理价值模型,只声称把策略优化与价值引导推理重新连上,而且不需要付在线 actor-critic 的全部代价。
金句
「被选中的前缀不是模仿目标:它们成为额外的在线 GRPO 上下文,策略从中采样并优化全新的后缀。」
「连接这两个角色只有在一种情况下才有用:第一阶段的策略改善能穿过一条匹配的价值学习流水线存活下来,而不只是产出一个更好的纯策略检查点。」
「我们的框架以一种轻量的方式重新引入了那个缺失的信号——它是一次尝试,把策略优化与价值引导推理重新连上,而不必回到在线 actor-critic 学习的全部成本。」



