Agentic RL 信用分配

先抓住一句话:Agentic RL 信用分配要回答的不是“最终得了几分”,而是“最终成败应该算到哪些中间决策头上”。

在普通生成任务里,模型通常一次性输出答案,最终 reward 和这段输出离得很近:答对就奖励,答错就惩罚。但在 Agentic RL 里,一条轨迹往往包含很多轮交互:读任务、搜索、打开网页、读证据、调工具、再搜索、总结答案。环境却常常只在最后给一个结果:

$$ R_{\text{final}} = 1 \quad \text{or} \quad 0 $$

这时真正困难的问题就出现了:如果最终成功,到底应该奖励哪一步?如果最终失败,又到底是哪一步该背锅?

Credit assignment 具体做的事情
原始信号
读任务 搜索 读证据 调工具 总结答案 $R_{\text{final}}$
Credit assignment 做的不是“再算一个最终分”,而是把终点的 $R_{\text{final}}$ 回拆成每个决策位置的 step-level advantage。
回拆之后
$A_1$+0.10读清任务约束
$A_2$+0.35搜索命中关键方向
$A_3$+0.25证据提炼有效
$A_4$-0.20工具调用带来噪声
$A_5$+0.75答案整合正确
真正更新
$A_1 \times \log\pi(\text{planning tokens})$ + $A_2 \times \log\pi(\text{search tokens})$ + $A_3 \times \log\pi(\text{evidence tokens})$ + $A_4 \times \log\pi(\text{tool-call tokens})$ + $A_5 \times \log\pi(\text{answer tokens})$ 网页/工具返回内容 masked
图里的 $A_t$ 是示意性的 step-level advantage:有效决策给正 credit,带偏工具调用给负 credit;这些 $A_t$ 只更新模型生成的 decision tokens,网页/工具 observation 通常 masked。

如果仍然只做 trajectory-level RL,失败轨迹里的好搜索会被一起惩罚,成功轨迹里的无效搜索或错误工具调用也会被一起奖励。信用分配要修正的就是这个断点:从整条轨迹的成败,走向每一步决策的责任。

从策略梯度的角度看,trajectory-level RL 更新大致是在做:

$$ \nabla J(\theta) = \mathbb E_{\tau \sim \pi_\theta} \left[ R(\tau)\nabla \log \pi_\theta(\tau) \right] $$

这条式子就是上面断点的数学形式:$R(\tau)$ 是一个 trajectory-level 标量,不会区分哪一步该奖、哪一步该罚。

所以 Agentic RL 信用分配的核心困难不是“有 reward 后怎么更新 policy”,而是 step-level advantage 到底从哪里来

更具体地说,我们希望把整条轨迹的奖励:

$$ R(\tau_i) \quad \Longrightarrow \quad \{A_{i,1}, A_{i,2}, \ldots, A_{i,T}\} $$

也就是从一个 trajectory-level outcome,变成每一步自己的 step-level advantage。然后再用这个 $A_{i,t}$ 去更新第 $t$ 轮 LLM action 里的 token:

$$ A_{i,t} \sum_{k \in a_{i,t}} \nabla \log \pi_\theta(y_k | h_{i,t}, y_{<k}) $$

所以可以把信号理解成三层,从最终结果一路落到具体 token:

从最终结果到 token 更新的三层信号
Trajectory reward
整条轨迹最后得到 $R(\tau_i)$,只知道“这一局成没成”。
Step advantage
把最终结果拆成 $A_{i,t}$,回答“第 $t$ 轮该不该被奖励”。
Token gradient
把 $A_{i,t}$ 乘到这一轮 action 的 token log-prob 上,真正更新 LLM。

当前 GRPO-style Agentic RL 的很多工作,本质上都是在构造更好的 $A_{i,t}$。

三类方法总览

为了构造 step-level advantage,当前可以把方法分成三类。它们的区别不在于最后怎么更新 policy,而在于 step-level 信号从哪里来

类别代表方法信号来源核心问题
方向一:State-anchored StepwiseGiGPO、HGPO同 state / 同上下文 group 内的相对回报同样局面下,哪个动作更容易导向成功?
方向二:Process / Progress RewardSPA-RL、AgentPRM额外训练的 step-level progress / PRM scorer这一步贡献了多少进展,或从这里出发未来回报多高?
方向三:Intrinsic SignalARPO、IGPOpolicy 自身的 entropy / belief 变化哪里最值得探索?哪一步让模型更接近正确答案?

方向一:State-anchored Stepwise:同 state 下比较动作

以 GiGPO 为例。它的想法是:同一个任务采多条 rollout,如果这些 rollout 中间遇到了相同的环境状态 $s$,那就可以比较“同样局面下,不同动作谁更好”。

先把所有在 state $s$ 下发生的动作聚成一个组:

$$ G^S(s)=\{(a_t^{(i)}, R_t^{(i)}) \mid s_t^{(i)}=s\} $$

这里的 $R_t^{(i)}$ 不是整条轨迹 reward,而是从这一步开始往后的折扣回报:

$$ R_t^{(i)} = \sum_{k=t}^{T} \gamma^{k-t}r_k^{(i)} $$

如果环境只有最终成功奖励,可以直觉理解成:这一步之后最终成功就有正回报,成功来得越晚、折扣后回报越小,最终失败则回报接近 0。

然后在同一个 state group 里做相对优势:

$$ A^S(a_t^{(i)}) = \frac{ R_t^{(i)}-\text{mean}(\{R_t\}_{G^S(s)}) }{ F_{\text{norm}}(\{R_t\}_{G^S(s)}) } $$

也就是说,一个动作的 step 分数,等于它后续带来的回报,减去同 state 下其他动作的平均后续回报。

举个 WebShop 例子。多个 rollout 都来到同一个商品搜索结果页:

动作后续结果$R_t$
点正确商品很快成功1.00
点错误商品,但后来返回并买对晚一点成功0.73
点下一页最终失败0.00

组内平均值是:

$$ \bar R = 0.58 $$

不考虑标准差时,三个动作的相对分数就是:

点正确商品: 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(a_t^{(i)}) = A^E(\tau_i) + \omega A^S(a_t^{(i)}) $$

其中 $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:

$$ \mathcal C_k(s_t^{(i)}) = (s_{t-k}^{(i)}, s_{t-k+1}^{(i)}, \ldots, s_t^{(i)}) $$

它表示“当前 state 加上前面 $k$ 个历史 state”。当 $k=0$ 时,只看当前 state;当 $k$ 越大,要求共享的历史越长,上下文越一致。

然后对每个 step 构造多个层级 group:

$$ G_k^H(s_t^{(i)}) = \{(j,n): \mathcal C_k(s_t^{(i)}) = \mathcal C_k(s_n^{(j)})\} $$

这些 group 之间是嵌套关系:

$$ G_0^H \supseteq G_1^H \supseteq \cdots \supseteq G_K^H $$
HGPO 想避免把“看起来一样”的局面混在一起
两个 rollout 都来到 同一个商品详情页:黑色雨靴 当前 state 看起来一样
Agent A 的历史
用户要求:黑色、防水、低价 上一轮搜索:black waterproof boots
此时“加入购物车”大概率是好动作。
Agent B 的历史
用户要求:黑色、防水、低价 上一轮搜索:black boots,漏掉防水
此时“加入购物车”可能是坏动作。
G0
只看当前商品页,把 A 和 B 放进同一组比较。
样本多,但会混
G1
看“上一页 / 上一步 + 当前页”,把搜索历史不同的 rollout 分开。
更像同一语境
GK
看更长历史,只和真正相似的决策上下文比较。
更准,但样本少
所以 HGPO 的核心不是“多画几层 group”,而是:当前页面一样时,先检查历史是否也相近;历史越相近,advantage 比较越公平,但可用样本越少。

所以公式里的嵌套关系可以直接按图来读:$G_0^H$ 是“只看当前页面”的大组,样本最多但容易混;$G_1^H$ 开始把上一轮历史也纳入比较;$G_K^H$ 则要求更长历史一致,比较最公平,但样本也最少。

在每一层 group 里,HGPO 都可以像 GiGPO 一样算一个组内相对 advantage:

$$ A_k^H(s_t^{(i)}) = \frac{ R(s_t^{(i)}) - \frac{1}{|G_k^H|}\sum_{(j,n)\in G_k^H} R(s_n^{(j)}) }{ \sigma_{G_k^H} } $$

其中 $R(s_t^{(i)})$ 仍然可以理解成从这一步开始的折扣未来回报。最后 HGPO 把不同层级的 advantage 加权融合:

$$ A^H(s_t^{(i)}) = \sum_{k=0}^{K} w_k A_k^H(s_t^{(i)}), \qquad w_k = \frac{(k+1)^\alpha}{\sum_k (k+1)^\alpha} $$

$\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:

$$ \hat R = \sum_{t=1}^{N} \hat c_t \approx R $$

progress estimator 的形式可以理解为:

$$ \hat c_t = \mathrm{MLP}(h_t), \qquad h_t = f_{\pi_\gamma}(s_t,a_t) $$

也就是用一个 LLM 编码当前 state-action,再接一个轻量 MLP 输出标量贡献。训练时,用多条探索轨迹的最终 reward 做监督:

$$ \mathcal L_{\text{PE}} = \frac{1}{|\mathcal D|M} \sum_i \sum_j (\hat R_{i,j} - R_{i,j})^2 $$

这个 loss 的意义非常直接:如果某条轨迹最终成功,所有步骤贡献的和应该接近 1;如果最终失败,贡献的和应该接近 0。模型为了拟合这个目标,会学着把正贡献分给真正推动任务成功的步骤,把低贡献或负贡献分给无效步骤。

举个直觉例子。一个搜索 agent 最终答对,轨迹里可能有 5 步:

步骤行为可能的 progress
1生成一个模糊 query0.05
2打开无关网页0.00
3改写 query 命中关键网页0.30
4抽取关键证据0.45
5组织成最终答案0.20
把最终成功 reward 重分配到步骤
0.05
0
0.30
0.45
0.20
1 模糊 query
2 无关网页
3 命中网页
4 关键证据
5 最终答案
SPA-RL 想学到的是“每一步贡献多少”,而不是最后统一给整条轨迹一个 1。

这些分数加起来约等于最终成功 reward。这样 RL 训练时不再只有最后一步有信号,而是每一步都有 dense reward。

SPA-RL 还加了一个 grounding signal $g_t$,表示动作是否真的能在环境中执行。最终中间奖励是:

$$ r_t^{\text{fused}} = \alpha c_t + \beta g_t $$

这里 $c_t$ 负责“是否推动任务完成”,$g_t$ 负责“动作是否可执行”。然后把原来 PPO 里的稀疏终点 reward 替换成 $r_t^{\text{fused}}$,得到更密的训练信号。

SPA-RL 的 fused reward
progress $c_t$+ grounding $g_t$ $r_t^{\text{fused}}$ PPO step reward
一个动作既要“有用”,也要“能执行”;两类信号融合后变成每一步都可用的训练奖励。

一句话说,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 看成一个状态-动作价值函数:

$$ Q^\pi(s_t,a_t) = \mathbb E_\pi \left[ \sum_{k=t}^{T} \gamma^{k-t} r(s_k,a_k) \mid s_t,a_t \right] $$

也就是说,PRM 输出的不是“这一小步贡献了多少”,而是“如果在当前 state 做这个 action,后面按当前 policy 继续走,预期能拿多少总回报”。

AgentPRM 的训练是一个三阶段循环:

  1. Rollout and Compute Target:用当前 policy $\pi_{i-1}$ 在环境中采样大量轨迹,并用 MC return 给每个 $(s,a)$ 估计目标值。
  2. Train PRM:把这些自动标注的 $\hat Q(s,a)$ 当 soft label,训练 PRM。
  3. Train Policy:用训练好的 PRM 作为 dense reward,更新 policy,同时用 KL 约束不要离上一轮 policy 太远。

第一步的 MC target 是:

$$ \hat Q(s,a) = \frac{1}{|\mathcal G(s,a)|} \sum_{(s_t,a_t)\in \mathcal D(s,a)} \sum_{k=t}^{T-1} \gamma^{k-t}r_k $$

$\mathcal G(s,a)$ 是所有经过同一个 state-action 的轨迹集合。直觉上,如果很多轨迹在做了这个 action 之后最终成功,那么这个 action 的 $\hat Q$ 就高;如果经常失败,$\hat Q$ 就低。

第二步训练 PRM 时,把 $\hat Q$ 当成 0 到 1 之间的 soft label,用 soft BCE:

$$ \mathcal L(Q_\phi) = - \mathbb E_{(s,a,\hat Q)} \left[ \hat Q \log Q_\phi(s,a) + (1-\hat Q)\log(1-Q_\phi(s,a)) \right] $$

第三步更新 policy:

$$ \pi_i = \arg\max_{\pi_\theta} \mathbb E_{s,a\sim\pi_\theta} [Q_\phi(s,a)] - \beta \mathbb D_{\mathrm{KL}} [ \pi_\theta(a|s) \| \pi_{i-1}(a|s) ] $$

这里 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 的定义是:

$$ H_t = - \sum_{j=1}^{V} p_{t,j}\log p_{t,j}, \qquad p_t = \mathrm{Softmax}(z_t/\tau) $$

entropy 高表示模型此刻不确定:可能有多种解释、多种下一步工具调用、多种推理路径。ARPO 的想法是:既然不确定性最高的位置最可能是关键决策点,那 rollout 预算就不应该平均花,而应该集中在那里。

工具返回后的 entropy 尖峰
t1
t2
t3
tool
+10
+30
+50
later
黑框区域表示模型刚读完工具结果后的不确定高峰;ARPO 会优先在这里追加分支采样。

ARPO 的 rollout 分成两类:

global rollout: 从头到尾采完整轨迹,保证整体探索
partial rollout: 在高 entropy 工具调用节点分叉,重点探索局部决策

具体流程是:

  1. 总 rollout budget 是 $M$,先采 $N$ 条完整轨迹,剩下 $M-N$ 留给局部分叉。
  2. 记录每条轨迹初始 token entropy,得到 $H_{\text{initial}}$。
  3. 每次工具调用返回后,生成 $k$ 个 token,计算此时 entropy $H_t$。
  4. 计算 entropy 变化:
$$ \Delta H_t = \mathrm{Normalize}(H_t - H_{\text{initial}}) $$

然后把 entropy 变化转成分叉概率:

$$ P_t = \alpha + \beta \Delta H_t, \qquad \text{Action}(P_t) = \begin{cases} \text{Branch}(Z), & P_t > \tau \\ \text{Continue}, & \text{otherwise} \end{cases} $$

如果 $P_t$ 超过阈值,就从当前节点分出 $Z$ 条 partial rollout。比如搜索工具返回了几段互相冲突的证据,模型 entropy 飙升,ARPO 就在这里多分几条分支:一条追证据 A,一条追证据 B,一条换 query 验证。

ARPO 的局部分叉采样
共享前缀 工具返回 高 entropy 节点
分支 A追证据 Areward 高
分支 B追证据 Breward 低
分支 C换 query 验证reward 中
分叉后的差异用来更新 individual tokens;共享前缀则吃多个分支 advantage 的平均。

因为 partial rollout 共享前缀,ARPO 还要处理 advantage 怎么分配。它区分两部分 token:

shared tokens: 分叉前所有分支共享的前缀
individual tokens: 分叉后每条路径自己的 token

个性化分支 token 用各自轨迹的 normalized reward:

$$ \hat A_{i,t} = \frac{ r_i-\mathrm{mean}(\{R_i\}_{i=1}^{G}) }{ \mathrm{std}(\{R_i\}_{i=1}^{G}) } $$

共享 token 则用包含该共享片段的多个分支 advantage 的平均:

$$ \hat A_{i,t}^{\text{shared}} = \frac{1}{d} \sum_{i=1}^{d} \hat A_{i,t} $$

一句话说,entropy 告诉你哪里最不确定,ARPO 就在那里分叉采样,并把分叉后的成败差异回传给关键 tool-use 决策。

IGPO:用正确答案概率的增量当 turn-level reward

IGPO 的核心想法是:每一轮搜索、读证据、工具调用,本质上都应该让模型更接近正确答案。那就直接衡量这一轮之后,模型对 ground-truth answer 的概率有没有上升。

设 ground-truth answer token 为:

$$ a=(a_1,\ldots,a_L) $$

第 $i$ 条 rollout 到第 $t$ 轮为止的历史是 $o_{i,\leq t}$。IGPO 用 teacher forcing 计算模型生成正确答案的平均 log probability:

$$ \log \pi_\theta(a \mid q, o_{i,\leq t}) = \frac{1}{L} \sum_{j=1}^{L} \log \pi_\theta(a_j \mid q, o_{i,\leq t}, a_{<j}) $$

这条公式可以拆成三个部分看:

符号含义直觉
$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:

$$ r_{i,t}^{IG} = \log \pi_\theta(a \mid q, o_{i,\leq t}) - \log \pi_\theta(a \mid q, o_{i,\leq t-1}) $$
IGPO 看的是正确答案信心的增量
有用交互
-4.0-1.5
$r^{IG}=+2.5$
带偏交互
-2.0-3.2
$r^{IG}=-1.2$
这就是第 $t$ 轮带来的信息增量:log probability 越接近 0,说明模型越容易生成正确答案;上升给正 credit,下降给负 credit,基本不变就接近 0 credit。

IGPO 不是只用 information gain。它还保留最终 outcome reward,并且把两类 reward 分开做 group-wise z-normalization:

$$ \tilde r_{i,t} = \begin{cases} \frac{r_{i,t}^{IG}-\mu_{IG}}{\sigma_{IG}}, & 1\leq t<T \\ \frac{r_i^O-\mu_O}{\sigma_O}, & t=T \end{cases} $$

然后像普通 RL 一样向后累积折扣回报:

$$ \tilde R_{i,t} = \sum_{k=t}^{T} \gamma^{k-t} \tilde r_{i,k} $$

训练时,把 $\tilde R_{i,t}$ 分配给第 $t$ 轮产生的 decision tokens;工具返回内容本身不更新,因为那不是模型生成的。

一句话说,如果某一轮交互让模型更容易生成正确答案,这一轮就该被奖励;如果让模型偏离正确答案,这一轮就该被惩罚。

IGPO 的优点是便宜、稠密、ground-truth-aware,不需要额外 PRM,也不需要 Monte Carlo 估值。缺点是它依赖高质量 ground truth。如果问题本身有多个合理答案,但数据集只认其中一个,IGPO 可能会惩罚事实正确但不匹配标注的推理路径。