跳转至

Murphy: Feedback-Aware GRPO with Retrospective Credit Assignment for Multi-Turn Code Generation

会议: NeurIPS 2026
arXiv: 2511.07833
代码: https://github.com/huggingface/trl
领域: 代码智能
关键词: 代码生成, 强化学习, GRPO, 信用分配, 多轮自校正

一句话总结

针对传统 GRPO 局限于单轮孤立采样的缺陷,提出构建环境反馈条件展开树并通过回顾性信用分配回传奖励的 Murphy 框架,在多轮代码自校正任务中取得显著提升。

研究背景与动机

大语言模型作为自主代码生成智能体正被广泛应用,在典型的执行反馈脚手架中,模型根据单元测试执行结果(如报错信息、堆栈轨迹或失败用例)进行多轮迭代修复。然而,现有的以 Reflexion 为代表的推理期脚手架并未更新模型底层参数,模型仅仅将反馈作为上下文消费,其核心自校正与反馈利用能力在预训练和后训练阶段未得到系统性优化。为了解决这一断层,近期工作尝试将执行反馈引入训练流程,例如 RLEF 借助 PPO 算法与执行奖励优化多轮轨迹,μCode 依赖学习得到的外部验证器进行专家迭代与重标记,而 ReVeal 则在策略内部联合训练自验证器与生成器。这些方法虽然证实了环境反馈训练的有效性,但引入了庞大的辅助模块,如价值网络、测试生成策略或独立的验证器模型,极大地增加了系统复杂度和计算负担。

相比之下,带可验证奖励的强化学习(RLVR)领域中,Group Relative Policy Optimization (GRPO) 凭借去掉 Critic 价值网络、依靠组内相对归一化计算优势函数的极简特性,成为了对齐推理能力的主流范式。然而,标准 GRPO 本质上是单轮算法,仅针对孤立的输入提示优化终端奖励。一种朴素的扩展 GRPO-MT 虽能将多次交互串成线性轨迹,但其实行粗粒度的轨迹级信用分配:整条轨迹上的所有生成步骤均机械地继承最终的终端奖励。在代码生成场景中,这种分配方式忽略了一个关键事实——初次生成的错误程序并非全无价值;若某个错误代码触发了精准暴露边界缺陷或异常堆栈的反馈,进而引导后续轮次成功修复,该初次尝试理应获得积极奖励。相反,若早期的尝试将模型带入不可修复的歧途,即使终端偶然成功,该错误探索也不应被盲目嘉奖。粗粒度轨迹分配无法辨别“高信息量失败”与“低价值失败”。

面对多轮执行反馈环境中中间奖励稀疏且单步价值难以直接衡量的矛盾,本文的核心切入点是保留 GRPO 架构的极简无 Critic 优势,将强化学习的反馈视界拓宽至树状拓扑。核心 idea:将多轮代码自校正建模为反馈条件展开树,在生成完成后利用回顾性信用分配机制自底向上将后续成功修复的奖励反向传递给早期产生关键反馈的尝试,使模型在标准 GRPO 组内相对对齐下学会真正利用执行反馈。

方法详解

整体框架

Murphy 针对多轮代码生成任务,将模型的试错与反思过程构建为反馈条件展开树(Feedback-Conditioned Rollout Tree)。给定原始编程提示,策略网络首先采样第一轮候选程序并交由代码执行器评测;完全通过测试的解作为叶子节点直接终止,未完全通过的解则连同其执行报错信息、失败用例拼接成新的反思提示,并在下一轮次继续独立展开生成新的候选修复代码。在完成预设轮次的树状采样与评测后,算法执行自底向上的回顾性信用分配(Retrospective Credit Assignment),将深层轮次的成功奖励反向赋予触发该有效反馈的早期祖先节点。最后,在展开树的各个局部响应组上执行节点级 GRPO 优势归一化与策略参数裁剪更新。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["初始编程题目输入"] --> B["第一轮候选代码采样"]
    B --> C["执行器评测: 标量得分与反馈信息"]
    C -->|全部测试通过| D["完全解终止: 叶子节点保留"]
    C -->|存在未通过用例| E["反馈条件展开树构建<br/>拼接原题+错误代码+报错信息"]
    E --> F["后续轮次修复代码采样与执行"]
    F --> G["优化前剪枝: IntraP / InterP<br/>按组内方差过滤低信息量轨迹"]
    G --> H["回顾性信用分配: MaRS / MeRS<br/>深层修复成功反哺早期祖先节点"]
    H --> I["节点级 GRPO 策略裁剪更新"]

关键设计

1. 反馈条件展开树构建:保留因果关系的多轮树状交互拓扑

为了彻底摆脱传统单轮生成的局限,Murphy 将环境交互结构从单轨迹拓展为条件树 \(\mathcal{T}\)。在第一轮 \(s=1\) 中,模型接收输入问题 \(q_{(1)}\),由参考策略采样 \(G_1\) 个候选解。每个候选程序经测试套件执行后返回标量得分 \(r\)(通过用例的比例)与定性执行反馈 \(f\)(包括失败断言、标准错误输出、异常堆栈或超时提示)。得分达到 1.0 的候选解直接成为终止节点,保留在树中参与后续优化,不再继续扩展。对于任何未达到完全满分的候选解 \(o_{\{q_{(1)},j\}}\),算法通过文本拼接构建新一轮的反馈条件提示: $\(q_{(2,j)} = [q_{(1)},\, o_{\{q_{(1)},j\}},\, f_{\{q_{(1)},j\}}]\)$ 随后策略网络在 \(q_{(2,j)}\) 条件下继续采样 \(G_2\) 个修复解,生成树的第二层节点。该过程以递归方式向更深轮次推演,从而建立了一棵清晰记录“尝试代码 \(\to\) 环境反馈 \(\to\) 衍生修复”严格因果链条的展开树。

2. 回顾性信用分配:MaRS 与 MeRS 反向价值传递

传统强化学习将中间步骤的低得分机械视为惩罚,抹杀了中间生成暴露关键测试缺陷的先驱贡献。Murphy 在整棵树的叶子节点全部评估完毕后,自底向上递归执行信用分配更新 \(\tilde{r}(v)\)。针对叶子节点,调整后奖励等于其自身即时执行奖励 \(\tilde{r}(v) = r(v)\)。对于具有子代响应组 \(\mathcal{C}(v)\) 的未解决内部节点,本文系统性提出了两种互补的传播算子: - 最大奖励策略(MaRS):采用乐观回溯准则,将节点自身即时得分与所有子代节点调整后得分的最大值赋给该父节点: $\(\tilde{r}(v) = \max\left(r(v),\, \max_{u \in \mathcal{C}(v)} \tilde{r}(u)\right)\)$ 在代码生成这种稀疏奖励且存在明确存在性判据(Existential Criterion)的环境中,只要该错误代码触发的反馈能使后续至少一条修复路径完全通过测试,就证明该尝试具有高度有效性。MaRS 能防止平均化平抑掉罕见的高价值成功解。 - 均值奖励策略(MeRS):采用类似 Bellman 期望回溯的设计,通过平滑平均降低方差: $\(\tilde{r}(v) = \frac{r(v) + \gamma \cdot \frac{1}{|\mathcal{C}(v)|}\sum_{u \in \mathcal{C}(v)} \tilde{r}(u)}{Z(v)}\)$ 其中 \(\gamma \in [0, 1]\) 为折扣因子,\(Z(v)\) 为与展开深度相关的归一化分母(在两轮设置下未解决节点为 2,终止节点为 1),保证不同深度节点之间的信用量级公平可比。

3. 计算感知剪枝机制:基于组内方差的 IntraP 与 InterP 结构过滤

在无约束多轮展开下,若大部分解初次未通过,树的规模将随轮次 \(S\) 呈 \(G^S\) 指数爆炸。Murphy 创新性地在完成采样与评测之后、执行反向传播与梯度计算之前引入轻量化剪枝算子 \(\mathcal{T}' = \text{Prune}(\mathcal{T})\)。剪枝不破坏执行期反馈的完整收集,仅精准过滤进入策略梯度计算的序列数量: - 组内剪枝(IntraP):针对每个特定提示的响应组 \(\mathcal{C}(q)\),给定组内轨迹预算 \(b_{\text{traj}}\),依据每个候选对组内奖励方差的边际贡献 \(\Delta_{\text{Var}}(u; \mathcal{C}(q))\) 挑选得分最高的前 \(b_{\text{traj}}\) 条轨迹,裁除近乎无区分度的平庸样本。 - 组间剪枝(InterP):针对同一轮次因不同失败分支衍生出的多个子响应组 \(\mathcal{G}_s\),给定跨组预算 \(b_{\text{grp}}\),直接计算每个修复组内的奖励方差 \(\text{Var}(\{r(u) : u \in g\})\),仅保留方差最高的前 \(b_{\text{grp}}\) 个群体。这是因为如果某个失败反馈导致的后续所有修复全部成功或全部失败,该组内样本在 GRPO 相对优势计算中无法提供有效的对比梯度;只有部分修复成功、部分失败的高对比度反馈组才蕴含最丰富的学习信号。

损失函数 / 训练策略

完成信用调整与树剪枝后,Murphy 在保留的子树 \(\mathcal{T}'\) 中的每个响应组上局部应用 GRPO 优化。对于任一展开提示 \(q \in \mathcal{Q}(\mathcal{T}')\) 及其保留子代候选组 \(\mathcal{C}_{\mathcal{T}'}(q)\),组内归一化优势计算如下: $\(\hat{A}^{\text{Murphy}}_q(u) = \frac{\tilde{r}(u) - \text{mean}_{w \in \mathcal{C}_{\mathcal{T}'}(q)} \tilde{r}(w)}{\text{std}_{w \in \mathcal{C}_{\mathcal{T}'}(q)} \tilde{r}(w)}\)$ 整体训练目标函数为保留提示组上 GRPO 目标之和,配合相对参考策略的 KL 散度惩罚: $\(\mathcal{J}^{\text{pruned}}_{\text{Murphy}}(\theta) = \mathbb{E}_{\mathcal{T} \sim \pi_{\theta_{\text{old}}}}\left[\sum_{q \in \mathcal{Q}(\mathcal{T}')} \mathcal{J}_{\text{GRPO}}\left(\theta; q, \mathcal{C}_{\mathcal{T}'}(q), \hat{A}^{\text{Murphy}}_q\right)\right]\)$ 在训练实现中,模型基于 TRL 框架构建,推理部署采用 vLLM 并启用前缀缓存(Prefix Caching);优化器采用 AdamW,学习率设为 \(10^{-6}\),KL 正则化系数 \(\beta = 0.04\)。在硬件配置上,使用 8 卡 NVIDIA H100 GPU,2 卡专用于高速 rollout 生成,6 卡执行模型反向梯度同步。

实验关键数据

主实验

评估涵盖 HumanEval、MBPP 以及抗数据污染基准 LiveCodeBench-v6(LCB-v6)。在 1,000 条 KodCode 合成编程任务上微调,并置于多轮 Reflexion 脚手架下进行 pass@1 评测。

模型 基准数据集 评估轮次 Base 基线 GRPO-MT μCode ReVeal Murphy (本文)
OLMo-2-7B HumanEval Iter-1 37.20±0.86 39.02±0.00 35.17±0.35 - 45.53±0.70
OLMo-2-7B HumanEval Iter-3 46.04±0.43 41.87±0.93 41.46±1.06 - 52.24±1.96
OLMo-2-7B MBPP Iter-1 19.90±0.42 28.33±0.31 22.47±0.42 - 29.33±0.90
OLMo-2-7B MBPP Iter-3 29.60±0.28 33.60±0.69 31.60±0.60 - 39.67±1.29
Qwen3-1.7B HumanEval Iter-3 80.07±1.27 82.11±0.35 83.34±0.70 - 86.58±1.06
Qwen3-1.7B MBPP Iter-3 53.93±3.52 58.53±1.03 56.20±0.60 - 62.00±1.91
Qwen3-4B HumanEval Iter-3 93.49±0.93 93.80±1.00 94.10±1.54 - 95.73±0.31
Qwen3-4B MBPP Iter-3 70.93±1.01 71.40±0.70 71.93±0.12 - 73.33±1.31
Qwen3-4B LCB-v6 Hard Iter-1 10.76±0.59 11.05±1.00 11.95±2.64 11.43±1.59 14.33±0.41
Qwen3-4B LCB-v6 Hard Iter-3 16.19±1.72 18.29±0.58 18.10±1.08 18.13±1.28 21.29±0.43
Qwen3-4B LCB-v6 Hard Iter-5 19.15±1.03 19.14±0.99 20.09±1.46 19.14±0.86 24.29±0.38

消融实验

在 Qwen3-1.7B 上对比信用分配策略(MaRS vs. MeRS)以及剪枝策略(IntraP vs. InterP)与计算效率的权衡:

实验切面 配置变体 保留轨迹数/超参 HumanEval Iter-1 (%) HumanEval Iter-3 (%) MBPP Iter-3 (%) 优化步耗时 / 阶段降幅
信用传播 MaRS (乐观最大值) - 79.67±3.01 86.58±1.06 62.00±1.91 基准配置
信用传播 MeRS (\(\gamma=0.9\)) - 78.66±2.11 84.76±1.22 60.53±1.79 -
信用传播 MeRS (\(\gamma=1.0\)) - 78.46±0.70 85.57±0.35 60.93±1.29 -
剪枝策略 未剪枝基线 (MaRS) 72 79.67±3.01 86.58±1.06 62.00±1.91 优化耗时 17.49s (总 72.74s)
剪枝策略 IntraP (组内方差剪枝) 36 82.34±1.03 84.28±2.01 (-2.30) 59.87±1.70 (-2.13) 梯度轨迹减半
剪枝策略 InterP (组间方差剪枝) 40 77.43±2.20 86.17±0.70 (-0.41) 61.20±1.39 (-0.80) 优化耗时 4.53s (-74.1%, 总步长 -21.4%)

关键发现

  • MaRS 显著优于期望型 MeRS:在代码这种极端稀疏的奖励环境中,只要某次尝试能诱导出一条成功修正的代码,该尝试即有极高探索价值;MeRS 会因大量失败子代而稀释成功信号,而 MaRS 完整保留了高价值极值信号。在弱模型 OLMo-2-7B 上,MaRS 比 MeRS 在 HumanEval Iter-3 上高出整整 +10.37 个百分点。
  • InterP 实现了极佳的精度-效率平衡:组间剪枝(InterP)基于组内奖励方差丢弃低对比度反馈群,仅使 Iter-3 略微下降 0.4~0.8 个百分点,却使优化反向传播耗时大幅骤降 74.1%,整步训练加速 21.4%。相较之下,IntraP 伤害了单提示下的反馈对比分布,导致多轮修复性能下滑 2.1~2.3 个百分点。
  • 自校正增益随任务难度与轮次递增:在 LCB-v6 评测中,Murphy 在 Easy 题目上 Iter-5 相比基线提升约 0.96 pp,但在 Medium 和 Hard 题目上分别扩大到 +4.38 pp 和 +4.20 pp。这表明回顾性信用分配真正教会了模型在高难度复杂算法场景下理解报错并逆风翻盘。

亮点与洞察

  • 极简的树状信用分配架构:完全不需要复杂的 PPO Critic、外置判别器或自验证生成网络,直接在标准 GRPO 框架上以树状回溯拓扑重构奖励,用最纯粹的算法设计解决了多轮强化学习信用分配难题。
  • 方差驱动的组间剪枝准则:巧妙利用 GRPO 组内归一化的数学本质,识别出“全对”或“全错”的无对比度反馈群对策略梯度的零贡献,在不破坏前向探索的前提下大幅压缩后向传播开销。
  • 跨推理脚手架的鲁棒自校正泛化:Murphy 训练出的模型不仅在标准 Reflexion 下表现优异,在零额外微调切换至 LATS 和 DoT 等不同交互脚手架时同样保持稳定提升,证明模型真正习得了通用的报错诊断与自校正认知能力。

局限与展望

  • 展开树生成的推理计算成本依然存在:虽然 InterP 将后向优化阶段耗时缩减了 74.1%,但在前向 Rollout 阶段未剪枝树的采样与代码沙箱执行开销仍不可忽视,在超长交互视界下仍需结合动态早停或异步树搜索。
  • 强依赖确定性单元测试反馈:目前方法深植于代码执行能够返回确切错误信息与通过率的确定性环境;在文本推理、开放对话或弱监督工具调用等带有噪声或模糊反馈的领域,树状构建与回溯规则仍需进一步适配。

相关工作与启发

  • vs GRPO-MT: GRPO-MT 沿单一交互轨迹进行粗粒度终端奖励广播,无法区分引向正确反馈的失败与纯粹误导性失败;Murphy 通过树状展开与局部归一化,精准识别并嘉奖有价值的试错。
  • vs μCode / ReVeal: μCode 依赖额外训练的验证模型与专家迭代,ReVeal 需交织自验证策略带来双倍训练耗时(8卡H100下需23小时 vs Murphy的11小时);Murphy 保持了架构极简性与训练高吞吐。
  • vs TreeGRPO: TreeGRPO 针对视觉扩散模型的单轨迹去噪分支反传优势值;Murphy 针对多轮环境反馈展开,回溯的是环境执行奖励本身并在每个反馈组内计算相对优势,并系统论证了 MaRS 极值回溯在代码场景下的优越性。

评分

  • 新颖性: ⭐⭐⭐⭐☆ 首次将回顾性树状信用回溯与组间方差剪枝优雅融入无 Critic 的 GRPO 框架。
  • 实验充分度: ⭐⭐⭐⭐⭐ 涵盖 3 个模型、3 大主流基准、3 种交互脚手架、详尽难度分层与细粒度系统耗时剖析。
  • 写作质量: ⭐⭐⭐⭐⭐ 动机清晰紧凑,公式推导严谨,理论分析与工程落地结合极佳。
  • 价值: ⭐⭐⭐⭐⭐ 为 Agentic 智能体多轮对齐提供了一种兼具高性能与工程极简性的全新后训练范式。