Agentic RL 信用分配
先抓住一句话:Agentic RL 信用分配要回答的不是“最终得了几分”,而是“最终成败应该算到哪些中间决策头上”。
在普通生成任务里,模型通常一次性输出答案,最终 reward 和这段输出离得很近:答对就奖励,答错就惩罚。但在 Agentic RL 里,一条轨迹往往包含很多轮交互:读任务、搜索、打开网页、读证据、调工具、再搜索、总结答案。环境却常常只在最后给一个结果:
这时真正困难的问题就出现了:如果最终成功,到底应该奖励哪一步?如果最终失败,又到底是哪一步该背锅?
如果仍然只做 trajectory-level RL,失败轨迹里的好搜索会被一起惩罚,成功轨迹里的无效搜索或错误工具调用也会被一起奖励。信用分配要修正的就是这个断点:从整条轨迹的成败,走向每一步决策的责任。
从策略梯度的角度看,trajectory-level RL 更新大致是在做:
这条式子就是上面断点的数学形式:$R(\tau)$ 是一个 trajectory-level 标量,不会区分哪一步该奖、哪一步该罚。
所以 Agentic RL 信用分配的核心困难不是“有 reward 后怎么更新 policy”,而是 step-level advantage 到底从哪里来。
更具体地说,我们希望把整条轨迹的奖励:
也就是从一个 trajectory-level outcome,变成每一步自己的 step-level advantage。然后再用这个 $A_{i,t}$ 去更新第 $t$ 轮 LLM action 里的 token:
所以可以把信号理解成三层,从最终结果一路落到具体 token:
当前 GRPO-style Agentic RL 的很多工作,本质上都是在构造更好的 $A_{i,t}$。
三类方法总览
为了构造 step-level advantage,当前可以把方法分成三类。它们的区别不在于最后怎么更新 policy,而在于 step-level 信号从哪里来:
| 类别 | 代表方法 | 信号来源 | 核心问题 |
|---|---|---|---|
| 方向一:State-anchored Stepwise | GiGPO、HGPO | 同 state / 同上下文 group 内的相对回报 | 同样局面下,哪个动作更容易导向成功? |
| 方向二:Process / Progress Reward | SPA-RL、AgentPRM | 额外训练的 step-level progress / PRM scorer | 这一步贡献了多少进展,或从这里出发未来回报多高? |
| 方向三:Intrinsic Signal | ARPO、IGPO | policy 自身的 entropy / belief 变化 | 哪里最值得探索?哪一步让模型更接近正确答案? |
方向一:State-anchored Stepwise:同 state 下比较动作
以 GiGPO 为例。它的想法是:同一个任务采多条 rollout,如果这些 rollout 中间遇到了相同的环境状态 $s$,那就可以比较“同样局面下,不同动作谁更好”。
先把所有在 state $s$ 下发生的动作聚成一个组:
这里的 $R_t^{(i)}$ 不是整条轨迹 reward,而是从这一步开始往后的折扣回报:
如果环境只有最终成功奖励,可以直觉理解成:这一步之后最终成功就有正回报,成功来得越晚、折扣后回报越小,最终失败则回报接近 0。
然后在同一个 state group 里做相对优势:
也就是说,一个动作的 step 分数,等于它后续带来的回报,减去同 state 下其他动作的平均后续回报。
举个 WebShop 例子。多个 rollout 都来到同一个商品搜索结果页:
| 动作 | 后续结果 | $R_t$ |
|---|---|---|
| 点正确商品 | 很快成功 | 1.00 |
| 点错误商品,但后来返回并买对 | 晚一点成功 | 0.73 |
| 点下一页 | 最终失败 | 0.00 |
组内平均值是:
不考虑标准差时,三个动作的相对分数就是:
点正确商品: 1.00 - 0.58 = +0.42
点错误商品: 0.73 - 0.58 = +0.15
点下一页: 0.00 - 0.58 = -0.58
这样模型学到的不是“成功轨迹里所有动作都好”,而是更细的局部偏好:在同一个 state 下,点正确商品最好;点错误商品虽然不理想,但还有补救机会;点下一页最差,因为后续失败了。
最后 GiGPO 把整条轨迹的 macro advantage 和这一步的 micro advantage 合起来:
其中 $A^E$ 表示整条轨迹相对好不好,$A^S$ 表示这一步在同 state 下相对好不好。
HGPO:同 state 还不够,还要看历史上下文
HGPO 可以看成是对 GiGPO 的一个关键修正。GiGPO 在同一个 state 下比较动作,但 HGPO 指出:同一个当前 state,不一定代表同一个决策上下文。
最容易出错的是网页任务:两个 rollout 可能当前页面完全一样,但它们是怎么走到这个页面的并不一样。一个 agent 可能带着完整约束来到这里,另一个 agent 可能前面已经漏掉了关键条件。此时同一个动作的好坏含义就会不同。HGPO 把这个问题叫做 historical context inconsistency。
HGPO 的做法是:先按当前 state 分组,再按历史上下文的一致程度继续分层。定义一个 $k$-step context operator:
它表示“当前 state 加上前面 $k$ 个历史 state”。当 $k=0$ 时,只看当前 state;当 $k$ 越大,要求共享的历史越长,上下文越一致。
然后对每个 step 构造多个层级 group:
这些 group 之间是嵌套关系:
所以公式里的嵌套关系可以直接按图来读:$G_0^H$ 是“只看当前页面”的大组,样本最多但容易混;$G_1^H$ 开始把上一轮历史也纳入比较;$G_K^H$ 则要求更长历史一致,比较最公平,但样本也最少。
在每一层 group 里,HGPO 都可以像 GiGPO 一样算一个组内相对 advantage:
其中 $R(s_t^{(i)})$ 仍然可以理解成从这一步开始的折扣未来回报。最后 HGPO 把不同层级的 advantage 加权融合:
$\alpha$ 控制更深层 group 的权重。$\alpha$ 越大,越相信上下文更一致的深层 group;但深层 group 样本少,方差更高,所以这本质上是一个 bias-variance trade-off。
一句话说,GiGPO 问“同一个 state 下哪个动作更好”,HGPO 进一步问“在同一个 state 且历史上下文相近时,哪个动作更好”。
方向二:Process / Progress Reward:额外训练步级 scorer
第二类方法不要求 rollout 之间一定出现同 state 碰撞,而是额外训练一个能给步骤打分的模型。SPA-RL 侧重“这一步贡献了多少进步”,AgentPRM 侧重“从这个 state-action 出发未来回报有多高”。
SPA-RL:把最终 reward 分摊成每一步的 progress
SPA-RL 走的是另一条路线:不依赖同 state 碰撞,而是额外训练一个 progress estimator,让它学会判断“这一步让任务向完成目标推进了多少”。
它的基本假设是:一个长程任务最终完成,是每一步 incremental progress 累积出来的。
所以 SPA-RL 不直接给每一步打“绝对好坏分”,而是让模型预测每一步贡献 $\hat c_t$,并要求这些贡献加起来能还原最终 reward:
progress estimator 的形式可以理解为:
也就是用一个 LLM 编码当前 state-action,再接一个轻量 MLP 输出标量贡献。训练时,用多条探索轨迹的最终 reward 做监督:
这个 loss 的意义非常直接:如果某条轨迹最终成功,所有步骤贡献的和应该接近 1;如果最终失败,贡献的和应该接近 0。模型为了拟合这个目标,会学着把正贡献分给真正推动任务成功的步骤,把低贡献或负贡献分给无效步骤。
举个直觉例子。一个搜索 agent 最终答对,轨迹里可能有 5 步:
| 步骤 | 行为 | 可能的 progress |
|---|---|---|
| 1 | 生成一个模糊 query | 0.05 |
| 2 | 打开无关网页 | 0.00 |
| 3 | 改写 query 命中关键网页 | 0.30 |
| 4 | 抽取关键证据 | 0.45 |
| 5 | 组织成最终答案 | 0.20 |
这些分数加起来约等于最终成功 reward。这样 RL 训练时不再只有最后一步有信号,而是每一步都有 dense reward。
SPA-RL 还加了一个 grounding signal $g_t$,表示动作是否真的能在环境中执行。最终中间奖励是:
这里 $c_t$ 负责“是否推动任务完成”,$g_t$ 负责“动作是否可执行”。然后把原来 PPO 里的稀疏终点 reward 替换成 $r_t^{\text{fused}}$,得到更密的训练信号。
一句话说,SPA-RL 不要只问这一步好不好,而是问这一步对最终完成贡献了多少,并让所有步骤贡献之和对齐最终 reward。
它和 AgentPRM 的差别是:SPA-RL 更像 reward redistribution,学的是“进步量”;AgentPRM 更像 value learning,学的是“从这个 state-action 出发未来能拿多少回报”。
AgentPRM:把 PRM 当成 agent 的 $Q(s,a)$
AgentPRM 的思路更接近经典 RL 里的 actor-critic。它把 process reward model 看成一个状态-动作价值函数:
也就是说,PRM 输出的不是“这一小步贡献了多少”,而是“如果在当前 state 做这个 action,后面按当前 policy 继续走,预期能拿多少总回报”。
AgentPRM 的训练是一个三阶段循环:
- Rollout and Compute Target:用当前 policy $\pi_{i-1}$ 在环境中采样大量轨迹,并用 MC return 给每个 $(s,a)$ 估计目标值。
- Train PRM:把这些自动标注的 $\hat Q(s,a)$ 当 soft label,训练 PRM。
- Train Policy:用训练好的 PRM 作为 dense reward,更新 policy,同时用 KL 约束不要离上一轮 policy 太远。
第一步的 MC target 是:
$\mathcal G(s,a)$ 是所有经过同一个 state-action 的轨迹集合。直觉上,如果很多轨迹在做了这个 action 之后最终成功,那么这个 action 的 $\hat Q$ 就高;如果经常失败,$\hat Q$ 就低。
第二步训练 PRM 时,把 $\hat Q$ 当成 0 到 1 之间的 soft label,用 soft BCE:
第三步更新 policy:
这里 KL 不是约束到最初 SFT policy,而是约束到上一轮 policy $\pi_{i-1}$。原因是 PRM 是用上一轮 policy 的 rollout 训练的,如果新 policy 飘得太远,PRM 的估计就会失真。
AgentPRM 在推理时还可以做 Best-of-N:每一步从 policy 采样 $N$ 个候选动作,用 PRM 选 $Q(s,a)$ 最高的那个。
一句话说,AgentPRM 先用 rollout 自动给每个 state-action 估未来回报,再训练一个 PRM 近似 $Q(s,a)$,最后用这个 PRM 指导 policy 学习和搜索。
它的最大风险是 reward hacking:policy 可能学会让 PRM 打高分,而不是让真实任务成功。论文里也观察到,PRM reward 持续升高时,真实 success rate 可能先升后降。常见缓解方式包括:迭代重训 PRM、增加 rollout 数据、加 KL 约束、使用参考 policy 做 reward shaping。
方向三:Intrinsic Signal:从 policy 自身找信号
第三类方法不额外训练 PRM,而是从 policy 自己的行为分布里找 step-level 信号。ARPO 用 entropy 找最值得探索的分叉点;IGPO 用正确答案概率的增量衡量每一轮是否真的带来了信息。
ARPO:把 rollout 预算花在 entropy 飙升的位置
ARPO 关注的是工具调用场景。它的关键观察是:LLM 在收到工具返回结果之后,接下来生成的前 10 到 50 个 token entropy 往往会明显升高。
token entropy 的定义是:
entropy 高表示模型此刻不确定:可能有多种解释、多种下一步工具调用、多种推理路径。ARPO 的想法是:既然不确定性最高的位置最可能是关键决策点,那 rollout 预算就不应该平均花,而应该集中在那里。
ARPO 的 rollout 分成两类:
global rollout: 从头到尾采完整轨迹,保证整体探索
partial rollout: 在高 entropy 工具调用节点分叉,重点探索局部决策
具体流程是:
- 总 rollout budget 是 $M$,先采 $N$ 条完整轨迹,剩下 $M-N$ 留给局部分叉。
- 记录每条轨迹初始 token entropy,得到 $H_{\text{initial}}$。
- 每次工具调用返回后,生成 $k$ 个 token,计算此时 entropy $H_t$。
- 计算 entropy 变化:
然后把 entropy 变化转成分叉概率:
如果 $P_t$ 超过阈值,就从当前节点分出 $Z$ 条 partial rollout。比如搜索工具返回了几段互相冲突的证据,模型 entropy 飙升,ARPO 就在这里多分几条分支:一条追证据 A,一条追证据 B,一条换 query 验证。
因为 partial rollout 共享前缀,ARPO 还要处理 advantage 怎么分配。它区分两部分 token:
shared tokens: 分叉前所有分支共享的前缀
individual tokens: 分叉后每条路径自己的 token
个性化分支 token 用各自轨迹的 normalized reward:
共享 token 则用包含该共享片段的多个分支 advantage 的平均:
一句话说,entropy 告诉你哪里最不确定,ARPO 就在那里分叉采样,并把分叉后的成败差异回传给关键 tool-use 决策。
IGPO:用正确答案概率的增量当 turn-level reward
IGPO 的核心想法是:每一轮搜索、读证据、工具调用,本质上都应该让模型更接近正确答案。那就直接衡量这一轮之后,模型对 ground-truth answer 的概率有没有上升。
设 ground-truth answer token 为:
第 $i$ 条 rollout 到第 $t$ 轮为止的历史是 $o_{i,\leq t}$。IGPO 用 teacher forcing 计算模型生成正确答案的平均 log probability:
这条公式可以拆成三个部分看:
| 符号 | 含义 | 直觉 |
|---|---|---|
| $q$ | 原始问题 | 用户一开始问的题目 |
| $o_{i,\leq t}$ | 第 $i$ 条 rollout 到第 $t$ 轮为止的全部交互历史 | 包括已经搜索过什么、读到什么证据、调用过什么工具 |
| $a=(a_1,\ldots,a_L)$ | 标准答案 token 序列 | 训练集中给定的 ground-truth answer |
举个例子,问题是:
q: 《哈利·波特》的作者是谁?
标准答案是:
a: J. K. Rowling
一条 rollout 可能是:
o_{i,≤0}: 还没搜索,只看到问题
o_{i,≤1}: 第 1 轮搜索后,看到一些网页摘要
o_{i,≤2}: 第 2 轮打开百科,看到作者信息
o_{i,≤3}: 第 3 轮整理答案
IGPO 每一轮都问同一个问题:在当前已有信息下,模型生成正确答案 “J. K. Rowling” 的概率有多大?
这里的 teacher forcing 指的是:不让模型自由生成答案,而是把正确答案 token 一个一个喂给模型,然后计算模型对每个正确 token 的概率。
如果正确答案 token 是:
a = [J, ., K, ., Rowling]
那 teacher forcing 会计算:
P(J | 问题 + 当前历史)
P(. | 问题 + 当前历史 + J)
P(K | 问题 + 当前历史 + J.)
P(. | 问题 + 当前历史 + J.K)
P(Rowling | 问题 + 当前历史 + J.K.)
再把这些 token 的 log probability 取平均。除以 $L$ 是为了避免长答案天然 log probability 更低;否则长答案会因为 token 多而被不公平地惩罚。
然后把连续两轮之间的 log probability 增量定义成 information gain reward:
IGPO 不是只用 information gain。它还保留最终 outcome reward,并且把两类 reward 分开做 group-wise z-normalization:
然后像普通 RL 一样向后累积折扣回报:
训练时,把 $\tilde R_{i,t}$ 分配给第 $t$ 轮产生的 decision tokens;工具返回内容本身不更新,因为那不是模型生成的。
一句话说,如果某一轮交互让模型更容易生成正确答案,这一轮就该被奖励;如果让模型偏离正确答案,这一轮就该被惩罚。
IGPO 的优点是便宜、稠密、ground-truth-aware,不需要额外 PRM,也不需要 Monte Carlo 估值。缺点是它依赖高质量 ground truth。如果问题本身有多个合理答案,但数据集只认其中一个,IGPO 可能会惩罚事实正确但不匹配标注的推理路径。