奖励建模与 RLHF


文档摘要

奖励建模与 RLHF 本节摘要:人类写不出「好的助手回复」的奖励函数,但能比较两个回复并挑出更好的。把奖励模型(Reward Model, RM)拟合到这些比较上,再用 PPO 让语言模型朝它优化——这就是 RLHF(Reinforcement Learning from Human Feedback)。Christiano 2017、InstructGPT 2022,把 GPT-3 变成 ChatGPT 的配方。本节讲透它的三段式管线:SFT(监督微调得到 )→ RM 训练(Bradley-Terry 成对逻辑损失 )→ 带 KL 惩罚的 PPO( )。重点讲清那个 KL 惩罚为何是 RLHF 里最重要的旋钮——没有它,PPO 会找到奖励黑化策略,因为 RM 只在分布内训练过。

奖励建模与 RLHF

本节摘要:人类写不出「好的助手回复」的奖励函数,但能比较两个回复并挑出更好的。把奖励模型(Reward Model, RM)拟合到这些比较上,再用 PPO 让语言模型朝它优化——这就是 RLHF(Reinforcement Learning from Human Feedback)。Christiano 2017、InstructGPT 2022,把 GPT-3 变成 ChatGPT 的配方。本节讲透它的三段式管线:SFT(监督微调得到 π_SFT)→ RM 训练(Bradley-Terry 成对逻辑损失 L = -log σ(R(y_+) - R(y_-)))→ 带 KL 惩罚的 PPO(r = R_φ(x,y) - β·KL(π_θ‖π_ref))。重点讲清那个 KL 惩罚为何是 RLHF 里最重要的旋钮——没有它,PPO 会找到奖励黑化策略,因为 RM 只在分布内训练过。最后给出 2026 年的演化:DPO(闭式塌缩)、GRPO(验证器奖励)、PRM(过程奖励)、Constitutional AI。

对应原课程:Phase 9 · Lesson 09 · reward-modeling-rlhf(原英文 phases/09-reinforcement-learning/09-reward-modeling-rlhf/docs/en.md)。

学习目标

阅读完本节,你应当能够:

  1. 描述 RLHF 的三段式管线(SFT → RM → PPO),并说明每一段的输入、输出与失败模式。
  2. 写出 Bradley-Terry 成对逻辑损失 L = -log σ(R(y_+) - R(y_-)),解释奖励差与偏好对数几率的关系。
  3. 说明 KL 惩罚 β·KL(π_θ‖π_ref) 为何是防奖励黑化的关键,以及自适应 β 的调度。
  4. 识别奖励黑化(Reward Hacking)的症状(奖励涨而人工评估平/降)与缓解(早停、升 β、扩 RM 数据)。
  5. 把 2026 年的对齐方法(DPO、GRPO、PRM、RLAIF)映射到 RLHF 管线的哪个替代环节。

一、问题与直觉

你用下一个 token 预测目标训了一个语言模型。它写出语法的英文。它也会撒谎、啰嗦、该拒绝时不拒绝。你无法靠更多预训练修复——网络文本是问题本身,不是解药。

你想要一个标量奖励,说「对指令 X,回复 A 比 B 好」。手写这个奖励函数不可能——「有用性」不是 token 上的闭式表达式。但人类能比较两个输出、标记偏好。这能廉价地大规模收集。

RLHF(Christiano et al. 2017;Ouyang et al. 2022)把偏好转成奖励模型,再用 PPO 朝它优化 LM。三步:SFT → RM → PPO。这是 2023-2025 年交付 ChatGPT、Claude、Gemini 与每个对齐 LLM 的配方。

2026 年,PPO 步骤大多被 DPO 替代(更便宜、对齐调优几乎一样好)。但奖励模型这块仍支撑着每个 Best-of-N 采样器、每个「可验证奖励的 RL」管线、每个用过程奖励模型的推理模型。理解 RLHF,你就理解了整个对齐栈。

三段式管线

阶段 1:监督微调(SFT)。从预训练基座出发,在目标行为的人工示范上微调(指令跟随回复、有用答复等)。结果:一个 π_SFT,偏向好行为但仍有无界动作空间。

阶段 2:奖励模型训练

  • 收集对提示 x 的回复对 (y_+, y_-),人工标注「y_+ 优于 y_-」。

  • 训练奖励模型 R_φ(x, y)y_+ 更高分。

  • 损失是 Bradley-Terry 成对逻辑:

    L(φ) = -E[ log σ(R_φ(x, y_+) - R_φ(x, y_-)) ]

    σ 是 sigmoid。奖励差隐含偏好的对数几率。BT 自 1952 年就是标准,现代 RLHF 的主导选择。

  • R_φ 通常从 SFT 模型初始化,顶上接一个标量头。同一个 transformer 主干;一层线性层输出奖励。

阶段 3:对 RM 跑 PPO,带 KL 惩罚

  • π_SFT 初始化可训练策略 π_θ。保留一个冻结的参考 π_ref = π_SFT

  • 响应 y 结束时的奖励:

    r_total(x, y) = R_φ(x, y) - β · KL(π_θ(·|x) || π_ref(·|x))

    KL 惩罚阻止 π_θ 任意偏离 π_SFT——它是正则项,不是硬信赖域。β 典型 0.01-0.05。

  • 用这个奖励跑 PPO(第 08 节)。优势在 token 级轨迹上算,但 RM 只对完整响应打分。

为什么需要那个 KL?

没有它,PPO 会愉快地找到奖励黑化策略——RM 只在分布内补全上训练过。一个分布外的回复可能比任何人工写的都高分。KL 把 π_θ 拉在 RM 训练时所在的流形附近。它是 RLHF 里最重要的旋钮。

💡 把 RLHF 理解成「用人类偏好蒸馏出一个标量老师(RM),再让 PPO 跟着老师学,但不许离原来的自己太远(KL)」。这个框架让你立刻看清 DPO(把老师和学生塌缩成一步)与 GRPO(把老师换成验证器、把 critic 换成组均值)各替换了哪一环。

2026 年的状态

  • DPO(Rafailov 2023):闭式代数把阶段 2+3 塌缩成对偏好数据的单一监督损失。无 RM、无 PPO。在对齐 benchmark 上同质量、算力零头。见后续 DPO 章节。
  • GRPO(DeepSeek 2024-2025):PPO 加组相对基线代替 critic,奖励来自验证器(代码能跑 / 数学答案匹配)而非人工训练的 RM。推理模型的主导方法。第 12 节。
  • 过程奖励模型(PRM):给部分解(每一步推理)打分,用于 RLHF 与 GRPO 的推理变体。
  • Constitutional AI / RLAIF:用对齐的 LLM 生成偏好,替代人工。放大偏好预算。

二、从零实现

本节用微型的合成「提示」与「响应」(字符串)表示。RM 是词袋上的线性打分器。没有真实 LLM——管线的形状重要,不是规模。见 code/main.py

Step 1:合成偏好数据

PROMPTS = ["help me", "answer me", "explain this"] GOOD_WORDS = {"clear", "specific", "kind", "thorough"} BAD_WORDS = {"vague", "rude", "wrong", "short"} def make_pair(rng): x = rng.choice(PROMPTS) y_good = rng.choice(list(GOOD_WORDS)) + " " + rng.choice(list(GOOD_WORDS)) y_bad = rng.choice(list(BAD_WORDS)) + " " + rng.choice(list(BAD_WORDS)) return (x, y_good, y_bad)

真实 RLHF 里这换成人工标注。形状——(prompt, preferred_response, rejected_response)——完全一致。

Step 2:Bradley-Terry 奖励模型

线性打分:R(x, y) = w · bag(y)。训练以最小化 BT 成对 log 损失:

def rm_train_step(w, x, y_pos, y_neg, lr): r_pos = dot(w, bag(y_pos)) r_neg = dot(w, bag(y_neg)) p = sigmoid(r_pos - r_neg) for tok, cnt in bag(y_pos).items(): w[tok] += lr * (1 - p) * cnt for tok, cnt in bag(y_neg).items(): w[tok] -= lr * (1 - p) * cnt

几百次更新后,w 给好词 token 正权重、坏词负权重。

Step 3:RM 之上的类 PPO 策略

我们的玩具策略从词表里产出一个 token。我们在 RM 下给 token 打分,算 log π_θ(token | prompt),加对参考的 KL 惩罚,套裁剪 PPO 代理:

def rlhf_step(theta, ref, w, prompt, rng, eps=0.2, beta=0.1, lr=0.05): logits_theta = policy_logits(theta, prompt) probs = softmax(logits_theta) token = sample(probs, rng) logits_ref = policy_logits(ref, prompt) probs_ref = softmax(logits_ref) reward = dot(w, bag([token])) - beta * kl(probs, probs_ref) # 对 theta 做 ppo 风格更新,把 reward 当回报 ...

Step 4:监控 KL

每次更新跟踪平均 KL(π_θ || π_ref)。若爬过 ~5-10,策略已大幅偏离 π_SFT——β 该升或奖励黑化正在开始。这是真实 RLHF 的头号诊断。

Step 5:用 TRL 写生产配方

理解玩具管线后,这是同一个循环作为真实库用户的写法。HuggingFace 的 TRL 是参考实现——RewardTrainer 管阶段 2,PPOTrainer(内置对参考的 KL)管阶段 3。

# 阶段 2:从成对偏好训奖励模型 from trl import RewardTrainer, RewardConfig from transformers import AutoModelForSequenceClassification, AutoTokenizer tok = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct") rm = AutoModelForSequenceClassification.from_pretrained( "meta-llama/Llama-3.1-8B-Instruct", num_labels=1 ) # 数据行:{"prompt", "chosen", "rejected"} — Bradley-Terry 格式 trainer = RewardTrainer( model=rm, tokenizer=tok, train_dataset=preference_data, args=RewardConfig(output_dir="./rm", num_train_epochs=1, learning_rate=1e-5), ) trainer.train()
# 阶段 3:对 RM 跑 PPO,带对 SFT 参考的 KL 惩罚 from trl import PPOTrainer, PPOConfig, AutoModelForCausalLMWithValueHead policy = AutoModelForCausalLMWithValueHead.from_pretrained("./sft-checkpoint") ref = AutoModelForCausalLMWithValueHead.from_pretrained("./sft-checkpoint") # 冻结 ppo = PPOTrainer( config=PPOConfig(learning_rate=1.41e-5, batch_size=64, init_kl_coef=0.05, target_kl=6.0, adap_kl_ctrl=True), model=policy, ref_model=ref, tokenizer=tok, ) for batch in dataloader: responses = ppo.generate(batch["query_ids"], max_new_tokens=128) rewards = rm(torch.cat([batch["query_ids"], responses], dim=-1)).logits[:, 0] stats = ppo.step(batch["query_ids"], responses, rewards) # stats 含:mean_kl、clip_frac、value_loss —— 三个 PPO 诊断

库替你做三件事。adap_kl_ctrl=True 实现自适应 β 调度:观测 KL 超 target_kl 则 β 翻倍;低于一半则 β 减半。参考模型按约定冻结——千万别和 policy 意外共享参数。价值头与策略共用主干(AutoModelForCausalLMWithValueHead 接一个标量 MLP 头),所以 TRL 分别报告 policy/klvalue/loss

💡 Bradley-Terry 的妙处:它把「偏好」这个难以建模的离散判断,转成一个可微的标量差 R(y_+) - R(y_-),再用 sigmoid 套上概率。这一个损失函数就让 RM 能用标准梯度下降训练——这是整个对齐栈能工程化的数学根基。

三、框架对比

2026 年 RLHF 是分层的:

目标 方法
指令跟随、有用性、无害性 对齐 DPO 优于 RLHF-PPO
推理正确性(数学、代码) 能力 GRPO + 验证器奖励(第 12 节)
长视野多步任务 智能体 PPO / GRPO + 步级过程奖励模型
安全 / 拒绝行为 安全 RLHF-PPO + 独立安全 RM,或 Constitutional AI
推理时 Best-of-N 快速对齐 解码时用 RM,无需策略训练
奖励蒸馏 推理算力 在冻结 LM 上训一个小的「奖励头」

RLHF 在 2022-2024 年是那个方法。2026 年,生产对齐管线以 DPO 为主,PPO 只在 RM 密集或安全关键的步骤用。

与 DPO / GRPO 的关系

  • DPO:把阶段 2(RM)+ 阶段 3(PPO)用闭式代数塌缩成对偏好数据的单一监督损失 L = -log σ(β·log(π_θ(y_+|x)/π_ref(y_+|x)) - β·log(π_θ(y_-|x)/π_ref(y_-|x)))。无 RM、无 PPO、无在线采样。它本质上把 RLHF 的 KL 隐式写进了损失
  • GRPO(第 12 节):保留 PPO 的形状,但用组相对基线替代 critic、用验证器(代码单测、数学等式)替代人工 RM。适合有客观答案的推理任务,不适合纯偏好场景

💡 一句话区分:DPO 处理「人觉得哪个好」(纯偏好),GRPO 处理「客观上对不对」(可验证)。RLHF-PPO 则是两者都包含时的通用框架,但工程成本最高。

四、可复用产物

本节产出一个可复用 skill(位于原课程 outputs/skill-rlhf-architect.md)。骨架:

--- name: rlhf-architect description: 为语言模型设计 RLHF / DPO / GRPO 对齐管线,含 RM、KL、数据策略。 version: 1.0.0 phase: 9 lesson: 9 tags: [rl, rlhf, alignment, llm] --- 给定一个基座 LM、一个目标行为(对齐 / 推理 / 拒绝 / 智能体)、以及偏好或验证器预算,输出: 1. 阶段。SFT?RM?DPO?GRPO?附理由。 2. 偏好或验证器来源。人工、AI 反馈、规则、单测通过、奖励蒸馏。 3. KL 策略。固定 β、自适应 β、或 DPO(隐式 KL)。 4. 诊断。平均 KL、奖励稳定性、过优化护栏(留出人工评估集)。 5. 安全门。红队集、拒绝率、安全 RM 与有用性 RM 分开。 拒绝没有 KL 监控的 RLHF-PPO。 拒绝用小于目标策略的 RM。 拒绝只看长度的奖励。 标记任何不留盲测人工评估集的管线为缺乏过优化保护。

五、练习

  1. 基础。code/main.py 里用 500 合成偏好对训 Bradley-Terry 奖励模型。在留出的 100 对上测成对准确率,应超 90%。
  2. 进阶。 跑玩具 PPO-RLHF 循环,β ∈ {0.0, 0.1, 1.0}。对每个,画更新中的 RM 分数 vs 对参考的 KL。哪些会奖励黑化?
  3. 挑战。 在同样的偏好数据上实现 DPO(闭式偏好似然损失),对比 RLHF-PPO 管线的算力消耗与最终 RM 分数。

六、常见陷阱

  • 过优化 / 奖励黑化。 RM 不完美;π_θ 找到分高但差的对抗补全。症状:奖励无限涨而人工评估平/降。修复:早停、升 β、扩 RM 训练数据。
  • 长度黑化。 在有用回复上训的 RM 常隐式奖励长度。策略学会注水回复。缓解:长度归一化奖励,或用长度感知 RM 的 RLAIF。
  • RM 太小。 RM 至少要与策略一样大。小 RM 无法忠实给策略输出打分。
  • KL 调参。 β 太低 → 漂移与奖励黑化;β 太高 → 策略几乎不变。标准技巧是自适应 β,目标是每步固定 KL。
  • 偏好数据噪声。 约 30% 人工标签有噪或模糊。靠在一致过滤数据上训 RM,或给 BT 加温度来校准。
  • off-policy 问题。 PPO 数据第一个 epoch 后略 off-policy。像第 08 节那样监控裁剪比例。

七、关键术语速查

术语 俗称 实际含义
RLHF 「对齐 RL」 三段式 SFT + RM + PPO 管线(Christiano 2017,Ouyang 2022)
奖励模型 RM 「打分网」 用 Bradley-Terry 拟合成对偏好的学到标量函数
Bradley-Terry 「成对逻辑损失」 P(y_+ ≻ y_-) = σ(R(y_+) - R(y_-));标准 RM 目标
KL 惩罚 「别离参考太远」 奖励里的 β·KL(π_θ ‖ π_ref);防奖励黑化的正则项
奖励黑化 「古德哈特定律」 策略利用 RM 缺陷;症状:奖励涨、人工评估平
RLAIF 「AI 标的偏好」 标签来自另一个 LM 而非人工的 RLHF
PRM 「过程奖励模型」 给部分推理步骤打分;用于推理管线
Constitutional AI 「Anthropic 的方法」 由显式规则引导的 AI 生成偏好

八、本节要点回顾

  1. RLHF = SFT → RM → PPO 三段式:把人类偏好蒸馏成标量老师,再让 PPO 跟着学。
  2. Bradley-Terry 损失 L = -log σ(R(y_+) - R(y_-)) 把离散偏好变成可微标量差——RM 可用标准 SGD 训练的数学根基。
  3. RM 通常从 SFT 初始化 + 标量头,与策略同主干、至少同规模。
  4. KL 惩罚 β·KL(π_θ‖π_ref) 是最重要的旋钮:RM 只在分布内训练过,KL 把策略拉在分布内,防奖励黑化。
  5. 自适应 β:观测 KL 超 target 翻倍、低于一半减半;TRL 的 adap_kl_ctrl 实现它。
  6. 奖励黑化症状:奖励涨而人工评估平/降;靠早停、升 β、留盲测集来防。
  7. 2026 年演化:DPO 把 RM+PPO 塌缩成闭式监督损失;GRPO 用验证器替代 RM、组均值替代 critic;PRM 给步级奖励;RLAIF/Constitutional AI 用 AI 标偏好。
  8. 生产管线 DPO 优先:纯偏好用 DPO,可验证推理用 GRPO,RLHF-PPO 只在 RM 密集或安全关键时用。

下一节,我们把环境里有多个学习智能体——马尔可夫假设崩塌,中心化训练/去中心化执行、自博弈、联赛训练登场。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U