长时程智能体往往只在最后拿到一个成功或失败信号,GRPO 把这个信号复制给整条轨迹的每一步。 GiGPO 把同一任务多次 rollout 中重复出现的状态当作锚点,在同一状态下比较不同动作的未来回报, 从而在不训练 critic、不增加 rollout 的前提下,得到每个动作的独立优势。
长时程任务的奖励是稀疏且延迟的:ALFWorld 最多 50 步,WebShop 15 步,通常只有最后一步告诉你成功还是失败。信用分配要回答的是:这几十个动作里,哪一个该为结果负责?
GRPO 对同一任务采样 N 条轨迹,用整条轨迹的回报做组内比较。它不需要 critic,显存低、训练稳,但一条轨迹只有一个标量,所有步骤共享同一个 advantage——它分不清第 3 步和第 45 步。
GiGPO 的观察是:同一任务的 N 次 rollout 里,智能体会反复到达完全相同的状态(同一个房间、同一个搜索结果页)。把这些重复状态当作锚点,把不同轨迹中从同一状态出发的动作和它们的折扣未来回报放进一个组,就能算出状态条件下的步骤级优势 AS。
最终优势是 A = AE + ω·AS(主实验 ω=1)。整个过程只复用已有 rollout,不新增环境交互、不训练 critic;论文报告的额外耗时是每轮 0.54 秒,GPU 显存与 GRPO 相同。
先建立共同认知:信用分配难,不是因为奖励少,而是因为奖励来得太晚、太粗。
ALFWorld 是一个文本具身环境,包含 3,827 个任务实例、六类家务(Pick、Look、Clean、Heat、Cool、Pick2),每个回合最多 50 步;WebShop 模拟一个有一百多万件商品、12k 条指令的购物网站,每个回合最多 15 步。在这两个环境里,智能体看到的是文本观察,输出的是动作,只有回合结束才拿到成功或失败的奖励。
一条轨迹因此是一个很长的动作序列,但它的回报只是一个标量。任务失败时,环境不会告诉你“第 3 步拿错物品”还是“第 45 步放错位置”;任务成功时,它也不会告诉你“哪一步是关键”。这就是信用分配(credit assignment):把最终结果归因到中间动作。
回合级(episode-level):这条轨迹的整体回报,比同一任务的其他轨迹高还是低?
步骤级(step-level):在这个状态下,这个动作的后续回报,比从同一状态出发的其他动作高还是低?
前者给的是全局基调,后者才是精细信用。长时程任务真正缺的是后者。
GRPO 的做法属于前者:同一任务采样 N 条轨迹,计算每条轨迹的回报,减去组内均值,得到一个回合级优势,然后把它分配给这条轨迹的每一个 token、每一个步骤。这个估计是合法的策略梯度,也确实比 PPO 省显存、稳训练;但它有一个结构性上限——同一条轨迹里的所有步骤,拿到的是同一个数。
一个自然的补法是给每个状态学一个价值函数(PPO 的 critic),或者从每个状态多跑几条 rollout 来估计未来回报(逐步蒙特卡洛 / 树搜索)。两者都能给出步骤级信号,但代价都和“状态数量 × 每状态采样数”成正比。对 LLM 智能体来说,每次 rollout 都要调用大模型和环境,这个代价很难忽略。
论文要回答的问题因此很具体:能不能保留 group-based RL 的无 critic、低内存、稳定收敛,同时拿到细粒度的步骤级信用? 答案不是再加一个模型,而是去找一种已经存在于 rollout 数据里的步骤级比较信号。
PPO 精确但重,GRPO 轻但粗;GiGPO 要的是两者的交集,而不是折中。
用一个价值网络估计 V(s),再用 GAE 把回报和基线之间的差分解到每一步。优点是步骤级信号密集、理论成熟。
代价:多一个和策略网络同量级的价值模型,显存和训练成本都上去;长文本观察下的价值估计本身也很难,训练更容易不稳定。
论文 Table 1 里,7B PPO 在 ALFWorld 上是 80.4,仍然低于无 critic 的 GiGPO 90.2——有 critic 不等于信用分配就一定更好。
同一任务采样一组轨迹,直接用组内相对回报当优势。无 critic、低显存、训练稳定,这也是它在单轮数学推理里成功的原因。
盲区:一条轨迹只有一个标量,所有步骤共享。它知道“这条轨迹比平均好”,但不知道“好在哪一步”。对 50 步的 ALFWorld,这个粒度太粗。
7B GRPO 在 ALFWorld 上是 77.6,RLOO 是 75.5;两者都明显低于 GiGPO。
既然缺的是“从同一状态出发的比较”,最直接的做法就是从每个状态多跑几条 rollout,用蒙特卡洛估计它的价值。这样得到的步骤级优势是无偏的,但代价是环境交互和 LLM 推理成倍增加:一个 50 步的任务、每状态采 8 条,就是几百次额外 rollout。对长时程智能体,这基本不可接受。
| 方案 | critic | 额外 rollout | 信用粒度 | 主要代价 |
|---|---|---|---|---|
| PPO | 需要 | 不需要 | 每步(GAE) | 第二个价值网络;显存与稳定性 |
| GRPO / RLOO | 不需要 | 不需要 | 整条轨迹 | 所有步骤共享一个标量 |
| 逐步 rollout / 树搜索 | 不需要 | 需要 | 每步 | 环境交互与推理成倍增加 |
| GiGPO | 不需要 | 不需要 | 每步(状态重复时) | 要求状态可精确匹配、会重复 |
GiGPO 的关键观察是:你不需要为了“同一状态下的比较”去额外采样。同一任务的 N 条轨迹里,智能体本来就会反复到达相同的状态——同一个房间、同一个搜索结果页、同一个货架。这些重复状态是免费的锚点,不同轨迹从同一状态出发的动作和后续回报,已经躺在 rollout 数据里了。
GiGPO 的机制可以压缩成三条公式:回合级优势、步骤级优势、以及它们的加权和。
记同一任务 x 采样 N 条轨迹 τ1…τN,每条最多 T 步,第 t 步的奖励是 rt。回合回报是 R(τi) = Σt rt。论文的 ALFWorld / WebShop 实验用 +10(成功)/ 0(失败)/ −0.1(无效动作);下面的玩具用二值奖励(成功 1、失败 0),公式完全一样,只是数字更好手算。
Fnorm 取组内标准差(GRPO 默认)或 1(w/o std 变体)这一项会被广播到该轨迹的每一步。它回答的是“这条轨迹整体比平均好多少”,不区分步骤。
先把 N 条轨迹里出现过的所有不同状态收集起来,记作 U = {s̃1, …, s̃U}。每个唯一状态就是一个锚点。对某个锚点 s̃,把所有轨迹中从该状态出发的动作和它们的折扣未来回报收集成一个组:
折扣未来回报从当前步一直加到回合结束:
步骤级优势就是在这个组内做一次相对比较:
为什么两项都要?回合级项给整条轨迹一个共享的基线,保证策略仍然朝着“完成整个任务”的方向走;步骤级项在这个基线上再加一个状态条件下的对比,让同一条轨迹里的不同动作分开。只有 AS 会失去全局目标,只有 AE 就退回 GRPO——论文的消融显示,去掉任意一项都会明显掉点。
论文用一个很直观的例子说明这个机制:两条轨迹都成功了,回合级优势相同;但其中一条在某一步经过了一个重复状态,另一条经过的是只出现一次的状态。前者在同状态组里可以比出“这个动作的后续回报更高”,拿到正的 AS;后者的组里只有自己,AS=0。于是两条成功轨迹在每一步上不再被同等对待。
所有组的大小都是 1,组均值等于自身,AS 全是 0,最终优势只剩 AE。这不是崩溃,而是优雅退化:性能下限就是 GRPO。反过来说,GiGPO 的收益完全来自“状态会重复”这个数据性质。
下面是一个 3 条轨迹、4 个步骤的玩具任务。每条轨迹的最终奖励只有成功(1)或失败(0),γ=0.95,归一化因子取 1(对应论文的 w/o std 变体)。格子里的数字是当前模式下这一步的 advantage;点任意格子,下面会拆开算给你看。
默认选中 τ1 第 2 步——这是 τ1 与 τ2 的分叉点,也是步骤级信号最强的地方。强调色格子表示该状态在 ≥2 条轨迹中出现过。
切换上方按钮,对比 GRPO 和 GiGPO:GRPO 下同一条轨迹的每一格数字完全相同;GiGPO 下,分叉点和重复状态会拿到不同的步骤级信用。
模拟用 3 条轨迹、4 个步骤,真实实验是 N=8、ALFWorld 最多 50 步。模拟用二值奖励(成功 1 / 失败 0),论文用 +10 / 0 / −0.1(无效动作扣 0.1)。模拟把归一化因子固定为 1,论文同时报告 std 和 1 两个变体。
模拟里的状态是离散标签(S0、A、B…),真实环境的状态是长文本观察;GiGPO 用状态本身作为哈希表的 key 做精确匹配。玩具保留了“同一状态被多条轨迹访问”这一因果结构,省略了真实文本状态的匹配细节。
另外,模拟里的 Rt 用 γ=0.95 从后往前算,和论文公式一致;回合回报 R(τ) 用未折扣的奖励和,也和论文一致。所有数字都可以按公式手算复核。
GiGPO 之所以便宜,是因为它不新增任何环境交互或模型前向——所有信息都来自已经采到的轨迹。
把上面的公式放回训练循环,GiGPO 只比 GRPO 多两步:
(st, at, rt)。ALFWorld 最多 50 步,WebShop 15 步。(at, Rt) 追加进去。Rt 用一次从后往前的扫描算完。耗时 0.01s。| 单轮环节 | 耗时 | 说明 |
|---|---|---|
| rollout + 前后向 + 策略更新 | 362.83 s | GRPO 也要做的部分 |
| 锚点状态分组 | 0.01 s | 哈希表查找 |
| 步骤级优势计算 | 0.53 s | 纯算术 |
| GiGPO 额外合计 | 0.54 s | 相对 362.83s 约 0.15% |
论文原文说锚点分组 0.01s、步骤级优势 0.53s,合计 “account for < 0.002% of the total per-iteration training time”;同一段给出的主导操作总耗时是 362.83s。
按这些数字直接算:0.54 / 362.83 ≈ 0.00149,即约 0.15%。如果 0.002 指的是小数比例而不是百分数,那它等于 0.2%,和 0.15% 同量级;写成 “0.002%” 就小了 100 倍。
不管按哪种读法,结论不变:这两个环节的额外开销都在千分之一量级,真正的大头仍然是 rollout、前后向和策略更新。页面标题里的 0.54s 用的是论文给出的原始耗时,不依赖这个百分比。
Fnorm 取 std 还是 1? GRPO 默认用组内标准差;GiGPO 同时报告了 Fnorm=1 的 “w/o std” 变体。论文附录说明,Fnorm=1 等价于 RLOO 乘上 N/(N−1),策略梯度的方向不变,仍然是无偏的。标准差归一化在长时程、低方差或组内极不均衡时,会把困难样本的梯度放大,训练更容易不稳;Fnorm=1 在 ALFWorld / WebShop 上更稳。论文的结论是:这个选择是任务相关的,不是 universally 谁更好。
ω 取多少? 主实验固定 ω=1,没有调。附录 E.5 在 WebShop 1.5B 上做了敏感性分析:ω=0.8 最好(Score 84.9 / Success 68.3),ω=1.0 是 83.5 / 67.4;在 [0.4, 1.2] 内比较平,1.4 明显下降(77.0 / 56.3)。所以“ω=1”是一个合理的默认值,但不是每个任务的最优值。
实现上,作者把代码整理成了 verl-agent,基于 veRL,专门面向长时程、多轮 LLM 智能体训练。论文的 1.5B 实验用 2×H100,7B 用 4×H100。
把上一节的公式放回训练循环,就是下面这张图。
这张图里最容易被忽略的一点是:分组发生在 rollout 之后、策略更新之前。也就是说,GiGPO 不改变采样过程,也不改变策略网络的结构;它只是在已有数据上多算了一个优势项。这也是它能和 DAPO 这类单轮 group-based RL 改进正交组合的原因。
ALFWorld 六个子类、WebShop、1.5B 与 7B:GiGPO 全面领先,且不需要 critic。
| 模型 | 方法 | ALFWorld All ↑ (%) | WebShop Score ↑ | WebShop Succ ↑ (%) |
|---|---|---|---|---|
| Qwen2.5-1.5B | PPO | 54.4 | 73.8 | 51.5 |
| RLOO | 69.7 | 73.9 | 52.1 | |
| GRPO | 72.8 | 75.8 | 56.8 | |
| GiGPO w/ std | 86.7 | 83.1 | 65.0 | |
| GiGPO w/o std | 86.1 | 83.5 | 67.4 | |
| Qwen2.5-7B | PPO | 80.4 | 81.4 | 68.7 |
| RLOO | 75.5 | 80.3 | 65.7 | |
| GRPO | 77.6 | 79.3 | 66.1 | |
| GiGPO w/ std | 90.8 | 84.4 | 72.8 | |
| GiGPO w/o std | 90.2 | 86.2 | 75.2 |
表中为 3 个种子的均值,标准差见论文 Table 1。GiGPO w/ std 在 ALFWorld 上略高(1.5B 86.7,7B 90.8),w/o std 在 WebShop 上更好;论文把 w/o std 作为主要增益来源。
切换模型尺寸,看六个子类的成功率。Pick / Clean 这类任务在 7B 上本来就接近饱和(GRPO 下 90.8 / 89.3),提升空间小;Look(找灯)、Pick2(拿两件物品)需要更多步骤和组合,增益最大;Cool / Heat 居中。
几个值得注意的结论:
搜索增强 QA(Qwen2.5-3B / 7B,NQ + HotpotQA 训练,7 个测试集平均):GiGPO 42.1 / 47.2,Search-R1 32.5 / 38.5,ZeroSearch 31.7 / 39.1,R1-Instruct 27.1 / 22.4。7B 上单跳平均约 0.9 次工具调用,多跳约 1.6 次,上限 3 次。
VLM 智能体(Qwen2.5-VL-3B,Sokoban 6×6 / EZPoints):GiGPO 81.0 / 100.0,GRPO 67.1 / 86.9,提示基线 11.7 / 3.1。说明这套优势估计不局限于纯文本状态。
与 DAPO 组合(WebShop,1.5B,Score / Success):GiGPO + DAPO 的动态采样与 clip-higher 得 87.5 / 75.0,DAPO 单独 84.6 / 66.1,GRPO 75.8 / 56.8。两级优势与单轮 group-based RL 的改进是正交的。
GiGPO 的收益和它的假设是同一件事:状态能精确匹配,且真的会重复。
ALFWorld 和 WebShop 的状态是结构化文本,可以用状态本身作为哈希 key 做精确匹配。到了噪声大、连续、高维或视觉输入的环境,“完全相同的状态”很少出现,精确匹配会失效。论文自己把这一点列为局限,并把基于状态嵌入的近似匹配留作未来工作;v3 在搜索 QA 上改用相似度分组:两个状态的“最长匹配子序列”相似度 >0.9 就算同一锚点,但这只是针对该任务的启发式。
如果所有状态都只出现一次,每个步骤组的大小都是 1,AS=0,GiGPO 退化成 GRPO。它不会比 GRPO 更差,但也拿不到任何步骤级收益。换句话说,GiGPO 的收益上限由数据的“状态重复率”决定。论文的 Fig. 5 显示 ALFWorld 里超过 65% 的状态会重复,所以这个假设在该环境成立;换一个环境,需要先验证这一点。
Fnorm=std 是 GRPO 的默认,但在长时程、低方差或组内极不均衡时,它会把困难样本的梯度放大,训练更容易不稳;Fnorm=1 在 ALFWorld / WebShop 上更稳,但论文也指出它在其他任务上不一定更好。这个选择是任务相关的,不能默认“std 一定对”或“1 一定对”。
这是从公式可以直接推出的,不是论文的实验结论:Rt 用 γ=0.95 做折扣,0.9520 ≈ 0.36,0.9547 ≈ 0.09。也就是说,第 3 步的奖励传到第 50 步时只剩约 9% 的权重(50 步全折扣是 0.9550 ≈ 0.08)。锚点分组给了一个更好的基线,但没有改变折扣视野;如果任务的关键因果链跨越几十步,远距离信用仍然会被衰减。
一句话总结:GiGPO 不是免费午餐,而是免费复用。 它把 rollout 里本来就存在的重复状态用起来;数据里有这个结构,它几乎零成本;没有,它就退回 GRPO。这个设计很漂亮,但它的适用边界和它的假设是同一件事。