八、强化学习在大模型训练中的应用
强化学习在大模型训练中的应用
📌 本文属于「强化学习入门到精通」系列文章,建议先阅读 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 训练数据示例
| 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)]−β⋅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[G1i=1∑Gmin(πθ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=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πθ(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) | 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 在文本摘要中的应用 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)