Hexo

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

NLP——LLM对齐微调-GRPO

注:许多论文中没有使用粗体来表示多个 Token 组成的序列(比如 Question \(\mathbf{q}\)),为了方便理解,本文会尽量可以在一些地方使用粗体
注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始论文:(GRPO)DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models
    • 博客:为什么GRPO训练开始时,Loss函数为0,并且不降反增?
    • 博客:Deepseek的RL算法GRPO解读

GRPO

  • Group Relative Policy Optimization, 简称 GRPO,一种用于在 LLM 中替代近端策略优化 PPO(Proximal Policy Optimization)的方法,可以理解为 PPO 的一种简化形式
  • GRPO 相对 PPO 的核心改进点包括:
    • 去除 Critic 网络,转而使用批量采样的样本均值和方差做归一化
    • 将 PPO 奖励中的 KL 散度移除,并直接加到训练的目标函数中

从 PPO 到 GRPO

  • PPO是一种广泛用于LLMs强化学习微调阶段的Actor-Critic算法。具体来说,它通过最大化以下替代目标来优化LLMs:
    $$
    \mathcal{J}_{\textit{PPO}}(\theta)=\mathbb{E}_{q\sim P(Q),o\sim\pi_{\theta_{old}}(O|q)}\frac{1}{|o|}\sum_{t=1}^{|o|}\min\left[\frac{\pi_{\theta}(o_ {t}|q,o_{<t})}{\pi_{\theta_{old}}(o_{t}|q,o_{<t})}A_{t},\textrm{clip}\left( \frac{\pi_{\theta}(o_{t}|q,o_{<t})}{\pi_{\theta_{old}}(o_{t}|q,o_{<t})},1-\epsilon ,1+\epsilon\right)A_{t}\right],
    $$

    • \(\pi_{\theta}\) 和 \(\pi_{\theta_{old}}\) 分别是当前和旧策略模型
    • \(q,o\) 是从问题数据集和旧策略 \(\pi_{\theta_{old}}\) 中采样的问题和输出
    • \(\epsilon\) 是PPO中用于稳定训练的剪裁相关超参数
    • \(A_{t}\) 是优势函数 \(A^{\pi_\text{old}}_t\) 的简写,通过 GAE 计算,基于奖励 \(\{r_{\geq t}\}\) 和学习到的价值函数 \(V_{\psi}\)
      • 注:一般实现时,只有最后一步 token 会有 Reward 反馈,其他位置 Reward 都是 0 ,通过折扣奖励的方式可以计算每个 token 对应 GAE
  • 在 PPO 中,需要训练一个价值函数与策略模型并行,并且为了缓解奖励模型的过度优化问题,标准方法是在每个 token 的奖励中添加来自参考模型的每个 token 的KL惩罚(Ouyang et al., 2022),即:
    $$
    r_{t}=r_{\varphi}(q,o_{\leq t})-\beta\log\frac{\pi_{\theta}(o_{t}|q,o_{<t})}{\pi_{ref}(o_{t}|q,o_{<t})},
    $$

    • 其中,\(r_{\varphi}\) 是奖励模型,\(\pi_{ref}\) 是参考模型(通常是初始的SFT模型),\(\beta\) 是KL惩罚的系数
  • 由于PPO中使用的价值函数通常是另一个与策略模型大小相当的模型,这会带来大量的内存和计算负担。此外,在RL训练过程中,价值函数被用作计算优势的基线以减少方差。然而,在LLM的上下文中,通常只有最后一个token会被奖励模型分配一个奖励分数,这可能会使在每个token上准确训练价值函数变得复杂

  • 为了解决这个问题,如图4所示,作者提出了 GRPO ,它避免了PPO中额外的价值函数近似,而是使用对同一问题生成的多个采样输出的平均奖励作为基线。具体来说,对于每个问题 \(q\),GRPO从旧策略 \(\pi_{\theta_{old}}\) 中采样一组输出 \(\{o_{1},o_{2},\cdots,o_{G}\}\),然后通过最大化以下目标来优化策略模型(公式3):
    $$
    \begin{split}
    \mathcal{J}_{GRPO}(\theta)&=\mathbb{E}_{q\sim p(Q),\{\mathbf{o}_i\}_{i=1}^{G}\sim\pi_{\theta_{old}}(O|q)}\\
    &\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|\mathbf{o}_i|}\sum_{t=1}^{|o_{t}|}\left\{\min\left[\frac{\pi_{\theta}(o_{i,t}|q,\mathbf{o}_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q,\mathbf{o}_{i,<t})}\hat{A}_{i,t},\text{clip}\left(\frac{\pi_{\theta}(o_{i,t}|q,\mathbf{o}_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q,\mathbf{o}_{i,<t})},1-\epsilon,1+\epsilon\right)\hat{A}_{i,t}\right]-\beta\text{D}_{\text{KL}}\left[\pi_{\theta}||\pi_{ref}|\right) \right\},
    \end{split}
    $$

    • 其中,\(\epsilon\) 和 \(\beta\) 是超参数,\(\hat{A}_{i,t}\) 是基于组内输出的相对奖励计算的优势,具体细节将在后续小节中详细说明。GRPO通过组内相对奖励计算优势的方式,与奖励模型的比较性质非常契合,因为奖励模型通常是在同一问题的输出比较数据集上训练的
  • 特别说明:GRPO 通过直接在损失函数中添加训练策略与参考策略之间的KL散度来进行正则化(与 PPO 在奖励中添加KL惩罚不同),避免了复杂化 \(\hat{A}_{i,t}\) 的计算

结果监督的 GRPO

  • Outcome Supervision RL with GRPO,对应 ORM 模型
  • 结果监督的GRPO具体步骤如下:
    • 采样 :对于每个问题 \(q\),从旧策略模型 \(\pi_{\theta_{old}}\) 中采样一组输出
      $$\{o_{1},o_{2},\cdots,o_{G}\}$$
    • 评分 :使用奖励模型对这些输出进行评分,得到相应的 \(G\) 个奖励:
      $$\mathbf{r}=\{r_{1},r_{2},\cdots,r_{G}\}$$
    • 归一化&奖励分配 :这些奖励通过减去组平均值并除以组标准差进行归一化。结果监督在每个输出的末尾提供归一化的奖励,并将输出中所有 token 的优势 \(\hat{A}_{i,t}\) 设置为归一化的奖励,即:
      $$\hat{A}_{i,t}=\overline{r}_{i}=\frac{r_{i}-\text{mean}(\mathbf{r})}{\text{std}(\mathbf{r})}$$
      • 注:可以看到,结果监督下,GRPO 同一组的各个 token,奖励完全相同
    • 最后:通过最大化公式(3)中定义的目标来优化策略

过程监督的 GRPO

  • 说明:Process Supervision RL with GRPO,对应 PRM 模型,
  • 结果监督仅在每个输出的末尾提供一个奖励,这可能不足以有效地监督复杂数学任务中的策略,根据Wang et al. (2023b),作者还探索了过程监督,它在每个推理步骤的末尾提供一个奖励,具体步骤如下:
    • 采样 :给定问题 \(q\) 和 \(G\) 个采样输出
      $$\{o_{1},o_{2},\cdots,o_{G}\}$$
    • 评分 :过程奖励模型用于对输出的每个步骤进行评分,得到相应的奖励:
      $$ \mathbf{R}=\{\{r_{1}^{\text{index}(1)},\cdots,r_{1}^{\text{index}(K_{1})}\},\cdots,\{r_{G}^{\text{index}(1)},\cdots,r_{G}^{\text{index}(K_{G})}\}\}$$
      • 其中 \(\text{index}(j)\) 是第 \(j\) 步的结束 token 索引,\(K_{i}\) 是第 \(i\) 个输出中的总步数
    • 归一化 :作者还使用平均值和标准差对这些奖励进行归一化:
      $$\tilde{r}_{i}^{\text{index}(j)}=\frac{r_{i}^{\text{index}(j)}-\text{mean}(\mathbf{R})}{\text{std}(\mathbf{R})}$$
    • 奖励分配 :过程监督将每个 token 的优势计算为后续步骤的归一化奖励之和 ,即:
      $$\hat{A}_{i,t}=\sum_{\text{index}(j)\geq t}\tilde{r}_{i}^{\text{index}(j)}$$
    • 最后:通过最大化公式(3)中定义的目标 \(\mathcal{J}_{GRPO}(\theta)\) 来优化策略

迭代式 GRPO

  • 随着强化学习训练过程的进行,旧的奖励模型可能不足以监督当前的策略模型。因此,作者还探索了迭代式GRPO。如算法(1)所示,在迭代式GRPO中,作者基于策略模型的采样结果为奖励模型生成新的训练集,并通过包含10%历史数据的回放机制持续训练旧的奖励模型。然后,作者将参考模型设置为策略模型,并使用新的奖励模型持续训练策略模型
  • 算法(1)中显示的公式(21)为:
    $$
    GC_{GRPO}(q, o, t, \pi_{\theta_{sm}}) = \hat{A}_{i,t} + \beta \left( \frac{\pi_{ref}(o_{i,t}|\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}|\mathbf{o}_{i,<t})} - 1 \right),
    $$
    • 其中 \(\hat{A}_{i,t}\) 是基于组奖励分数计算的

DeepSeekMath-RL的训练与评估

  • 作者基于DeepSeekMath-Instruct 7B进行强化学习。RL的训练数据是来自SFT数据的与GSM8K和MATH相关的链式思维(chain-of-thought)格式的问题,大约包含144K个问题。作者排除了其他SFT问题,以研究RL对在RL阶段缺乏数据的基准的影响。作者按照Wang et al. (2023b)的方法构建奖励模型的训练集
    • 基于DeepSeekMath-Base 7B训练初始奖励模型,学习率为2e-5
    • 对于GRPO,作者将策略模型的学习率设置为1e-6 ,KL系数为0.04
    • 对于每个问题,作者采样64个输出
    • 最大长度设置为1024
    • 训练批次大小为1024
    • 策略模型在每次探索阶段后仅进行一次更新。作者按照DeepSeekMath-Instruct 7B的基准评估DeepSeekMath-RL 7B。对于DeepSeekMath-RL 7B,GSM8K和MATH的链式思维推理可以被视为域内任务(因为训练主要是针对Math做Reward的),而所有其他基准可以被视为域外任务
      • 注:GSM8K数据集是OpenAI创建的一个用于评估数学推理能力的数据集,包含8.5K个高质量的小学数学应用题,题目涵盖多种小学数学知识点,难度适中,且每个问题需要2-8个推理步骤。举例来说:“问题:小明有5个苹果,吃了2个,又买了4个,他现在有多少个苹果? 解答:5 - 2 + 4 = 7,所以小明现在有7个苹果。”
  • 表5展示了使用链式思维和工具集成推理的开放和闭源模型在英语和中文基准上的表现。作者发现:1)DeepSeekMath-RL 7B在GSM8K和MATH上分别达到了88.2%和51.7%的准确率,使用链式思维推理。这一表现超过了所有7B到70B范围内的开源模型,以及大多数闭源模型。2)重要的是,DeepSeekMath-RL 7B仅从DeepSeekMath-Instruct 7B开始,在GSM8K和MATH的链式思维格式的指令调优数据上进行训练。尽管其训练数据的范围有限,但它在所有评估指标上均优于DeepSeekMath-Instruct 7B,展示了强化学习的有效性

各种微调方法的比较

  • 作者从强化学习的视角来看待LLMs的微调,对比了各种方法(包括SFT、RFT、在线RFT、DPO、PPO和GRPO)的数据来源和梯度系数(Gradient Coefficient)(算法和奖励函数)的详细推导

SFT

  • 监督微调的目标是最大化以下目标函数:
    $$
    \mathcal{J}_{\textrm{SFT}}(\theta)=\mathbb{E}_{q,o\sim p_{sft}(Q ,O)}\left(\frac{1}{|o|}\sum_{t=1}^{|o|}\log\pi_{\theta}(o_{t}|q,o_{<t})\right).
    $$
  • \(\mathcal{J}_{\textrm{SFT}}(\theta)\) 的梯度为:
    $$
    \nabla_{\theta}\mathcal{J}_{\textrm{SFT}}=\mathbb{E}_{q,o\sim p_{sft}(Q,O)}\left(\frac{1}{|o|}\sum_{t=1}^{|o|}\nabla_{\theta}\log\pi_{\theta}(o_ {t}|q,o_{<t})\right).
    $$
  • 补充:LLMs做SFT时常用交叉熵损失函数:
    $$\mathcal{L}(\theta) = -\frac{1}{|o|}\sum_{t=1}^{m} \log \pi_{\theta}(o_t | x, o_{<t})$$
  • 训练数据来源 :用于SFT的数据集(通常是从各自领域真实场景收集得到的,也可以是其他优质大模型生成的)
  • 奖励函数设计 :可以视为人类的选择
  • 梯度系数(Gradient Coefficient) :始终设置为1

Rejection Sampling Fine-tuning, RFT

  • 拒绝采样微调首先从监督微调的 LLM 中为每个问题采样多个输出,然后在具有正确答案的采样输出上训练 LLM。形式上,RFT 的目标是最大化以下目标函数:
    $$
    \mathcal{J}_{\textrm{RFT}}(\theta)=\mathbb{E}_{q\sim p_{sft}(Q),o\sim\pi_{sft}(O|q)}\left(\frac{1}{|o|}\sum_{t=1}^{|o|}\mathbb{I}(o)\log\pi_{ \theta}(o_{t}|q,o_{<t})\right).
    $$
  • \(\mathcal{J}_{\textrm{RFT}}(\theta)\) 的梯度为:
    $$
    \nabla_{\theta}\mathcal{J}_{\textrm{RFT}}(\theta)=\mathbb{E}_{q\sim p_{sft}(Q),o\sim\pi_{sft}(O|q)}\left(\frac{1}{|o|}\sum_{t=1}^{|o|}\mathbb{I}(o )\nabla_{\theta}\log\pi_{\theta}(o_{t}|q,o_{<t})\right).
    $$
  • 训练数据来源 :SFT 数据集中的问题,输出从 SFT 模型中采样
  • 奖励函数设计 :规则(答案是否正确)
  • 梯度系数(Gradient Coefficient) :
    $$
    GC_{\textrm{RFT}}(q,o,t)=\mathbb{I}(o)=\begin{cases}1&\text{the answer of \(o\) is correct}\\ 0&\text{the answer of \(o\) is not correct}\end{cases}
    $$

Online Rejection Sampling Fine-tuning, Online RFT, 在线RFT

  • 在线 RFT 和 RFT 的唯一区别在于,在线 RFT 的输出是从实时策略模型 \(\pi_{\theta}\) 中采样,而不是从 SFT 模型 \(\pi_{\theta_{sft}}\) 中采样。因此,在线 RFT 的梯度为:
    $$
    \nabla_{\theta}\mathcal{J}_{\textrm{OnRFT}}(\theta)=\mathbb{E}_{q\sim p_{sft}( Q),o\sim\pi_{\theta}(O|q)}\left(\frac{1}{|o|}\sum_{t=1}^{|o|}\mathbb{I}(o) \nabla_{\theta}\log\pi_{\theta}(o_{t}|q,o_{<t})\right).
    $$

DPO

  • DPO的目标是:
    $$
    \mathcal{J}_{DPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), \color{red}{(o^+, o^-) \sim \pi_{sft}(O|q)}} \Big[ \log \sigma \left( \beta \frac{1}{|o^+|} \sum_{t=1}^{|o^+|} \log \frac{\pi_\theta(o_t^+|q, o_{<t}^+)}{\pi_{ref}(o_t^+|q, o_{<t}^+)} - \beta \frac{1}{|o^-|} \sum_{t=1}^{|o^-|} \log \frac{\pi_\theta(o_t^-|q, o_{<t}^-)}{\pi_{ref}(o_t^-|q, o_{<t}^-)} \right)\Big].
    $$
    • 注:\(\sigma(\cdot)\) 表示Sigmod函数 \(\sigma(x) = \frac{1}{1+e^{-x}}\)
  • \(\mathcal{J}_{DPO}(\theta)\) 的梯度为:
    $$
    \nabla_\theta \mathcal{J}_{DPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), \color{red}{(o^+, o^-) \sim \pi_{sft}(O|q)}} \left( \frac{1}{|o^+|} \sum_{t=1}^{|o^+|} \color{blue}{GC_{DPO}(q, o, t)} \nabla_\theta \log \pi_\theta(o_t^+|q, o_{<t}^+) - \frac{1}{|o^-|} \sum_{t=1}^{|o^-|} \color{blue}{GC_{DPO}(q, o, t)} \nabla_\theta \log \pi_\theta(o_t^-|q, o_{<t}^-) \right).
    $$
  • 训练数据来源 :SFT数据集中的问题,输出从SFT模型中采样
  • 奖励函数设计 :一般领域的人类偏好(在数学任务中可以是“规则”)
  • 梯度系数(Gradient Coefficient) :
    $$
    GC_{DPO}(q, o, t) = \sigma \left( \beta \log \frac{\pi_\theta(o_t^-|q, o_{<t}^-)}{\pi_{ref}(o_t^-|q, o_{<t}^-)} - \beta \log \frac{\pi_\theta(o_t^+|q, o_{<t}^+)}{\pi_{ref}(o_t^+|q, o_{<t}^+)} \right).
    $$
  • DPO不同于其他训练方法,DPO的一个样本是同时包含了好和坏(对应正和负)两个子样本的,根RFT中的样本组织形式有根本区别,在RFT中,正负样本是独立的,负样本权重为0,正样本权重为1,而DPO中没有正负样本之分,只有样本对,上面的 \(GC_{DPO}(q, o, t) \) 就是样本对的系数

PPO

  • PPO的目标是:
    $$
    \mathcal{J}_{PPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), o \sim \pi_{\theta_{old}}(O|q)} \Big[\frac{1}{|o|} \sum_{t=1}^{|o|} \min \left( \frac{\pi_\theta(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})} A_t, \text{clip} \left( \frac{\pi_\theta(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})}, 1 - \epsilon, 1 + \epsilon \right) A_t \right)\Big].
    $$
  • 为了简化分析,假设模型在每次探索阶段后仅进行一次更新,从而确保 \(\pi_{\theta_{old}} = \pi_\theta\) ,在这种情况下,我们可以移除最小值和裁剪操作:
    $$
    \mathcal{J}_{PPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), o \sim \pi_{\theta_{old}}(O|q)}\Big[ \frac{1}{|o|} \sum_{t=1}^{|o|} \frac{\pi_\theta(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})} A_t\Big].
    $$
  • \(\mathcal{J}_{PPO}(\theta)\) 的梯度为:
    $$
    \nabla_\theta \mathcal{J}_{PPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), o \sim \pi_{\theta_{old}}(O|q)}\Big[\frac{1}{|o|} \sum_{t=1}^{|o|} A_t \nabla_\theta \log \pi_\theta(o_t|q, o_{<t})\Big].
    $$
    • 这里的梯度中, \(\frac{1}{\pi_{\theta_{old}}(o_t|q, o_{ < t})}\) 部分被求导消掉了,详细求导过程见附录
  • 训练数据来源 :SFT数据集中的问题,输出从策略模型中采样
  • 奖励函数设计 :奖励模型
  • 梯度系数(Gradient Coefficient) :
    $$
    GC_{PPO}(q, o, t, \pi_{\theta_{rm}}) = A_t,
    $$
    • 其中 \(A_t\) 是通过广义优势估计(GAE)计算的,基于包含 Actor-Reference KL散度惩罚奖励 \(\{r_{\geq t}\}\) 和学习到的价值函数 \(V_\psi\)
    • \(\pi_{\theta_{rm}}\) 中的 \(rm\) 表示简化版

GRPO

  • GRPO原始目标是:
    $$
    \begin{split}
    \mathcal{J}_{GRPO}(\theta)&=\mathbb{E}_{q\sim p(Q),\{\mathbf{o}_i\}_{i=1}^{G}\sim\pi_{\theta_{old}}(O|q)}\\
    &\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|\mathbf{o}_i|}\sum_{t=1}^{|o_{t}|}\left\{\min\left[\frac{\pi_{\theta}(o_{i,t}|q,\mathbf{o}_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q,\mathbf{o}_{i,<t})}\hat{A}_{i,t},\text{clip}\left(\frac{\pi_{\theta}(o_{i,t}|q,\mathbf{o}_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q,\mathbf{o}_{i,<t})},1-\epsilon,1+\epsilon\right)\hat{A}_{i,t}\right]-\beta\text{D}_{\text{KL}}\left[\pi_{\theta}||\pi_{ref}|\right) \right\},
    \end{split}
    $$
  • GRPO中使用了KL散度的近似形式,该形式可以进一步化简,Approximating KL Divergence —— 来自:Deepseek的RL算法GRPO解读 - AIQL的文章 - 知乎
    • 估计形式为(注意以下式子中右边是左边的无偏梯度的前提是 \(o_{i,t} \sim \pi_\theta(\cdot \vert q,o_{i,< t})\),且此时 \(\pi_\theta(\cdot \vert q,o_{i,< t}) = \pi_{\theta_\text{old}}(\cdot \vert q,o_{i,< t})\) ),于是有:
      $$
      \mathbb{D}_\text{KL}[\pi_\theta\Vert\pi_{\text{ref}}] \approx \frac{\pi_{\text{ref}}(o_{i,t}\vert q,\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}\vert q,\mathbf{o}_{i,<t})} - \log \frac{\pi_{\text{ref}}(o_{i,t}\vert q,\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}\vert q,\mathbf{o}_{i,<t})} - 1, \quad o_{i,t} \sim \pi_\theta(\cdot \vert q,\mathbf{o}_{i,<t})
      $$
      • 为了方便理解,这里给出直观解释 :上面的式子右边满足KL散度的基本特性
        • 当两个分布足够接近时,第一项趋近于1,第二项趋近于0,整体趋近于0;
        • 两个分布不相等时,上式右边取值总是大于0,可以通过求导证明:当 \(x>0\) 时,有 \(x - \log x - 1 \ge 0\)
  • 最终,化简KL散度后,GRPO的目标是(假设 \(\pi_{\theta_{old}} = \pi_\theta\) 以简化分析):
    $$
    \mathcal{J}_{GRPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), \{\mathbf{o}_i\}_{i=1}^G \sim \pi_{\theta_{old}}(O|q)} \frac{1}{G} \sum_{i=1}^G \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \left( \frac{\pi_\theta(o_{i,t}|q, \mathbf{o}_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q, \mathbf{o}_{i,<t})} \hat{A}_{i,t} - \beta \left( \frac{\pi_{ref}(o_{i,t}|q, \mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}|q, \mathbf{o}_{i,<t})} - \log \frac{\pi_{ref}(o_{i,t}|q, \mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}|q, \mathbf{o}_{i,<t})} - 1 \right) \right).
    $$
  • \(\mathcal{J}_{GRPO}(\theta)\) 的梯度为:
    $$
    \nabla_\theta \mathcal{J}_{GRPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), \{\mathbf{o}_i\}_{i=1}^G \sim \pi_{\theta_{old}}(O|q)} \frac{1}{G} \sum_{i=1}^G \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \left[ \hat{A}_{i,t} + \beta \left( \frac{\pi_{ref}(o_{i,t}|\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}|\mathbf{o}_{i,<t})} - 1 \right) \right] \nabla_\theta \log \pi_\theta(o_{i,t}|q, \mathbf{o}_{i,<t}).
    $$
  • 训练数据来源 :SFT数据集中的问题,输出从策略模型中采样
  • 奖励函数设计 :奖励模型
  • 梯度系数(Gradient Coefficient) :
    $$
    GC_{GRPO}(q, o, t, \pi_{\theta_{sm}}) = \hat{A}_{i,t} + \beta \left( \frac{\pi_{ref}(o_{i,t}|\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}|\mathbf{o}_{i,<t})} - 1 \right),
    $$
    • 其中 \(\hat{A}_{i,t}\) 是基于组奖励分数计算的,这里的 \(\hat{A}_{i,t}\) 不包含 Actor-Reference KL散度惩罚
    • \(\beta \left( \frac{\pi_{ref}(o_{i,t}|o_{i, < t})}{\pi_\theta(o_{i,t}|o_{i, < t})} - 1 \right)\) 则是 Actor-Reference KL散度部分,用于控制当前策略不要偏离参考策略太远
    • \(\pi_{\theta_{rm}}\) 中的 \(rm\) 表示简化版

附录:\(\mathcal{J}_{\text{PPO}}(\theta)\) 求导

  • 前置假设:假设模型在每次探索阶段后仅进行一次更新,从而确保 \(\pi_{\theta_{old}} = \pi_\theta\)

  • 对简化后的目标函数 \(\mathcal{J}_{\text{PPO}}(\theta)\) 关于参数 \(\theta\) 求导:
    $$
    \mathcal{J}_{PPO}(\theta) = \mathbb{E}_{q \sim p_{sft}(Q), o \sim \pi_{\theta_{old}}(O|q)}\Big[ \frac{1}{|o|} \sum_{t=1}^{|o|} \frac{\pi_\theta(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})} A_t\Big].
    $$

  • 仅考虑期望内部的部分:对每个时间步 \(t\),应用对数导数技巧 \(\nabla_\theta\log \pi_\theta = \frac{\nabla_\theta \pi_\theta}{\pi_\theta}\)可得:
    $$
    \nabla_\theta \left( \frac{\pi_\theta}{\pi_{\theta_{\text{old}}}} \right) = \frac{\pi_\theta}{\pi_{\theta_{\text{old}}}} \nabla_\theta \log \pi_\theta(o_t|q, o_{<t}).
    $$

  • 将梯度表达式代入期望,得到最终梯度:
    $$
    \nabla_\theta \mathcal{J}_{\text{PPO}}(\theta) = \mathbb{E}_{q \sim p_{\text{sft}}(Q), o \sim \pi_{\theta_{\text{old}}}(O|q)} \left[ \frac{1}{|o|} \sum_{t=1}^{|o|} \frac{\pi_\theta(o_t|q, o_{<t})}{\pi_{\theta_{\text{old}}}(o_t|q, o_{<t})} A_t \nabla_\theta \log \pi_\theta(o_t|q, o_{<t}) \right].
    $$

  • 结合此时的假设 \(\pi_{\theta_{old}} = \pi_\theta\),于是有最终导数如下:
    $$
    \nabla_\theta \mathcal{J}_{\text{PPO}}(\theta) = \mathbb{E}_{q \sim p_{\text{sft}}(Q), o \sim \pi_{\theta_{\text{old}}}(O|q)} \left[ \frac{1}{|o|} \sum_{t=1}^{|o|} A_t \nabla_\theta \log \pi_\theta(o_t|q, o_{<t}) \right]
    $$


附录:GRPO 传统 RL 场景的应用前景讨论

  • 一个有趣的对比:DeepSeek GRPO在简单控制系统上和PPO的对比 - 王兴兴的文章 - 知乎

    对于整个系统中间过程和信息,比较清晰的问题(中间过程能被价值评价清晰),比如类似上面的控制系统(或者其他机器人系统),PPO还是最简单粗暴出效果很好的;但对于像DeepSeek用来搞数学RL推理,由于中间过程没法很好的描述和计算中间过程的价值,确实还是GRPO更快更方便(只看最终结果);


附录:为什么 GRPO 训练开始时,Loss 函数为 0,并且不降反增?

  • 以下回答参考自:Open-R1 #239 issue: Why does the loss start at 0 when I train GRPO, and then possibly increase?

  • 结论 :损失值从零开始逐渐增加是完全正常的,原因如下:

  • 首先需要理解GRPO目标函数的数学表达:
    $$
    J_{\text{GRPO}}(\theta) = \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \left[ \min\left( \frac{\pi_\theta(o_{i,t} | q, \mathbf{o}_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} | q, \mathbf{o}_{i,<t})} \hat{A}_{i,t}, \text{clip}\left( \frac{\pi_\theta(o_{i,t} | q, \mathbf{o}_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} | q, \mathbf{o}_{i,<t})}, 1-\epsilon, 1+\epsilon \right) \hat{A}_{i,t} \right) - \beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}] \right].
    $$

    • \( G \) 是每个提示的生成次数
    • \( \mathbf{o}_i \) 是提示的第\( i \)次生成结果,\( |\mathbf{o}_i| \)表示其token数量
    • \( q \) 是输入提示
    • \( \pi_\theta \) 是策略模型
    • \( \pi_{\theta_{\text{old}}} \) 是更新前的策略模型
    • \( \pi_{\text{ref}} \) 是参考策略
    • \( \hat{A}_{i,t} \) 是第\( i \)次生成中第\( t \)个token的优势估计(详见下文)
    • \( \epsilon \) 和 \( \beta \) 是超参数
  • 为简化说明,假设每次迭代只执行一次探索步骤(这是GRPO的标准实现)。此时\( \pi_{\theta_{\text{old}}} = \pi_\theta \),目标函数自然简化为(接下来的花间仅关心绝对值):
    $$
    \begin{align}
    J_{\text{GRPO}}(\theta) &= \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \left[ \min\left( \frac{\pi_\theta(o_{i,t} | q, \mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t} | q, \mathbf{o}_{i,<t})} \hat{A}_{i,t}, \text{clip}\left( \frac{\pi_\theta(o_{i,t} | q, \mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t} | q, \mathbf{o}_{i,<t})}, 1-\epsilon, 1+\epsilon \right) \hat{A}_{i,t} \right) - \beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}] \right]. \\
    &= \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \left[ \min\left( \hat{A}_{i,t}, \text{clip}(1, 1-\epsilon, 1+\epsilon) \hat{A}_{i,t} \right) - \beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}] \right]. \\
    &= \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \left[ \min\left( \hat{A}_{i,t}, \hat{A}_{i,t} \right) - \beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}] \right].\\
    &= \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \left[ \hat{A}_{i,t} - \beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}] \right].\\
    &= \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \hat{A}_{i,t} - \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}].
    \end{align}
    $$

  • 注意优势函数 \(\hat{A}_{i,t}\) 实际上与 \( t \) 无关(在GRPO中,一个Response只有一个Reward,这个Reward是Response粒度的,不是token粒度的),因此:
    $$
    \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \hat{A}_{i,t} = \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \hat{A}_i = \hat{A}_i.
    $$

  • 此外,\( \hat{A}_t \)经过归一化处理意味着:
    $$
    \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \hat{A}_t = 0.
    $$

    • 证明:这里的归一化处理是,对于一组给定的 \(G\) 个奖励 \(\mathbf{r}=\{r_{1},r_{2},\cdots,r_{G}\}\):
      $$A_i = \frac{r-\text{mean}(\mathbf{r})}{\text{std}(\mathbf{r})}$$
  • 因此最终可得:
    $$
    J_{\text{GRPO}}(\theta) = -\frac{1}{G} \sum_{i=1}^{G} \frac{1}{|\mathbf{o}_i|} \sum_{t=1}^{|\mathbf{o}_i|} \beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}].
    $$

  • 从绝对值来看,损失等于平均KL散度乘以\( \beta \),由于参考策略与初始策略完全一致,这就是损失从零开始的原因。随着训练进行,策略会逐渐偏离初始参考策略,因此损失值会上升


附录:GRPO 中 KL 散度的近似为何与常规 RLHF 中不一样?

  • 常规RLHF中,KL散度的近似为:
    $$
    \begin{align}
    D_{\text{KL}}(\pi_{\theta_\text{old}}||\pi_{\theta}) &= \mathbb{E}_{a \sim \pi_{\theta_\text{old}}} \left[\log\frac{\pi_{\theta_\text{old}}(a|s)}{\pi_{\theta}(a|s)}\right] &\\
    &\approx \frac{1}{N} \log\frac{\pi_{\theta_\text{old}}(a|s)}{\pi_{\theta}(a|s)} \\
    &= \frac{1}{N} (\log \pi_{\theta_\text{old}}(a|s)- \log\pi_{\theta}(a|s))
    \end{align}
    $$
  • GRPO中,KL散度的近似为(可参考Approximating KL Divergence):
    $$
    \mathbb{D}_\text{KL}[\pi_\theta\Vert\pi_{\text{ref}}] \approx \frac{\pi_{\text{ref}}(o_{i,t}\vert q,\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}\vert q,\mathbf{o}_{i,<t})} - \log \frac{\pi_{\text{ref}}(o_{i,t}\vert q,\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}\vert q,\mathbf{o}_{i,<t})} - 1, \quad o_{i,t} \sim \pi_\theta(\cdot \vert q,\mathbf{o}_{i,<t})
    $$
    • 为了方便理解,这里给出上式的直观解释 :上面的式子右边满足KL散度的基本特性
      • 当两个分布足够接近时,第一项趋近于1,第二项趋近于0,整体趋近于0;
      • 两个分布不相等时,上式右边取值总是大于0,可以通过求导证明:当 \(x>0\) 时,有 \(x - \log x - 1 \ge 0\) 恒成立
  • 关于KL散度近似的更多讨论可参考:Math——KL散度的近似估计

GRPO 中 KL 近似的推导

  • GRPO的近似式基于以下观察:
    $$
    D_{\text{KL}}(\pi_\theta \Vert \pi_{\text{ref}}) = \mathbb{E}_{a \sim \pi_\theta} \left[ \frac{\pi_{\text{ref}}(a|s)}{\pi_\theta(a|s)} - \log \frac{\pi_{\text{ref}}(a|s)}{\pi_\theta(a|s)} - 1 \right].
    $$
  • 推导思路 :
    • 令\(x = \frac{\pi_{\text{ref}}(a|s)}{\pi_\theta(a|s)}\),当两个分布接近时,\(x \approx 1\)
    • 对函数\(f(x) = x - \log x - 1\)在\(x=1\)处进行泰勒展开:
      $$
      f(x) \approx \frac{1}{2}(x-1)^2 + o((x-1)^2).
      $$
    • 此时,\(\mathbb{E}[f(x)]\)近似为KL散度的二阶项,可用于约束策略更新
  • 此近似将KL散度转换为无需显式计算对数期望的形式,适用于从\(\pi_\theta\)采样的场景,同时保证在\(x \approx 1\)时近似准确

为什么不直接使用更简单的 KL 近似?

  • 比如参考传统RLHF的思路来计算:
    $$
    \begin{align}
    \mathbb{D}_\text{KL}[\pi_\theta\Vert\pi_{\text{ref}}] &= - \log \frac{\pi_{\text{ref}}(o_{i,t}\vert q,\mathbf{o}_{i,<t})}{\pi_\theta(o_{i,t}\vert q,\mathbf{o}_{i,<t})} , \quad o_{i,t} \sim \pi_\theta(\cdot \vert q,o_{i, < t})\\
    &=\log\pi_\theta(o_{i,t}\vert q,o_{i, < t}) - \log \pi_{\text{ref}}(o_{i,t}\vert q,\mathbf{o}_{i,<t}) , \quad o_{i,t} \sim \pi_\theta(\cdot \vert q,o_{i, < t})
    \end{align}
    $$
  • 上面这个式子更简便也更准确,但是容易出现KL散度为负的情况,特别是对于采样次数不足的时候会更严重,传统的RLHF中就存在这个问题(这个问题也可以描述为方差大)
  • k3估计的KL散度那么不好,为什么GRPO还要坚持用呢? - lym的文章 - 知乎中有详细实验发现,使用 \(k_1\) 估计会导致模型倾向于压低 token 的概率
  • 但是在GRPO的KL散度近似中,两个分布不相等时,取值总是大于0(可以证明方差比上面的式子小),可以通过求导证明:当 \(x>0\) 时,有 \(x - \log x - 1 \ge 0\) 恒成立,最小值在 \(x=1,y=0\)处,其函数图像如下:

附录:为什么 GRPO 中要将 PPO 奖励中的 KL 散度挪出来?

  • 实际上就是实验给的结论!
  • 一些个人理解:
    • KL 散度加到 Reward 上可能影响 GAE 的计算和稳定性
    • KL 散度放到 Reward 上可能出现 Reward Hacking 现象,模型可能会倾向于只输出与参考模型相同的策略
      • 特别地,在每个 Token 上都有 KL 散度反馈,但只有最后一个 Token 才会有 Reward 反馈

附录:GRPO 中损失的平均粒度有什么影响?

  • GRPO :Sample-level 平均
    $$
    \begin{split}
    \mathcal{J}_{\mathrm{GRPO} }(\theta) &=\mathbb{E}_{(\mathbf{q},\mathbf{a})\sim\mathcal{D},\{\mathbf{o}_i\}_{i=1}^{G}\sim\pi_{\theta_{old} }(\cdot|q)} \\
    &\left[\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|\mathbf{o}_i|}\sum_{t=1}^{|\mathbf{o}_i|}\Bigg{(}\min\Big{(}r_{i,t}(\theta)\hat{A}_{i,t},\mathrm{clip}\Big{(}r_{i,t}(\theta),1-\varepsilon,1+\varepsilon\Big{)}\hat{A}_{i,t}\Big{)}-\beta D_{\mathrm{KL} }(\pi_{\theta}|\pi_{\mathrm{ref} })\Bigg{)}\right],
    \end{split}
    $$
    • 其中
      $$
      r_{i,t}(\theta)=\frac{\pi_{\theta}(o_{i,t}\mid q,\mathbf{o}_{i,<t})}{\pi_{\theta_{old} }(o_{i,t}\mid q,\mathbf{o}_{i,<t})}.
      $$
    • 从 token 视角看,\(\frac{1}{|\mathbf{o}_i|}\) 相当于是给不同 \(|\mathbf{o}_i|\) 中 token 加上了不同的权重
    • 特别注意:一个容易理解的误区是认为 \(\frac{1}{|\mathbf{o}_i|}\sum_{t=1}^{|\mathbf{o}_i|}\) 可保证整体的损失和是 token 均值,所以不同 \(|\mathbf{o}_i|\) 中 token 对 Loss 权重不变
      • 这里理解有误,\(\sum_{t=1}^{|\mathbf{o}_i|}\) 只是损失函数累计到一起的动作(可以看做是一个 Batch 的多个样本一起更新模型), \(\color{red}{\frac{1}{|\mathbf{o}_i|}}\) 则是相当于给所有样本都加了一个权重 \(\color{red}{\frac{1}{|\mathbf{o}_i|}}\)
      • 这个权重与 \(\color{red}{\mathbf{o}_i}\) 有关,对不同长度的 response 的 Token 是不公平的,此时,长序列的回复梯度会被缩小(不论正负都会被缩小)),导致模型会倾向于 简短的正确回答 和 较长的错误回答
      • 进一步理解可以发现:
        • 如果使用 token-mean 的方式,理论上可以将组内轨迹相同前缀的梯度刚好消掉(Advantage 是梯度系数,前缀 Token 的 Advantage 求和值为 0,所以整体相同前缀对梯度的贡献为 0),但针对 loss 增加了 \(\color{red}{\mathbf{o}_i}\) 长度归一化后,无法消掉了,短的轨迹的前缀幅度更大,模型整体会朝着短的轨迹偏(无论是正确还是错误,都会加强短轨迹的更新幅度,组内相同前缀 Token 的梯度不再为 0)
  • DAPO :号称 Token-level 平均,本质是 Batch-level 平均(因为如果两个 batch 上采样到的 token 数量差异太大也会导致模型更关注短序列的 token)
    $$
    \begin{align}
    \mathcal{J}_{\mathrm{GRPO} }(\theta) &=\mathbb{E}_{(\mathbf{q},\mathbf{a})\sim\mathcal{D},\{\mathbf{o}_i\}_{i=1}^{G}\sim\pi_{\theta_{old} }(\cdot|q)} \\
    &\left[\frac{1}{\color{red}{\sum_{i=1}^G|\mathbf{o}_i|}}\color{red}{\sum_{i=1}^{G}\sum_{t=1}^{|\mathbf{o}_i|}}\min\Big{(}r_{i,t}(\theta)\hat{A}_{i,t},~\mathrm{clip}\Big{(}r_{i,t}(\theta),1-\varepsilon_\text{low},1+\varepsilon_\text{high}\Big{)}\hat{A}_{i,t}\Big{)}\right] \\
    \text{s.t.}\quad &0 < \left|\{\mathbf{o}_i \mid \texttt{is_equivalent}(a, \mathbf{o}_i)\}\right| < G
    \end{align}
    $$
  • SimpleRL :方法与 DAPO 的处理完全一样(下面是原始论文中的写法,不带期望的形式,原始论文可参考:SimpleRL-Zoo: Investigating and Taming Zero Reinforcement Learning for Open Base Models in the Wild, HKUST & TikTok Meituan, 20250524 & 202508076)
    $$
    \mathcal{J}_{\text{GRPO}}(\theta)=\underbrace{\frac{1}{\color{red}{\sum_{i=1}^{G}\left|o_{i}\right|}} \color{red}{\sum_{i=1}^{G} \sum_{t=1}^{\left|o_{i}\right|}} min \left[r_{i, t}(\theta) \hat{A}_{i}, clip\left(r_{i, t}(\theta) ; 1-\epsilon, 1+\epsilon\right) \hat{A}_{i}\right]}_{\text{Clipped policy update } }-\underbrace{\beta \mathbb{D}_{KL}\left[\pi_{\theta} | \pi_{ref }\right]}_{\text{KL penalty } }
    $$
  • Dr.GRPO :真正的 Token-level 平均 ,无论 batch 间的序列长度如何都可做到按照 token 平均
    $$
    \begin{split}
    \mathcal{J}(\pi_{\theta}) &= \mathbb{E}_{\mathbf{q} \sim p_{Q}, \{\mathbf{o}_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old} }(\cdot|\mathbf{q})} \\
    &\quad \left[\frac{1}{G} \sum_{i=1}^{G} \sum_{t=1}^{|\mathbf{\mathbf{o}_i}|} \left\{\min \left[\frac{\pi_{\theta}(o_{i,t}|\mathbf{q}, \mathbf{o}_{i,<t})}{\pi_{\theta_{old} }(o_{i,t}|\mathbf{q}, \mathbf{o}_{i,<t})} \tilde{A}_{i,t}, \text{clip} \left(\frac{\pi_{\theta}(o_{i,t}|\mathbf{q}, \mathbf{o}_{i,<t})}{\pi_{\theta_{old} }(o_{i,t}|\mathbf{q}, \mathbf{o}_{i,<t})}, 1 - e, 1 + e \right) \tilde{A}_{i,t} \right]\right\}\right],
    \end{split}
    $$
    • 注意:没有 \(\color{red}{\frac{1}{|\mathbf{o}_i|}}\),实际实现时会除以一个 MAX_TOKEN(预设的最大生成长度)
  • 实现中常用参数:
    • token-mean :按照正个 Batch 内部的整体 Token 粒度做平均
    • dr_grpo:特殊的做法,常常单独命名,防止误解
      • Sequence 内部除以固定值(NUM_MAX_TOKEN),再在 Batch 内部的 Sequence 之间求平均
      • 本质可以理解为 seq-mean-fix:
        • 后面的 fix 表示 Sequence 内部除以固定值
        • 前面的 seq-mean 表示 Batch 内部的 Sequence 之间求平均
    • seq-mean-token-sum:
      • 后面的 token-sum 表示 Sequence 内部的 Token 之间做求和
      • 前面的 seq-mean 表示 Batch 内部的 Sequence 之间求平均
      • 整体看就是 Sequence 内部求和再对 Batch 内部(Sequence 之间)求平均
    • seq-mean-token-mean :
      • 后面的 token-mean 表示 Sequence 内部的 Token 之间做平均
      • 前面的 seq-mean 表示 Batch 内部的 Sequence 之间求平均
      • 整体看就是 Sequence 内部求平均再对 Batch 内部(Sequence 之间)求平均
  • VeRL 中可能存在的坑
    • VeRL 等许多实现框架基本都会将 mini-batch 拆为 micro-batch,每个 micro-batch 的样本数一般是 ppo_micro_batch_size_per_gpu,(注:若 use_dynamic_bsz=True 则由 rearrange_micro_batches 根据序列真实长度和 ppo_max_token_len_per_gpu 参数 共同动态决定每个 micro-batch 的序列数量)
    • 调用 compute_policy_loss_vanilla 的 loss 计算函数的时机是每个 micro-batch 一次调用,输入是这个 micro-batch 的序列
      • 注:这里是不经过 packing 的,行数等于 micro-batch 的真实轨迹数
    • 当 micro-batch-size 非常小时,token-mean 是无法被准确实现的
      • 比如 micro-batch-size=1 时,seq-mean-token-mean 和 token-mean 本质等价
      • 按照 rearrange_micro_batches 的逻辑,轨迹长度越长的序列,越容易出现只有很小 micro-batch-size 的情况
  • Seed:
    • Post-trainging work,千愈加
    • 工程,Infra,豆包 Work,产品 Push 工程
    • 年轻,主动,合作比较愉快,不蒸馏要走 RL,短期 RFT 做很重 + 洗数据,Pass@k 很高
    • 环境,task,回流数据;
    • 数据:
      • 合成题目:天花板取决于真实素材和环境的真实性(用户真实的文件系统,文件,环境,CUA 场景的软件,网站等,比较好的 Verify 的接口)
        • 造素材
        • 造素材以后题目好做一些,自动化的逻辑
        • Verify 的逻辑,状态分数对齐
        • PPT 模型
      • 回流数据清洗完直接训练,复现环境
      • SFT 或者 RL 方向会有各种各样的分析工具,诊断工具

附录:Off-policy 下 GRPO 中的 KL 散度损失项问题

  • 本部分参考自:The critical implementation detail of KL loss in GRPO, Hongyu Zang

整体说明

  • GRPO 相对 PPO 有两个主要创新:
    • 1)它放弃了传统的 Critic 模型,而是选择使用群体得分来估计价值基线
    • 2)它不是在奖励中加入每个 token 的 KL 散度惩罚,而是通过将学习策略与参考策略之间的 KL 散度直接添加到损失函数中来规范学习过程
  • 重点:在 Off-policy 场景中,不能简单地将奖励框架中的 KL 惩罚转移到作为正则化损失项
    • 这需要在整个词汇表上计算 KL 项 ,而不仅仅是依赖于采样的轨迹

Theory recap

  • PPO 中的损失函数定义如下:
    $$
    \mathcal{J}_{PPO}(\theta) = \mathbb{E}_{q \sim P(Q), o \sim \pi_{\theta_{old}}(O|q)} \Big[\frac{1}{|o|} \sum_{t=1}^{|o|} \min \left( \frac{\pi_\theta(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})} A_t, \text{clip} \left( \frac{\pi_\theta(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})}, 1 - \epsilon, 1 + \epsilon \right) A_t \right)\Big].
    $$
    • 在 PPO 设置中,\(\pi_{\theta_{\text{old}}}\) 和 \(\pi_{\text{ref}}\) 之间的 KL 散度被纳入奖励函数,表示为:
      $$ R = r(q, o) - \text{KL}(\pi_{\theta_{\text{old}}}, \pi_{\text{ref}}) $$
    • 在这个奖励函数中,没有任何项依赖于正在优化的策略 \(\pi_\theta\)
    • 在精确损失函数的实现中,可以对这个奖励应用“detach”操作,在代码中有效地表示为 R = R.detach()
    • 这种分离可以防止损失计算中出现不可预测的行为
  • GRPO 的损失函数定义是:
    $$
    \begin{split}
    \mathcal{J}_{GRPO}(\theta)&=\mathbb{E}_{q\sim p(Q),\{\mathbf{o}_i\}_{i=1}^{G}\sim\pi_{\theta_{old}}(O|q)}\\
    &\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|\mathbf{o}_i|}\sum_{t=1}^{|o_{t}|}\left\{\min\left[\frac{\pi_{\theta}(o_{i,t}|q,\mathbf{o}_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q,\mathbf{o}_{i,<t})}\hat{A}_{i,t},\text{clip}\left(\frac{\pi_{\theta}(o_{i,t}|q,\mathbf{o}_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q,\mathbf{o}_{i,<t})},1-\epsilon,1+\epsilon\right)\hat{A}_{i,t}\right]-\beta\text{D}_{\text{KL}}\left[\pi_{\theta}||\pi_{ref}|\right) \right\},
    \end{split}
    $$
  • 注:两者都基于策略 \(\pi_{\theta_{\text{old}}}\) 采样轨迹,也就是说两种方法本质上都是 Off-policy 的
  • 回顾 REINFORCE 算法 :
    • REINFORCE 以 On-policy 方式运行,REINFORCE 的损失函数表示为:
      $$ L = \mathbb{E}_{\pi_\theta}[R] $$
    • 这是一个直接的目标,其中 \(R\) 代表 On-policy \(\pi_\theta\) 下获得的奖励(目标是最大化这个期望奖励)
    • 该损失对应的梯度为:
      $$ \nabla_\theta L = \nabla_\theta \mathbb{E}_{\pi_\theta}[R] $$
    • 由于采样和优化都是相对于相同的策略分布 \(\pi_\theta\) 进行的,我们旨在计算该分布的梯度以更新参数 \(\theta\)
      • 但这提出了一个挑战,因为直接评估期望通常是不可行的(非可微奖励(Non-differentiable Reward)):奖励函数可能不可微,或者可能是一个黑盒函数,这意味着其内部工作不可见,只能观察到输出(High-Dimensional Continuous Control Using Generalized Advantage Estimation)
    • 为了处理这个问题,使用了一种称为得分函数估计器(score function estimator)或 REINFORCE 估计器(REINFORCE estimator)的通用梯度估计器
      • 得分函数定义为:
        $$ \nabla_\theta \log \pi_\theta = \frac{\nabla_\theta \pi_\theta}{\pi_\theta} $$
    • 利用这个得分函数,REINFORCE损失的梯度可以表示为:
      $$ \nabla_\theta L = \mathbb{E}_{\pi_\theta}[R \cdot \nabla_\theta \log \pi_\theta] $$
    • 在这里,梯度计算集中在对数概率项 \(\nabla_\theta \log \pi_\theta\) 上
      • 这种公式有效地将寻找期望梯度(gradient of an expectation)的问题转化为梯度的期望(expectation of gradients) ,且梯度的期望可以通过从 \(\pi_\theta\) 中抽取的样本来估计
      • 这是强化学习中的一个关键 Insight,因为它允许即使在奖励信号稀疏或随机的情况下也能优化策略
  • 为了理解 \(\pi_\theta\) 项在 GRPO 设置中的重要性,从 \(\pi_\theta\) 如何影响 KL 损失中的梯度计算开始
    • 在 GRPO 的背景下,KL 散度以下列期望形式表示:
      $$ \text{KL}(\pi_\theta | \pi_{\text{ref}}) = \mathbb{E}_{\pi_\theta}[\log \pi_\theta - \log \pi_{\text{ref}}] $$
    • 在计算 GRPO 损失的梯度时,需要对两个组成部分进行微分:
      • 1)与优势加权策略项相关的梯度,类似于 PPO
      • 2)与 KL 散度项相关的梯度(GRPO 损失函数设计下独有的部分)
    • 涉及 KL 散度的组成部分需要进行微分,因为它包含了明确依赖于策略参数 \(\theta\) 的项 \(\pi_\theta\)。这种依赖性在计算梯度时至关重要,因为:
      • 对分布的微分(Differentiation Over the Distribution) :由于 \(\pi_\theta\) 代表了对动作的概率分布,\(\theta\) 的任何变化都会影响不同动作的概率分配
        • 因此,推导梯度涉及考虑这些概率如何随参数更新而变化
      • 梯度传播(Gradient Propagation) :KL 散度中的 \(\pi_\theta\) 项直接影响通过其向策略参数反向传播更新的梯度
        • 与 PPO 场景不同,在 PPO 中奖励项(注:包含 KL 散度的奖励项)是分离的,(KL 散度)不会直接影响关于 \(\pi_\theta\) 的梯度,而在这里 \(\pi_\theta\) 主动参与梯度计算
    • 因此,强调 \(\pi_\theta\) 项至关重要,因为它将 KL 散度直接与策略参数联系起来,需要在梯度计算中予以考虑

从实现的视角看

PPO
  • 以 OpenRLHF 仓库 为例:

    • 在 PPO 中,为了计算奖励,需要添加 KL 项

      • 如 openrlhf/models/utils.py 所示,其中 KL 在 trainer/ppo_utils/experience_maker.py 计算,下面的代码来自 openrlhf/models/utils.py
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        def compute_approx_kl(
        log_probs: torch.Tensor,
        log_probs_base: torch.Tensor,
        kl_estimator: str = "k1",
        ) -> torch.Tensor:
        """
        Compute the approximate KL divergence between two distributions.
        Schulman blog: http://joschu.net/blog/kl-approx.html

        Args:
        log_probs: Log probabilities of the new distribution.
        log_probs_base: Log probabilities of the base distribution.
        """

        if kl_estimator == "k1":
        log_ratio = log_probs.float() - log_probs_base.float()

        # The k2 estimator is the non negative kl approximation in
        # http://joschu.net/blog/kl-approx.html
        # The k2_loss is approximately equivalent to the
        # one-step KL divergence penalty with the k1 estimator
        # used in https://arxiv.org/pdf/2310.10505.
        if kl_estimator == "k2":
        log_ratio = log_probs.float() - log_probs_base.float()
        log_ratio = log_ratio**2 / 2.0

        # The k3 estimator is the non negative kl approximation in
        # http://joschu.net/blog/kl-approx.html
        if kl_estimator == "k3":
        log_ratio = log_probs.float() - log_probs_base.float()
        log_ratio = -log_ratio
        log_ratio = log_ratio.exp() - 1 - log_ratio

        log_ratio = log_ratio.clamp(min=-10, max=10)
        return log_ratio
    • 值得注意的是,action_log_probs 和 base_action_log_probs 的形状是 [batch_size, response_length]

    • 核心 :一个有趣的问题是,当计算 KL 散度时,应该在整个词汇表分布上计算,而不仅仅是采样的轨迹上

      • 进一步引出问题思考:为什么在这种情况下可以省略 vocab_size 维度?
    • 回答问题:

      • 回想一下,我们讨论过 PPO 中的奖励是定义为:
        $$R = r(q, o) - \text{KL}(\pi_{\theta_{\text{old}}}, \pi_{\text{ref}})$$
      • 将 PPO 损失重写为(简写):
        $$\mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}} A\right]$$
      • 进一步忽略价值函数,这个表达式简化为
        $$\mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}} (r(q,o) - \text{KL}(\pi_{\theta_{\text{old}}}, \pi_{\text{ref}}))\right] = \mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}} (r(q,o) - \mathbb{E}_{\pi_{\theta_\text{old}}}(\log \pi_{\theta_{\text{old}}} - \log \pi_{\text{ref}}))\right]$$
      • 由于期望是在相同的分布 \(\pi_{\theta_\text{old}}\) 下取的,而不是在与我们正在优化的参数 \(\theta\) 无关的 \(\pi_\theta\) 下
        • 因此只需计算 \(\pi_{\theta_{\text{old}}}\) 和 \(\pi_{\text{ref}}\) 的对数概率之间的差异就足够了(如Language Models are Few-Shot Learners, NIPS 2020 中所示)
        • 在这种情况下省略 vocab_size 维度是可行的
          • 理解:是因为做了采样,采样就相当于做了分布期望完整估计
GRPO
  • GRPO 中,KL 项被视为损失,特别是当 KL 散度表示为 \(\text{KL}(\pi_\theta || \pi_{\text{ref}})\) 时,不可能使用 \(\pi_\theta\) 和 \(\pi_{\text{ref}}\) 的对数概率之间的差异来近似这个 KL 损失
    • 核心 :因为有必要在 \(\pi_\theta\) 下采样轨迹
  • 同上,我们可以将 GRPO 目标化简表示为:
    $$ \mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}}A - \text{KL}(\pi_\theta, \pi_{\text{ref}})\right] = \mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}}A - \mathbb{E}_{\pi_\theta}(\log\pi_\theta - \log\pi_{\text{ref}})\right] $$
    • 理解:上述的式子说明,内外层需要分别对 \(\pi_\theta\) 和 \(\pi_{\pi_\text{old}}\) 进行采样,而这两者对不齐
    • 因此,当使用 KL 项作为损失时,必须保持 vocab_size 维度
      • 问题:这跟 vocab_size 有什么关系,主要还是同时需要两个不同的采样导致的吧?
      • 回答:有关系,需要对 \(\pi_\theta\) 采样的原因是无法全部列举 \(\pi_\theta\) 的 可能动作,如果是列举所有动作 (vocab_size),则不再需要采样(理解:评估分布的期望有两种方式:1)采样 or 2)访问所有动作的概率计算期望)
    • 此外,重用上述代码中的 compute_approx_kl 函数是不合适的(理解:这里是按照 \(\pi_{\pi_\text{old}}\) 采样的),因为这样做会导致:
      $$ \mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}}A - \mathbb{E}_{\pi_{\theta_{\text{old}}}}(\log\pi_\theta - \log\pi_{\text{ref}})\right] $$
      • 因为我们实际上使用 \(\pi_{\theta_{\text{old}}}\) 进行采样,导致失去了 \(\pi_\theta\) 的导数信息

Ways to solve

  • The critical implementation detail of KL loss in GRPO 博客作者在与 @Renbiao Liu 和 @Yiming Liu 讨论后,似乎有三种潜在的方法来解决这个问题:
    • 1)遵循传统的 KL 损失(即重新通过 \(\pi_\theta\) 采样并计算 KL)
    • 2)仅使用 GRPO 的 On-policy 版本
    • 3)将 KL 散度重新加入奖励函数
遵循传统的 KL 损失
  • 注:原始 GRPO 中使用的是 KL 散度的 K3 估计
    $$ k_3 = (r-1) - \log r$$
  • 本节使用传统的 KL 损失,传统 KL 损失可以推导如下:
    $$
    \begin{align}
    &\nabla_\theta\mathbb{E}_{\pi_\theta}\left[\log\pi_\theta-\log\pi_\text{ref}\right] \\
    =& \nabla_\theta\sum\pi_\theta (\log\pi_\theta-\log\pi_\text{ref}) \\
    =& \sum\nabla_\theta\pi_\theta\cdot(\log\pi_\theta-\log\pi_\text{ref})+\pi_\theta\cdot\nabla_\theta(\log\pi_\theta-\log\pi_\text{ref}) \\
    =& \sum\nabla_\theta\pi_\theta\cdot(\log\pi_\theta-\log\pi_\text{ref})+\pi_\theta\cdot\frac{\nabla_\theta\pi_\theta}{\pi_\theta}\\
    =&\sum\pi_\theta\nabla_\theta\log\pi_\theta(\log\pi_\theta-\log\pi_\text{ref})+\sum\nabla_\theta\pi_\theta\\
    =&\mathbb{E}_{\pi_\theta}\left[(\log\pi_\theta-\log\pi_\text{ref})\nabla_\theta\log\pi_\theta\right]
    \end{align}
    $$
  • 理解:从上面可以看出,只需要对 \(\pi_{\theta}\) 采样就可以了,不再需要内层计算期望(也就没有内外层期望的概率分布不一致问题)
  • 也就是说,可以通过基于样本的近似技术(如 On-policy 采样或重要性采样)或通过计算分布概率来进行梯度反向传播来优化它
    • 问题:这里的 On-policy 采样是指真实使用当前策略去重新采样,也就是说 GRPO 迭代的每一步都需要重新采样并计算 KL?
  • 然而,鉴于这些方法通常有一些缺点:
    • 方式一:重新采样,依赖于额外的采样程序(除了从 \(\pi_{\theta_\text{old}}\) 采样外,还可能需要从每一步迭代后的 \(\pi_\theta\) 采样)
    • 方式二:在 vocabulary size 上计算 KL 散度
    • 它们并不特别实用或计算效率高
  • 另一种近似方法可能涉及使用 top-K 软标签(soft labels)进行梯度反向传播,类似于知识蒸馏中使用的方法,尽管这尚未在 RL 场景中被证明是最佳选择
    • 软标签参考链接: Distilling the Knowledge in a Neural Network, NIPS 2015 ;Top-K Sampling for Language Generation, ACL 2020
On-policy GRPO
  • 在 GRPO 的 On-policy 版本中,原始损失函数可以重新表述为:
    $$ \mathbb{E}_{\pi_{\theta}}\left[A-\mathbb{E}_{\pi_{\theta}}\left[\log\pi_\theta-\log\pi_\text{ref}\right]\right]=\mathbb{E}_{\pi_{\theta}}\left[A-(\log\pi_\theta-\log\pi_\text{ref}\right)] $$
  • 相应的导数由下式给出:
    $$ \mathbb{E}_{\pi_\theta}[(A-(\log\pi_\theta-\log\pi_\text{ref}))\cdot\nabla_\theta\log\pi_\theta] $$
  • 因此,当 GRPO 完全 On-policy 时,它与之前使用的公式匹配:
    $$ \mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}}A - \text{KL}(\pi_\theta, \pi_{\text{ref}})\right] = \mathbb{E}_{\pi_{\theta_{\text{old}}}}\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old}}}}A - \mathbb{E}_{\pi_\theta}(\log\pi_\theta - \log\pi_{\text{ref}})\right], $$
    • 在 On-policy 条件下,即 \(\pi_\theta = \pi_{\theta_{\text{old}}}\):
      $$ \mathbb{E}_{\pi_{\theta}}\left[\frac{\pi_\theta}{\pi_{\theta}}A - \mathbb{E}_{\pi_\theta}(\log\pi_\theta - \log\pi_{\text{ref}})\right]=\mathbb{E}_{\pi_{\theta}}\left[A - (\log\pi_\theta - \log\pi_{\text{ref}})\right], $$
Adding back to reward function(即将 KL 散度重新加入奖励函数)
  • 从上面的推导可知,传统的 KL 散度损失可以化简为:
    $$
    \begin{align}
    \nabla_\theta\mathbb{E}_{\pi_\theta}\left[\log\pi_\theta-\log\pi_\text{ref}\right] = \mathbb{E}_{\pi_\theta}\left[(\log\pi_\theta-\log\pi_\text{ref})\nabla_\theta\log\pi_\theta\right]
    \end{align}
    $$
  • 在 Off-policy 场景中,KL 损失的为:
    $$
    \mathbb{E}_{\pi_\theta}\left[(\log\pi_\theta-\log\pi_\text{ref})\nabla_\theta\log\pi_\theta\right]=\mathbb{E}_{\pi_{\theta_\text{old} } }[\frac{\pi_{\theta} }{\pi_{\theta_\text{old} } }(\log\pi_\theta-\log\pi_{\text{ref} })\nabla_\theta\log\pi_\theta]
    $$
  • 如果此时忽略价值函数并应用此 KL 损失,则 GRPO 损失变为:
    $$
    \mathbb{E}_{\pi_{\theta_{\text{old} } } }\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old} } } } (r(q,o) - KL(\pi_{\theta}, \pi_{\text{ref} }))\right]
    $$
    • 注:次数 KL 项应 detached(梯度不回传),这里的用法相当于 KL 散度本身就是奖励的一部分,不再通过梯度直接优化 KL 损失了
  • 实际上,PPO 的推导过程中就使用到了重要性采样,同时考虑 KL 散度存在(使得相邻两步策略足够接近,所以可以使用近似策略)
    $$
    \begin{align}
    \nabla_\theta J_{\text{PPO}}(\theta)
    &= \mathbb{E}_{(s_t, a_t) \sim \pi_\theta} \left[ A_\theta(s_t, a_t) \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\
    &= \mathbb{E}_{(s_t, a_t) \sim \pi_{\theta_\text{old}}} \left[ \frac{\pi_\theta(a_t|s_t) \pi_\theta(s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)\pi_{\theta_\text{old}}(s_t)} A_{\theta}(s_t, a_t) \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\
    &\approx \mathbb{E}_{(s_t, a_t) \sim \pi_{\theta_\text{old}}} \left[ \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)} A_{\theta_\text{old}}(s_t, a_t) \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\
    &= \mathbb{E}_{(s_t, a_t) \sim \pi_\theta} \left[ \frac{\nabla \pi_\theta(a_t|s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)} A_{\theta_\text{old}}(s_t, a_t) \right]
    \end{align}
    $$
    • 注:\(\pi_\theta\) 和 \(\pi_\text{ref}\) 之间的 KL 散度可以通过 \(\pi_{\theta_\text{old} }\) 和 \(\pi_\text{ref}\) 之间的 KL 散度来近似
  • 因此,GRPO 损失函数的一个进一步近似可以表示如下:
    $$
    \nabla_\theta\mathbb{E}_{\pi_{\theta_{\text{old} } } }\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old} } } } (r(q,o) - KL(\pi_{\theta}, \pi_{\text{ref} }))\right]\approx\nabla_\theta\mathbb{E}_{\pi_{\theta_{\text{old} } } }\left[\frac{\pi_\theta}{\pi_{\theta_{\text{old} } } } (r(q,o) - KL(\pi_{\theta_\text{old} }, \pi_{\text{ref} }))\right]
    $$
    • 此时,这正是 Off-policy 版本的 PPO 的表达形式,两者很相似(注:但并不等价)
      • 注:尽管上述 PPO 和 GRPO 的基本损失函数在 Off-policy 版本中看起来很相似,但两者的实际值不同:
        • 此时 GRPO 的奖励是 Trajectory-level 奖励的总和减去 Token-level KL 散度,最终得到 Token-level 奖励
          • 注意:这里是将 KL 散度放入 奖励 以后的 GRPO,原始的 GRPO 是 Trajectory-level 奖励
        • PPO 中使用的是 Token-level 奖励和(potentially)Trajectory-level KL 散度
          • 问题:原始的 PPO 中的 KL 散度是 Token-level 的,这里的 (potentially)Trajectory-level KL 散度 应该是在说某些场景中使用的 KL 散度奖励是 Trajectory-level 奖励
    • 理解:这里与前面的 vanilla GRPO 公式不同
      • 前面 KL 散度在 loss 上,不在奖励中,不能按照上面进行近似推导(KL 散度有梯度,且需要通过损失函数直接向后传递),所以之前存在问题;
      • 现在这种推导虽然做了近似,但是是合理的(因为相邻两步的策略就应该比较近似才对,此时不需要直接通过 loss 进行 KL 散度梯度回传了)
    • 问题:上面的推导中,将 KL 散度放入 GRPO 的奖励,同时不考虑 Advantage 的计算方式,确实 PPO 和 GRPO 就等价了啊,为什么还要绕一圈去证明?
      • 回答:不是严格的等价,毕竟 GPRO 是整个样本粒度的所有 Token 相同的奖励(原始的 PPO RLHF 中,仅最后一个 Token 有奖励,然后通过 GAE 回传到每个 Token 上)

GRPO 核心要点

  • GRPO 采用组优势归一化,而不是在整个经验回放缓冲区上进行优势归一化,这可以在某些基于规则的奖励设置中获得更好的性能
  • 对于 GRPO 的 On-policy 变体,简单的实现就足够了,因为 \(\pi_{\theta_\text{old} }\) 与 \(\pi_\theta\) 是相同的
  • 对于 GRPO 的 Off-policy 版本,将 KL 项加回奖励函数中更为实用,因为它可以节省计算资源和时间,使其再次几乎等同于 PPO(理解:这里的等同主要强调对 KL 散度的处理)

Potential Impact

  • 这里研究的 KL 损失可能不会显著影响策略模型的收敛速度,因为当前研究表明强化学习算法倾向于接近 On-policy ,特别是对于推理型大语言模型
    • 但随着 GRPO 变得更加 Off-policy ,这种差异可能会变得更加明显
  • 这个问题可能普遍存在于许多开源代码库中,例如 OpenRLHF 和 verl
    • 在 trl 代码库中,默认设置为 On-policy 版本,这可能已经足够
  • 由于目前开源代码中尚未提供真正实现的 Off-policy GRPO,并且三种不同的实现方式尚未得到充分的实验和比较,因此 GRPO 不同实现方式之间的区别以及 GRPO 与 PPO 之间的性能差异仍然是需要持续讨论和考虑的课题

DeepSeek-V3.2 的补充

  • DeepSeek-V3.2 中对 GRPO 的 KL 散度重新进行了推导,并给出了无偏的 KL 散度估计
  • DeepSeek-V3.2 解决的问题本质就是本文提出的问题,但是解决的方法是通过在 KL 散度中增加重要性权重而得到无偏的 KL 散度估计

附录:记一次 GRPO 问题排查过程

  • 问题描述:现实场景中发现过 GRPO 训练时,大部分 Step 的 GBS 内部 Advantage 均值微微大于 0 的情况(约 5e-3 量级)

问题分析

  • 最终经过排查发现似乎是因为归一化时,全等的数据因为计算误差出现了均值不为 0 的情况(此时除以特别小的标准差以后得到的值较大)
  • 表现为同一个 Group 内部归一化后的值相等(均值计算出现误差导致),且归一化后正值的概率大于负值的概率(不同原始值得到的正负误差是确定的,我们的场景更容易出现某个正误差的相同值,所以一直偏正)
  • torch.float32 下的问题复现及 torch.float64 的问题修复
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    import torch
    import numpy as np

    # float32 时存在误差
    print(f"\n=======\n数据类型 为 float32 时存在误差")
    # values = [0.6666666865348816] * 8
    values = [0.819531261920929] * 8
    tensors = torch.tensor(values) # PyTorch 默认 是 float32
    print(f"数据类型:{tensors.dtype}") # PyTorch 默认 是 float32
    x1 = tensors.mean()
    print(f"原始数值:{tensors[0].item()}")
    print(f"均值数值:{x1.item()}")
    print(f"原始数值-均值的结果:{(torch.tensor(values[0]) - x1).item()}")

    # float32 时存在误差
    print(f"\n=======\n数据类型 为 float32 时存在误差")
    values = [0.6666666865348816] * 8
    # values = [0.819531261920929] * 8
    tensors = torch.tensor(values) # PyTorch 默认 是 float32
    print(f"数据类型:{tensors.dtype}") # PyTorch 默认 是 float32
    x1 = tensors.mean()
    print(f"原始数值:{tensors[0].item()}")
    print(f"均值数值:{x1.item()}")
    print(f"原始数值-均值的结果:{(torch.tensor(values[0]) - x1).item()}")


    # float64 时不存在误差
    print(f"\n=======\n数据类型 为 float64 时不存在误差")
    # values = [0.6666666865348816] * 8
    values = [0.819531261920929] * 8
    tensors = torch.tensor(values, dtype=torch.float64) # 切换回到 float64
    print(f"数据类型:{tensors.dtype}")
    x1 = tensors.mean()
    print(f"原始数值:{tensors[0].item()}")
    print(f"均值数值:{x1.item()}")
    print(f"原始数值-均值的结果:{(torch.tensor(values[0]) - x1).item()}")


    # float64 时不存在误差
    print(f"\n=======\n数据类型 为 float64 时不存在误差")
    values = [0.6666666865348816] * 8
    # values = [0.819531261920929] * 8
    tensors = torch.tensor(values, dtype=torch.float64) # 切换回到 float64
    print(f"数据类型:{tensors.dtype}")
    x1 = tensors.mean()
    print(f"原始数值:{tensors[0].item()}")
    print(f"均值数值:{x1.item()}")
    print(f"原始数值-均值的结果:{(torch.tensor(values[0]) - x1).item()}")


    # =======
    # 数据类型 为 float32 时存在误差
    # 数据类型:torch.float32
    # 原始数值:0.819531261920929
    # 均值数值:0.8195313215255737
    # 原始数值-均值的结果:-5.960464477539063e-08

    # =======
    # 数据类型 为 float32 时存在误差
    # 数据类型:torch.float32
    # 原始数值:0.6666666865348816
    # 均值数值:0.6666666269302368
    # 原始数值-均值的结果:5.960464477539063e-08

    # =======
    # 数据类型 为 float64 时不存在误差
    # 数据类型:torch.float64
    # 原始数值:0.819531261920929
    # 均值数值:0.819531261920929
    # 原始数值-均值的结果:0.0

    # =======
    # 数据类型 为 float64 时不存在误差
    # 数据类型:torch.float64
    # 原始数值:0.6666666865348816
    # 均值数值:0.6666666865348816
    # 原始数值-均值的结果:0.0

解决方法

  • 解决方法1:切换到精度更高的 torch.float64 (PyTorch 默认为 torch.float32)

    1
    2
    3
    4
    5
    original_dtype = rewards.dtype
    rewards = rewards.to(dtype=torch.float64)
    # 其他原始逻辑不变
    advantages = advantages.to(dtype=original_dtype)
    return advantages
  • 解决方法2:当 std 小于某个值时,其实组内 rewards 差异较小,索性将整体 advantages 置为 0

    1
    2
    3
    4
    if rewards_std < 1e-5:  # 这个阈值可适当调整
    advantages = torch.zeros_like(rewards)
    else:
    advantages = (rewards - rewards_mean) / (rewards_std + 1e-8)
  • 解决方法3:

    • drop 这部分 rewards 相同的样本(反正也不提供有效梯度)
  • 解决方法4:

    • 不使用 std 或者使用 Batch 粒度的 std(比如 使用 Dr.GRPO 等,可减少对误差的放大,这种情况依然会有较小误差,但几乎可以忽略)
    • 注:虽然 DeepSeek 自己最新的文章(DeepSeek-V3.2)没有除以 std,但现在大部分文章还是会使用 GRPO 的(Dr.GRPO 是在一些场景会好用一些,但没有确切证明他比 GRPO 好),比如最新的 GLM-5 就还是除以 std 的
  • 修复后效果:

    • 修复后,可以看到 Advantage 的均值严格在 0 附近波动([-1e-8, 1e-8] 之间),远低于之前的 1e-3 量级,符合预期
    • 修复后,特别是使用 mask std 过小的 Group 方式修复后,kl spike 大幅缩小
      • 分析是因为被错误 Advantage 更新的 Token 变少了,特别是 mask std 过小的 Group 的实验组
    • 修复后,kl 偏离程度更低(因为更新的 Token 变少了)
      • float64 修复时可以做到下游分数相同或更高(因为丢弃的都是错误 Advantage 的 Token)
      • 使用 mask std 过小的 Group 的实验组观察到训练的指标有一定下滑(因为更新的 Token 数量变少了)

附录:奖励取值为 0-1 时的最大标准差是多少?

  • 对于任何一组取值在 \([a, b]\) 区间内的数据,其标准差有一个理论上限,即 波皮乌斯不等式 (Popoviciu’s inequality on variances) :
    $$ \sigma^2 \le \frac{(b - a)^2}{4} $$
  • 在这个问题中,\(a = 0, \ b = 1\),代入公式:
    $$
    \begin{align}
    \sigma^2 &\le \frac{(1 - 0)^2}{4} = 0.25 \\
    \sigma &\le \sqrt{0.25} = 0.5
    \end{align}
    $$
  • 8 个数字时,4 个 0,4 个 1 取最大值:std_max=0.5
  • 16 个数字时,4 个 0,4 个 1 取最大值:std_max=0.5

补充:不同奖励下的 GRPO 归一化结果对比

  • 归一化结果对比(关键词:mean, var, std)
    数据集 均值 / 方差 / 标准差 Z-score 归一化结果 仅减均值结果
    [0,0,0,0,1,1,1,1](理论 std 最大值) 0.5 / 0.25 / 0.5 [−1, −1, −1, −1, 1, 1, 1, 1] [−0.5, −0.5, −0.5, −0.5, 0.5, 0.5, 0.5, 0.5]
    [0,0,0,0,0,0,1,1] 0.25 / 0.1875 / 0.4330 [-0.577, -0.577, -0.577, -0.577, -0.577, -0.577, 1.732, 1.732] [-0.25, -0.25, -0.25, -0.25, -0.25, -0.25, 0.75, 0.75]
    [0,0,0,0,0,0,0,1] 0.125 / 0.109375 / 0.3307 [-0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, 2.646] [-0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, 0.875]
    [0,0,0,0,0,0,0,0.1] 0.0125 / 0.001094 / 0.03307 [-0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, 2.646] [-0.0125, -0.0125, -0.0125, -0.0125, -0.0125, -0.0125, -0.0125, 0.0875]
    [0,0,0,0,0,0,0,0.01] 0.00125 / 1.094e-5 / 0.003307 [-0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, 2.646] [-0.00125, -0.00125, -0.00125, -0.00125, -0.00125, -0.00125, -0.00125, 0.00875]
    [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1] (理论 std 最大值) 0.5 / 0.25 / 0.5 [−1×8, 1×8] [−0.5×8, 0.5×8]
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1] 0.125 / 0.109375 / 0.3307 [-0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, -0.378, 2.646, 2.646] [-0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, -0.125, 0.875, 0.875]
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1] 0.0625 / 0.05859375 / 0.2421 [-0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, 3.873] [-0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, -0.0625, 0.9375]
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1] 0.00625 / 0.0005859 / 0.02421 [-0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, 3.873] [-0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, -0.00625, 0.09375]
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.01] 0.000625 / 5.859e-6 / 0.002421 [-0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, -0.258, 3.873] [-0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, -0.000625, 0.009375]

附录:GRPO 中 Advantage 归一化后的最大值是多少?

  • 假设有一组数字 \(x_1, x_2, \dots, x_N\)
    • 均值为:
      $$ \mu = \frac{1}{N} \sum_{i=1}^N x_i $$
    • 标准差(总体标准差格式)为:
      $$ \sigma = \sqrt{\frac{1}{N} \sum_{i=1}^N (x_i - \mu)^2} $$
    • 标准化后的数值 \(z_i\) 定义为:
      $$ z_i = \frac{x_i - \mu}{\sigma} $$
  • 构建极端情况(构造最大的差值)
    • 为了让某个 \(z_i\)(假设是 \(z_1\))达到最大值,需要让 \(x_1\) 尽可能远离均值,而让其余的 \(N-1\) 个数字尽可能集中
      设 \(x_1 = a\),其余数字全部相等,即 \(x_2 = x_3 = \dots = x_N = b\)(且 \(a > b\))
  • 计算均值和离差:
    • 此时均值为:
      $$ \mu = \frac{a + (N-1)b}{N} $$
    • 计算 \(x_1\) 与均值的差:
      $$ x_1 - \mu = a - \frac{a + (N-1)b}{N} = \frac{Na - a - (N-1)b}{N} = \frac{(N-1)(a-b)}{N} $$
    • 计算其余 \(x_i (i > 1)\) 与均值的差:
      $$ x_i - \mu = b - \frac{a + (N-1)b}{N} = \frac{Nb - a - Nb + b}{N} = \frac{-(a-b)}{N} $$
  • 计算标准差
    • 方差 \(\sigma^2\) 的计算如下:
      $$ \sigma^2 = \frac{1}{N} \left[ (x_1 - \mu)^2 + (N-1)(x_i - \mu)^2 \right] $$
    • 代入离差:
      $$ \sigma^2 = \frac{1}{N} \left[ \left( \frac{(N-1)(a-b)}{N} \right)^2 + (N-1) \left( \frac{-(a-b)}{N} \right)^2 \right] $$
    • 提取公因子 \(\frac{(a-b)^2}{N^2}\):
      $$
      \begin{align}
      \sigma^2 &= \frac{(a-b)^2}{N^3} \left[ (N-1)^2 + (N-1) \right] \\
      \sigma^2 &= \frac{(a-b)^2}{N^3} \left[ (N-1)(N-1+1) \right] = \frac{(a-b)^2 (N-1)N}{N^3} = \frac{(a-b)^2(N-1)}{N^2}
      \end{align}
      $$
    • 因此,标准差 \(\sigma\) 为:
      $$ \sigma = \frac{(a-b)\sqrt{N-1} }{N} $$
  • 求出最大值 \(z_{max}\)
    • 将结果代入 \(z_1\) 的公式:
      $$ z_1 = \frac{x_1 - \mu}{\sigma} = \frac{\frac{(N-1)(a-b)}{N} }{\frac{(a-b)\sqrt{N-1} }{N} } $$
    • 化简可消去 \((a-b)\),最终得:
      $$ z_1 = \frac{N-1}{\sqrt{N-1} } = \sqrt{N-1} $$
  • 最终结果:
    • 对于 \(N\) 个数字,经过 Z-score 归一化(标准化)后,任意一个数值的最大理论上限是:
      $$ z_{max} = \sqrt{N-1} $$
  • 在 Z-score 中
    • 当 \(N=2\) 时,最大值为 \(\sqrt{2-1} = 1\)
    • 当 \(N=8\) 时,最大值为 \(\sqrt{7} \approx 2.6457\)
    • 当 \(N=16\) 时,最大值为 \(\sqrt{15} \approx 3.873\)
    • 当 \(N=100\) 时,最大值为 \(\sqrt{99} \approx 9.95\)
  • 注:这里 Z-score 使用的标准差是有偏的(原始 GRPO 论文中使用的就是有偏的),但部分框架的实现,比如 VeRL 是使用无偏的(即样本方差),此时得到的值会有微小差异:
    • 可以推导得到此时的方差的分母为 \(\sqrt{N-1}\) ,即:
      $$ \sigma_\text{sample} = \sqrt{\frac{1}{N-1} \sum_{i=1}^N (x_i - \mu)^2} $$
      • 于是有:
        $$ \sigma_\text{sample} = \frac{\sqrt{N}}{\sqrt{N-1}} $$
      • 进一步有经过 无偏方差归一化后,任意一个数值的最大理论上限是:
        $$
        \begin{align}
        z_{max}^\text{sample} &= \frac{\sqrt{N-1}}{\sqrt{N}}z_{max} \\
        &= \frac{\sqrt{N-1}}{\sqrt{N}}\sqrt{N-1} \\
        &= \frac{N-1}{\sqrt{N}}
        \end{align}
        $$
    • 有经过 无偏方差归一化后
      • 当 \(N=2\) 时,最大值为 \(\frac{1}{\sqrt{2}} \approx 0.7071\)
      • 当 \(N=8\) 时,最大值为 \(\frac{7}{\sqrt{8}} \approx 2.4749\)
        • 注:VeRL 训练时,若 Rollout N 为 8,则常常看得到最大 Advantage 是这个数,最小 Advantage 则是这个数前面加负号
      • 当 \(N=16\) 时,最大值为 \(\frac{15}{\sqrt{16}} = 3.75\)
      • 当 \(N=100\) 时,最大值为 \(\frac{99}{\sqrt{100}} = 9.9\)
  • 注:训练过程中,如果最大值超过这个值,则说明有问题
    • 注:一般来说,N 越大时,出现极端值(其他值均相等)的概率越小,所以 N 越大的时候,实践统计的最大值和理论最大值之间的差距越大(但实际最大值和理论最大值都肯定是随着 N 的增大,单调增大的)
  • 注:虽然在极端分布情况(即总能取到最大值场景)下,随着 N 增大,最大值是单调递增的,但是均值是单调递减的(也就是说如果训练模型的话,极端场景下 Token 的 Advantage 均值会单调递减,详情见后面的证明)

补充:其他归一化方式下的最大值情况

  • 如果使用 Min-Max 归一化
    $$ x’ = \frac{x - \min}{\max - \min}$$
    • 最大值恒等于 \(1\)
  • 如果方差的估计是无偏的(即使用样本标准差,分母为 \(N-1\)),推导过程会略有不同,最终的最大值也会发生变化
    • 无偏样本标准差 \(s\) 定义为:
      $$ s = \sqrt{\frac{1}{N-1} \sum_{i=1}^N (x_i - \bar{x})^2} $$
    • 当使用无偏估计的标准差进行归一化时,类似推导可得到,\(N\) 个数字中结果的最大值是:
      $$ z_{max} = \frac{N-1}{\sqrt{N} } $$
    • 使用 无偏样本标准差 \(s\) 时:
      • 当 \(N=2\) 时,最大值为 \(\frac{2-1}{\sqrt{2} } = \frac{1}{\sqrt{2} } \approx 0.707\)
      • 当 \(N=8\) 时,最大值为 \(\frac{8-1}{\sqrt{8} } = \frac{7}{\sqrt{8} } \approx 2.4749\)

补充 Insight:原始方差越小的数,归一化后的最大值越大

  • 首先澄清一个数学前提:归一化(Z-score 标准化)具有“尺度不变性”
    • 也就是说,如果把所有数字同时乘以 2(标准差也随之变为 2 倍),归一化后的结果是完全不变的
  • 这里 “原始方差越小的数,归一化后的最大值越大”,准确的数学表述可以是:
    • 在保持最大值与均值的距离(离差)不变的情况下,如果减小其他数据的离散程度(从而减小整体 std),归一化后的最大值会变大
  • 证明过程(大致证明):
    • 假设有一组数,其最大值为 \(x_{max}\),均值为 \(\mu\),标准差为 \(\sigma\),归一化后的最大值为:
      $$ z_{max} = \frac{x_{max} - \mu}{\sigma} $$
    • 归一化后的最大值大小,本质上取决于最大值的离差(\(x_{max}-\mu\))在整个标准差中所占的权重
      • 如果原始数据 std 越小(意味着其余数据的波动越小),最大值就显得越像一个“离群点”(Outlier),其归一化后的得分就越高
      • 反之,如果原始数据 std 很大(意味着大家都乱跳),那么即使某个数是最大的,它在概率分布中也不显得突出,归一化后的值自然就小了

GRPO 中 Advantage 归一化后的绝对值的均值是多少?(影响训练的学习率)

  • 补充描述:本节要求的是归一化(Z-score标准化)后数值绝对值的均值(即 \(\frac{1}{N}\sum_{i=1}^N |z_i|\) 或数学期望 \(E[|z|]\))
  • TLDR:在不同原始分布情况下,得到的结论不同

原始分布一:极端分布情况

  • 分布构建
    • 设 \(x_1 = a\),其余 \(N-1\) 个样本 \(x_2 = x_3 = \dots = x_N = b\)(且 \(a > b\))
  • 归一化后的值 \(z_i\)
    • 根据您提供的推导,最大值 \(z_1\) 为:
      $$ z_1 = \sqrt{N-1} $$
    • 对于其余的 \(N-1\) 个样本
      • 离差为
        $$x_i - \mu = \frac{-(a-b)}{N}$$
      • 标准差
        $$\sigma = \frac{(a-b)\sqrt{N-1} }{N}$$
      • 代入公式得:
        $$ z_i = \frac{\frac{-(a-b)}{N} }{\frac{(a-b)\sqrt{N-1} }{N} } = \frac{-1}{\sqrt{N-1} } \quad (i > 1) $$
  • 计算绝对值的均值
    • 绝对值均值 \(M\) 的计算如下:
      $$ M = \frac{1}{N} \sum_{i=1}^N |z_i| = \frac{1}{N} \left( |z_1| + (N-1)|z_i| \right) $$
    • 代入 \(z_1\) 和 \(z_i\) 的绝对值:
      $$ M = \frac{1}{N} \left( \sqrt{N-1} + (N-1)\frac{1}{\sqrt{N-1} } \right) $$
      $$ M = \frac{1}{N} \left( \sqrt{N-1} + \sqrt{N-1} \right) = \frac{2\sqrt{N-1} }{N} $$
  • 最终结果 :极端分布下,归一化后绝对值的均值为
    $$\frac{2\sqrt{N-1} }{N}$$
    • 理解:随着 N 的变大,绝对值的均值在逐步降低
      • 比如:如果在极端分布下,使用 Group Norm 的 Advantage 绝对值均值会比 Batch Norm 的大
    • 具体数值示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      import math

      for N in [2, 4, 8, 16, 256, 1024, 2048, 2097152]:
      mean_abs = (2 * math.sqrt(N - 1)) / N
      print(f"N = {N:>8} | mean_abs = {mean_abs:.8f}")

      # 可以看到,不同的 N 值下,均值的差异(学习率差异可以是几十倍,甚至几千倍)
      # N = 2 | mean_abs = 1.00000000
      # N = 4 | mean_abs = 0.86602540
      # N = 8 | mean_abs = 0.66143783
      # N = 16 | mean_abs = 0.48412292
      # N = 256 | mean_abs = 0.12475562
      # N = 1024 | mean_abs = 0.06246947
      # N = 2048 | mean_abs = 0.04418338
      # N = 2097152 | mean_abs = 0.00138107 (注:PPO Advantage 粒度做归一化时,样本数量可能非常大,但分布不会这么极端)

原始分布二:正态分布

  • 分布构建
    • 假设原始数据服从正态分布 \(x \sim \mathcal{N}(\mu, \sigma^2)\)
  • 归一化后的分布
    • 经过 Z-score 归一化后,\(z\) 服从标准正态分布,即 \(z \sim \mathcal{N}(0, 1)\)
    • 其概率密度函数为:
      $$ f(z) = \frac{1}{\sqrt{2\pi} } e^{-\frac{z^2}{2} } $$
  • 计算绝对值的期望(均值)
    • 求解 \(E[|z|]\),由于 \(f(z)\) 是偶函数,可化简为:
      $$ E[|z|] = \int_{-\infty}^{\infty} |z| f(z) dz = 2 \int_{0}^{\infty} z \frac{1}{\sqrt{2\pi} } e^{-\frac{z^2}{2} } dz $$
    • 设 \(u = \frac{z^2}{2}\),则 \(du = z dz\):
      $$ E[|z|] = \sqrt{\frac{2}{\pi} } \int_{0}^{\infty} e^{-u} du = \sqrt{\frac{2}{\pi} } \left[ -e^{-u} \right]_0^\infty $$
      $$ E[|z|] = \sqrt{\frac{2}{\pi} } (0 - (-1)) = \sqrt{\frac{2}{\pi} } $$
  • 最终结果 :正态分布下,归一化后绝对值的均值(期望)为
    $$\sqrt{\frac{2}{\pi} } \approx 0.7979$$
    • 理解:此时的均值结果是固定值,平时的大部分情况下,都可以假定 归一化前的 Advantage 服从高斯分布或类似高斯分布

原始分布三:均匀分布

  • 分布构建
    • 假设原始数据服从连续均匀分布 \(x \sim U(a, b)\)
  • 计算均值与标准差
    • 均值 \(\mu = \frac{a+b}{2}\)
    • 方差 \(\sigma^2 = \frac{(b-a)^2}{12}\),标准差 \(\sigma = \frac{b-a}{2\sqrt{3} }\)
  • 归一化后的分布
    • 归一化后的 \(z = \frac{x-\mu}{\sigma}\) 依然服从均匀分布
    • 计算 \(z\) 的边界:
      $$
      \begin{align}
      z_{max} &= \frac{b - \frac{a+b}{2} }{\frac{b-a}{2\sqrt{3} } } = \frac{\frac{b-a}{2} }{\frac{b-a}{2\sqrt{3} } } = \sqrt{3} \\
      z_{min} &= -\sqrt{3}
      \end{align}
      $$
    • 因此,\(z \sim U(-\sqrt{3}, \sqrt{3})\),其概率密度函数为 \(f(z) = \frac{1}{2\sqrt{3} }\)
  • 计算绝对值的期望(均值)
    • 求解 \(E[|z|]\),同样利用偶函数性质:
      $$
      \begin{align}
      E[|z|] &= \int_{-\sqrt{3} }^{\sqrt{3} } |z| \frac{1}{2\sqrt{3} } dz = 2 \int_{0}^{\sqrt{3} } z \frac{1}{2\sqrt{3} } dz \\
      &= \frac{1}{\sqrt{3} } \left[ \frac{z^2}{2} \right]_0^{\sqrt{3} } = \frac{1}{\sqrt{3} } \times \frac{3}{2} = \frac{\sqrt{3} }{2}
      \end{align}
      $$
  • 最终结果 :均匀分布下,归一化后绝对值的均值(期望)为
    $$ \frac{\sqrt{3} }{2} \approx 0.8660$$

补充:真实场景说明

  • 现象:在真实 PPO 训练场景中(Advantage Batch Norm),统计看到的 Advantage 的绝对值的均值约在 [0.78, 0.93] 之间波动
    • 原因是因为分布在不断变化,不同分布下得到的 Advantage 绝对值的期望值是不一样的,故而训练过程中存在波动
    • 同理:GRPO 训练过程中,Group 内归一化后的 Advantage 绝对值的均值也会存在波动

附录:GRPO 与 PPO 的对比

  • 总结:
    • GRPO 的主要优势:
      • LLM RL 的动作空间太大了(几乎无法通过探索评估价值),所以之前在 传统 RL(通过探索估计价值的方式)上的一些假设已经失效,从而导致 LLM RL 中使用 Bandit 建模方式更佳(而不是传统 RL 中的 MDP 建模方式)
      • GRPO 底层就是使用 Bandit 进行数学建模的,此时可以按照 Sequence-level 进行奖励估计了,不需要 Critic 了
      • 注:Bandit 和 MDP 的主要区别
        • Bandit 中:动作不会影响未来的状态 ,每次决策都是独立的(或者理解为单轮的),即一个回合,当前轨迹结束(此时获得奖励),下一次系统再给一个新的上下文,重新开始,目标就是遇到任意的上下文时,都能做一个最优动作最大化奖励
        • MDP 中:智能体在状态 \(S_t\) 下采取动作 \(A_t\),不仅会获得一个即时奖励 \(R_t\),还会导致环境转移到一个新的状态 \(S_{t+1}\)
    • GRPO 的主要劣势:
      • 虽然从数学上看,建模更准确了,没有 PPO 的 Critic 以后,信用分配会出现问题,这本身会带来一些不足
  • PPO 试图教模型“每说一个 Token 都要考虑这句话最终能不能拿高分”(MDP),这太难且太耗算力
  • GRPO 告诉模型“面对一个问题,策略给出几个不同的完整答案 (不关注中间奖励),RM 挑出相对最好的那个来强化策略”(Bandit)
    • 省去了 Critic,也让 LLM 的强化学习变得更加高效和稳定
PPO 的建模方式:将 LLM 视作 MDP(Token 级别)
  • PPO 是传统的强化学习算法,它天生是为解决 MDP 问题而设计的
  • 当 PPO 被用于 LLM 时,它采用了Token 级别的 MDP 建模
    • State:当前的 Prompt + 已经生成的所有 Token(即上文)
    • Action:从词表中选择下一个 Token
    • Transition :选定一个 Token 后,这个 Token 被拼接到上文中,形成新的状态 \(S_{t+1}\)
    • Reward :通常在生成完最后一个 Token 时,由 Reward Model 给出一个总分;中间生成的 Token 奖励为 0
  • PPO 建模带来的必然结果:必须要有 Critic
    • 因为 PPO 把生成一句话看作是连续走几十上百步的 MDP 过程,而奖励只有在最后一步才发
      • 为了知道“生成到一半的半句话到底好不好”,PPO 必须训练一个庞大的 Critic 模型 来预测每个中间状态的未来价值(即 \(V(S_t)\))
      • 通过 Critic 算出的 Advantage,PPO 试图精确地告诉模型:“这句话得分低,是因为你生成的第 5 个 Token 不好,而不是第 10 个 Token 不好”
    • 在 LLM 中,语言的组合是无穷的,Critic 极难准确预测“半句话”的最终得分,Critic 估算不准会导致更新方向错误
      • 同时,多加载一个与 LLM 同等规模的 Critic 模型,会让显存和计算开销直接翻倍
GRPO 的建模方式:将 LLM 视作 Contextual Bandit(Response 级别)
  • GRPO 之所以能大获成功并大幅降低训练成本,其核心思想是 放弃了 Token 级别的 MDP 建模,转而采用了 Response(完整回答)级别的 Contextual Bandit 建模
    • Context/State:用户输入的 Prompt
    • Action:模型生成的一整段完整的 Response
    • 状态转移:没有状态转移! 生成完一个回答后,这一轮交互直接结束,直接进入下一个 Prompt 的训练
    • Reward:Reward Model 或规则校验器对这一整段回答给出的评分
GRPO 建模带来的巨大优势:彻底摒弃了 Critic
  • 因为 GRPO 把问题变成了 Bandit,不存在“中间状态”,也不需要预测“未来收益”,所以 Critic 模型被彻底废弃了
  • 既然没有 Critic 来计算 Advantage,GRPO 是如何判断动作好坏的呢?它巧妙地利用了 Bandit 中的相对比较思想:
    • 1)Group 采样:对于同一个 Prompt,让当前的 LLM(Actor)生成多个不同的完整回答(例如采样 4 个或 8 个 Response)
    • 2)Relative 优势:对这几个回答分别打分,然后在这一组内部进行标准化(Z-score)
      • 得分高于组内平均分的回答,其 Advantage 为正;低于平均分的,Advantage 为负
    • 3)Policy Optimization(策略更新) :把整段回答的 Advantage 赋予该回答中的每一个 Token,结合 KL 散度惩罚(防止偏离原始模型太远),直接更新 Actor 模型

NLP——LLM对齐微调-Pass@k-Training

注:本文包含 AI 辅助创作

  • 参考链接:
    • 原始论文:Pass@k Training for Adaptively Balancing Exploration and Exploitation of Large Reasoning Models, 20250814, RUC & ByteDance Seed
    • 相关博客:几行代码改个reward,让RL效果起飞

Paper Summary

  • 整体理解:
    • 论文在 RLVR 框架内提出了 Pass@k Training 方法:实现大语言模型探索和利用能力的相互提升,从而突破其整体性能的极限
    • 论文证明了使用 Pass@k 作为奖励可以有效增强模型探索多样化输出的能力,进而提高其利用能力
    • 为了提高训练效率和有效性,论文引入了 bootstrap 采样机制和优势函数的解析推导,以优化 Pass@k Training 过程
    • 为了更好地理解 Pass@k Training 的内在机制,论文从不同方面提出了五个研究问题,以解答 Pass@k Training 为何有效以及能带来哪些益处
    • 检查优势值曲线,论文初步确定了促成 Pass@k Training 成功的两个关键因素 ,即:
      • 绝对优势之和 \(\eta\) 的 argmax
      • 绝对优势之和 \(\eta\) 的趋势(trend)
  • 背景和问题:RLVR 通常采用 Pass@1 作为奖励,在平衡探索(exploration)和利用(exploitation)方面面临挑战,导致策略倾向于保守行为,收敛到局部最优
    • Pass@k 在之前的工作中已被用于评估,但它与 RLVR 中 LLM 探索能力的关联在很大程度上被忽视了
    • 论文使用 Pass@k 作为奖励来训练策略模型(即 Pass@k Training ),并观察到其探索能力的提升
    • 论文还推导了 Pass@k Training 优势的解析解,形成了一个高效且有效的流程
  • 作者通过分析得到以下发现:
    • 探索和利用并非本质上相互冲突的目标,反而可以相互促进
    • 带有解析推导的 Pass@k Training 本质上涉及直接设计优势函数
  • 受此启发,论文初步探索了 RLVR 的优势设计,展示了良好的结果,并指出了一个潜在的未来方向
  • 思考:论文的重点是公式 14 和 公式 15,这种给与负样本一定的奖励的方式究竟和普通的 RLVR 有何区别,还需要深思

Introduction and Discussion

  • RLVR 用于解决复杂推理任务,并显著提升大型语言模型 LLM 的推理能力(2024)
  • 在 RLVR 训练过程中,LLM 基于给定的提示生成各种响应,并根据响应获得奖励(2024)
  • LLM 从结果级(outcome-level)监督中学习,能够生成更全面的推理过程(2025),从而在下游任务上取得更好的性能
  • 大型推理模型(large reasoning models, LRMs,如 OpenAI o1(2024)和 DeepSeek R1(2025))的成功,表明 RLVR 训练突破了 LLM 的能力极限
  • 当前 RLVR 训练通常优化 Pass@1 目标,也称为 ** Pass@1 Training**
    • LLM 从自身探索中学习,并为给定提示生成最自信的响应(2025),这带来了探索与利用平衡的重大挑战(2025)
  • 通常,探索指的是执行新颖且多样的行为(2024),而利用则要求 LLM 调用验证器在已知行为中偏好的可靠行为(2024)
  • 在 Pass@1 Training 过程中,LLM 倾向于模仿在先前尝试中能提高奖励分数的行为 ,并避免获得低奖励的行为(2024, 2025)
    • 但在结果监督(这是流行的 Pass@1 Training 设置(2025))中,答案正确但推理错误的解会获得正奖励 ,而推理正确但答案错误的解会被赋予负奖励(2024, 2025)
    • 在这种情况下,包含正确思路的不成功探索往往不会获得奖励,代价很高,导致利用与探索失衡(2025),可能使策略放弃探索并收敛到局部最优(2021)
    • 受强化学习方法(如 PPO 和 GRPO)下奖励的次优性质限制(2013, 2024, 2025),LLM 面临进一步学习的挑战,限制了 RLVR 流程的有效性和提升潜力
  • 为了缓解 Pass@1 Training 中 LLM 探索能力受损的问题,论文提出一种以优化为中心的方法,对错误响应有更高的容忍度 ,因为这些响应可能包含有用的思路或推理行为 ,防止模型陷入局部最优 ,从而扩展其能力上限 ,使其逐渐接近全局最优
  • Pass@k 已被用于评估策略是否能在 k 次尝试内生成正确响应,这是评估 LLM 能力边界的常用指标(2024)
    • 与 Pass@1 指标相比,Pass@k 指标允许策略生成多个错误响应
    • 论文考虑是否可以在 RLVR 过程中利用 Pass@k 指标来突破 LLM 的能力边界
  • 在 Pass@k 评估中,为了最大化 k 个样本中至少有一个成功的概率,“聪明的(smart)” 的策略会生成 k 个彼此不同且覆盖解空间不同区域的候选解 ,而不是 k 个高度相似的样本
    • 更强的探索能力使模型能够获得更全面的知识和更强的鲁棒性
    • 理解:为了提升 Pass@k 指标的分数,聪明的策略应该是生成差异较大的多个解,而不是很相似的,这样才能最大化分数(广撒网,总能捞到鱼)
  • 论文利用 Pass@k 指标作为奖励,持续训练一个已经过 Pass@1 Training 的模型(称为 Pass@k Training )
    • 论文发现,通过这种方法训练的模型在测试集上能获得更高的 Pass@k 分数,同时保持其 Pass@1 分数
  • Pass@k Training 的朴素实现存在几个关键问题,论文进一步采用 bootstrap 采样(2004, 2006)和解析推导来优化训练过程,实现了高效且有效的 Pass@k Training(第 2 节)
  • 为了进一步理解 Pass@k Training 的特征和内在机制,论文提出了五个研究问题,以探究 Pass@k Training 在 RLVR 训练过程中如何平衡 LLM 的探索和利用能力
  • 论文还观察到 Pass@k 阻止了策略分布熵的自然下降,熵也是指示策略探索能力的关键指标(2025)(第 3 节)
  • 从隐式奖励设计的角度,论文分析了 Pass@k Training 有效性的关键因素,并探索了其优化的几种可能途径(第 4 节)
  • 总体而言,论文工作的主要收获可以总结如下:
    • 与 Pass@1 Training 相比,Pass@k Training 显著增强了 LLM 的探索能力,在提高 Pass@k 性能的同时不损害 Pass@1 分数
      • 在其三个渐进式变体中,bootstrap 采样比全采样具有更高的训练效率,而解析推导作为其理论渐近形式,减轻了采样引入的方差(第 2 节)
    • 与 Pass@1 Training 及其变体相比,Pass@k Training 对 k 的不同取值具有鲁棒性,并且在不同领域和任务中具有可推广性
      • LLM 探索能力的增强有助于通过持续训练提高其利用能力,使 7B 规模的 LLM 超越强大的 LLM(如 GPT-4o 和 Claude-3.7),凸显了 Pass@k Training 的实用价值(第 3 节)
    • 带有解析推导的 Pass@k Training 直接设计优势函数,可被视为一种隐式奖励设计形式
      • 实证实验表明,隐式奖励设计允许更精细的优化控制,例如专注于更难的问题或提高训练效率,而无需复杂的理论推导,这使其成为未来 RLVR 发展的一个有前景的方向(第 4 节)

Pass@k as Reward in RLVR Training

  • 本节的内容如下,
  • 首先阐述推理任务的公式化表达,回顾传统的 Pass@1 Training (第 2.1 节)
  • 介绍如何在 RLVR 训练过程中使用 Pass@k 作为奖励(第 2.2 节),然后提出两种渐进式增强方法来提高训练效率和有效性(第 2 节和第 2.4 节)
  • 论文在图 2 中展示了概述,并在附录 C 中提供了伪代码,展示 Pass@k Training 的实现细节

Formulation of Reasoning Tasks and Pass@1 Training

  • 复杂推理任务可以评估 LLM 的推理和逻辑能力
  • 一般来说:
    • 来自数据集 \(D\) 的一个问题包含描述 \(x\) 和真实答案 \(y\)
    • 策略 \(\pi_{\theta}\)(即具有参数 \(\theta\) 的 LLM)需要基于 \(x\) 生成响应
      $$\hat{y}=\{t_{1}, t_{2}, …, t_{l}\}$$
      • 其中 \(t_{i}\) 和 \(l\) 分别指第 \(i\) 个 Token 和响应 \(\hat{y}\) 的长度
    • 在获得生成的响应 \(\hat{y}\) 后,验证器用于验证 LLM 响应的正确性,并提供奖励
      $$ R(y, \hat{y}) \in \{R_\text{neg}, R_\text{pos}\}$$
      • \(R_\text{neg} < R_\text{pos}\)
      • \(R_\text{neg}\) 用于负响应
      • \(R_\text{pos}\) 用于正响应
    • 为了简化符号,论文用 \(R\) 表示 \(R(y, \hat{y})\)
    • 在论文的实验中,论文采用 \(R_\text{neg}=0\) 且 \(R_\text{pos}=1\)
  • 基于上述推理任务的公式化表达,在 Pass@1 Training 过程中(例如,GRPO(2024)),优势通过同一组内响应奖励的平均值和标准差来估计,如下所示:
    $$\overline{R}=\frac{1}{N_\text{rollout } } \sum_{i=1}^{N_\text{rollout } } R_{i}, \\
    \sigma=\frac{1}{N_\text{rollout } } \sqrt{\sum_{i=1}^{N_\text{rollout } }\left(R_{i}-\overline{R}\right)^{2} }, \\
    \hat{A}_{i, 1}=\hat{A}_{i, 2}=\cdots=\hat{A}_{i,\left|\hat{y}_{i}\right|}=\frac{R_{i}-\overline{R} }{\sigma},$$
    • \(N_\text{rollout}\) 表示对应问题的 rollout 响应数量
    • \(R_{i}\) 和 \(\hat{y}_{i}\) 分别指第 \(i\) 个响应的奖励和生成的响应
  • 获得优势值后,GRPO 利用以下方程计算目标函数 \(T(\theta)\),该函数用于执行梯度下降并优化模型参数:
    $$\mathcal{J}(\theta)=\mathbb{E}_{(q, a) \sim D,\left\{o_{i}\right\}_{i=1}^{G} \sim \pi_{\theta}(\cdot | q)}\left[\frac{1}{G} \sum_{i=1}^{G} \frac{1}{\left|\hat{y}_{i}\right|} \sum_{t=1}^{\left|\hat{y}_{i}\right|}\left(min \left(r_{i, t} \hat{A}_{i, t}, clip\left(r_{i, t}, 1-\varepsilon, 1+\varepsilon\right) \hat{A}_{i, t}\right)-\beta D_{kL}\right)\right] .$$
  • 由于在 GRPO 中每个 Token 共享相同的优势值,论文在后续讨论中将不再区分 Token 级别,而是用 \(\hat{A}_{i}\) 表示第 \(i\) 个响应的优势值
  • 为了提高 RLVR 训练过程的有效性和效率,论文在后续实验中采用了 GRPO 的一个变体(即 DAPO(2025)),仅保留 clip-higher 和 Token 级策略梯度损失

Pass@k Training

  • 论文考虑是否可以采用 Pass@k 指标作为奖励来突破 LLM 的能力边界(因为 Pass@k 可以反映 LLM 的探索能力)
  • 下面先介绍 Pass@k 指标的定义,在将 Pass@k 指标纳入 RLVR 的奖励函数中
  • Pass@k 指标的定义(Definition of Pass@k Metric) :
    • 给定问题 \(x\),策略模型通过特定的解码策略或搜索算法(例如,基于采样的解码策略或蒙特卡洛树搜索)rollout \(k\) 个响应
    • 第 \(i\) 个采样响应 \(\hat{y}_{i}\) 将获得由验证器提供的奖励 \(R_{i}\)
    • Pass@k 指标的值定义为从 \(k\) 个采样响应中获得的预期最大奖励。形式上,Pass@k 指标可以通过以下方程计算:
      $$Pass @ k=\mathbb{E}_{(x, y) \sim D,\left\{\hat{y}_{i}\right\}_{i=1}^{k} \sim \pi_{\theta}(\cdot | x)}\left[max \left(R_{1}, …, R_{k}\right)\right] .$$
  • Pass@k 实现:全采样(Pass@k Implementation: Full Sampling) :
    • 为了将 Pass@k 指标集成到 RLVR 过程中,论文通过全采样机制提出一种基本实现
    • 首先利用策略 \(\pi_{\theta}\) 为给定问题 rollout \(N_\text{rollout}\) 个响应
      $$ \hat{\mathcal{Y}}=\{\hat{y}_{1}, …, \hat{y}_{N_\text{rollout} }\} $$
      • 在这种情况下,这些响应被分成 \(N^\text{group}=\left\lfloor\frac{N_\text{rollout} }{k}\right\rfloor\) 个组,多余的响应被丢弃
        • 问题:这里有毒吧,生成时刻意生成整数倍的 rollout 就好了,为什么要生成了然后又丢掉?
      • 其中第 \(j\) 个组包含 \(k\) 个响应
        $$ \hat{\mathcal{Y}}^{j}=\{\hat{y}_{k \times(j-1)+1}, …, \hat{y}_{k \times(j-1)+k}\} $$
    • 然后论文根据每个组的 Pass@k 值为其分配奖励分数:
      • 验证器将为每个响应提供奖励,组奖励通过该组内响应的奖励的最大值计算
      • 遵循 DAPO 算法中的优势估计方法,可以计算第 \(j\) 个组的优势值 \(\hat{A}^{j}\)
      • 论文将组优势分配给该组包含的响应 ,即
        $$ \hat{A}_{k \times(j-1)+1}=\cdots=\hat{A}_{k \times(j-1)+k}=\hat{A}^{j}$$
        • 问题:这种分组是随机的,得到的结果真的置信吗?是否仅仅是增加熵损失或者随机对 rollout 结果进行 SFT 也能拿到收益?
          • 回答:也不是完全随机,绝对正确的样本始终能拿到正向的奖励
      • 最后,我们可以利用采样的响应及其优势值来优化模型参数
  • 实证见解:提高探索能力(Empirical Insight: Improving Exploration) :
    • 为了评估采用 Pass@k 作为奖励的有效性,论文比较了全采样的 Pass@k Training 与常规 Pass@1 Training 的性能,如图 3 所示
    • 论文观察到,在 Pass@1 Training 过程中,下游任务的 Pass@k 性能保持稳定且仅有轻微提升
      • 虽然 Pass@1 指标在训练初期有所提高,但在后期阶段停滞不前,表明模型已陷入局部最优
    • 相比之下,在 RLVR 过程中采用 Pass@k 作为奖励时,LLM 在下游任务上的 Pass@k 性能持续提升 ,更多的训练步骤或更多的 rollout 次数不断带来 LLMs 性能的进一步提升
      • 这表明 Pass@k Training 具有可扩展性
    • 特别说明:Pass@k Training 不会损害模型的 Pass@1 性能,甚至会带来 Pass@1 性能的提升
      • 这表明 Pass@k Training 和 Pass@1 Training 具有相似的优化目标和方向,并且它们可以一起得到改善
  • 图 3 基线设置下 Pass@1 Training 和全采样的 Pass@k Training 的训练进度
  • Takeaway from Section 2.2
    • 与使用 Pass@1 作为奖励函数的传统 RLVR 训练方法相比,使用 Pass@k 作为 RLVR 训练的奖励函数可以有效提高模型在下游任务上的 Pass@k 性能,同时不损害其 Pass@1 性能

Efficient Pass@k Training via Bootstrap Sampling(通过 Bootstrap 采样可实现高效的 Pass@k Training )

  • Pass@k Training 可以突破 LLM 的能力极限,但随着 \(N^\text{group}\) 的增加,rollout 次数显著增加,会消耗更多的计算资源
  • 论文考虑利用 bootstrap 采样机制来减少 rollout 次数,同时保持组的数量不变
  • 在 rollout 过程中,首先使用策略模型 \(\pi_{\theta}\) 为给定问题 \(x\) 生成 \(N_\text{rollout}\) 个响应
    $$ \hat{\mathcal{Y}}=\{\hat{y}_{1}, …, \hat{y}_{N_\text{rollout} }\} $$
  • 构建用于后续优化过程的 \(N^\text{group}\) 个组的过程
    • 从先前生成的响应集 \(\hat{\mathcal{Y}}\) 中随机采样 \(k\) 个响应,这些采样的响应共同构成一个组
      • 问题:上面这句话有点多余?
    • 为了构建第 \(j\) 个组,论文从 1 到 \(N_\text{rollout}\) 的范围内选择 \(k\) 个不同的值,得到集合
      $$ \mathcal{P}=\{p_{j, 1}, …, p_{j, k}\}$$
      • 然后,索引在集合 \(\mathcal{P}\) 中的响应构成当前组
        $$ \hat{\mathcal{Y}}^{j}=\{\hat{y}_{p_{j, 1} }, …, \hat{y}_{p_{j, k} }\}$$
    • 这个过程将重复 \(N^\text{group}\) 次,收集 \(N^\text{group}\) 组响应
  • 获得这些组后,我们可以估计每个组的优势值并将其分配给响应
  • 由于论文使用 bootstrap 采样策略来构建组,一些响应可能出现在多个组中
  • 对于每个响应,论文通过对其所属的所有组的优势求和来计算其最终优势,即:
    $$\hat{A}_{i}=\sum_{j=1}^{N^\text{group } } \hat{A}^{j} \cdot \mathbb{I}\left[\hat{y}_{i} \in \hat{\mathcal{Y} }^{j}\right],$$
    • 其中 \(\mathbb{I}[\hat{y}_{i} \in \hat{\mathcal{Y}}^{j}]\) 是一个指示函数,当且仅当第 \(i\) 个响应 \(\hat{y}_{i}\) 属于第 \(j\) 个组 \(\hat{\mathcal{Y}}^{j}\) 时返回 1,否则返回 0
    • 在实践中,论文为了高效的 RLVR 过程设置 \(N^\text{group}=N_\text{rollout}\)
  • 实证见解:减少训练预算(Empirical Insight: Reduction in Training Budget) :
    • 为了评估 bootstrap 采样对 Pass@k Training 的有效性,论文进行了 Pass@1 Training 和具有不同 rollout 次数的全采样 Pass@k Training (如第 2.2 节所述)作为基线方法,并在图 4 中展示了评估结果
    • 在相同的 rollout 次数 \(N_\text{rollout}\) 下
      • 即“\(N_\text{rollout}=32\) 采用全采样”与“\(N_\text{rollout}=32\) 采用 bootstrap 采样”,bootstrap 采样优于全采样
      • 这种改进源于 bootstrap 采样生成了更多的组 ,这反过来减少了采样奖励分布相对于真实分布的方差 ,从而得到更稳定和有效的训练
      • 理解:这种 bootstrap 采样的方式更合适,看似能够较为精确的区分相应的优劣(错误的回复是以概率被赋值奖励为 0 的),但本质是一样的,还是所有正确的回复都是正奖励,错误的回复以一定概率获得0奖励 or 正奖励
    • 在相同的组数量 \(N^\text{group}\) 下
      • 与全采样相比(即“\(N_\text{rollout}=128\) 采用全采样”),bootstrap 采样在 Pass@k 指标上不会导致显著的性能下降,并且它只需要理论计算成本的四分之一,从而实现更高的训练效率
      • 此外,它在 Pass@1 指标上达到了与全采样相当的性能
    • 总之,带有 bootstrap 采样的 Pass@k Training 优于 Pass@1 Training ,并提高了全采样训练过程的效率
  • 图 4 不同 \(N_\text{rollout}\) 下 Pass@1 Training 和带有 Bootstrap 采样的 Pass@k Training 的训练进度
  • Takeaway from Section 2.3
    • 与基于全采样的 Pass@k Training 方法相比,基于 bootstrap 采样的训练方法在相同的 rollout 次数下可以获得更好的训练结果
    • 在相同的组数量下,它可以减少计算开销,同时达到相当的性能

Analytical Derivation(解析推导)of Efficient and Effective Pass@k Training

  • 基于第 2.3 节中描述的 bootstrap 采样机制的想法,论文推导了响应优势(即 \(\hat{A}_\text{pos}\) 和 \(\hat{A}_\text{neg}\))的解析解,以消除构建组时的采样操作带来的方差
    • 推导的细节在附录 B 中呈现
  • 为了推导出优势的解析公式,论文首先分析组的优势奖励和标准差,即 \(\bar{R}^\text{group}\) 和 \(\sigma^\text{group}\)
  • 包含至少一个正响应的组(称为正组)将被分配正奖励 \(R_\text{pos}\),而其他组(称为负组)将被赋予负奖励 \(R_\text{neg}\)
  • 遵循 DAPO 的优势估计方法,计算组奖励分数的平均值和标准差至关重要
  • 首先,组的平均奖励可以表述为以下方程:
    $$\overline{R}^\text{group}=\frac{1}{N_\text{total }^\text{group} } × \left( N_\text{pos}^\text{group } × R_\text{pos }+N_\text{neg }^\text{group } × R_\text{neg }\right) ,\tag{7}$$
    • \(N_\text{total}^\text{group}\) 指组的总数
    • \(N_\text{pos}^\text{group}\) 和 \(N_\text{neg}^\text{group}\) 分别表示正组和负组的数量
  • 为了计算正组和负组的数量,论文首先定义正响应的数量为 \(N_\text{pos}\),负响应的数量为 \(N_\text{neg}\),通常有:
    $$ N_\text{pos}+N_\text{neg}=N_\text{rollout}$$
  • 基于上述定义,由于每个组由选择的 \(k\) 个响应构成,我们可以得到组的总数 \(N_\text{total}^\text{group}\) 如下:
    $$N_\text{total }^\text{group }=\left(\begin{array}{c}N_\text{rollout } \\ k \end{array}\right) =N_\text{pos}^\text{group }+N_\text{neg }^\text{group } .\tag{8}$$
  • 由于负组不包含正响应,当且仅当从所有响应中随机采样 \(k\) 个负响应时,这些采样的响应才能构成负组。因此,负组的数量可以计算如下:
    $$N_\text{neg }^\text{group }=\left(\begin{array}{c} N_\text{neg } \\ k \end{array}\right) .\tag{9}$$
  • 根据方程 8 和方程 9,我们可以得到正组的数量:
    $$N_\text{pos }^\text{group}=N_\text{total}^\text{group}-N_\text{neg}^\text{group}=\left( \begin{array}{c}{N_\text{rollout} } \\ {k}\end{array} \right)-\left( \begin{array}{c}{N_\text{neg} } \\ {k}\end{array} \right) .\tag{10}$$
  • 将方程 8、方程 9 和方程 10 代入方程 7,我们可以得到组的平均奖励 \(\bar{R}^\text{group}\):
    $$\overline{R}^\text{group }=1-\frac{\left(\begin{array}{c} N_\text{neg } \\ k \end{array}\right)}{\left(\begin{array}{c} N_\text{rollout } \\ k \end{array}\right)} .\tag{11}$$
  • 基于组的平均奖励 \(\bar{R}^\text{group}\),标准差可以计算如下:
    $$\sigma ^\text{group}=\sqrt {\overline {R}^\text{group}× \left( 1-\overline {R}^\text{group}\right) } .\tag{12}$$
  • 基于奖励分数的平均值(方程 11)和标准差(方程 12),论文最终可以推导出正组 \(\hat{A}_\text{pos}^\text{group}\) 和负组 \(\hat{A}_\text{neg}^\text{group}\) 的优势如下:
    $$\hat{A}_\text{pos}^\text{group}=\frac{R_\text{pos}-\overline{R}^\text{group} }{\sigma^\text{group} }=\frac{1-\overline{R}^\text{group} }{\sigma^\text{group} }, \hat{A}_\text{neg}^\text{group}=\frac{R_\text{neg}-\overline{R}^\text{group} }{\sigma^\text{group} }=-\frac{\overline {R}^\text{group} }{\sigma ^\text{group} } .\tag{13}$$
  • 为了将前一节中获得的组相关优势 \(\hat{A}_\text{pos}^\text{group}\) 和 \(\hat{A}_\text{neg}^\text{group}\) 转换为响应相关优势 \(\hat{A}_\text{pos}\) 和 \(\hat{A}_\text{neg}\),论文需要考虑每个响应所属组的正确性,并按比例计算优势值
    • 通常,一个响应将属于 \(\left(\begin{array}{c}N_\text{rollout }-1 \\ k-1\end{array}\right)\) 个组,因为当且仅当从剩余的 \(N_\text{rollout}-1\) 个响应中选择 \(k-1\) 个响应时,才能与当前响应形成一个组
    • 此外,对于正响应,它所属的组总能通过 Pass@k 验证(即正组)
    • 因此,正响应的优势 \(\hat{A}_\text{pos}\) 可以计算如下:
      $$ \color{red}{\hat{A}_\text{pos }=\frac{1-\overline{R}^\text{group } }{\sigma^\text{group } } } .\tag{14}$$
  • 然后,考虑负响应,它所属的组是负组当且仅当其他 \(k-1\) 个响应都是负响应。在这种情况下,所需的组数量是 \(\left(\begin{array}{c}N_\text{neg }-1 \\ k-1\end{array}\right)\),即当前响应可以与从剩余的 \(N_\text{neg}-1\) 个负响应中选择的任何 \(k-1\) 个响应形成负组
    • 基于负组的数量,我们可以通过从组的总数中减去负组的数量来计算正组的数量,即 \(\left(\begin{array}{c}N_\text{rollout }-1 \\ k-1\end{array}\right)-\left(\begin{array}{c}N_\text{neg }-1 \\ k-1\end{array}\right)\)
    • 因此,负响应的优势 \(\hat{A}_\text{neg}\) 可以计算如下:
      $$ \color{red}{ \hat{A}_\text{neg}=\left(1-\overline{R}^\text{group }-\frac{\left(\begin{array}{c} N_\text{neg }-1 \\ k-1 \end{array}\right)}{\left(\begin{array}{c} N_\text{rollout }-1 \\ k-1 \end{array}\right)}\right) \times\left(\sigma^\text{group }\right)^{-1} }.\tag{15}$$
    • 问题:使用这种相对固定的(因为分母上存在方差,所以不算是严格的固定),比正样本小一些的奖励,是否等价于不给任何奖励啊?
  • 在获得响应相关优势 \(\hat{A}_\text{pos}\) 和 \(\hat{A}_\text{neg}\) 的解析解后,论文直接将它们用于优势估计过程,然后优化模型参数
    • 通过检查优势值的解析解,论文观察到它仅取决于采样响应的总数 \(N_\text{rollout}\)、正响应的数量 \(N_\text{pos}\)、负响应的数量 \(N_\text{neg}\) 以及 \(k\) 的值
    • 因此,在 rollout 过程之后,我们可以直接计算每个响应的优势值用于 RLVR 训练,而无需经过前面描述的繁琐奖励计算过程
    • 问题:这是否再次说明了,实际上随机挑选一部分负样本给与一定权重(权重可以是超参数)奖励就可以,不需要那么复杂做什么 Pass@k Training?
  • 实证见解:Pass@k 的进一步改进(Empirical Insight: Further Improvement on Pass@k) :
    • 为了进行评估和比较,论文将 rollout 次数 \(N_\text{rollout}\) 统一设置为 32,并比较了 Pass@1 Training 以及带有 bootstrap 采样和解析推导的 Pass@k Training 的训练效果
    • 实验结果如图 5 所示
    • 为了进行全面评估,论文还进行了不同 LLM 在各种任务上的外部实验,并在附录 E 中展示了结果
    • 在实验中,我们可以观察到两种 Pass@k Training 都比 Pass@1 Training 取得了更好的结果,这进一步证实了 Pass@k Training 的有效性
    • 当训练步骤增加时,基于 bootstrap 采样的 Pass@k Training 在 400 步时经历了相对剧烈的性能波动,Pass@k 性能下降,这表明该方法存在一定的不稳定性
      • 理解:不稳定的原因是因为采样,而使用带有解析推导的 Pass@k Training 则没有采样,会更稳定
    • 相比之下,对于基于 bootstrap 采样的方法,带有解析推导的 Pass@k Training 消除了构建组所需的采样过程
    • 它通过解析解的计算直接减少了采样过程引起的方差,从而提供了更稳定的训练过程
    • 因此,带有解析推导的 Pass@k Training 方法可以减少训练过程中的波动,并随着训练步骤的增加带来持续的性能提升
  • Takeaway from Section 2.4
    • 带有解析推导的 Pass@k Training 不仅避免了全采样中大量 rollout 带来的计算开销,还消除了 bootstrap 采样中采样引入的方差。这使得 RLVR 训练过程更高效和有效,并且可以引导模型的探索能力随着训练步骤的增加而不断提高

Balancing Exploration and Exploitation with Pass@k Training

  • 在本节中,论文进一步研究 Pass@k Training 的特征和有效性
  • 第 3.1 节:论文将 Pass@k Training 与常用的增强模型探索能力的方法(2025, 2025)进行比较,以进一步验证其有效性
  • 第 3.2 节:为了更深入理解 Pass@k Training 如何影响模型的探索能力,论文考察了模型响应的多样性和策略分布的熵
  • 第 3.3 节:论文想知道 Pass@k Training 带来的改进是否可以迁移到其他领域或任务中,进而评估其泛化性能
  • 第 3.4 节:由于 RLVR 的稳定性和鲁棒性受到广泛关注(2023, 2025, 2025),论文分析了 k 值对 Pass@k Training 过程的影响
  • 第 3.5 节:由于 Pass@1 在实际应用中是一个更重要的指标,论文探索了如何将 Pass@k Training 的收益迁移到模型的 Pass@1 性能上,实验结果证明了 Pass@k Training 的高实用价值

How does Pass@k Training Compare to Noise Rewards or Entropy Regularization?(Pass@k Training 与噪声奖励或熵正则化相比)

  • 受 Pass@k Training 流程(第 2.2 节)和先前工作(2025)的启发,论文将 Pass@k Training 与两种基线方法(即噪声奖励(Noise Rewards)和熵正则化(Entropy Regularization))进行了比较
  • 噪声奖励(Noise Rewards) :
    • 回顾利用 Pass@k 指标作为奖励的 RLVR 流程(如第 2.2 节所述),论文注意到,如果某些负响应属于正组,它们可能会获得正奖励 \(R_\text{pos}\)
      • 这引发了一个问题:Pass@k 分数的提升是否部分源于从这些带有反事实正奖励的负响应中学习
    • 为了探究这一点,论文进行了一项实验,其中一定比例(即 10%、30% 和 50%)的负响应奖励被翻转
    • 结果如图 6a 所示,实证结果表明:
      • 鼓励 LLM 从负响应中学习对提高其推理能力没有帮助 ,相反,在奖励中引入更高比例的噪声会显著降低模型性能
      • 随着翻转奖励比例的增加,模型在 Pass@1 和 Pass@k 指标上的性能均逐渐下降
      • 随着训练步骤的增加,性能继续下降
      • 理解:翻转的负样本得到的奖励太高,不行,应该给与较小的奖励才公平?
    • 这些发现表明,直接在奖励中加入噪声并不能增强 LLM 的推理能力
      • 相反,必须仔细控制噪声比例,例如通过 Pass@k 指标的结构化设计,这可以引导 LLM 突破其现有推理能力的限制
  • 熵正则化(Entropy Regularization) :
    • 大量研究(2025)指出,熵可以指示 LLM 的探索能力,并且可以纳入目标函数以保持其探索能力
    • 遵循先前的工作(2025),论文在 RLVR 训练过程中采用系数为 {0.001, 0.003, 0.005} 的熵正则化,并在图 6b 的右侧部分展示结果
    • 结果表名:
      • 高熵正则化系数可能导致模型崩溃(例如将系数设置为 0.005 时)
      • 尽管小的熵正则化系数不会使 LLM 崩溃,但它仍然无法优于 Pass@k Training,甚至会随着训练步骤的增加导致 LLM 的性能下降
    • 上述现象表明,熵正则化可能会影响训练的有效性和稳定性
  • 关于其他熵引导方法的讨论(Discussion about Other Entropy-guided Approaches) :
    • 论文比较了 Pass@k Training 与熵引导方法的朴素实现(即熵正则化)的有效性
    • 此外,还有其他几种方法,例如将熵集成到优势函数中(2025)或关注具有高协方差的 Token(2025)
    • 同样,这些方法可能会引入新的权衡:
      • 过于严格的约束可能导致欠拟合和模型训练不足,而过于宽松的约束可能导致训练过程中的不稳定性,潜在地影响训练有效性和模型性能(2023, 2025, 2025),因为熵与 Pass@1 指标相冲突
    • 因此,在上述方法中,应仔细选择超参数以带来 LLM 的性能提升
    • 实际上,这些方法与 Pass@k Training 是正交的 ,这意味着也可以将这些方法与 Pass@k Training 相结合以获得更好的训练结果
    • 为了验证这一点,论文在第 4.2.3 节中进行了实验,评估基于策略熵指导的 Pass@k Training 的有效性,结果显示有显著改进
  • Takeaway from Section 3.1
    • Pass@k Training 优于噪声奖励和熵正则化:随机翻转负响应的奖励可能会降低 LLM 的性能,而引入熵正则化会带来新的权衡问题,难以实现持续改进

Does Pass@k Training Really Improve the Exploration Ability of LLMs?(是否提高 LLM 的探索能力?)

  • 为了分析 RLVR 训练过程中 LLM 探索能力的变化,论文从答案多样性和策略分布熵的角度进行了相关实证研究,并在图 7 中展示了相应结果
  • 负响应的答案多样性(Answer Diversity of Negative Responses) :
    • 论文统计了 Pass@k 和 Pass@1 Training 的负响应中答案的准确性和不同答案的比例,如图 7a 所示,旨在评估 LLM 对不确定答案的探索能力
    • 根据结果,论文观察到在 RLVR 训练过程中,负响应的答案多样性保持在同一水平,这表明 LLM 在探索过程中试图选择“安全”的行为,并倾向于生成相似的答案,限制了探索范围并制约了 RLVR 的有效性
    • 不同的是,在 Pass@k Training 中,模型被鼓励获得更高的 Pass@k 分数,并在对问题没有足够信心时自然地学习生成多样化答案的策略
    • 在这种情况下,LLM 的探索能力得到增强,进而提高了其利用能力(即 Pass@1 分数)
  • 策略分布的熵(Entropy of Policy Distribution) :在图 7b 中,结果与论文之前关于答案多样性的讨论得出了相似的结论
    • Pass@k Training 将策略分布的熵保持在相对较高的水平,而 Pass@1 Training 导致熵收敛到较低的值
    • 这一现象表明,LLM 在 Pass@k Training 过程中能够保持其探索能力,但在 Pass@1 Training 过程中会丧失探索能力
    • 另一方面,论文还可以观察到,从 RLVR 过程的 200 步开始,Pass@k Training 导致熵增加。这一现象验证了论文的假设,即使用 Pass@k 作为训练目标可以鼓励模型进行更多探索,从而自然地增加熵
  • 总之,探索和利用并不相互冲突,它们可以相互促进,且Pass@k Training 能够实现这一目标
  • Takeaway from Section 3.2
    • Pass@k Training 可以鼓励模型进行更多探索,在模型没有足够信心生成正确答案时,生成多样化的答案,自然地导致熵的增加

hat is the Generalization Ability of LLMs After Pass@k Training?(泛化能力如何)

  • 为了分析 Pass@k Training 的泛化能力,论文进行了相应的实验,并在表 1 中展示了结果
  • 我们可以观察到,Pass@1 和 Pass@k Training 都能增强模型在域内和域外任务上的能力 ,这表明 RLVR 训练过程具有很强的泛化能力
  • 比较这两种训练方法的性能,通过 Pass@k Training 的模型优于通过 Pass@1 Training 的模型 ,其原因是:
    • Pass@k Training 鼓励模型探索更好的解决方案,这些解决方案可以很容易地泛化到其他任务
    • Pass@1 Training 使 LLM 行为保守,从而影响 LLM 的域外(OOD)性能
  • Takeaway from Section 3.3
    • Pass@k Training 比 Pass@1 Training 表现出更强的泛化能力,在域内和域外测试中都比基础模型有更大的改进

How does the Value of k Affect Pass@k Training?(k 值对 Pass@k Training 的影响)

  • 为了分析 Pass@k Training 的鲁棒性,论文将 k 值调整为 4、8、16,在迷宫(Maze)任务上进行 RLVR 训练,并分别在图 8a 和图 8b 中展示训练奖励和测试集的 Pass@k 性能
    • 无论 k 值如何,随着训练的进行,训练奖励都能提高到相对较高的水平,这表明 k 值并不是帮助 LLM 摆脱 Pass@1 Training 局部最优的关键因素
    • 随着 k 值的增加,改进速度减慢,影响训练效率
    • 通过分析优势值的解析解(即公式 14 和公式 15),我们可以意识到,更大的 k 值会带来更小的优势值 ,导致更短的优化步骤,从而降低训练效率
  • 基于这一现象,论文研究了缩放学习率(LR)以扩大优化步骤是否能提高训练效率
    • 基于这一想法,论文在 \(N=32\) 和 \(k=8\) 的设置下采用 \(1×10^{-6}\)、\(2×10^{-6}\)、\(4×10^{-6}\) 的学习率,并在图 8c 和图 8d 中展示结果
    • 随着学习率的增加,拐点出现得更早,表明训练效率更高
    • 当论文采用 \(4×10^{-6}\) 作为学习率时,Pass@8 训练的训练效率甚至超过了 Pass@4 训练
    • 这些结果表明,训练效率问题可以很容易地得到缓解
  • Takeaway from Section 3.4
    • Pass@k Training 对 k 值的选择具有很强的鲁棒性,能够实现稳定且有效的训练过程
    • 尽管随着 k 值的增加,模型的优化效率会有所下降,但这一问题可以通过增大学习率轻松解决

Can the Benefits from Pass@k Training Be Transferred to Pass@1 Performance?(将 Pass@k Training 的收益迁移到 Pass@1 上?)

  • 为了将 Pass@k Training 带来的收益迁移到 LLM 的 Pass@1 性能上,一种自然的实现方式是在经过 Pass@k Training 的模型上继续进行 Pass@1 Training
  • 论文在 RLVR 训练过程中采用了这种方法,并分别在表 2 和表 3 中展示了 Qwen 模型在谜题(Puzzle)任务上以及 Seed1.5-VL-Small(内部版本)在多模态推理任务上的结果
  • 为了进行全面评估,论文还在附录 E 中进行了不同 LLM 在 Enigmata 和数学任务(例如,AIME 2024和 AIME 2025)上的外部实验
  • 第一,在 Pass@k Training 之后进行 Pass@1 Training 可以显著提高 LLM 的推理能力,实现显著的 Pass@1 性能
    • 根据结果,我们可以观察到,即使是 7B 模型也能超越强大的闭源 LLM,包括 Grok-2、GPT-4o 和 Claude-3.7-Sonnet
    • 这可能是因为 Pass@k Training 增强了 LLM 的探索能力,引导其摆脱局部最优,并在后续的 RLVR 训练中释放 LLM 的潜力
  • 第二,无论是小规模还是大规模的 LLM(例如,具有 7B 或 32B 参数的 Qwen2.5)都能从 Pass@k Training 中受益
    • 此外,模型架构和模型系列不会影响持续 Pass@1 Training 的改进。Qwen 模型是密集型模型,而 Seed1.5-VL-Small(内部版本)是 MoE 模型
    • 它们的 Pass@1 性能在 Pass@k Training 后都能进一步提高
  • 第三,下游任务的领域和形式也不会影响 LLM 的 Pass@k 性能到其 Pass@1 性能的迁移
    • 论文的评估包括用自然语言表达的合成谜题任务,以及问题描述中包含图片的多模态推理任务
    • 这些任务要求 LLM 具备不同类别的能力,而论文的 Pass@k Training 可以有针对性地增强相应的能力,表现出很强的有效性
  • Takeaway from Section 3.5
    • Pass@k Training 带来的收益可以迁移到 LLM 的 Pass@1 性能上,这不受模型参数规模(例如,7B 或 32B)、模型架构(例如,密集型模型或 MoE 模型)、模型系列(即 Qwen 模型或 Seed 模型)或下游任务(自然语言任务或多模态任务)的影响

Generalizing Pass@k Training via Implicit Reward Design(隐式奖励设计推广 Pass@k Training)

  • 如第2节 所述,论文通过推导优势函数的解析形式,实现了高效且有效的 Pass@k Training
  • 在本节中,论文将从优势函数的角度进一步探究 Pass@k Training 成功的关键因素(4.1节)
  • 优势函数设计可被视为一种隐式奖励设计,受此启发,论文将探索在难以从奖励函数推导出解析解的场景下,如何基于优化目标直接设计优势函数(4.2节)

Difference Between Pass@1 and Pass@k Training

Analysis Based on Advantage Value Curves
  • 为了分析 Pass@k Training 为何能帮助 LLM 摆脱局部最优,论文首先可视化了 Pass@1 Training 和 Pass@k Training 在不同正确性水平响应上的优势曲线
    • 在 GRPO 及其变体中,优势值仅取决于模型响应的正确性
    • 在优化过程中,优势值直接与梯度相乘,可被解释为梯度的缩放因子
    • 在这种情况下,优势值的绝对值越大,意味着梯度的缩放程度越大,相应样本的更新步长也就越大
    • 这表明模型会对优势值绝对值较大的样本投入更多的优化精力
  • 作者认为优势值的绝对值也是一个值得研究的重要方面
  • 基于这一见解,为简化分析,论文计算了所有响应的绝对优势值之和\(\eta\) ,定义如下:
    $$
    \eta = N_\text{pos} \times \left|\hat{A}_\text{pos}\right| + N_\text{neg} \times \left|\hat{A}_\text{neg}\right|,
    $$
  • 论文将 \(\eta\) 的曲线(称为绝对优势之和(Sum of Absolute Advantage))添加到可视化中,并展示在图9中
  • 对比 Pass@1 Training 和 Pass@k Training 的 \(\eta\) 曲线,论文发现存在三个主要差异
    • 绝对优势之和的最大值 :
      • Pass@1 Training 方法的 \(\eta\) 最大值远高于 Pass@k Training 方法
      • 正如论文在3.4节中讨论的,最大优势值可能会影响训练效率,通过在损失函数上添加系数来调整优势值可以缓解这一问题
      • 因此,最大值并非 Pass@k Training 优于 Pass@1 Training 的关键因素
    • 绝对优势之和的 argmax :
      • 根据图9中的曲线,Pass@1 Training 和 Pass@8 Training 的 \(\eta\) 的 argmax 存在显著差异
        • 对于 Pass@1 Training,\(\eta\) 的最大值出现在正确率为 50% 的位置(即 \(N_\text{pos} = 0.5 \times N_\text{rollout}\))
        • 对于 Pass@8 Training,最大值的位置为**正确率 25%**(即 \(N_\text{pos} = 0.25 \times N_\text{rollout}\))
      • 这一现象表明,Pass@k Training 侧重于优化更难的问题,而 Pass@1 Training 则侧重于中等难度的问题
        • 理解:因为优势函数是权重,权重越高的问题,模型就更侧重他们 \(\eta\) 的 argmax 则表明了模型在关注哪部分问题
      • 这进一步证明,Pass@k Training 倾向于引导模型解决先前未解决的或困难的问题,而不是过拟合于已经掌握的问题
    • 绝对优势之和的趋势 :
      • Pass@1 Training 和 Pass@k Training 的函数曲线之间的另一个关键差异在于函数本身的趋势
      • 在 Pass@k Training 的\(\eta\)曲线中,其值先上升至峰值,然后逐渐下降至零
      • 在这种设置下,当问题相对容易时(即正确率高于60%),模型施加的优化强度(由\(\eta\)的值表示)会小于对更难问题的优化强度
      • 这进一步表明, Pass@k Training 更注重优化模型尚未掌握的问题
      • 相比之下,在 Pass@1 Training 中,\(\eta\)曲线关于最大值点对称,表明训练过程对简单问题和困难问题给予同等关注
Analysis Based on Model Performance
  • 正如论文在前面章节中讨论的,绝对优势之和 \(\eta\) 的 argmax 和趋势对模型性能的影响仍不明确
  • 因此,在本节中,论文设计了相应的实验,基于模型性能来分析它们的有效性
  • 此外,论文设计了两种介于 Pass@1 和 Pass@k Training 之间的训练方法,即移除简单问题的优势值,以及基于当前提示的正确率结合 Pass@1 和 Pass@k 的优势估计方法
  • 这四种训练方法的 \(\hat{A}_\text{pos}\)、\(\hat{A}_\text{neg}\) 和 \(\eta\) 的曲线如图18a和图18b所示
  • 第一,当响应的正确率较高时,论文设计优势函数逐渐减小至零
    • 这种设置使得优化过程中的训练奖励能够稳步增加,表明模型避免陷入局部最优(即蓝线和紫线)
    • 当移除这种优化时,训练集上的奖励无法继续增加,这表明模型已经收敛到局部最优,并且在RLVR过程中不再学习新知识(即红线和绿线)
    • 这一现象表明,过度从简单示例中学习是导致模型陷入局部最优的关键因素
    • 因此,减少对简单问题的学习程度有助于防止模型陷入此类次优解
  • 第二,简单地将简单问题的奖励设置为零并不足以有效防止模型对其过度优化;这只是延迟了模型陷入局部最优的时间点
    • 如图10所示,移除对简单问题的优化(以红线表示)比基线(以绿线表示)带来了更高的训练奖励和更好的测试性能
    • 然而,两条曲线呈现出相似的趋势:在初始阶段的改进之后,模型性能逐渐趋于平稳,难以取得进一步进展
  • 第三,关于 \(\eta\) 函数的 argmax 位置的选择 ,对比图10中的曲线可以发现,将 argmax 向前移动会带来更高的优化效率
    • 具体而言,模型能够更快地摆脱局部最优,并且训练奖励的转折点出现得更早
    • 这一现象表明,困难问题对模型改进的贡献更大,并且能产生更好的优化效果
    • 因此,为更难的问题分配更大的优化强度可以有效提高训练效率,使模型用更少的训练步骤达到更好的性能
  • 基于上述结果和讨论,可以得出一些初步结论,即 \(\eta\) 的 argmax 会影响训练效率,而 \(\eta\) 的趋势会防止模型陷入局部最优
    • 此外,需要注意的是,这只是论文的初步结论。需要针对特定任务和场景进行更全面的实验以进一步验证
  • Takeaway from Section 4.1 :
    • 在 RLVR 训练过程中,简单问题很容易导致过拟合
    • 适当地降低对简单问题的优化强度,有助于防止模型陷入局部最优,从而获得更好的整体性能

RLVR Training Through Implicit Reward Design

  • 基于前一节对优势值曲线特性的分析,论文在本节中探索对优势函数的初步修改,即隐式奖励设计
  • 论文的目标是探索隐式奖励设计的潜力,并为未来的研究提出几个有前景的方向
Exceeding Pass@k Training
  • 在之前的讨论中,论文发现 \(\eta\) 函数的最大值位置会影响训练目标(侧重于 Pass@1 还是 Pass@k)
  • 基于这些观察和结论,论文假设\(\eta\)函数的峰值出现得越早, Pass@k Training 的优化性能就越好
  • 为了验证这一假设,论文设计了一个转换函数如下:
    $$
    f\left(N_\text{pos}\right) = \frac{4}{10 \log \left(N_\text{pos} + 0.5\right)}, \hat{A}’ = f\left(N_\text{pos}\right) \times \hat{A}.
    $$
  • 应用转换函数后的优势值曲线如图18c所示
  • 论文观察到,在转换后的曲线中,\(\eta\) 函数的峰值向前移动到正确率为 \(\frac{1}{32}\) 的位置,根据论文的假设,这种优势函数的修改有望为 Pass@k Training 带来更好的优化性能
  • 论文将这种转换函数集成到 RLVR 训练过程中(称为超越 Pass@k Training (Exceeding Pass@k Training)),相应的训练结果如图 11 所示
  • 从实验结果中,论文观察到超越 Pass@k Training 能够在训练早期有效提高模型的 Pass@k 性能
    • 但由于这种方法过分强调困难问题,下游任务的 Pass@1 性能改进进展较为缓慢
  • 基于这些观察和分析,论文假设可以根据模型的当前状态自适应地调整优势值的计算(论文将其留作未来的研究方向)
Combination of Pass@1 and Pass@k Training
  • 从之前的分析中,论文观察到 Pass@k Training 更注重优化更难的问题,并防止模型过拟合于简单问题
  • 受此观察启发,论文考虑将 Pass@1 Training 和 Pass@k Training 结合起来是否有益
  • 因此,论文设计了以下公式来估计最终的优势值:
    $$
    \hat{A} = \frac{N_\text{pos} }{N} \times \hat{A}_{Pass@k} + \left(1 - \frac{N_\text{pos} }{N}\right) \times \hat{A}_{Pass@1}, \tag{18}
    $$
    • 其中,\(\hat{A}_{Pass@k}\) 和 \(\hat{A}_{Pass@1}\) 分别表示通过 Pass@k 和 Pass@1 Training 方法估计的优势值
  • 在上述公式(称为组合训练(Combination Training))中
    • 当采样响应的正确率较低时,来自 Pass@1 Training 的优势值会被赋予更高的权重并主导训练过程,从而带来较高的训练效率
    • 当采样响应的正确率较高时,来自 Pass@k Training 的优势值会被赋予更大的权重,从而避免大语言模型过拟合于已经掌握的问题
  • 在图12 中,论文展示了 Qwen 系列模型在 Enigmata 基准上的训练结果
  • 论文观察到,对于 Pass@ 和 Pass@8 指标,通过组合训练得到的模型始终优于通过标准 Pass@k Training 得到的模型
  • 在组合训练过程中,模型性能提升迅速,并保持较高的增长率,相比之下, Pass@k Training 导致性能提升较慢
    • 这是因为:
      • 1)困难问题需要模型进行大量探索才能有效学习,因此难以快速改进
      • 2)简单问题在训练过程中获得较低但足够的优化强度
    • 以上这两个因素共同导致 Pass@k Training 的优化效率低于组合训练
  • 上述分析进一步支持了基于模型当前状态调整优势函数可以有效提升模型性能的观点
Adaptive Training based on Policy Entropy
  • 基于前一节的见解,论文探索是否可以在整个 RLVR 过程中自适应地调整训练目标
  • 如先前的工作(2025)所讨论的,策略分布的熵可以指示其探索能力
  • 论文进行了基于策略熵指导的 Pass@k Training (称为自适应训练(Adaptive Training))
  • 具体而言,论文首先计算每个问题的采样响应的平均熵 \(\bar{E}\),然后根据 \(\bar{E}\) 对每个问题进行排序
  • 论文将前 50% 指定为高探索问题,其余为低探索问题
    • 对于高探索问题,论文使用 Pass@1 优势函数来帮助模型利用先前的探索成果
    • 对于低探索问题,论文应用 Pass@k 优势函数来鼓励进一步探索
    • 这种方法利用策略熵来指导优势计算,使论文能够结合不同训练策略的优势
  • 论文在图13 中展示了实验结果
  • 图13 的实验结果表明:
    • 在自适应训练下,模型在 Pass@1 和 Pass@k 性能上都取得了有效的提升,优于 Pass@1 Training 和 Pass@k Training
      • 这表明 Pass@1 Training 和 Pass@k Training 是互补的
    • 通过设计适当的适应机制,有可能更好地利用两种训练方法的优势,使模型在下游任务上取得更好的性能
    • 这也证实了策略分布的熵可以作为模型探索能力的指标,并且与 Pass@k Training 能够很好地结合
    • 使用熵作为监控信号来调整 RLVR 训练比直接将其用作训练目标能产生更好的结果
  • Takeaway from Section 4.2 :
    • 隐式奖励设计可以更好地控制优化过程,避免复杂的理论推导
    • 具体而言,增加对更困难问题的优化强度可以有效提升模型解决这些问题的能力(即 Pass@k 性能),而结合或动态调整不同形式的优势估计可以同时提升探索和利用能力

Related Work

Reinforcement Learning with Verifiable Rewards

  • 为了释放 LLM 的推理能力,DeepSeek 直接在 DeepSeek-V3 上采用 RLVR ,得到了大型推理模型 DeepSeek-R1-Zero(2025),该模型能够执行具有复杂推理动作(如反思和验证)的推理过程
  • 鉴于 DeepSeek-R1 的成功,大量研究(2025;)探索了 RLVR 在流行的开源大语言模型上的有效性,如 Qwen(2024)、Mistral(2023)和 LLaMA(2024)
  • 此外,RLVR 训练范式可以帮助大语言模型控制其推理时间(2025)、切换推理模式(2025;)、增强特定性能指标(2025),以及在无监督的情况下提升自身能力(2025;)
  • 然而,最近的研究指出,流行的 RLVR 算法(如 PPO(2017)和 GRPO(2024))仍然面临严峻挑战,如训练不稳定性、模型崩溃和奖励噪声(2025;)
  • 为了缓解这些问题,现有研究提出了对采样策略(2025)、目标函数设计(2025;)和数据选择(2025)的优化
  • 具体而言,先前的工作(2025)将 Pass@k 用作策略梯度算法(1992)的奖励,以鼓励模型解决更难的问题
  • 然而,Pass@k RLVR 训练与大语言模型探索能力之间的内在联系尚未得到充分认识
  • 论文通过三种方法(图5)在 GRPO 及其变体中进一步采用 Pass@k 指标,并推导了 RLVR 训练中 Pass@k 奖励的优势值解析解
  • 此外,根据实证实验和理论分析,论文讨论了 Pass@k Training 在平衡大语言模型 RLVR 训练过程中的探索和利用能力方面的益处,展示了 Pass@k RLVR 训练的巨大潜力,并指出了未来有前景的研究方向
Effective Exploration in Test-time Scaling
  • 最近,测试时扩展被提出,它旨在通过在推理时消耗更多计算资源来提高大语言模型的性能(2025)
  • 由于大语言模型不断利用探索获得的经验来优化其性能,因此在测试时扩展过程中,有效的探索是重要且必要的(2025;2025)
  • 但现有工作表明,探索能力受到相应基础模型的限制,阻碍了模型性能的持续扩展(2025)
  • 为了缓解这一问题,先前的工作提出了几种方法,包括
    • 通过调整采样超参数(2025;2025;2025)
    • 执行自我验证和自我反思(2025;2025;2025)
    • 利用外部模型验证推理过程(2025;2025)
  • 除了从模型外部角度出发的这些方法外,通过模型内部机制探索其探索能力也同样重要
  • 当前研究从策略分布的熵的角度出发,指出熵可以指示大语言模型的探索能力(2025;2025),并且高熵 token 对模型优化至关重要(2025)
  • 基于这些发现,在 RLVR 训练过程中采用了训练关键 token(2025)和添加正则化(2025;2025)的方法,以避免大语言模型探索能力的下降
  • 此外,一些研究专注于通过选择有用的采样经验(2025;2025)、将熵集成到优势估计中(2025)来增强大语言模型的探索能力

附录 A:Experiment Setup

A.1 Details of Downstream Tasks

  • 本节介绍每个下游评估任务的详细信息
  • 迷宫(Maze)
    • 论文遵循先前工作提出的框架来合成不同大小的迷宫
    • 每个迷宫用文本表示,包含 n 行 n 列,共 n×n 个字符。具体来说,每个字符是以下四种之一:“S”“E”“*”和“.”,分别表示起点、终点、可通行区域和不可通行区域
    • 给定迷宫,LLM 可以先生成思路或推理过程,然后生成最终答案,包括“U”“D”“L”“R”四种动作之一,分别表示向上、向下、向左、向右移动
    • 对于训练数据,论文构建了 9×9、11×11、13×13 和 15×15 大小的迷宫,以增加训练数据的多样性
    • 对于测试数据,为了评估 RLVR 过程的泛化能力,论文不仅使用与训练数据集相同大小的迷宫,还收集了 7×7、17×17、19×19 和 21×21 大小的迷宫
    • 为确保实验的有效性,论文在生成训练和测试数据后进行了严格的去重操作
    • 数据集的统计信息如表4所示
    • 为了更清晰地呈现实证见解,论文在上述正文中只展示了 9×9 迷宫的结果,其余结果在附录E.3中呈现
  • Enigmata
    • 为评估大语言模型的推理和逻辑能力,Enigmata 提出了一个综合基准,包括 36 类合成可验证谜题,分属 7 个主要类别,包括密码谜题(Crypto Puzzle)、算术谜题(Arithmetic Puzzle)、逻辑谜题(Logic Puzzle)、网格谜题(Grid Puzzle)、图形谜题(Graph Puzzle)、搜索谜题(Search Puzzle)和序列谜题(Sequential Puzzle)
    • 每个类别都能评估大语言模型的不同能力
    • 为便于理解,论文在图15 中展示了一个测试实例
  • MathVision
    • MathVision 从人类数学竞赛中选取了 3,040 道高质量题目,每道题都附有相关图像
    • 解决这些问题需要仔细解读视觉信息和严谨的数学推理
    • MathVision 为评估模型的多模态理解能力以及严谨的数学推理能力提供了基准
    • 为便于理解,论文在图16 中展示了一个测试实例
  • MMMU
    • MMMU 包括六个学科的大学水平推理和理解任务,包括艺术与设计(Art & Design)、商业(Business)、科学(Science)、健康与医学(Health & Medicine)、人文与社会科学(Humanities & Social Science)以及技术与工程(Tech & Engineering)
    • 此外,MMMU 包含多种图像类型,能够全面评估模型处理和推理不同形式视觉信息的能力
    • 为便于理解,论文在图17中展示了一个测试实例
A.2 Implementation Details
  • 训练(Training)
    • 在论文的实验中,论文采用 Qwen2.5-7B-Instruct 和 Qwen2.5-32B-Instruct 作为骨干模型,并通过 DAPO 进行训练
    • 为提高训练过程的效率,论文只保留 clip-higher(即 \(\varepsilon_{low}=0.2\) 和 \(\varepsilon_{high}=0.28\))和 token-lebel 策略梯度损失,移除其他优化
    • 对于训练超参数,论文将策略模型的学习率设置为 \(1×10^{-6}\),预热步骤为10步,并分别采用 128、32 和 32 作为提示批大小 \(BS_{prompt}=128\)、小批大小 \(BS_{mini}=32\) 和 采样次数 \(n_\text{rollout}=32\)
    • 对于奖励,通过验证的响应(称为正响应)被赋予正奖励\(R_\text{pos}=1\),其他响应(称为负响应)被赋予负奖励\(R_\text{neg}=0\)
    • 论文不采用任何正则化方法,如 KL 或 熵正则化
  • Evaluation
    • 为评估大语言模型的性能,论文采用 temperature= 1.0 和 top_p=0.95
    • 对于每个问题,论文为迷宫任务从大语言模型中采样 32 个响应,为其他任务采样 8 个响应,然后利用采样的响应计算 Pass@1 和 Pass@k 分数

附录 B:Details of Analytical Derivation(解析推导)

  • 论文在2.4节中提到了解析推导过程的细节,包括组奖励的平均值、组奖励的标准差以及响应相关优势的推导

B.1 Derivation of the Average of Group Reward

$$
\begin{aligned}
\overline{R}^\text{group} &= \frac{1}{N_\text{total}^\text{group} } \times \left(N_\text{pos}^\text{group} \times R_\text{pos} + N_\text{neg}^\text{group} \times R_\text{neg}\right) \\
&= \frac{1}{\binom{N_\text{rollout} }{K} } \times \left( \left( \binom{N_\text{rollout} }{K} - \binom{N_\text{neg} }{K} \right) \times 1 + \binom{N_\text{neg} }{K} \times 0 \right) \\
&= 1 - \frac{\binom{N_\text{neg} }{K} }{\binom{N_\text{rollout} }{K} }.
\end{aligned}
$$

B.2 Derivation of the Standard Deviation of Group Reward

$$
\begin{aligned}
\sigma^\text{group} &= \sqrt{ \frac{1}{N_\text{total}^\text{group} } \left( N_\text{pos}^\text{group} \times \left(1 - \overline{R}^\text{group}\right)^2 + N_\text{neg}^\text{group} \times \left(0 - \overline{R}^\text{group}\right)^2 \right) } \\
&= \sqrt{ \overline{R}^\text{group} \times \left(1 - \overline{R}^\text{group}\right) }.
\end{aligned}
$$

B.3 Derivation of the Response-Relative Advantage

$$
\begin{aligned}
\hat{A}_\text{pos} &= \frac{1}{\binom{N_\text{rollout}-1}{K-1} } \times \left( \binom{N_\text{rollout}-1}{K-1} \times \hat{A}_\text{pos}^\text{group} + 0 \times \hat{A}_\text{neg}^\text{group} \right) \\
&= \frac{1 - \overline{R}^\text{group} }{\sigma^\text{group} }.
\end{aligned}
$$

$$
\begin{aligned}
\hat{A}_\text{neg} &= \frac{1}{\binom{N_\text{rollout}-1}{K-1} } \times \left( \left( \binom{N_\text{rollout}-1}{K-1} - \binom{N_\text{neg}-1}{K-1} \right) \times \hat{A}_\text{pos}^\text{group} + \binom{N_\text{neg}-1}{K-1} \times \hat{A}_\text{neg}^\text{group} \right) \\
&= \left( 1 - \frac{\binom{N_\text{neg}-1}{K-1} }{\binom{N_\text{rollout}-1}{K-1} } \right) \times \frac{1 - \overline{R}^\text{group} }{\sigma^\text{group} } + \frac{\binom{N_\text{neg}-1}{K-1} }{\binom{N_\text{rollout}-1}{K-1} } \times \left( -\frac{\overline{R}^\text{group} }{\sigma^\text{group} } \right) \\
&= \left( 1 - \overline{R}^\text{group} - \frac{\binom{N_\text{neg}-1}{K-1} }{\binom{N_\text{rollout}-1}{K-1} } \right) \times \left( \sigma^\text{group} \right)^{-1}.
\end{aligned}
$$


附录 C: Pass@k Training 的伪代码(Pseudo Code for Pass@k Training)

  • 论文给出了全采样(Algorithm 1)、bootstrap采样(Algorithm 2)和解析推导(Algorithm 3)的 Pass@k Training 伪代码

    算法1:全采样的 Pass@k Training 伪代码

  • 伪代码:
  • 具体步骤:
    • 输入:问题响应的奖励张量\(R \in \mathbb{R}^{N_\text{rollout} }\)、采样响应数量\(N_\text{rollout}\)以及Pass@k指标中的k
    • 输出:该问题响应的估计优势张量\(\hat{A} \in \mathbb{R}^{N_\text{rollout} }\)
    • 1 # 构建组并丢弃冗余实例
    • 2 将\(R \in \mathbb{R}^{N_\text{rollout} }\)分成\(\left\lfloor \frac{N_\text{rollout} }{K} \right\rfloor\)个组,每个组包含k个实例
    • 3 使用公式5计算组的奖励\(R^\text{group} \in \mathbb{R}^{\left\lfloor \frac{N_\text{rollout} }{K} \right\rfloor}\)
    • 4 # 遵循GRPO优势估计方法计算组相关优势
    • 5 使用公式1计算组的平均奖励\(\bar{R}^\text{group}\)
    • 6 使用公式2计算组的标准差\(\sigma^\text{group}\)
    • 7 基于\(\bar{R}^\text{group}\)和\(\sigma^\text{group}\),使用公式3计算组相关优势\(\hat{A}^\text{group}\)
    • 8 # 计算响应相关优势
    • 9 将\(\hat{A}^\text{group}\)分配给组所包含的响应,得到响应相关优势A

算法2:bootstrap采样的 Pass@k Training 伪代码

  • 伪代码:
  • 具体步骤:
    • 输入:问题响应的奖励张量\(R \in \mathbb{R}^{N_\text{rollout} }\)、采样响应数量\(N_\text{rollout}\)以及Pass@k指标中的k
    • 输出:该问题响应的估计优势张量\(\hat{A} \in \mathbb{R}^{N_\text{rollout} }\)
    • 1 # 通过bootstrap采样构建组
    • 2 对于i从1到\(N^\text{group}\):
    • 3 从R中随机采样k个实例构建第i个组
    • 4 使用公式5计算第i个组的奖励
    • 5 得到组的奖励\(R^\text{group} \in \mathbb{R}^{N^\text{group} }\)
    • 6 # 遵循GRPO优势估计方法计算组相关优势
    • 7 使用公式1计算组的平均奖励\(\bar{R}^\text{group}\)
    • 8 使用公式2计算组的标准差\(\sigma^\text{group}\)
    • 9 基于\(\bar{R}^\text{group}\)和\(\sigma^\text{group}\),使用公式3计算组相关优势\(\hat{A}^\text{group}\)
    • 10 # 计算响应相关优势
    • 11 基于\(\hat{A}^\text{group}\),使用公式6计算响应相关优势A

算法3:解析推导的 Pass@k Training 伪代码

  • 伪代码:
  • 具体步骤:
    • 输入:问题响应的奖励张量\(R \in \mathbb{R}^{N_\text{rollout} }\)、采样响应数量\(N_\text{rollout}\)以及Pass@k指标中的k
    • 输出:该问题响应的估计优势张量\(\hat{A} \in \mathbb{R}^{N_\text{rollout} }\)
    • 1 # 计算组奖励分数的平均值和标准差
    • 2 使用公式11计算组的平均奖励\(\bar{R}^\text{group}\)
    • 3 使用公式12计算组的标准差\(\sigma^\text{group}\)
    • 4 # 计算响应相关优势
    • 5 使用公式14计算正响应的优势\(\hat{A}_\text{pos}\)
    • 6 使用公式15计算负响应的优势\(\hat{A}_\text{neg}\)
    • 7 基于\(\hat{A}_\text{pos}\)、\(\hat{A}_\text{neg}\)和R,为每个实例分配优势,得到响应相关优势A

附录 D:Curves of Advantage Function

  • 论文在图18中展示了不同训练方法的优势函数曲线,包括无简单问题的 Pass@k Training (Pass@k Training w/o easy problems)、带组合的 Pass@k Training (Pass@k Training w/ combination)、超越 Pass@k Training (Exceeding Pass@k Training)和组合训练(Combination Training)

附录 E:Experiments on Various LLMs and Tasks

  • 在本节中,为进一步验证 Pass@k Training 的有效性,论文提供了通过 Pass@k Training 的各种大语言模型在数学任务(即AIME 2024、AIME 2025和OlymMATH(2025))和合成谜题任务(即Enigmata(2025))上的性能

E.1 数学任务上的 Pass@k Training (Pass@k Training on Mathematical Tasks)

  • 论文遵循附录A.2 中描述的实验设置,在 LLaMA 模型(2024)(即 LLaMA3.2-3B-Instruct 和 LLaMA3.1-8B-Instruct)和DeepSeek-R1-Distill-Qwen(2025)(即1.5B和7B版本)上进行 Pass@k Training
  • 对于LLaMA模型,论文将最大提示长度和响应长度分别设置为 2048 和 6144
  • 对于DeepSeek-R1-Distill-Qwen,论文将响应长度扩展到 10240
  • 具体而言,为使大语言模型适应数学任务,论文在 RLVR 训练过程中采用了先前工作(2025)中使用的训练数据
  • 此外,论文遵循附录A.2中的设置进行评估,结果如表5 所示
  • 由于单轮 Pass@k Training 后再进行 Pass@1 Training 可以显著提高大语言模型的Pass@1性能,论文在表5 中进行了上述训练过程多轮的实验,称为“(P@k T. + P@1 T.) × 2”

E.2 Enigmata任务上的 Pass@k Training (Pass@k Training on Enigmata Task)

  • 论文遵循附录A.2 中描述的实验设置,在各种大语言模型(即 LLaMA3.2-3B-Instruct(2024)和 LLaMA3.1-8B-Instruct(2024))上进行 Pass@k Training ,并将最大提示长度和响应长度都设置为 4096
  • 结果如表6所示(对于评估,论文遵循附录A.2中描述的设置)

E.3 迷宫任务上的 Pass@k Training (Pass@k Training on Maze Task)

  • 在本部分中,论文在表7中展示了 Pass@k Training 在迷宫任务上的完整结果
  • 没有任何 RLVR 训练时,模型很难解决迷宫任务,因此,论文没有报告骨干模型的性能
1…949596…352
San Ye

San Ye

Stay Hungry. Stay Foolish.

704 posts
53 tags
© 2026 San Ye
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4