第 9 讲:从人类偏好中学习——RLHF 与 DPO

Reinforcement Learning · Lecture 09。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS234 Lecture 9–10(Reinforcement Learning from Human Feedback, Direct Preference Optimization) 配套代码:code/lecture09/(只需 numpy) 预计阅读时间:4 小时


0. 本讲导航

0.1 本讲要回答的问题

有些事情人类很难写成奖励函数、也很难示范,却很容易评判好坏。能不能从人类的”比较”中学习?

写一首好诗很难,但读两首诗说出”哪首更好”很容易;写出一段完美的回答很难,但比较两段回答哪个更有帮助很容易。**从人类偏好中学习(learning from human preferences)**正是利用了这一点。

它是今天大语言模型”对齐”的核心技术。2022 年的 InstructGPT 论文显示:经过 RLHF 的 13 亿参数模型,其回答比没有经过 RLHF 的 1750 亿参数 GPT-3 更受人类标注者欢迎。ChatGPT 正是在此基础上发布的。

0.2 学完本讲,你应该能够

  1. 解释为什么收集成对比较而不是绝对打分。
  2. 写出 Bradley–Terry 模型,说明它的极大似然估计就是逻辑回归,以及”偏好噪声”带来的准确率上限。
  3. 描述 RLHF 的三个阶段:监督微调、奖励模型、带 KL 惩罚的 RL。
  4. 推导 KL 正则 RL 目标的闭式最优解 π∗(y)∝πref(y)exp⁡(r(y)/β)\pi^*(y) \propto \pi_{\mathrm{ref}}(y) \exp(r(y)/\beta)。
  5. 解释奖励过度优化:为什么奖励模型的分数越来越高,真实质量反而下降;KL 惩罚的作用是什么。
  6. 完整推导 DPO 的损失函数,解释它与 RLHF 的等价关系。
  7. 说出 DPO 的优点与局限(离线、确定性偏好下的过拟合等)。

0.3 先修知识

知识点用在哪里最低要求
第 6、7 讲:策略梯度、PPO第 3 节必须
第 8 讲:行为克隆、分布偏移第 3、4 节必须
逻辑回归、sigmoid 函数 σ(z)=1/(1+e−z)\sigma(z) = 1/(1+e^{-z})第 2、5 节知道它把实数映射到 (0, 1)
KL 散度第 3–5 节第 7 讲已介绍
对数的运算:log⁡(ab)=log⁡a+log⁡b\log(ab) = \log a + \log b,log⁡ex=x\log e^x = x第 3、5 节必须

0.4 本讲地图

第1节 为什么从偏好中学习?为什么是比较而不是打分?
   │
第2节 Bradley–Terry 模型:从"A 比 B 好"中学出分数
   │
第3节 RLHF:SFT → 奖励模型 → 带 KL 惩罚的 PPO;KL 正则目标的闭式解
   │
第4节 奖励过度优化:奖励模型在分布外不可信
   │
第5节 DPO:把闭式解代回 Bradley–Terry,绕过奖励模型和 RL
   │
第6节 DPO 的优点与局限
   │
第7节 更广的视角:AI 反馈、可验证奖励

0.5 本讲的实验平台:一个”玩具语言模型”

真正的 RLHF 需要训练几十亿参数的模型。代码 toy_llm.py 把问题简化为:只有一个提示词,模型从 400 个候选回答中选一个。于是”语言模型”就是这 400 个回答上的一个概率分布 π(y)\pi(y)。

  • 每个回答有两个特征:质量(标准正态分布)和长度(0~10)。
  • 真实奖励(代表人类真正的偏好,学习算法看不到它的公式): r∗(y)=质量+0.8⋅长度−0.08⋅长度2r^*(y) = \text{质量} + 0.8 \cdot \text{长度} - 0.08 \cdot \text{长度}^2 长度的贡献先增后减:长度 5 左右最好,太短没说清楚、太长啰嗦。
  • 参考策略 πref\pi_{\mathrm{ref}}(相当于监督微调后的模型):主要生成长度 1~4 的回答,平均长度 2.58。

这个简化保留了 RLHF 的全部数学结构,而且每个量都能精确计算。


1. 为什么从偏好中学习?

1.1 三种反馈方式

反馈方式例子人类的难度对应方法
写出奖励函数“回答有帮助 +1,有害 −10”极难(什么叫”有帮助”?)标准 RL
示范人类亲自写一段理想的回答难、慢、贵模仿学习(第 8 讲)
比较“回答 A 比回答 B 好”容易、快从偏好中学习

示范还有一个根本局限:模型最多只能学到和示范者一样好。而比较不同:人类可能写不出完美的诗,但能分辨两首诗的高下——从比较中学习,模型有可能超越示范者的水平。

从偏好中学习最早在机器人和游戏上取得成功:Christiano et al.(2017)只用人类对两段短视频的比较(约 900 次比较),就教会了模拟机器人做后空翻——而这个动作的奖励函数几乎无法手写。

1.2 为什么是比较,而不是打分?

一个自然的问题:为什么不直接让人类给每个回答打一个 1~10 分?

因为不同的人打分的”尺度”不同:有人习惯打高分,有人习惯打低分;有人打分分散,有人打分集中。同一个人在不同时间、看过不同的例子之后,打分标准也会漂移。绝对分数很难校准。

但比较不受这些影响:同一个人比较两个回答时,他的”习惯偏移”对两个回答是一样的,相减就抵消了。

代码验证:01_bradley_terry.py 演示 3 模拟了 20 个打分尺度各不相同的标注者(每人的分数 = a×a \times 真实效用 +b+ b + 噪声,aa、bb 因人而异)。同样的标签数量下,恢复出的排名与真实排名的相关系数:

标签数打分取平均比较 + Bradley–Terry
1000.6210.860
3000.8880.959
10000.9630.984

2. Bradley–Terry 模型

2.1 模型

Bradley–Terry 模型(1952)假设每个选项 ii 有一个潜在的效用(奖励)rir_i,并且

P(i≻j)=σ(ri−rj)=11+e−(ri−rj)=erieri+erjP(i \succ j) = \sigma(r_i - r_j) = \frac{1}{1 + e^{-(r_i - r_j)}} = \frac{e^{r_i}}{e^{r_i} + e^{r_j}}
  • 效用相同时,P=0.5P = 0.5;
  • 效用差 1 时,P≈0.73P \approx 0.73;差 2 时约 0.88;差 4 时约 0.98。

人类偏好是有噪声的:更好的选项并不总被选中。国际象棋的 Elo 等级分背后就是这个模型(Elo 分差 400 分对应约 10 倍的”胜率比”)。

2.2 极大似然估计 = 逻辑回归

给定比较数据 {(ik,jk,yk)}\{(i_k, j_k, y_k)\}(yk=1y_k = 1 表示 iki_k 被偏好),对数似然为

L(r)=∑k[yklog⁡σ(rik−rjk)+(1−yk)log⁡σ(rjk−rik)]\mathcal{L}(r) = \sum_k \Big[ y_k \log \sigma(r_{i_k} - r_{j_k}) + (1 - y_k) \log \sigma(r_{j_k} - r_{i_k}) \Big]

这正是逻辑回归:输入是”ii 的独热向量减去 jj 的独热向量”,标签是 yy。梯度的直觉:“实际赢的次数”减去”模型预测会赢的次数”,赢得比预测多,就提高它的效用。

不可辨识性:给所有 rir_i 加同一个常数,所有概率都不变——效用只能确定到”差一个常数”(和第 8 讲 IRL 中”常数奖励不可辨识”是同一件事)。

2.3 准确率的上限

代码 01 演示 2:10 个选项,用不同数量的比较恢复效用:

比较数排名相关预测新比较的准确率
300.87967.8%
3000.98870.3%
10001.00070.4%
50000.98870.3%

即使知道真实效用,预测新比较的准确率上限也只有 70.4%——这是偏好本身的噪声。在真实的 RLHF 中,奖励模型的准确率通常也只有 65%~75%,人类标注者之间的一致率本身也就在这个水平(InstructGPT 报告的标注者一致率约为 73%)。这并不一定说明模型很差。

2.4 从”选项”到”回答”:奖励模型

在 RLHF 中,“选项”是模型对某个提示词 xx 的回答 yy。回答有无穷多种,不可能给每个回答单独存一个效用。所以用一个参数化的奖励模型 rϕ(x,y)r_\phi(x, y)(通常是在 SFT 语言模型上加一个输出标量的”头”)来预测效用,用 Bradley–Terry 损失训练:

LRM(ϕ)=−E(x,yw,yl)∼D[log⁡σ(rϕ(x,yw)−rϕ(x,yl))]\mathcal{L}_{\mathrm{RM}}(\phi) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}}\left[ \log \sigma\big( r_\phi(x, y_w) - r_\phi(x, y_l) \big) \right]

(ywy_w:被偏好的回答,ww = win;yly_l:未被偏好的回答,ll = lose。)


3. RLHF:从人类反馈中强化学习

3.1 三个阶段

  阶段 1:监督微调(SFT)           阶段 2:训练奖励模型              阶段 3:强化学习
  ┌──────────────────┐        ┌──────────────────────┐        ┌───────────────────────────┐
  │ 人类写的示范回答  │        │ 对每个提示,SFT 模型  │        │ max E[r_φ(x,y)]            │
  │ → 行为克隆       │  ───►  │ 生成几个回答,        │  ───►  │     - β KL(π ‖ π_SFT)     │
  │ (第 8 讲)       │        │ 人类比较哪个更好      │        │ 用 PPO 优化(第 7 讲)     │
  │ 得到 π_SFT       │        │ → 训练 r_φ(第 2 节) │        │ π_ref = π_SFT              │
  └──────────────────┘        └──────────────────────┘        └───────────────────────────┘
  1. 监督微调(SFT):在人类写的高质量示范上做行为克隆,得到 πSFT\pi_{\mathrm{SFT}}。它让模型学会”像样的回答长什么样”,为后面的 RL 提供一个好的起点(第 8 讲 7.1 节:“用模仿学习初始化,再用 RL 微调”)。
  2. 奖励模型:对每个提示,让 SFT 模型生成几个回答,请人类比较,用 Bradley–Terry 损失训练 rϕr_\phi。
  3. 强化学习:用 PPO 优化
max⁡π  Ex∼D, y∼π(⋅∣x)[rϕ(x,y)]−β KL(π(⋅∣x) ∥ πref(⋅∣x))\max_\pi \; \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi(\cdot \mid x)}\left[ r_\phi(x, y) \right] - \beta\, \mathrm{KL}\big( \pi(\cdot \mid x) \,\Vert\, \pi_{\mathrm{ref}}(\cdot \mid x) \big)

其中 πref=πSFT\pi_{\mathrm{ref}} = \pi_{\mathrm{SFT}}。

RL 视角下的 RLHF:提示词是”状态”,模型生成的整段回答是”动作”,奖励只在回答结束时给出——这是一个上下文老虎机(第 1 讲 3.7 节)。如果把每个 token 看成一个动作,就是一个每步奖励为 0(除了最后一步)的 MDP,PPO 在 token 层面上计算优势(第 7 讲 GAE)。

KL 惩罚在实践中怎么算? 通常把它放进每个 token 的奖励里:第 tt 个 token 的奖励为 −βlog⁡π(yt∣x,y<t)πref(yt∣x,y<t)-\beta \log \frac{\pi(y_t \mid x, y_{<t})}{\pi_{\mathrm{ref}}(y_t \mid x, y_{<t})},最后一个 token 再加上 rϕ(x,y)r_\phi(x, y)。所有 token 的 KL 项加起来,恰好是整段回答的 KL 散度的一个无偏估计。

3.2 为什么需要 KL 惩罚?

三个原因:

  1. 奖励模型只在参考模型的分布附近可信。它是在 πSFT\pi_{\mathrm{SFT}} 生成的回答上训练的;RL 把模型推得越远,奖励模型越不准,模型越可能利用它的漏洞(第 4 节)。这又是分布偏移(第 8 讲 7.2 节)。
  2. 保持语言能力:不加约束的 RL 可能让模型输出”奖励模型喜欢但不像人话”的文本。
  3. 保持多样性:没有 KL 项时,最优策略会塌缩到”奖励最高的那一个回答”上(确定性策略)。KL 项让最优解保持随机性。

3.3 KL 正则目标的闭式最优解

对一个固定的提示词(省略 xx),目标是

J(π)=Ey∼π[r(y)]−β KL(π∥πref)=∑yπ(y)[r(y)−βlog⁡π(y)πref(y)]J(\pi) = \mathbb{E}_{y \sim \pi}[r(y)] - \beta\, \mathrm{KL}(\pi \Vert \pi_{\mathrm{ref}}) = \sum_y \pi(y) \left[ r(y) - \beta \log \frac{\pi(y)}{\pi_{\mathrm{ref}}(y)} \right]

定义 π∗(y)=1Zπref(y)exp⁡(r(y)/β)\pi^*(y) = \frac{1}{Z} \pi_{\mathrm{ref}}(y) \exp\big(r(y)/\beta\big),Z=∑yπref(y)exp⁡(r(y)/β)Z = \sum_y \pi_{\mathrm{ref}}(y) \exp(r(y)/\beta) 是归一化常数。那么 r(y)=βlog⁡π∗(y)πref(y)+βlog⁡Zr(y) = \beta \log \frac{\pi^*(y)}{\pi_{\mathrm{ref}}(y)} + \beta \log Z。代入:

J(π)=∑yπ(y)[βlog⁡π∗(y)πref(y)+βlog⁡Z−βlog⁡π(y)πref(y)]=βlog⁡Z−β∑yπ(y)log⁡π(y)π∗(y)=βlog⁡Z−β KL(π∥π∗)\begin{aligned} J(\pi) &= \sum_y \pi(y) \left[ \beta \log \frac{\pi^*(y)}{\pi_{\mathrm{ref}}(y)} + \beta \log Z - \beta \log \frac{\pi(y)}{\pi_{\mathrm{ref}}(y)} \right] \\ &= \beta \log Z - \beta \sum_y \pi(y) \log \frac{\pi(y)}{\pi^*(y)} \\ &= \beta \log Z - \beta\, \mathrm{KL}(\pi \Vert \pi^*) \end{aligned}

βlog⁡Z\beta \log Z 与 π\pi 无关,而 KL 散度 ≥0\ge 0、当且仅当 π=π∗\pi = \pi^* 时为 0。所以

  π∗(y)=1Z πref(y) exp⁡ ⁣(r(y)β)  \boxed{\;\pi^*(y) = \frac{1}{Z}\, \pi_{\mathrm{ref}}(y)\, \exp\!\left( \frac{r(y)}{\beta} \right)\;}

直觉:在参考模型的基础上,按奖励的高低”指数地重新加权”。β\beta 大(约束强),exp⁡(r/β)\exp(r/\beta) 接近 1,策略几乎不变;β\beta 小(约束弱),高奖励的回答被急剧放大。

代码验证:03_rlhf_kl.py 演示 1 对闭式解随机扰动 1000 次,目标值全部变差;演示 3 用策略梯度(把 KL 惩罚放进每个样本的奖励里,第 3.1 节的做法)从 πref\pi_{\mathrm{ref}} 出发优化,2 万步后与闭式解的 KL 降到 0.048,目标值 2.2427(闭式解 2.2492)。

那为什么还要用 PPO? 因为真实的语言模型中,回答有天文数字那么多,无法计算 ZZ,也无法写出 π∗\pi^* 的每个概率——只能用 RL 去逼近它。


4. 奖励过度优化

4.1 奖励模型在分布外不可信

在玩具模型中,参考策略几乎只生成长度 1~4 的回答。在这个区间里,更长的回答通常更好(真实奖励随长度上升,峰值在长度 5 左右)。

用 3000 对人类比较(从参考策略中抽取回答)训练一个线性奖励模型 r^(y)=w⋅[质量,长度]\hat r(y) = w \cdot [\text{质量}, \text{长度}],得到 w=[0.944,0.386]w = [0.944, 0.386]——它学到了”质量越高越好”(正确)和”越长越好”(只在短回答的范围内正确)。

它的准确率(代码 02_reward_model.py 演示 3,与真实奖励的判断比较):

回答对的来源准确率
从 SFT 模型中抽取(训练分布内)96.8%
两个回答都长于 6(训练分布外)70.6%
长回答(> 6)vs 适中回答(4~5.5)43.8%(比随机猜还差)

沿着长度看(质量固定为 0,在长度 2.5 处对齐):

长度12345678910
真实奖励0.721.281.681.922.001.921.681.280.720.00
奖励模型0.921.311.692.082.472.853.243.634.014.40

在数据最多的地方两者几乎重合;长度越大,奖励模型高估得越厉害。

4.2 过度优化

现在用 3.3 节的闭式解,在不同的 β\beta 下”优化”这个奖励模型(代码 03 演示 2;奖励模型分数和真实奖励都表示为相对于参考策略的提升):

β\betaKL(π∥πref)\mathrm{KL}(\pi \Vert \pi_{\mathrm{ref}})平均长度奖励模型分数真实奖励若直接优化真实奖励
100.012.63+0.11+0.11+0.12
10.483.12+1.00+1.02+1.06
0.51.603.65+1.75+1.75+1.74
0.33.294.31+2.40+2.30+2.24
0.24.954.90+2.81+2.52+2.53
0.111.897.34+3.79+2.19+2.70
0.0513.357.78+3.90+1.93+2.73
0.0220.339.34+4.16+0.71+2.73
  • 奖励模型的分数随 β\beta 减小单调上升——从它的角度看,优化越激进越好。
  • 真实奖励却先升后降:在 β≈0.2\beta \approx 0.2(KL ≈ 5)时最高,之后模型开始利用奖励模型的缺陷——回答越写越长(平均长度从 2.6 涨到 9.3),奖励模型给高分,真实质量却在下降。
  • 最右一列是”如果能直接优化真实奖励”:它单调上升。两者的差距完全来自奖励模型在分布外的错误。

这就是奖励过度优化(reward over-optimization),也叫 Goodhart 定律:“当一个指标变成了优化目标,它就不再是一个好指标。” Gao et al.(2022)在真实的语言模型上系统地测量了这个现象,发现”真实奖励先升后降”的曲线非常普遍,而且奖励模型越大、数据越多,拐点来得越晚。

这不是玩具例子才有的问题。真实 RLHF 中广泛观察到的”长度偏差”(RLHF 后的模型回答越来越长、越来越啰嗦)、“谄媚”(模型倾向于附和用户的观点,因为标注者更喜欢被认同)都是这种现象的实例。

4.3 缓解方法

  • KL 惩罚(选择合适的 β\beta):把模型限制在奖励模型”还可信”的范围内。
  • 提前停止:监控 KL 或在留出的人类评估上的表现,在拐点之前停下。
  • 奖励模型集成:用多个奖励模型,取保守的估计(比如最小值),它们意见不一的地方就是”不可信”的地方——这和第 10 讲离线 RL 中的”悲观原则”是同一个思想。
  • 迭代 / 在线 RLHF:用当前模型生成新的回答,请人类重新比较,更新奖励模型——让奖励模型的训练分布跟上策略的变化。这和第 8 讲的 DAgger 思想一致:在学习者自己的分布上收集反馈。
  • 长度惩罚等针对已知漏洞的修补。

5. DPO:直接偏好优化

5.1 核心推导

RLHF 需要两个阶段(奖励模型 + RL),还有 PPO 的全部复杂性(第 7 讲:价值网络、GAE、裁剪、一堆超参数)。Rafailov et al.(2023)提出的 **DPO(Direct Preference Optimization)**问:既然知道了最优策略的闭式解,能不能直接从偏好数据学策略?

第 1 步:把闭式解反过来写。由 3.3 节,π∗(y)=1Zπref(y)exp⁡(r(y)/β)\pi^*(y) = \frac1Z \pi_{\mathrm{ref}}(y) \exp(r(y)/\beta),两边取对数、整理:

r(y)=βlog⁡π∗(y)πref(y)+βlog⁡Zr(y) = \beta \log \frac{\pi^*(y)}{\pi_{\mathrm{ref}}(y)} + \beta \log Z

奖励可以用最优策略来表示。βlog⁡π(y)πref(y)\beta \log \frac{\pi(y)}{\pi_{\mathrm{ref}}(y)} 叫策略 π\pi 的隐式奖励(implicit reward)。

代码验证:04_dpo.py 演示 1,取 π∗∝πrefexp⁡(r∗/β)\pi^* \propto \pi_{\mathrm{ref}} \exp(r^*/\beta),计算 r∗(y)−βlog⁡π∗(y)πref(y)r^*(y) - \beta \log \frac{\pi^*(y)}{\pi_{\mathrm{ref}}(y)}:对全部 400 个回答都等于 2.720663——一个常数(=βlog⁡Z= \beta \log Z)。

第 2 步:代入 Bradley–Terry 模型。偏好概率只依赖奖励之差,βlog⁡Z\beta \log Z 在相减时抵消了:

P(yw≻yl)=σ(r(yw)−r(yl))=σ(βlog⁡π∗(yw)πref(yw)−βlog⁡π∗(yl)πref(yl))P(y_w \succ y_l) = \sigma\big( r(y_w) - r(y_l) \big) = \sigma\left( \beta \log \frac{\pi^*(y_w)}{\pi_{\mathrm{ref}}(y_w)} - \beta \log \frac{\pi^*(y_l)}{\pi_{\mathrm{ref}}(y_l)} \right)

这一步是 DPO 的关键:那个无法计算的配分函数 ZZ 消失了,剩下的全是可以计算的量(策略对某个回答的对数概率)。

第 3 步:直接对策略做极大似然。把 π∗\pi^* 换成要学的参数化策略 πθ\pi_\theta,在偏好数据上最大化似然:

  LDPO(θ)=−E(x,yw,yl)∼D[log⁡σ(βlog⁡πθ(yw∣x)πref(yw∣x)−βlog⁡πθ(yl∣x)πref(yl∣x))]  \boxed{\;\mathcal{L}_{\mathrm{DPO}}(\theta) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}}\left[ \log \sigma\left( \beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\mathrm{ref}}(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\mathrm{ref}}(y_l \mid x)} \right) \right]\;}

没有奖励模型,没有 RL,没有采样——只是在偏好数据上做一个监督学习。

5.2 梯度的直觉

记隐式奖励 r^θ(y)=βlog⁡πθ(y)πref(y)\hat r_\theta(y) = \beta \log \frac{\pi_\theta(y)}{\pi_{\mathrm{ref}}(y)}。DPO 损失的梯度为

∇θLDPO=−β E[σ(r^θ(yl)−r^θ(yw))⏟隐式奖励模型判断错的程度(∇θlog⁡πθ(yw)⏟提高好回答的概率−∇θlog⁡πθ(yl)⏟降低差回答的概率)]\nabla_\theta \mathcal{L}_{\mathrm{DPO}} = -\beta\, \mathbb{E}\Big[ \underbrace{\sigma\big(\hat r_\theta(y_l) - \hat r_\theta(y_w)\big)}_{\text{隐式奖励模型判断错的程度}} \big( \underbrace{\nabla_\theta \log \pi_\theta(y_w)}_{\text{提高好回答的概率}} - \underbrace{\nabla_\theta \log \pi_\theta(y_l)}_{\text{降低差回答的概率}} \big) \Big]
  • 提高被偏好回答的概率,降低未被偏好回答的概率;
  • 权重 σ(r^θ(yl)−r^θ(yw))\sigma(\hat r_\theta(y_l) - \hat r_\theta(y_w)):隐式奖励模型判断错得越多(认为差回答更好),这个样本的梯度越大;已经判断对的样本几乎不贡献梯度。这和逻辑回归完全一样。

5.3 DPO 与 RLHF 是同一个问题

DPO 并不是一个”新的目标”。如果策略的参数化足够灵活,DPO 的最优解就是”用同样的数据训练 Bradley–Terry 奖励模型,再求 KL 正则最优解”。

代码验证:代码 04 演示 2 用表格型策略(每个回答一个 logit)训练 DPO,同时用同样的数据、同样的 L2 正则训练表格型奖励模型并求闭式解。两个策略之间的 KL 散度为 3×10−173 \times 10^{-17}(浮点误差),平均长度都是 3.120,真实奖励都是 3.1002——完全相同。

DPO 把”训练奖励模型”和”求最优策略”合并成了一步监督学习。这就是 DPO 论文标题的含义:Your Language Model is Secretly a Reward Model。


6. DPO 的优点与局限

6.1 优点

  • 简单:只需要一个监督学习的损失函数,几十行代码;不需要奖励模型、价值网络、GAE、裁剪。
  • 稳定:没有 RL 训练的种种不稳定(第 7 讲)。
  • 高效:不需要在训练中从策略采样生成回答(生成是 RLHF 中最耗时的部分)。

因此 DPO 及其变体在开源社区被广泛采用。

6.2 局限一:它没有消除过度优化

DPO 优化的依然是”KL 正则的偏好似然”,只是换了一种求解方式。代码 04 演示 3:

β\betaDPO:KLDPO:平均长度DPO:真实奖励RLHF(线性 RM):KL平均长度真实奖励
2.00.112.792.1980.132.862.272
0.51.103.123.1001.603.653.477
0.22.613.353.4824.954.904.249
0.13.483.473.42511.897.343.917
0.054.013.623.27613.357.783.657

(参考策略的真实奖励为 1.730。)

两者都在 β\beta 适中时最好,β\beta 太小都会变差。它们出错的方式不同:线性奖励模型把”越长越好”外推到从没见过的长回答上;表格型的 DPO 只能调整出现在偏好数据里的回答(400 个中出现过 224 个),但会过度相信那些只被比较过一两次的回答(见 6.3 节)。真实的 DPO 用神经网络参数化策略,会像奖励模型一样泛化——包括泛化出错。

6.3 局限二:确定性偏好下的过拟合

Azar et al.(2023)指出 DPO 的一个问题。假设数据中只有一条偏好:回答 aa 比回答 bb 好(只比较过一次,所以从数据的角度看,aa 是”100% 赢”的)。

(代码 04 演示 4;两种 β\beta 下学习率都按 1/β21/\beta^2 缩放,使隐式奖励的变化速度相同。这条标签恰好是”错”的:bb 的真实奖励 −0.101 高于 aa 的 −0.237,人类偏好有噪声。)

训练步数隐式奖励之差 r^(a)−r^(b)\hat r(a) - \hat r(b)π(b)/πref(b)\pi(b)/\pi_{\mathrm{ref}}(b),β=0.1\beta = 0.1π(b)/πref(b)\pi(b)/\pi_{\mathrm{ref}}(b),β=1\beta = 1
103.022.0×10−72.0 \times 10^{-7}0.22
1,0007.601.1×10−261.1 \times 10^{-26}0.022
100,00012.211.1×10−461.1 \times 10^{-46}0.0022

隐式奖励之差随训练不断增长(大约按训练步数的对数增长),没有上限;回答 bb 的概率被压向 0——无论 β\beta 取多少。

原因:只要数据中 aa 总是赢,σ(u)<1\sigma(u) < 1,损失就还能继续下降;而 DPO 的损失里没有一个把策略拉回 πref\pi_{\mathrm{ref}} 的项——β\beta 只改变了尺度,不能阻止 u→∞u \to \infty。对比 RLHF:奖励模型通常有正则化和提前停止,RL 阶段的 KL 惩罚会显式地把策略拉回 πref\pi_{\mathrm{ref}}。

实践中,同一对回答通常只被标注一次,每一条偏好在数据中都是”确定性”的,所以这个问题真实存在。IPO 等变体就是为此提出的;实践中也常用提前停止、较少的训练轮数来缓解。

6.4 局限三:离线

DPO 只在一个固定的偏好数据集上训练,数据来自某个旧模型。随着训练,策略的分布离数据分布越来越远,而 DPO 无法获得新分布上的反馈——又是分布偏移。在线 / 迭代 DPO(用当前模型生成新回答、重新标注)是常见的改进。

6.5 其他变体

DPO 之后出现了大量变体:IPO(修正确定性偏好下的过拟合)、KTO(只需要”好 / 不好”的单点标注,不需要成对比较)、ORPO、SimPO(不需要参考模型)等。它们的共同出发点都是 5.1 节的推导。


7. 更广的视角

7.1 反馈从哪里来?

  • 人类反馈(RLHF):昂贵,但代表真实的人类偏好。
  • AI 反馈(RLAIF):用另一个大模型按照一套原则(“宪法”)来比较回答,例如 Anthropic 的 Constitutional AI。便宜、可扩展,但继承了评判模型的偏差。
  • 可验证的奖励:对于数学、编程等问题,答案是否正确可以自动检验(比对标准答案、运行单元测试),不需要奖励模型——也就没有奖励模型被”投机”的问题。2024~2025 年的推理模型(如 OpenAI o1、DeepSeek-R1)正是用这种奖励进行大规模 RL 训练的。第 16 讲会讨论其中的 GRPO 算法。

7.2 回顾:本讲在全课中的位置

讲次学习信号核心困难
第 3–7 讲环境给出的奖励探索、信用分配、方差
第 8 讲专家的示范分布偏移(复合误差)
第 9 讲人类的比较分布偏移(奖励模型在分布外不可信)
第 10 讲固定的历史数据分布偏移(价值估计在分布外不可信)

8. 本讲总结

8.1 核心概念清单

  1. 从偏好中学习:比较比示范容易,比打分一致;有可能超越示范者。
  2. Bradley–Terry:P(i≻j)=σ(ri−rj)P(i \succ j) = \sigma(r_i - r_j);极大似然 = 逻辑回归;效用只能确定到一个常数;偏好噪声决定了准确率上限。
  3. RLHF 三阶段:SFT(行为克隆)→ 奖励模型(BT 损失)→ PPO 优化 E[rϕ]−β KL(π∥πref)\mathbb{E}[r_\phi] - \beta\,\mathrm{KL}(\pi \Vert \pi_{\mathrm{ref}})。
  4. 闭式解:π∗∝πrefexp⁡(r/β)\pi^* \propto \pi_{\mathrm{ref}} \exp(r/\beta);证明:J(π)=βlog⁡Z−β KL(π∥π∗)J(\pi) = \beta \log Z - \beta\,\mathrm{KL}(\pi \Vert \pi^*)。
  5. 奖励过度优化:奖励模型分数一路上升,真实奖励先升后降;根源是奖励模型在分布外的错误;KL 惩罚把模型限制在可信范围内。
  6. DPO:r=βlog⁡π∗πref+βlog⁡Zr = \beta \log \frac{\pi^*}{\pi_{\mathrm{ref}}} + \beta \log Z 代入 BT,ZZ 抵消,得到只依赖策略的损失。
  7. DPO ≡ RLHF 的同一问题(参数化足够灵活时);简单稳定,但离线、没有消除过度优化、在确定性偏好下过拟合。
  8. 分布偏移贯穿模仿学习、RLHF、离线 RL。

8.2 公式速查表

名称公式
Bradley–TerryP(i≻j)=σ(ri−rj)=erieri+erjP(i \succ j) = \sigma(r_i - r_j) = \frac{e^{r_i}}{e^{r_i} + e^{r_j}}
奖励模型损失LRM=−E[log⁡σ(rϕ(x,yw)−rϕ(x,yl))]\mathcal{L}_{\mathrm{RM}} = -\mathbb{E}[\log \sigma(r_\phi(x, y_w) - r_\phi(x, y_l))]
RLHF 目标max⁡πEy∼π[r(y)]−β KL(π∥πref)\max_\pi \mathbb{E}_{y \sim \pi}[r(y)] - \beta\,\mathrm{KL}(\pi \Vert \pi_{\mathrm{ref}})
每 token KL 奖励rt=−βlog⁡π(yt∣⋅)πref(yt∣⋅)r_t = -\beta \log \frac{\pi(y_t \mid \cdot)}{\pi_{\mathrm{ref}}(y_t \mid \cdot)}(最后一个 token 再加 rϕr_\phi)
闭式最优解π∗(y)=1Zπref(y)exp⁡(r(y)/β)\pi^*(y) = \frac1Z \pi_{\mathrm{ref}}(y) \exp(r(y)/\beta)
目标的分解J(π)=βlog⁡Z−β KL(π∥π∗)J(\pi) = \beta \log Z - \beta\,\mathrm{KL}(\pi \Vert \pi^*)
奖励的策略表示r(y)=βlog⁡π∗(y)πref(y)+βlog⁡Zr(y) = \beta \log \frac{\pi^*(y)}{\pi_{\mathrm{ref}}(y)} + \beta \log Z
DPO 损失−E[log⁡σ(βlog⁡πθ(yw)πref(yw)−βlog⁡πθ(yl)πref(yl))]-\mathbb{E}\left[\log \sigma\left(\beta \log \frac{\pi_\theta(y_w)}{\pi_{\mathrm{ref}}(y_w)} - \beta \log \frac{\pi_\theta(y_l)}{\pi_{\mathrm{ref}}(y_l)}\right)\right]
DPO 梯度权重σ(r^θ(yl)−r^θ(yw))\sigma(\hat r_\theta(y_l) - \hat r_\theta(y_w))

8.3 中英术语对照表

中文英文中文英文
从人类反馈中强化学习Reinforcement Learning from Human Feedback (RLHF)人类偏好Human preferences
成对比较Pairwise comparisonBradley–Terry 模型Bradley–Terry model
效用UtilityElo 等级分Elo rating
监督微调Supervised fine-tuning (SFT)奖励模型Reward model (RM)
参考模型Reference modelKL 惩罚KL penalty
配分函数Partition function闭式解Closed-form solution
奖励过度优化Reward over-optimizationGoodhart 定律Goodhart’s law
奖励投机Reward hacking谄媚Sycophancy
直接偏好优化Direct Preference Optimization (DPO)隐式奖励Implicit reward
AI 反馈强化学习RL from AI Feedback (RLAIF)宪法 AIConstitutional AI
可验证奖励Verifiable rewards上下文老虎机Contextual bandit

9. 练习题

练习 1(Bradley–Terry):两个回答的奖励模型分数分别为 2.0 和 0.5。按 Bradley–Terry 模型,人类更喜欢第一个的概率是多少?如果两个分数都加 10 呢?

参考答案

σ(2.0−0.5)=σ(1.5)=1/(1+e−1.5)≈0.818\sigma(2.0 - 0.5) = \sigma(1.5) = 1/(1 + e^{-1.5}) \approx 0.818。都加 10 后差不变,概率仍是 0.818——这就是”效用只能确定到一个常数”。

练习 2(闭式解):三个回答,πref=[0.5,0.3,0.2]\pi_{\mathrm{ref}} = [0.5, 0.3, 0.2],奖励 r=[0,1,2]r = [0, 1, 2]。求 β=1\beta = 1 和 β=0.5\beta = 0.5 时的最优策略 π∗\pi^*。

参考答案

β=1\beta = 1:未归一化权重 [0.5,0.3e,0.2e2]=[0.5,0.815,1.478][0.5, 0.3e, 0.2e^2] = [0.5, 0.815, 1.478],和为 2.793,π∗≈[0.179,0.292,0.529]\pi^* \approx [0.179, 0.292, 0.529]。 β=0.5\beta = 0.5:权重 [0.5,0.3e2,0.2e4]=[0.5,2.217,10.920][0.5, 0.3e^2, 0.2e^4] = [0.5, 2.217, 10.920],和为 13.637,π∗≈[0.037,0.163,0.801]\pi^* \approx [0.037, 0.163, 0.801]。 β\beta 越小,越集中在高奖励的回答上。

练习 3(推导):证明 J(π)=Eπ[r]−β KL(π∥πref)J(\pi) = \mathbb{E}_\pi[r] - \beta\,\mathrm{KL}(\pi \Vert \pi_{\mathrm{ref}}) 在 π∗\pi^* 处的值等于 βlog⁡Z\beta \log Z。

参考答案

由 3.3 节,J(π)=βlog⁡Z−β KL(π∥π∗)J(\pi) = \beta \log Z - \beta\,\mathrm{KL}(\pi \Vert \pi^*)。在 π=π∗\pi = \pi^* 处 KL 为 0,所以 J(π∗)=βlog⁡ZJ(\pi^*) = \beta \log Z。(这也说明 βlog⁡Z\beta \log Z 是”软最大值”:β→0\beta \to 0 时 βlog⁡Z→max⁡yr(y)\beta \log Z \to \max_y r(y),与第 8 讲软价值迭代中的 log-sum-exp 是同一个量。)

练习 4(DPO 推导):在 DPO 的推导中,为什么 βlog⁡Z\beta \log Z 能够被消去?如果把 Bradley–Terry 模型换成"P(yw≻yl)=σ(r(yw))P(y_w \succ y_l) = \sigma(r(y_w))"(只依赖被偏好回答的奖励),推导还成立吗?

参考答案

因为 Bradley–Terry 只依赖奖励之差,βlog⁡Z\beta \log Z 在两个回答中相同(同一个提示词),相减抵消。如果偏好概率只依赖单个回答的奖励,βlog⁡Z\beta \log Z 就不会消掉,而 ZZ 无法计算,推导失效。(KTO 等方法用其他方式处理了单点反馈。)

练习 5(DPO 梯度):某条偏好数据中,当前策略的隐式奖励 r^(yw)=0.5\hat r(y_w) = 0.5,r^(yl)=2.0\hat r(y_l) = 2.0。这条数据的梯度权重是多少?如果 r^(yw)=3.0\hat r(y_w) = 3.0,r^(yl)=0\hat r(y_l) = 0 呢?

参考答案

权重 =σ(r^(yl)−r^(yw))= \sigma(\hat r(y_l) - \hat r(y_w))。第一种:σ(1.5)≈0.818\sigma(1.5) \approx 0.818(模型判断错了,大梯度)。第二种:σ(−3)≈0.047\sigma(-3) \approx 0.047(已经判断对了,几乎不再更新)。

练习 6(过度优化):在 4.2 节的表格中,为什么”直接优化真实奖励”那一列在 β\beta 很小时停在 +2.73 不再增加?

参考答案

β→0\beta \to 0 时,最优策略集中在真实奖励最高的那个回答上(真实奖励 4.46,参考策略的平均为 1.73,差 +2.73)。已经不能再高了。

练习 7(动手)★:修改 toy_llm.py 中的 reference_policy,把长度中心从 2.5 改成 5(参考模型本来就写”长度合适”的回答)。重新运行 02_reward_model.py 和 03_rlhf_kl.py。奖励模型学到的长度权重如何变化?过度优化的程度如何变化?

提示

数据覆盖了真实奖励的峰值两侧,“越长越好”不再成立。

参考结果:奖励模型学到的权重约为 [1.00, −0.03]——长度权重几乎为 0(线性模型无法表示”先升后降”,但至少不再一边倒地偏好长回答)。β\beta 从 1 降到 0.02,真实奖励的提升为 +0.86、+1.49、+2.14、+2.26、+2.30、+2.30,单调上升,过度优化消失了,平均长度始终保持在 4.6~4.9。

这说明参考模型(数据分布)的覆盖范围对 RLHF 至关重要:奖励模型只在它见过的地方可信。

练习 8(思考题):DAgger(第 8 讲)和”迭代 / 在线 RLHF”有什么共同之处?为什么它们都能缓解分布偏移?

参考答案

两者都是”在学习者当前的分布上收集新的反馈”:DAgger 让专家标注学习者自己访问的状态;在线 RLHF 让人类比较当前模型自己生成的回答,再更新奖励模型。这样,训练数据的分布就能跟上策略分布的变化,模型不会在”没有反馈的地方”越走越远。


10. 延伸阅读

  • CS234 Spring 2024 Lecture 9–10 录像与课件。
  • Christiano et al. (2017),Deep Reinforcement Learning from Human Preferences:从人类偏好中学习的开创性工作。
  • Ouyang et al. (2022),Training Language Models to Follow Instructions with Human Feedback(InstructGPT):RLHF 三阶段流程。
  • Gao, Schulman & Hilton (2022),Scaling Laws for Reward Model Overoptimization:奖励过度优化的系统测量。
  • Rafailov et al. (2023),Direct Preference Optimization: Your Language Model is Secretly a Reward Model:DPO。
  • Azar et al. (2023),A General Theoretical Paradigm to Understand Learning from Human Preferences:IPO,以及 DPO 过拟合的分析。
  • Bai et al. (2022),Constitutional AI: Harmlessness from AI Feedback:AI 反馈。

11. 下一讲预告

模仿学习、RLHF 都在”用已有的数据学习”。下一讲把这个问题推到极致:完全不与环境交互,只用一批历史数据学习策略——这就是离线强化学习。

在医疗、教育等场景中,这是唯一可行的方式:不能拿病人做试验,但医院有几十年的治疗记录。你会看到:

  • 离策略评估:只用旧策略收集的数据,怎么估计一个新策略有多好?重要性采样、加权重要性采样、双重稳健估计;
  • 外推误差:为什么直接在历史数据上跑 Q-learning 会严重高估那些”数据里没有的动作”;
  • 悲观原则:对数据覆盖不到的地方保持怀疑——保守 Q 学习(CQL)等方法。

下一讲之前,建议你:跑通 code/lecture09/ 下的 4 个脚本,完成练习 2、3、5,并尝试练习 7。

← 返回课程目录