F-GRPO:分解式分组相对策略优化,统一候选生成与排序 F-GRPO: Factorized Group-Relative Policy Optimization for Unified Candidate Generation and Ranking
在单次自回归轨迹内同时生成候选并排序,用分解式GRPO解决端到端信用分配难题。
前置知识
GRPO(分组相对策略优化)
GRPO 是一种面向大语言模型的强化学习算法,由 DeepSeek-R1 系列推广。它对同一 prompt 采样 G 个 rollout,把每条样本的奖励做组内归一化得到 advantage $\hat{A}^{(i)} = R^{(i)} - \bar{R}$,再用 PPO 风格的 clip 目标函数更新策略,天然无需 value critic。Dr.GRPO 是其无偏变体,本文的 F-GRPO 就是 Dr.GRPO 在两阶段结构化轨迹上的扩展。
本文的方法本质上是 GRPO 的扩展,如果不理解 GRPO 的组内归一化和 clip 目标,就无法理解 F-GRPO 怎样在共享 rollout 上做阶段分解。
Listwise 排序与生成式检索
传统检索系统分两阶段:先用 BM25 或向量检索召回候选池,再用 listwise 模型对池内候选整体重排。LLM 让"生成候选 + 排序"可以在一次自回归解码中完成——模型在同一个 prompt 下既输出子集也输出排列。Sun et al. 2023、PRP、RankZephyr、MonoT5 都是该方向的代表工作。
本文的对照实验直接比较了 listwise reranker(RankZephyr、MonoT5、DuoT5、LiT5)和端到端生成式方法,是理解"分离 vs 统一"架构分歧的基础。
信用分配(credit assignment)
在多步决策或分段输出场景中,agent/模型在最后只收到一个整体奖励,需要把这次奖励回传分配给每个子步骤。Sutton & Barto 的经典 RL 教材给出了形式化定义。信用分配失败会造成"做对的事被罚、做错的事被奖",本文的核心问题就是这种 cross-phase gradient contamination。
F-GRPO 的全部新颖性都建立在"标准 GRPO 在两阶段轨迹上存在跨阶段梯度污染"这一观察上,不理解信用分配就无法理解 F-GRPO 为什么要为 slate 和 rank 各算一个 advantage。
NDCG@k 与 Recall@k
Recall@k 衡量前 k 个结果覆盖了多少相关条目;NDCG@k 在此基础上引入位置折损 $\log_2(1+i)$,位置越靠前权重越高,是排序质量的常用指标。本文用 NDCG@k 作为排序奖励 $U_{rank}$,用 normalized recall/F1 作为 slate 奖励 $R_{slate}$。
论文里 slate 和 rank 使用不同的奖励(order-invariant coverage reward vs position-aware utility reward),读者必须能区分这两个指标才能理解两阶段的优势为什么需要分别计算。
研究动机
现有 LLM 排序系统普遍采用两阶段管线:先用一个 retriever 召回到固定候选池,再让 LLM 在该池上做 listwise rerank。这种 decoupling 带来两个痛点:其一,ranking stage 永远受限于候选池的上限——如果 retriever 没把金标捞回来,再强的 reranker 也无能为力;其二,两个模块各自用 proxy 目标独立训练,存在分布偏移。本文用实验数据证明了第二点:在 LastFM Qwen3-4B 上,Decoupled SFT (full) 需训练两个独立 checkpoint,其 Recall@5 只有 46.3%,反而低于单模型 SFT 的 53.8%,更远低于 F-GRPO 的 81.7%。而如果让 LLM 在一次自回归轨迹里同时生成候选集(slate $\tau$)和排序(permutation $\sigma$),又会出现新问题:序列级奖励 $R$ 同时覆盖了"候选是否召回"和"顺序是否正确",无法区分一次成功到底来自哪一阶段——这就是 cross-phase credit assignment 失败。
本文的目标是本文的目标是设计一个端到端统一框架,让单个 LLM 在一次自回归 rollout 中同时完成 candidate generation 和 ranking,并且通过分解式的信用分配,让 slate 生成器和 ranker 各自只接收与自身阶段匹配的梯度信号。具体而言,作者希望在 LastFM/MovieLens 顺序推荐和 HotpotQA/MuSiQue 多跳 QA 上,让 F-GRPO 在 Recall@k 和 NDCG@k 上同时稳定超过 GRPO、Decoupled SFT、专用 reranker(RankZephyr、MonoT5)等所有基线,并且不需要在推理时改动任何架构。
与已有工作不同的是,已有强化学习排序工作(Neural PG-RANK、Rank-R1、Rank-GRPO、IRPO)都把整条轨迹视为一个不可分的策略,把一个标量奖励回灌到所有 token。本文观察到一个被忽视的结构:把策略分解为 $\pi_\theta(\tau,\sigma|x) = \pi^{slate}_\theta(\tau|x) \cdot \pi^{rank}_\theta(\sigma|x,\tau)$ 后,slate 阶段对顺序不敏感(order-invariant),rank 阶段对位置敏感(position-aware),两种奖励天然有结构差异,而 GRPO 把它们拼成 $R_{joint}=R_{slate}+\lambda R_{rank}$ 后用同一个 advantage 回灌会引入"对得奖的 slate token 强化、对得奖的 rank token 弱化"之类的反直觉梯度。F-GRPO 的独特切入角度正是为这两个阶段分别计算 group-relative advantage——$\hat{A}^{(i)}_{slate}=R^{(i)}_{slate}-\bar{R}_{slate}$ 与 $\hat{A}^{(i)}_{rank}=R^{(i)}_{rank}-\bar{R}_{rank}$——通过 first-order 梯度分解消除跨阶段污染。
核心方法
F-GRPO 的整体思路是"先直觉后技术":直觉上,slate 阶段像搜索答案在哪里,rank 阶段像把找到的答案按重要性排好,犯错的原因可能是"找错了"也可能是"排错了",必须分而治之。技术上,作者把策略显式分解为 $\pi_\theta(\tau,\sigma|x) = \pi^{slate}_\theta(\tau|x) \cdot \pi^{rank}_\theta(\sigma|x,\tau)$,通过特殊的 token 模板(`......`)让一个 LLM 在一次自回归 rollout 里既生成 $\tau$ 也生成 $\sigma$。然后对每个 prompt 采样 G=8 个 rollout,分别用 slate 奖励 $R_{slate}(x,\tau)=\sum_{e\in\text{uniq}(\tau)}U(x,e)$(order-invariant coverage)和 rank 奖励 $R_{rank}(x,\tau,\sigma)=\text{NDCG}@k(\tau_\sigma)$(position-aware utility)。最后在 group 内做 Dr.GRPO 风格的 mean-subtracted 归一化,但为两个阶段各算一个 advantage $\hat{A}^{(i)}_{slate}$ 和 $\hat{A}^{(i)}_{rank}$,再分别用于 slate token 和 rank token 的 PPO clip 目标,总损失为 $\mathcal{L}=\mathcal{L}_{slate}+\lambda\mathcal{L}_{rank}+\beta_{KL}D_{KL}(\pi_\theta\|\pi_{ref})$。
核心创新点是"两阶段序列级信用分配"(two-phase sequence-level credit assignment):在同一段共享自回归轨迹内,对 slate 子序列用 $\hat{A}^{(i)}_{slate}$ 加权,对 rank 子序列用 $\hat{A}^{(i)}_{rank}$ 加权,二者互不污染。这与已有工作的本质区别在于——Rank-GRPO、Neural PG-RANK、IRPO 都在整条轨迹上用同一个 rollout-level advantage;GeMS、HiGR 虽然耦合了生成和排序,但要么用不同模型要么用单一目标;本文则首次在共享 LLM 的同一段 rollout 上做 phase-specific 优势估计,并通过 Remark 3.1 的 first-order separability 证明:$\nabla_\theta\mathcal{L}=\nabla_\theta\mathcal{L}_{slate}+\lambda\nabla_\theta\mathcal{L}_{rank}+\beta_{KL}\nabla_\theta D_{KL}$,其中 $\nabla_\theta\mathcal{L}_{slate}$ 只依赖 $\hat{A}^{(i)}_{slate}$,$\nabla_\theta\mathcal{L}_{rank}$ 只依赖 $\hat{A}^{(i)}_{rank}$。这种 first-order 可分性是 F-GRPO 区别于简单加权和的关键。
方法步骤详情
F-GRPO 的训练流程可以拆成五步。第一步,prompt 构造:对每个 context $x$ 拼上模板指令,要求模型输出 `......` 包裹的成对结构。第二步,rollout 采样:用当前策略 $\pi_{\theta_{old}}$ 在每个 prompt 上采样 G=8 个 rollout(greedy 解码用于评估,采样用于训练),并按 delimiter 切成 slate content $c^{(i)}_\tau$ 和 rank content $c^{(i)}_\sigma$ 两个段。第三步,奖励计算:从 $c^{(i)}_\tau$ 解析出 $\tau^{(i)}$,从 $c^{(i)}_\sigma$ 解析出 $\sigma^{(i)}$,调用 oracle $U(x,e)$ 计算 $R^{(i)}_{slate}=\sum_{e\in\text{uniq}(\tau^{(i)})}U(x,e)$(推荐任务归一化到 recall,QA 任务归一化到 F1)和 $R^{(i)}_{rank}=\text{NDCG}@k(\tau^{(i)}_{\sigma^{(i)}})$,对未生成正确 delimiter 的 rollout 施以常数格式惩罚 $p_{fmt}<0$。第四步,phase-specific advantage 估计:在 G 个 rollout 内分别做 mean subtraction 得到 $\hat{A}^{(i)}_{slate}=R^{(i)}_{slate}-\bar{R}_{slate}$ 和 $\hat{A}^{(i)}_{rank}=R^{(i)}_{rank}-\bar{R}_{rank}$(Dr.GRPO 风格,无偏归一化)。第五步,联合 loss 反向传播:$\mathcal{L}=\mathcal{L}_{slate}+\lambda\mathcal{L}_{rank}+\beta_{KL}D_{KL}(\pi_\theta\|\pi_{ref})$,其中 $\mathcal{L}_{slate}$ 只对 $c^{(i)}_\tau$ 内 token 用 $\hat{A}^{(i)}_{slate}$ 做 clip 目标,$\mathcal{L}_{rank}$ 只对 $c^{(i)}_\sigma$ 内 token 用 $\hat{A}^{(i)}_{rank}$ 做 clip 目标,delimiter token 通过 position mask 排除在 loss 之外。
技术新颖性
技术新颖性体现在三个层面。第一,"把信用分配从 token 级提升到 phase 级":传统 GRPO 只有一个 rollout-level advantage 同时驱动整条轨迹,PPO-Token 或 DAPO 做的是 token 级再分解,而 F-GRPO 首次显式把整条 rollout 按语义切成 slate/rank 两段并分别估计 advantage,这是一种介于"rollout 级"和"token 级"之间的中间粒度。第二,"双奖励的 first-order 梯度可分性":作者在 Appendix A 给出了 $\nabla_\theta\mathcal{L}=\nabla_\theta\mathcal{L}_{slate}+\lambda\nabla_\theta\mathcal{L}_{rank}+\beta_{KL}\nabla_\theta D_{KL}$ 的严格证明,这是把直觉上的"两个 advantage 互不干扰"形式化的关键步骤,区别于简单地把奖励加和的工程化做法。第三,"in-context exploration 概念":让 LLM 在一次 rollout 内先搜索候选集再排序,相当于把原本由外部 retriever 完成的 retrieval 步骤内化为 LLM 自身的解码过程,且 slate/rank 共享一个 LLM backbone,避免了 GeMS、HiGR 那种双模型 + 分布偏移问题。
实验结果
论文在四个基准、两个模型规模上做了完整对照,主要发现可归为四点。(i) RL 微调显著超过 SFT:Qwen3-4B F-GRPO 在 LastFM Recall@3 上达到 72.4%,相对单模型 SFT 47.1% 提升 53.7%;在 MovieLens Recall@3 上达到 53.6%,相对 SFT 29.3% 提升 82.9%,说明序列级奖励提供了 token 级模仿学不到的学习信号。(ii) 分解式信用分配稳定优于 GRPO:LastFM Qwen3-4B Recall@5 从 73.9% 提升到 81.7%(+10.6% 相对),MuSiQue Qwen3-4B Recall@3 从 63.0% 提升到 71.3%(+13.2% 相对),且差距在高 cutoff 处最大,证明 slate 的更广覆盖能通过 ranker 的好排序放大成 top-k 收益。(iii) 与专用 reranker 竞争:HotpotQA Qwen3-4B F-GRPO Recall@5 达 92.6%,超过 MS MARCO 训练的 MonoT5 92.8% 和 RankZephyr 90.3%,且不需要在推理时改架构;MuSiQue Qwen3-4B F-GRPO 在 R@1 和 R@3 也超过 MonoT5。(iv) 阶段解耦在训练动力学上得到验证:Figure 2b 显示 slate 在 step 150 就达到 90% 峰值 recall,ranker 要到 step 200 达到 90% 峰值 NDCG,符合"ranker 必须等 slate 稳定才能学好"的条件依赖直觉。Figure 3 进一步显示 slate 保持高 recall(Qwen3-4B 0.90, Qwen3.5-2B 0.82)但低 precision(0.090 和 0.082),ranker 反过来把 precision 提到 0.163/0.140,召回相应下降——印证了"slate 负责广撒网、ranker 负责精排"的角色分工。Slate 奖励消融(图 2a)表明 F1 奖励在 k≥3 饱和,而 recall 奖励单调增长,LastFM Recall@5 相对 +48%,MovieLens +85%,故主结果用 recall 变体。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| LastFM 顺序推荐(Qwen3-4B) | Recall@5 | 81.7% | GRPO 73.9% | +10.6% 相对提升 |
| LastFM 顺序推荐(Qwen3-4B) | Recall@3 | 72.4% | SFT 47.1% | +53.7% 相对提升 |
| MovieLens 顺序推荐(Qwen3-4B) | Recall@3 | 53.6% | SFT 29.3% | +82.9% 相对提升 |
| MuSiQue 多跳 QA(Qwen3-4B) | Recall@3 | 71.3% | GRPO 63.0% | +13.2% 相对提升 |
| HotpotQA 多跳 QA(Qwen3.5-2B) | Recall@3 | 91.4% | GRPO 86.3% | +5.9% 相对提升 |
| LastFM 顺序推荐(Qwen3-4B) | NDCG@3 | 61.7% | GRPO 50.8% | +21.5% 相对提升 |
| HotpotQA 多跳 QA(Qwen3-4B) | Recall@5 | 92.6% | MonoT5 92.8%(专用 reranker 零样本) | 基本持平,无需专用重排模型 |
局限与改进
作者在论文中明确了几点局限,加上我自己的观察。(i) 规模限制:实验只在 2B 和 4B 规模上跑,作者明确说"to enable thorough ablation under practical compute constraints",7B/13B/70B 规模上 F-GRPO 是否仍能稳定超过 GRPO 未知。(ii) 候选池粒度:slate 大小 n=10 是消融选出的默认,n=5 限制覆盖、n=15 稀释池子,但若任务金标数 >10(如 4 跳以上 QA),F-GRPO 的设计会受 slate 上限约束。(iii) 奖励函数依赖 oracle:$R_{slate}$ 和 $R_{rank}$ 都用 oracle 效用 $U(x,e)$(推荐任务 ground truth item id、QA 任务 ground truth passage id),真实开放场景下没有这种 gold label,方法落地需要弱监督或 LLM-as-judge。(iv) 任务域单一:只在顺序推荐和多跳 QA 上验证,机器翻译、对话选择、code ranking 等其他 listwise 任务未测试。(v) 我的额外观察:F-GRPO 用 G=8 rollout 训练,对算力有要求;λ=1.0 的选择对结果敏感(λ=0.5 退化 top-position 质量);slate/rank delimiter 模板要求模型具备结构化输出能力,能力弱的 base model 上可能频繁触发 $p_{fmt}$ 惩罚。
独立分析的弱点
独立分析三个可改进的弱点。第一,奖励工程依赖 ground truth:当前 $R_{slate}$ 用 $\sum_{e\in\text{uniq}(\tau)}U(x,e)$、$R_{rank}$ 用 NDCG@k,本质上都依赖标注的 $G(x)=\{e:U(x,e)>0\}$,在无标注的真实开放场景下方法不可直接用;改进方向是把 oracle reward 换成 LLM-as-judge 或者 learned reward model。第二,单一的 $\lambda$ 无法刻画 slate/rank 的非对称重要性:实验里 $\lambda=1.0$ 看似稳健,但 Figure 3 显示 slate recall 稳定、ranker precision 才有提升空间,意味着 ranker 阶段对 top-k 质量贡献更关键,应该让 $\lambda$ 随训练步数动态调度,比如前期偏 slate(学覆盖)后期偏 rank(学精排)。第三,方法在结构化输出失败时退化为常数惩罚 $p_{fmt}<0$,没有给模型"在 slate 里至少生成一个合理候选"之类的 partial credit,导致 early training 时大量 rollout 是无信号噪声,改进方向是引入格式分阶段奖励,比如 slate 内容合法但 rank 格式错误的 rollout 可以只回传 $R_{slate}$,避免整条 rollout 都被罚没。
未来方向
作者提出未来可以做"多阶段结构化轨迹的 credit assignment",我觉得可以延伸出四个方向。一是把两阶段推广到 N 阶段,例如在 agent 工作流里把 plan/execute/verify 三段都各自用 phase-specific advantage 训练;二是把 F-GRPO 的思想用在 DPO/IPO 等偏好优化框架里,构造 listwise 偏好 + 阶段分解的损失;三是用 process reward model(PRM)替代 oracle $U(x,e)$,让 F-GRPO 在弱监督甚至无监督下可用;四是和 MCTS/树搜索结合,让 slate 阶段本身就走多分支再 rank,提供更多组内样本减少 advantage 估计方差。
复现评估
复现评估整体偏中等偏难。正面:论文写作规范、附录给出了 SFT、GRPO、F-GRPO 的具体 prompt 模板、Section E 给了训练超参(学习率、KL 系数、clip 阈值、batch size 等)、Section F 给了评估协议、Section H 给了模型卡。负面:作者没有显式声明代码开源(arXiv 预印本版本,截至我写稿时未看到 repo 链接),Qwen3-4B-Instruct-2507 和 Qwen3.5-2B 都公开可下载(后者应该是 Qwen3 的某个 2B 变体),MovieLens/LastFM/HotpotQA/MuSiQue 均为公开数据集。算力方面:2B/4B 模型的 GRPO 训练建议至少 8×A100 80G,G=8 rollout、5000 eval step 算下来每个数据集需要 2-3 天;难点主要在 (a) 必须实现 phase-specific 的 position mask 把 delimiter 排除在 loss 外,(b) G=8 rollout 必须在同一 prompt 上并行采样以保证 advantage 估计的 group 一致性,(c) 复现 slate F1 vs recall 消融要写两套 reward 解析逻辑。
论文图表
左图(a)展示传统 black-box LLM 排序:模型只见固定候选池,只输出最终排序,slate 构造被隐式 absorb 到 reranker 内部;右图(b)展示 F-GRPO 提出的 in-context exploration:模型在一次自回归轨迹内先生成 slate 候选集(`<SLATE>...</SLATE>`),再基于该 slate 输出 permutation(`<RANK>...</RANK>`),两阶段用同一 LLM backbone 但目标不同。
这是整篇论文 motivation 的核心图,用一张图把"implicit pool vs explicit in-context generation"的范式转变讲清楚,是理解 F-GRPO 引入"两阶段分解"必要性的关键。