跳转至
标签: 强化学习LLM

1. 背景与动机

在大语言模型(LLM)的后训练阶段,常用方法是 RLHF (Reinforcement Learning with Human Feedback)。其中 PPO (Proximal Policy Optimization) 被广泛使用(如 InstructGPT、ChatGPT)。 然而,PPO 存在以下问题:

  • 训练不稳定:奖励模型噪声较大,容易导致 collapse 或奖励 hacking。
  • 样本效率低:LLM 每次采样成本高,而 PPO 在收集 trajectories 时利用不足。
  • 对比性弱:奖励模型提供的信号常常绝对化,无法刻画相对偏好。

为解决这些问题,提出了 GRPO (Group Relative Policy Optimization)。 它的核心思想是:利用相对比较(preference)而非绝对奖励值,构造组内归一化的优势函数,提升训练稳定性和样本效率。

2. 技术原理与数理表达

2.1 算法思想

  • 将候选生成结果按组(group)进行比较。
  • 通过组内排序或相对奖励差异来构造 优势函数 A
  • 策略更新时不依赖单一奖励模型输出,而是依赖 相对偏好分布

2.2 数学定义

设策略 \(\pi_\theta(y|x)\) 生成文本 \(y\),输入为 \(x\)。 奖励模型给出得分 \(r(y|x)\)

在 GRPO 中,对于同一提示 \(x\),生成一组候选 \({y_1, y_2, \dots, y_K}\),形成 group \(G\)。 定义归一化相对优势:

\[ A(y_i) = \frac{r(y_i) - \mu_G}{\sigma_G + \epsilon} \]

其中 \(\mu_G, \sigma_G\) 分别是组内均值和标准差。

策略优化目标为:

\[ L^{GRPO}(\theta) = \mathbb{E}_{x,G}\left[ \sum_{y_i \in G} \min \left( \rho_\theta(y_i) A(y_i), \; \text{clip}(\rho_\theta(y_i), 1-\epsilon, 1+\epsilon) A(y_i) \right) \right] \]

其中

  • \(\rho_\theta(y_i) = \frac{\pi_\theta(y_i|x)}{\pi_{\theta_{\text{old}}}(y_i|x)}\) 是重要性采样比。
  • 类似 PPO,引入 clip 防止更新过大。
  • 与 PPO 不同的是,优势函数来源于 组内相对奖励

2.3 直观理解

  • PPO:依赖单个样本的绝对奖励,噪声大。
  • GRPO:依赖一组样本的相对奖励,减少了奖励模型误差影响。

3. 与 PPO / TRPO 的对比

特性 TRPO PPO GRPO
策略约束 KL约束,保证单步收敛性 Clipping 近似约束 Clipping + Group 相对奖励
奖励信号 绝对奖励 绝对奖励 组内相对奖励
样本效率 中等 较高 更高
收敛稳定性 高,但计算量大 较好,仍可能 collapse 更稳定
LLM 应用 不常用(计算过大) 主流(ChatGPT) 新兴(减少奖励 hacking,偏好更一致)

4. 训练过程

  1. 数据来源

  2. Prompt 来自人工设计或合成任务。

  3. 策略模型生成多样化候选答案。

  4. 奖励模型

  5. 基于人类偏好数据训练。

  6. 输出相对分数,而不是绝对 reward。

  7. 分组采样

  8. 对每个 prompt,采样 \(K\) 个候选结果形成 group。

  9. 相对优势计算

  10. 组内归一化:\(A(y_i) = \frac{r(y_i)-\mu_G}{\sigma_G}\).

  11. 策略更新

  12. 使用 GRPO 损失函数进行反向传播。

  13. 迭代训练

  14. 更新策略模型,重复采样-训练流程。

5. 伪代码

# GRPO Training Pseudocode

for iteration in range(num_iters):
    batch_prompts = sample_prompts()
    groups = []

    for x in batch_prompts:
        candidates = [policy.generate(x) for _ in range(K)]
        rewards = [reward_model(x, y) for y in candidates]

        mu = mean(rewards)
        sigma = std(rewards) + eps
        advantages = [(r - mu) / sigma for r in rewards]

        groups.append((x, candidates, advantages))

    loss = 0
    for (x, candidates, advantages) in groups:
        for y, A in zip(candidates, advantages):
            rho = policy_prob(y|x) / old_policy_prob(y|x)
            clipped = clip(rho, 1 - eps, 1 + eps)
            loss += -min(rho * A, clipped * A)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

6. 示例

GRPO 核心机制:组内相对奖励优化

Prompt: "Explain quantum computing"
   ├── Candidate 1 → r=0.8
   ├── Candidate 2 → r=0.6
   ├── Candidate 3 → r=0.2
   └── Candidate 4 → r=0.9

组均值 μ=0.625, σ=0.25
   A1=(0.8-0.625)/0.25=+0.7
   A2=-0.1
   A3=-1.7
   A4=+1.1

这样避免了绝对值差异过大或奖励噪声导致的不稳定更新。

总结

  • GRPO (Group Relative Policy Optimization) 是对 PPO 的改进,将奖励从绝对值转为组内相对优势,提升稳定性和样本效率。
  • 在 LLM RLHF 中尤其有效,减少奖励 hacking 和模式坍缩。
  • 与 PPO 相比:更稳定、更节省样本,但计算成本稍高(需要组采样)。
  • 已逐渐成为 LLM 后训练的重要优化方法。