前置知识: 机器学习

奖励建模与RLHF

00:00
10 min Advanced

从人类偏好数据训练奖励模型,RLHF管线与对齐训练的核心技术

奖励建模与 RLHF

2022 年之前,RL 的奖励函数是手工设计的。2022 年之后,RLHF 从人类偏好数据学习奖励函数,然后用 PPO 优化它。这个两步管线——奖励建模 + RL 优化——是 ChatGPT、Claude、Gemini 对齐训练的核心。

类型: 学习 语言: Python 前置知识: Phase 9 · 08 (PPO), Phase 7 · 09 (Transformer) 时间: ~60 分钟

问题

RL 的标准框架假设奖励函数 R(s, a) 是给定的。在实践中,定义好的奖励函数是 RL 最困难的部分:

  • 聊天机器人。 什么是”好回答”的奖励?正确性?有用性?安全性?风格?
  • 文本摘要。 什么是”好摘要”的奖励?准确性?简洁性?信息保留?
  • 代码生成。 什么是”好代码”的奖励?正确性?效率?可读性?

人类可以判断哪个回答更好(偏好比较),但难以给出精确数值。RLHF 的核心思想:从人类偏好比较数据训练一个奖励模型,然后用这个奖励模型作为 RL 的奖励函数。

核心概念

偏好数据收集。 给标注者看同一提示的两个回答 (y_1, y_2),让他们选择哪个更好。得到三元组 (x, y_w, y_l),其中 y_w 是被选中的(winner),y_l 是被拒绝的(loser)。

Bradley-Terry 模型。 偏好概率的参数化:

P(y_w > y_l | x) = σ(r_θ(x, y_w) - r_θ(x, y_l))

其中 r_θ(x, y) 是奖励模型,σ 是 sigmoid 函数。奖励模型学习给好回答更高分数。

奖励模型训练。 二元交叉熵损失:

L_RM(θ) = -E[log σ(r_θ(x, y_w) - r_θ(x, y_l))]

奖励模型通常是一个与策略模型相同架构的语言模型,最后一个 token 的隐藏状态映射到标量分数。

RLHF 管线。 三步:

  1. SFT (监督微调)。 在高质量数据上监督训练语言模型。
  2. 奖励建模。 从人类偏好数据训练奖励模型。
  3. RL 优化。 用 PPO 最大化奖励模型的奖励,同时用 KL 惩罚防止偏离 SFT 模型太远。

PPO 中的 KL 惩罚。 RLHF 的奖励函数不是纯奖励模型输出:

R(x, y) = r_θ(x, y) - β · KL(π_φ(y|x) || π_SFT(y|x))

β 控制与 SFT 模型的偏离程度。太小 = 模型可能”奖励黑客”(产生高奖励但无意义的输出)。太大 = 模型不偏离 SFT,对齐效果弱。

RLHF 的替代方法

方法年份核心思想
RLHF + PPO2022训练奖励模型 + PPO 优化
DPO2023直接从偏好数据优化策略,无需奖励模型
RLAIF2023用 AI 反馈替代人类反馈
ORPO2024将 SFT 和偏好对齐合并为一步
KTO2024只需好/坏标签,不需要成对比较
GRPO2024组相对策略优化,DeepSeek-Math 使用

DPO (Direct Preference Optimization)。 Rafailov et al. (2023)。跳过奖励模型,直接从偏好数据优化策略:

L_DPO(θ) = -E[log σ(β · (log π_θ(y_w|x)/π_ref(y_w|x) - log π_θ(y_l|x)/π_ref(y_l|x)))]

DPO 更简单(无需训练奖励模型,无需 PPO),但在复杂任务上可能不如 RLHF + PPO。

动手构建

code/main.py 实现了一个简化的奖励模型训练和 RLHF 管线。

步骤 1:奖励模型

class RewardModel:
    def __init__(self, input_dim, hidden_dim=64):
        self.W1 = np.random.randn(input_dim, hidden_dim) * 0.01
        self.b1 = np.zeros(hidden_dim)
        self.W2 = np.random.randn(hidden_dim, 1) * 0.01
        self.b2 = np.zeros(1)

    def score(self, x):
        h = np.maximum(0, x @ self.W1 + self.b1)
        return (h @ self.W2 + self.b2)[0]

步骤 2:奖励模型训练

def train_reward_model(model, preferences, lr=1e-3, n_epochs=10):
    for epoch in range(n_epochs):
        for x, y_w, y_l in preferences:
            r_w = model.score(concat(x, y_w))
            r_l = model.score(concat(x, y_l))
            # Bradley-Terry loss
            loss = -np.log(sigmoid(r_w - r_l) + 1e-8)
            # Gradient step
            gradient = compute_gradient(model, loss)
            update_params(model, gradient, lr)

步骤 3:RLHF 训练 (简化)

def rlhf_train(policy, reward_model, sft_policy, prompts,
               ppo_epochs=4, kl_coef=0.1):
    for prompt in prompts:
        # Generate response
        response = policy.generate(prompt)
        # Get reward
        r = reward_model.score(concat(prompt, response))
        # KL penalty
        kl = compute_kl(policy, sft_policy, prompt, response)
        adjusted_reward = r - kl_coef * kl
        # PPO update (simplified)
        ppo_update(policy, prompt, response, adjusted_reward)

常见陷阱

  • 奖励黑客。 策略找到奖励模型的漏洞,获得高奖励但输出质量差。修复:KL 惩罚,奖励模型集成,定期人类评估。
  • 奖励模型过拟合。 奖励模型在训练数据上准确但对新输入泛化差。修复:正则化,更多样化的偏好数据。
  • 标注者不一致。 不同标注者对同一对回答给出不同偏好。修复:多人标注取多数,标注者质量筛选。
  • KL 惩罚太大。 策略不偏离 SFT,对齐效果弱。修复:β 从 0.01 开始,逐步增加。
  • KL 惩罚太小。 策略偏离太远,输出无意义。修复:监控 KL 散度,超过阈值时增加 β。
  • 偏好数据偏差。 标注者偏好更长、更礼貌但不太准确的回答。修复:长度归一化奖励,质量优先的标注指南。

实际应用

应用方法
聊天机器人对齐RLHF + PPO 或 DPO
文本摘要RLHF
代码生成RLHF + 执行反馈
图像生成对齐RLHF (人类偏好)
安全对齐红队测试 + RLHF
多模态对齐RLHF 扩展到多模态

交付物

保存 outputs/skill-rlhf-pipeline.md。技能接收对齐需求 + 数据可用性,输出:方法选择(RLHF vs DPO vs RLAIF)、奖励模型架构、KL 惩罚系数和评估协议。

练习

  1. 简单。 运行 code/main.py,在合成偏好数据上训练奖励模型。验证奖励模型给 winner 更高分数的比例。
  2. 中等。 实现 DPO:跳过奖励模型,直接从偏好数据优化策略。比较与 RLHF + PPO 的训练稳定性和最终质量。
  3. 困难。 实现奖励模型集成:训练 3 个独立奖励模型,取平均作为最终奖励。比较与单一奖励模型的鲁棒性(在对抗性输入上测试)。

关键术语

术语们怎么说实际含义
RLHF人类反馈 RL”人类偏好训练奖励模型 + RL 优化
奖励模型评分器”从偏好数据学习的评分函数。
Bradley-Terry”偏好模型”偏好概率参数化P(w > l) = σ(r_w - r_l)
KL 惩罚”偏离惩罚防止策略偏离参考模型太远。
DPO直接偏好优化跳过奖励模型,直接从偏好优化策略。
奖励黑客”奖励作弊”策略利用奖励模型漏洞获得奖励。

生产笔记:RLHF 的标注成本

RLHF 最昂贵的组件不是计算,而是人类标注:

  • InstructGPT。 约 40k 偏好比较,每个约 5 分钟 = 约 3300 标注小时。
  • ChatGPT (推测)。 数百万偏好比较,持续标注
  • Claude (推测)。 类似规模,加上安全专项标注

降低标注成本的策略

  1. RLAIF。 用强模型(GPT-4, Claude)生成偏好标签,成本降低 10-100 倍。
  2. 主动学习。标注模型最不确定的比较对。
  3. DPO。 跳过奖励模型训练减少标注需求
  4. 合成数据。规则模型生成初始偏好数据,人类只审边界案例。

延伸阅读

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式