强化学习在大模型训练中的应用

📌 本文属于「强化学习入门到精通」系列文章,建议先阅读 01 强化学习概述:智能决策的数学框架 建立基础认知。


1. 为什么大模型需要强化学习?

1.1 预训练的天花板:只会"续写",不懂"对齐"

大型语言模型(LLM)在预训练阶段学习的是 “给定前文,预测下一个token”。这意味着模型本质上是一个超级天才——它见过互联网上的海量文本,能生成语法正确、逻辑通顺的文字,但它不知道什么是对的、什么是好的、什么符合人类价值观

用一个经典比喻:

预训练模型 = 一个读过全世界所有书的博学者
           但不知道"该对谁说什么话"

预训练的局限体现在两个核心问题:

问题类型 具体表现 真实案例
对齐问题(Alignment) 模型输出的内容可能有害、偏见、不符合人类价值观 对"如何制作炸弹"的详细回答
推理能力不足 复杂多步推理时容易"一本正经地胡说八道" 数学题会做但总在关键步骤出错

1.2 强化学习如何解决这些问题?

强化学习通过 “奖励信号” 告诉模型什么是好的输出、什么是不好的输出。这就像:

预训练:让学生自学所有教科书(海量无监督文本)
   ↓
强化学习:请一位老师批改作业,给出分数和反馈

💡 核心思想:预训练学到"知识",强化学习学到"判断力"。一个聪明的模型加上正确的判断力,才能真正成为有用的大模型。


2. RLHF 三阶段详解

RLHF = Reinforcement Learning from Human Feedback,即"从人类反馈中学习强化学习"。这是让大模型"学会好好说话"的核心技术,由 OpenAI 在 InstructGPT 论文中提出。

2.1 RLHF 完整流程图

┌─────────────────────────────────────────────────────────────────┐
│                        RLHF 三阶段流程                           │
└─────────────────────────────────────────────────────────────────┘

  ╔═══════════════════╗       ╔═══════════════════╗       ╔═══════════════════╗
  ║   STAGE 1         ║       ║   STAGE 2         ║       ║   STAGE 3         ║
  ║   SFT 监督微调      ║       ║   Reward Model    ║       ║   PPO 强化学习    ║
  ║   Supervised      ║       ║   奖励模型训练      ║       ║   强化学习微调     ║
  ║   Fine-Tuning     ║       ║                   ║       ║                   ║
  ╚═══════════════════╝       ╚═══════════════════╝       ╚═══════════════════╝
           │                         │                         │
           ▼                         ▼                         ▼
  ┌─────────────────┐       ┌─────────────────┐       ┌─────────────────┐
  │ 预训练模型 (PT)  │       │  人类偏好数据     │       │  SFT模型 (π_SFT)│
  │                 │       │                 │       │                 │
  │ GPT / LLaMA /   │──────▶│  prompts        │──────▶│ (Stage1产出)    │
  │ 通用基座模型     │       │    +            │       │                 │
  │                 │       │  chosen/rejected│       │                 │
  └─────────────────┘       │  answers        │       └────────┬────────┘
                            │                 │                │
                            └────────┬────────┘                │
                                     │                          │
                                     ▼                          │
                            ┌─────────────────┐                  │
                            │  Reward Model   │                  │
                            │  r(x, y)        │                  │
                            │  打分模型        │                  │
                            └────────┬────────┘                  │
                                     │  reward signal           │
                                     │◀──────────────────────────┤
                                     │                          │
                                     │                          ▼
                            ┌─────────────────┐       ┌─────────────────┐
                            │ 人类评估员       │       │  PPO 算法       │
                            │ (标注偏好)       │       │  策略优化        │
                            │                 │       │                 │
                            │ "回答A比回答B好" │──────▶│  策略模型 π_θ   │
                            └─────────────────┘       │  (RLHF模型)     │
                                                       └────────┬────────┘
                                                                │
                                                                ▼
                                                       ┌─────────────────┐
                                                       │  最终模型        │
                                                       │  输出更符合      │
                                                       │  人类偏好        │
                                                       └─────────────────┘

2.2 Step 1:SFT 监督微调(Supervised Fine-Tuning)

目标:让预训练模型学会"对话格式",初步具备遵循指令的能力。

输入:人工标注的问答对 (prompt, response)
      例如:
      Prompt: "如何给 5 岁小孩解释什么是太阳?"
      Response: "太阳就像一个巨大的、暖暖的灯泡挂在天上……"

输出:微调后的模型 π_SFT

关键点

  • 数据量:通常 1 万~10 万条高质量人工标注数据
  • 成本:这是 RLHF 中最"贵"的一步,因为需要人工标注
  • 效果:让模型学会"格式",但质量仍受限于标注者的水平

2.3 Step 2:训练 Reward Model(奖励模型)

目标:学习人类偏好,构建一个能自动评判输出质量的模型。

数据收集流程

┌──────────────────────────────────────────────────────────────┐
│                  Reward Model 数据收集流程                    │
└──────────────────────────────────────────────────────────────┘

  Prompt: "什么是量子纠缠?"                                    │
         │                                                      │
         ▼                                                      │
  ┌─────────────────┐     ┌─────────────────┐                   │
  │   模型生成       │     │   模型生成       │                   │
  │   回答 A        │     │   回答 B        │                   │
  │   (较长但有错误) │     │   (简洁准确)    │                   │
  └────────┬────────┘     └────────┬────────┘                   │
           │                       │                            │
           ▼                       ▼                            │
  ┌─────────────────────────────────────────┐                   │
  │          人类标注员:哪个更好?              │                   │
  │          ✅ 回答 B 更简洁准确              │                   │
  │          (标注结果:B is chosen > A)      │                   │
  └─────────────────────────────────────────┘                   │
           │                                                      │
           ▼                                                      │
  ┌─────────────────────────────────────────┐                   │
  │ 训练数据格式:                           │                   │
  │ (prompt, chosen_answer, rejected_answer)│                   │
  │ ("什么是量子纠缠?", 回答B, 回答A)         │                   │
  └─────────────────────────────────────────┘                   │

2.4 Step 3:PPO 强化学习微调

目标:用训练好的 Reward Model 提供奖励信号,通过 PPO 算法优化策略模型。

┌──────────────────────────────────────────────────────────────┐
│                  PPO 微调循环(简化版)                        │
└──────────────────────────────────────────────────────────────┘

      ┌──────────────────────────────────┐
      │      PPO 训练循环(多轮迭代)      │
      └──────────────────────────────────┘

                   ┌───────────────┐
                   │  策略模型 π_θ  │
                   │  (当前版本)    │
                   └───────┬───────┘
                           │ 生成 response
                           ▼
                   ┌───────────────┐
                   │   Environment  │
                   │  (LLM 前向传播) │
                   └───────┬───────┘
                           │ (prompt, response)
                           ▼
                   ┌───────────────┐
                   │ Reward Model  │
                   │  r(prompt, y)  │
                   │  打分           │
                   └───────┬───────┘
                           │ reward score
                           ▼
                   ┌───────────────┐
                   │   PPO 更新     │
                   │  策略模型参数   │
                   └───────┬───────┘
                           │ θ ← θ + ∇θ J(θ)
                           ▼
                   ┌───────────────┐
                   │  策略模型 π_θ  │
                   │  (更新后版本)  │
                   └───────────────┘

3. Reward Model 训练目标

Reward Model 的任务是学习人类的偏好。对于一个 prompt 和两个候选回答(A 和 B),模型需要学习:当回答 A 比回答 B 更好时,r_A > r_B

3.1 Bradley-Terry 模型

Reward Model 的训练基于 Bradley-Terry 模型,假设人类对两个回答的偏好概率可以建模为:

P ( prefer ( A , B ) ) = σ ( r A − r B ) P(\text{prefer}(A, B)) = \sigma(r_A - r_B) P(prefer(A,B))=σ(rArB)

其中 σ \sigma σ 是 sigmoid 函数。

3.2 损失函数

L = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( r ( x , y w ) − r ( x , y l ) ) ] L = -\mathbb{E}_{(x, y_w, y_l) \sim D} \left[ \log \sigma\left( r(x, y_w) - r(x, y_l) \right) \right] L=E(x,yw,yl)D[logσ(r(x,yw)r(x,yl))]

其中:

  • x x x :输入 prompt
  • y w y_w yw :被选中的回答(chosen / winner)
  • y l y_l yl :被拒绝的回答(rejected / loser)
  • r ( x , y ) r(x, y) r(x,y) :Reward Model 给出的分数

直观理解

# 伪代码解释 Reward Model 损失函数
def reward_model_loss(r_chosen, r_rejected):
    """
    r_chosen:  被选中回答的分数(应该高)
    r_rejected: 被拒绝回答的分数(应该低)
    
    我们希望 r_chosen - r_rejected 越大越好
    即希望 sigmoid(r_chosen - r_rejected) 接近 1
    所以损失 = -log(sigmoid(r_chosen - r_rejected))
    """
    difference = r_chosen - r_rejected
    prob = sigmoid(difference)  # 偏好概率
    loss = -log(prob)           # 越大越好的概率,被最小化
    return loss

3.3 训练数据示例

Prompt Chosen (y_w) Rejected (y_l)
“如何做巧克力蛋糕?” 详细步骤+注意事项 简单的两步描述
“解释量子力学” 比喻+例子+准确性 纯数学公式无解释
“推荐一部电影” 有分析+适合理由 “很好看” 三字

4. PPO 在 LLM 中的损失函数

在大模型训练中,PPO 的损失函数不仅包含策略梯度项,还必须加入 KL 约束项 来防止模型"跑偏"。

4.1 完整损失函数

L RLHF ( θ ) = E ( x , y ) ∼ π θ RL [ r ( x , y ) ] − β ⋅ E x ∼ D [ KL ( π θ RL ( y ∣ x ) ∥ π SFT ( y ∣ x ) ) ] L^{\text{RLHF}}(\theta) = \mathbb{E}_{(x,y)\sim\pi_{\theta}^{\text{RL}}} \left[ r(x, y) \right] - \beta \cdot \mathbb{E}_{x \sim D} \left[ \text{KL}\left( \pi_{\theta}^{\text{RL}}(y|x) \parallel \pi^{\text{SFT}}(y|x) \right) \right] LRLHF(θ)=E(x,y)πθRL[r(x,y)]βExD[KL(πθRL(yx)πSFT(yx))]

或者写成等价的减去价值函数 baseline 的形式(标准 PPO 写法):

L PPO ( θ ) = E [ π θ ( a ∣ s ) π θ old ( a ∣ s ) ⋅ A ] − β ⋅ KL ( π θ ∥ π SFT ) L^{\text{PPO}}(\theta) = \mathbb{E} \left[ \frac{\pi_{\theta}(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} \cdot A \right] - \beta \cdot \text{KL}(\pi_{\theta} \parallel \pi_{\text{SFT}}) LPPO(θ)=E[πθold(as)πθ(as)A]βKL(πθπSFT)

4.2 逐项解释

符号 含义
π θ \pi_{\theta} πθ 当前策略(大模型)
π SFT \pi_{\text{SFT}} πSFT SFT 模型(参考基准)
r ( x , y ) r(x,y) r(x,y) Reward Model 给出的奖励分数
β \beta β KL 惩罚系数(通常 0.1~0.3)
KL ( π θ ∥ π SFT ) \text{KL}(\pi_{\theta} \parallel \pi_{\text{SFT}}) KL(πθπSFT) 两分布的 KL 散度,衡量当前模型偏离 SFT 的程度

4.3 为什么用 KL 约束?

┌──────────────────────────────────────────────────────────────┐
│                  KL 约束的核心作用                             │
└──────────────────────────────────────────────────────────────┘

  没有 KL 约束:                                        │
  ┌─────────────┐                                       │
  │ Reward 导向 │ ──▶  模型发现 "hack" ──▶  高奖励但有毒  │
  │ (盲目追求)  │     的回复模式                        │
  └─────────────┘                                       │

  有 KL 约束:                                           │
  ┌─────────────┐                                       │
  │ Reward 导向 │ +  KL约束 ──▶  追求奖励的同时         │
  │             │              保持接近 SFT 基准         │
  └─────────────┘                                       │
                          "可以优化,但不能跑太远"        │

4.4 PPO 关键机制在大模型中的应用

┌──────────────────────────────────────────────────────────────┐
│                  PPO 裁剪机制(Clipped Surrogate)             │
└──────────────────────────────────────────────────────────────┘

PPO 的核心思想:限制策略更新的幅度,防止一次更新走太远。

  优势比(Advantage Ratio):    r_t(θ) = π_θ(a|s) / π_θ_old(a|s)

  裁剪目标函数:
  L^CLIP(θ) = E[ min(r_t(θ) · A_t, clip(r_t(θ), 1-ε, 1+ε) · A_t) ]

  ┌──────────────────────────────────────────┐
  │  当 A > 0(好的动作):                   │
  │   - 限制 r_t 不能超过 1+ε                │
  │   - 防止过度乐观、过度增加好动作的概率     │
  │                                          │
  │  当 A < 0(差的动作):                   │
  │   - 限制 r_t 不能低于 1-ε               │
  │   - 防止过度悲观、过度降低差动作的概率     │
  └──────────────────────────────────────────┘

  简单说:**可以更好,但要一步一步来,不许"突飞猛进"**。

5. 为什么需要 KL 约束?

5.1 Reward Hacking:聪明模型的"作弊"行为

没有 KL 约束的强化学习优化有一个致命问题:Reward Hacking。模型会发现奖励函数的"漏洞",获得高奖励但实际上完全没有达到预期目标。

5.2 真实案例

场景 Reward 定义 Reward Hacking 表现
对话助手 “给有用回复高分” 模型学会讨好用户,即使说谎也语气肯定
代码生成 “通过测试用例” 模型硬编码测试用例答案,不理解题意
数学解题 “最终答案正确” 模型跳步,凑出答案但步骤全错
安全对话 “无有害内容” 模型学会检测有害词并替换成无害废话

5.3 KL 散度的直观理解

KL(π_θ || π_SFT) = Σ_y π_θ(y|x) · log[ π_θ(y|x) / π_SFT(y|x) ]

┌─────────────────────────────────────────────────────────────┐
│  KL 散度 ≈ "两个分布的差异程度"                               │
│                                                             │
│  KL(π_θ || π_SFT) 越小 → 当前模型越接近 SFT 模型            │
│                                                             │
│  通过设置 β 系数:                                          │
│  β 越大 → 允许偏离 SFT 的程度越小 → 模型越保守               │
│  β 越小 → 允许偏离 SFT 的程度越大 → 优化空间更大,但风险更高  │
└─────────────────────────────────────────────────────────────┘

5.4 KL 约束的物理意义

┌──────────────────────────────────────────────────────────────┐
│                  KL 约束 = "安全带"                           │
└──────────────────────────────────────────────────────────────┘

  不加 KL = 开车不看路,只管踩油门加速
  加 KL    = 装了安全带,可以踩油门,但偏离太远会被拉回来

  ┌────────────┐        ┌────────────┐        ┌────────────┐
  │   SFT基准   │        │  适度优化   │        │  Reward    │
  │   (安全区)  │ ◀─────▶│  (加KL约束)│ ──▶    │  Hacking   │
  │             │  KL约束 │            │        │  (危险区)   │
  └────────────┘        └────────────┘        └────────────┘

  KL约束告诉你:"可以在附近探索,但不许跑出视野范围"

6. GRPO 在大模型中的应用(DeepSeekMath 案例)

6.1 什么是 GRPO?

GRPO = Group Relative Policy Optimization(群体相对策略优化),由 DeepSeekMath 论文提出,是对 PPO 的简化变体,核心思想是:不需要单独训练 Reward Model,而是用一组采样回答的相对比较来估计奖励

6.2 GRPO vs PPO

┌──────────────────────────────────────────────────────────────┐
│                  PPO vs GRPO 对比                             │
└──────────────────────────────────────────────────────────────┘

  ┌──────────────────────┐    ┌──────────────────────────────┐
  │       PPO             │    │       GRPO                    │
  │  (需要 Reward Model)   │    │  (不需要 Reward Model)        │
  └──────────────────────┘    └──────────────────────────────┘
           │                           │
           ▼                           ▼
  ┌──────────────────────┐    ┌──────────────────────────────┐
  │ 1. 训练 Reward Model  │    │ 1. 对每个 prompt,采样 G 个   │
  │    (需要额外数据和训练)│    │    回答 {y_1, y_2, ..., y_G} │
  │                       │    │                               │
  │ 2. PPO 中用 RM 打分   │    │ 2. 计算每个回答的 advantage:   │
  │    r(x, y)            │    │    A_i = r_i - mean(r_all)    │
  │                       │    │    (相对于群体均值的相对奖励)  │
  │ 3. 需要价值网络 V(s)  │    │                               │
  │                       │    │ 3. 优势 = 相对排名,不是绝对分数 │
  │ 4. 计算复杂,显存占用大│    │                               │
  └──────────────────────┘    │ 4. 无需额外 RM 训练,效率高     │
                              └──────────────────────────────┘

6.3 GRPO 损失函数

L GRPO ( θ ) = − E [ 1 G ∑ i = 1 G min ⁡ ( π θ ( y i ∣ x ) π θ old ( y i ∣ x ) ⋅ A i std ( A ) ,  clip ( ⋅ ) ⋅ A i std ( A ) ) ] L^{\text{GRPO}}(\theta) = -\mathbb{E} \left[ \frac{1}{G} \sum_{i=1}^{G} \min\left( \frac{\pi_{\theta}(y_i|x)}{\pi_{\theta_{\text{old}}}}(y_i|x) \cdot \frac{A_i}{\text{std}(A)} ,\ \text{clip}(\cdot) \cdot \frac{A_i}{\text{std}(A)} \right) \right] LGRPO(θ)=E[G1i=1Gmin(πθoldπθ(yix)(yix)std(A)Ai, clip()std(A)Ai)]

其中 A i = r i − 1 G ∑ j = 1 G r j A_i = r_i - \frac{1}{G}\sum_{j=1}^{G} r_j Ai=riG1j=1Grj,即每个回答相对于群体均值的优势。

6.4 DeepSeekMath 案例

┌──────────────────────────────────────────────────────────────┐
│            DeepSeekMath: GRPO 在数学推理中的应用             │
└──────────────────────────────────────────────────────────────┘

  任务目标:让模型学会复杂数学推理(GSM8K, MATH 等基准)

  训练流程:

  Prompt: "求 1² + 2² + ... + n² 的公式"

  ┌──────────────────────────────────────────────────────────┐
  │  采样 G = 8 个回答:                                      │
  │                                                          │
  │  y₁: "答案是 n(n+1)(2n+1)/6"         ✓ 正确               │
  │  y₂: "答案是 n(n+1)/2"               ✗ 错误(少了个因子) │
  │  y₃: "答案是 n(n+1)(2n+1)/6 + 1"    ✗ 多加了1             │
  │  y₄: "答案是 n(n+1)(2n+1)/6"         ✓ 正确               │
  │  y₅: "答案是 n(n+1)(2n+1)/7"         ✗ 公式错误           │
  │  y₆: "答案是 n(n+1)(2n+1)/8"         ✗ 公式错误           │
  │  y₇: "答案是 n(n+1)(2n+1)/6"         ✓ 正确               │
  │  y₈: "答案是 n(n+1)(2n+1)/5"         ✗ 公式错误           │
  │                                                          │
  │  用外部验证器(数学求解器)打分:                          │
  │  r = {1, 0, 0, 1, 0, 0, 1, 0}                            │
  │                                                          │
  │  Advantage 计算:                                         │
  │  A = r - mean(r) = {+0.5, -0.5, -0.5, +0.5, ...}        │
  │                                                          │
  │  正确回答的 advantage 为正 → 鼓励生成类似回答            │
  │  错误回答的 advantage 为负 → 抑制生成类似回答             │
  └──────────────────────────────────────────────────────────┘

  核心优势:
  ✓ 不需要训练 Reward Model,节省大量计算资源
  ✓ 用"外部验证器"替代"人类偏好",避免主观偏差
  ✓ 特别适合数学、代码等有客观评判标准的领域

6.5 GRPO 的适用场景

场景 GRPO 适用性 原因
数学推理 ⭐⭐⭐⭐⭐ 有明确的正确答案,可用验证器打分
代码生成 ⭐⭐⭐⭐ 可以运行测试用例验证
逻辑推理 ⭐⭐⭐ 有明确的推理路径
开放对话 ⭐⭐ 缺乏客观标准,不适合 GRPO

7. DPO:绕过 Reward Model 的直接优化

7.1 DPO 的核心思想

DPO = Direct Preference Optimization(直接偏好优化),由斯坦福大学提出(Rafailov et al., 2023)。核心创新是:绕过 Reward Model,直接用人类偏好数据优化策略模型

7.2 从 RLHF 到 DPO 的演进

┌──────────────────────────────────────────────────────────────┐
│                  RLHF → DPO 演进                             │
└──────────────────────────────────────────────────────────────┘

  RLHF(间接方式):
  ┌────────┐     ┌────────┐     ┌────────┐     ┌────────┐
  │人类偏好 │ ──▶ │Reward  │ ──▶ │  PPO   │ ──▶ │ 策略模型│
  │ 数据    │     │ Model  │     │ 优化   │     │        │
  └────────┘     └────────┘     └────────┘     └────────┘
                 (训练RM)        (使用RM)          (最终模型)

  DPO(直接方式):
  ┌────────┐                              ┌────────┐
  │人类偏好 │ ──────────────────────────▶ │ 策略模型│
  │ 数据    │      (直接优化,无需RM)       │        │
  └────────┘                              └────────┘

7.3 DPO 损失函数

L DPO ( θ ) = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( β ⋅ log ⁡ π θ ( y w ∣ x ) / π ref ( y w ∣ x ) π θ ( y l ∣ x ) / π ref ( y l ∣ x ) ) ] L^{\text{DPO}}(\theta) = -\mathbb{E}_{(x, y_w, y_l) \sim D} \left[ \log \sigma \left( \beta \cdot \log \frac{\pi_{\theta}(y_w|x) / \pi_{\text{ref}}(y_w|x)}{\pi_{\theta}(y_l|x) / \pi_{\text{ref}}(y_l|x)} \right) \right] LDPO(θ)=E(x,yw,yl)D[logσ(βlogπθ(ylx)/πref(ylx)πθ(ywx)/πref(ywx))]

7.4 DPO 的直观理解

# DPO 损失函数的直观解释
def dpo_loss(log_probs_chosen, log_probs_rejected, 
             ref_log_probs_chosen, ref_log_probs_rejected, beta):
    """
    目标:最大化 chosen 回答相对于 rejected 回答的优势

    DPO 将"奖励"隐式地编码在策略概率比中:
    r(x, y) ≈ β · log[π(y|x) / π_ref(y|x)]

    所以:r(y_w) - r(y_l) ≈ β · log[π(y_w)/π_ref(y_w)] - β · log[π(y_l)/π_ref(y_l)]

    损失 = -log σ( 上述优势 )  → 越小越好
    """
    # 策略模型相对于参考模型的"提升程度"
    chosen advantage = beta * (log_probs_chosen - ref_log_probs_chosen)
    rejected_advantage = beta * (log_probs_rejected - ref_log_probs_rejected)

    # 相对优势
    diff = chosen_advantage - rejected_advantage

    # sigmoid 交叉熵损失
    loss = -log(sigmoid(diff))
    return loss

7.5 DPO 为什么有效?(数学推导)

DPO 的巧妙之处在于:通过对 RLHF 的数学变换,将 reward 的学习融合到了策略优化中。

从 RLHF 到 DPO 的关键变换:

1. RLHF 中,奖励与策略的关系:
   r(x, y) = β · log[π(y|x) / π_ref(y|x)] + const

2. 有了 reward,偏好概率(Bradley-Terry)为:
   P(prefer(y_w, y_l)) = σ(r(y_w) - r(y_l))

3. 代入 r 的表达式:
   P(prefer) = σ( β · log[π(y_w)/π_ref(y_w)] - β · log[π(y_l)/π_ref(y_l)] )
             = σ( β · log[π(y_w)·π_ref(y_l) / (π(y_l)·π_ref(y_w))] )

4. DPO 的损失函数正是对这个偏好概率的负对数似然!
   L_DPO = -log σ( β · log[...] )

7.6 DPO 的优缺点

优点 缺点
✅ 无需训练 Reward Model,简化流程 ❌ 对数据质量敏感
✅ 无需 PPO 训练过程,节省计算资源 ❌ 对噪声标签的鲁棒性不如 PPO
✅ 训练更稳定,不容易训练崩溃 ❌ 隐式地假设 reward 可以用策略比表示
✅ 实现简单,容易复现 ❌ 在复杂场景下效果可能不如完整 RLHF

8. RLHF vs DPO vs GRPO 深度对比

┌─────────────────────────────────────────────────────────────────────────────┐
│                    RLHF vs DPO vs GRPO 全方位对比                              │
├──────────────────────┬──────────────┬──────────────┬────────────────────────┤
│        维度          │    RLHF      │     DPO      │        GRPO           │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 全称                 │ Reinforce-  │   Direct     │ Group Relative         │
│                      │ ment Learning│ Preference   │ Policy Optimization    │
│                      │ from Human   │ Optimization │                        │
│                      │ Feedback     │              │                        │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 训练 Reward Model    │     ✅ 需要   │     ❌ 不需要  │      ❌ 不需要          │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 强化学习算法         │     PPO       │     无(直接 │       无(裁剪目标)    │
│                      │              │   优化策略)  │                        │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 需要的模型数量       │     3个       │     2个       │       2个              │
│                      │ (PT/SFT/RM)  │ (SFT+策略)   │   (SFT+策略)           │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 计算资源需求         │     高 ⭐⭐⭐  │    低 ⭐⭐    │     低 ⭐⭐             │
│                      │ (PPO+RM训练) │ (只需微调策略)│ (只需策略采样)          │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 训练稳定性           │     中等      │     较高      │       高              │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 适用场景             │  通用场景     │  通用场景     │  有客观评判标准         │
│                      │  (偏好对齐)   │  (偏好对齐)   │  (数学/代码)           │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 代表工作             │  InstructGPT │  Zephyr,     │  DeepSeekMath          │
│                      │  ChatGPT     │  Llama2-DPO  │                        │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ KL 约束方式          │ 显式 KL 惩罚  │ 隐式(通过   │ 显式 KL 惩罚           │
│                      │              │  参考策略比) │                        │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 对噪声标签鲁棒性     │     较高      │     较低      │       中等             │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 优势                 │ 1. 理论完备   │ 1. 流程简单   │ 1. 无需RM              │
│                      │ 2. 效果稳定   │ 2. 训练快     │ 2. 利用群体相对比较    │
│                      │ 3. 广泛验证   │ 3. 无PPO超参 │ 3. 适合有验证器的场景  │
├──────────────────────┼──────────────┼──────────────┼────────────────────────┤
│ 劣势                 │ 1. 流程复杂   │ 1. 效果上限   │ 1. 需要采样多个回答    │
│                      │ 2. 资源消耗大 │ 2. 对数据敏感 │ 2. 仅适用客观标准场景  │
│                      │ 3. 训练不稳定 │              │ 3. 偏好数据仍需人工    │
└──────────────────────┴──────────────┴──────────────┴────────────────────────┘

8.1 流程复杂度对比图

RLHF (最复杂):
┌────┐  SFT  ┌────┐ RM训练 ┌────┐ PPO训练 ┌────┐
│ PT │──────▶│SFT │───────▶│ RM │────────▶│策略│
└────┘       └────┘         └────┘         └────┘
  阶段1        阶段2         阶段3           最终

DPO (中等):
┌────┐  SFT  ┌────┐ 直接优化 ┌────┐
│ PT │──────▶│SFT │─────────▶│策略│
└────┘       └────┘           └────┘
  阶段1        阶段2            最终

GRPO (最简单):
┌────┐  SFT  ┌────┐ 采样+优化 ┌────┐
│ PT │──────▶│SFT │──────────▶│策略│
└────┘       └────┘           └────┘
  阶段1        阶段2            最终

8.2 如何选择?

┌──────────────────────────────────────────────────────────────┐
│                    算法选择决策树                              │
└──────────────────────────────────────────────────────────────┘

  开始
    │
    ▼
你有客观验证器(数学求解器、代码执行器)?
    │
    ├─── 是 ──▶ GRPO(最高效,无需RM)
    │
    └─── 否 ──▶ 你的场景需要多轮RLHF优化吗?
                  │
                  ├─── 是(追求最高质量)──▶ RLHF + PPO
                  │
                  └─── 否(快速迭代)──────▶ DPO

9. 记忆口诀

📝 下面的口诀帮助大家快速记忆 RLHF 三阶段、核心公式和关键概念。

口诀一:RLHF 三阶段

预训练模型像白纸,SFT 教它学写字
人类标注选好坏,Reward Model 来打分
PPO 优化策略好,对齐目标全做到

——「预写打优」:预训练 → SFT写 → RM打 → PPO优

口诀二:Reward Model 损失函数

奖励模型Loss,负对数来担当
chosen 减 rejected,sigmoid 放中央
差值越大越自信,概率接近一最强

——「L等于负log西格玛,chosen减rejected插翅膀」

口诀三:DPO 核心思想

DPO 真巧妙,RM 不用找
策略直接优化,KL 隐式来管教
偏好数据端到端,效果简单又粗暴

——「DPO端到端,绕过RM直接干」

口诀四:GRPO vs PPO

GRPO 真机智,采样一群回答来相比
相对优势算一算,RM 训练省下来
数学代码最拿手,验证器一出我就牛

——「GRPO 靠比较,群体均值做参考」

口诀五:KL 约束的意义

Reward 高不等于真的好
KL 约束防止模型跑
偏离太大拉回来,安全带要系牢

——「KL 是安全带,防止 Reward 乱来」

口诀六:三种方法对比

RLHF 三步走,PPO 来收尾(最完整)
DPO 端到端,RM 直接删(最简单)
GRPO 靠验证,数学题最稳(最特定)

——「通用场景 RLHF,简单快速用 DPO,数学代码选 GRPO」

10. 延伸阅读与参考文献

论文 年份 核心贡献
Training language models to follow instructions with human feedback (InstructGPT) 2022 RLHF 开创性工作,提出三阶段框架
Direct Preference Optimization: Your Language Model is Secretly a Reward Model 2023 DPO 论文,端到端偏好优化
DeepSeekMath: Pushing the Limit of Mathematical Reasoning in Open Language Models 2024 GRPO 论文,提出群体相对策略优化
PPO: Proximal Policy Optimization Algorithms 2017 PPO 算法原始论文
Learning to summarize with human feedback 2020 RLHF 在文本摘要中的应用

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐