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

📌 本文属于「强化学习入门到精通」系列文章,建议先阅读 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))=σ(rA​−rB​)

其中 σ \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 训练数据示例

PromptChosen (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)]−β⋅Ex∼D​[KL(πθRL​(y∣x)∥πSFT(y∣x))]

或者写成等价的减去价值函数 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​​(a∣s)πθ​(a∣s)​⋅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[G1​i=1∑G​min(πθold​​πθ​(yi​∣x)​(yi​∣x)⋅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​=ri​−G1​∑j=1G​rj​,即每个回答相对于群体均值的优势。

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πθ​(yl​∣x)/πref​(yl​∣x)πθ​(yw​∣x)/πref​(yw​∣x)​)]

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)2022RLHF 开创性工作,提出三阶段框架
Direct Preference Optimization: Your Language Model is Secretly a Reward Model2023DPO 论文,端到端偏好优化
DeepSeekMath: Pushing the Limit of Mathematical Reasoning in Open Language Models2024GRPO 论文,提出群体相对策略优化
PPO: Proximal Policy Optimization Algorithms2017PPO 算法原始论文
Learning to summarize with human feedback2020RLHF 在文本摘要中的应用

更多推荐