跳到主要内容

绕开在线强化学习 — 拒绝采样与 DPO

这一章讲两条不用「在线采样优化」的路线。 它们共享一个动机:在线 RL 要养 打分器、要实时生成、要管异步,贵而脆;如果能用同样的数据、更简单的机制拿到 大部分收益,为什么不用?读完你会拿到一把尺子,量出「什么时候简单方法就够了, 什么时候必须上真 RL」。

1. 这一章讲什么

第 05、06 章的强化学习有个共同形状:模型边生成边学(on-policy,在线)。 本章的两条路线都绕开它。拒绝采样(rejection sampling)朴素到近乎作弊: 生成一堆候选回答,让奖励模型挑出最好的,拿回去做普通指令微调。DPO (Direct Preference Optimization,直接偏好优化)则是一次数奥式的变形:从 RLHF 的目标函数出发推一推导,发现可以完全跳过奖励模型和采样,直接在偏好对上写损失1

原书先讲 DPO(第 8 章)再讲拒绝采样(第 9 章);我们按「简单到复杂」倒过来, 先采样后推导,理解负担更轻。

2. 顶层全景与主走查

主走查分两段,同一家奖励模型,两种用法。

第一段:拒绝采样。 书里的例子:5 个 prompt,每个采样 4 条回答,奖励模型 给出一个 5×4 的分数表格(数学上叫矩阵,即排成行列的一张数表),行首到行尾(书里的真实数字)2:

回答1 回答2 回答3 回答4
题1 0.7 0.3 0.5 0.1
题2 0.2 0.8 0.4 0.6
题3 0.9 0.1 0.7 0.7
题4 0.5 0.3 0.8 0.2
题5 0.1 0.4 0.2 0.6

选法 A(每题取最大):题1→0.7、题2→0.8、题3→0.9、题4→0.8、题5→0.6
—— 每题都有代表,弱题也能捡到「矮子里的将军」
选法 B(全表取前 5):0.9、0.8、0.8、0.7、0.7
—— 只留全库最好的;题5 一条都进不了(它最好的一条只有 0.6)

下一步:把选中的 (prompt, 回答) 拿去做指令微调 —— 和第 03 章同一套损失。

第二段:DPO。 同样这批偏好知识,换个用法——不挑最好的,直接拿「人选了 A、 弃了 B」的对,算一个损失(第 3.2 节给出),一步梯度步到位。

三条路线一张图:

偏好数据 ─→ 奖励模型 ─→ 在线采样+打分+梯度步 (第 05、06 章:真 RL)

├────→ 生成 N 条、挑最好、回去做 SFT (拒绝采样:不学在线)

└─(数学变形)→ 直接在偏好对上走梯度 (DPO:连奖励模型都不训)

图说:三条路解的是同一个优化目标。差别全在「中间垫了几层东西」。

3. 核心原理

3.1 拒绝采样:最老实的用法

名字来自计算统计学:想从一个「难以直接采样」的分布(高质量回答的分布)里取样, 就从容易的分布(当前模型)里多采,再用一个检验器(奖励模型)筛选3。书里给的 实践参数:每题 10–30 条以上(太少则选择既偏又吵)、采样温度 0.7–1.0;实现细节里 还有一条省钱的——把回答按长度排序再成批打分,省掉填充 token 的算力4

Best-of-N(BoN)是它的一母同胞的兄弟(同一套「生成 N 条、挑最好」,但不拿回去 训练——只在推理时用,给这道题交付一个最优回答。聊天产品的「Pro 档」多花算力 换好答案,多数就是这招。评测语境里 BoN 还是重要的基线:它不改变模型参数, 但同样可以量它的 KL 距离,与 PPO 放在一张表里比「每单位 KL 买来多少质量」5

3.2 DPO:把 RLHF 目标折成一行损失

DPO 的推导是全书最优雅的一段数学,书里完整走了三步,这里复述骨架6:

  1. 写出最优解的形状。 带 KL 约束的 RLHF 目标,可以解析地解出最优策略: 它正比于「参考模型 × e^(奖励/β)」——β 就是那个权衡「追奖励」与「不离起点」 的系数(第 02 章的缰绳粗细)。配上一个叫配分函数的归一化常数 Z(对同一 prompt 所有可能回答求和,保证「所有可能性加起来恰好是 1」——这种「各种可能各占多少」的全貌,行话叫概率分布);
  2. 反解奖励。 把最优解变形,把奖励用「策略和参考模型的 log 概率差」表示 ——奖励不再需要单独的模型,它在策略自己身上:这就是书名级的那句 「你的语言模型其实是个奖励模型」;
  3. 代回偏好。 把这个隐式奖励代进 Bradley-Terry 的成对比较公式(第 04 章), 配分函数在分子分母里恰好消掉,剩下的就是一行损失:

loss = −log σ( β·[ (log π(y_w) − log π_ref(y_w)) − (log π(y_l) − log π_ref(y_l)) ] )

直觉版:提高「被选中的相对参考模型的得分」,压低「被弃的相对参考模型的得分」, 两者之差越大,损失越小。梯度还有个聪明的性质:配一个 0 到 1 的权重, 排序排错(弃的比选中的得分还高)时权重接近 1、狠纠;排对了就轻推7

它和在线 RL 的分界一句话说清:DPO 对着「固定数据集」直接走向由 β 指定的 那个最优解;在线 RL 每一批都根据新采样的数据重新决定往哪走。所以 DPO 的 β 是静态的、一次定死的 KL 距离;RLHF 的 KL 是动态花的预算——同一个量, 一个是一次性转账,一个是现金流8

实现上 DPO 简单得不像话:策略模型和参考模型各做一次前向,拿到四个 log 概率, 两两相减进损失,完事。书里还给了一个省显存的招:参考模型的 log 概率可以 提前离线算好存起来(这种「先算好放着」的存法,行话叫缓存),峰值显存(同时最多要多少内存)直接砍一半9

3.3 DPO 的暗面

书里花了整整一节讲 DPO 的三处软肋10:

排序≠质量。 DPO 只管拉大选中与被弃的相对差。一个直接后果叫 likelihood displacement(位移的是「似然」——似然,即模型给一段文字打的出现可能性):训练中两条回答的概率都在下降,只是弃的降得更多 ——省出来的概率质量流向了哪里没有人管,研究显示它会抬升「训练数据里根本 没有的 token」的概率,产生没人要求的怪行为。Cal-DPO、AlphaPO 等变体就是冲着 这个来的。

标签太硬。 每一对都被当成「非黑即白」,但人类标注本来就有噪音(第 10 章)。 变体家族全是修这个的:cDPO 假设一定比例的标签是错的;IPO 把偏好软化成概率而 不是硬标签;ODPO 给「选中」加一道最低差距门槛;REBEL 干脆用奖励差距当回归 目标。ORPO(Odds Ratio Preference Optimization)和 SimPO 则走向「甩掉参考模型」:前者把偏好项拼进指令微调损失, 后者用长度归一的平均 log 概率替换总和。

离线的天花板。 DPO 的训练信号来自「旧模型或别的模型」的生成——它永远在 学「怎么偏好已经存在的回答」,而不是「生成更好的回答」。受控对比的结论一致: 同数据下 PPO 系仍然略胜(a hair behind 的「hair」)11。书里的补救叫在线变体 (边训边生成新回答再标注),但那就又回到了需要采样和打分器的世界。

3.4 合成偏好数据:DPO 时代的实际喂法

DPO 之所以遍地开花,一半功劳在数据侧:主流偏好数据集全是「强模型当判官」的 合成偏好(第 11 章展开),UltraFeedback 是第一个。这里只记书里给出的两个 关键工程结论:Tulu 3 时代证明数据要带 on-policy 成分(混入被训模型自己的 生成,损失才能落在模型真正的 token 空间里);2025 年的 Olmo 3/SmolLM 3 又用 实验修正为 Delta Learning——选中与被弃之间「差距够大」比「来自哪个模型」 更重要,两个团队独立收敛到同一个配对(强模型答 vs 弱模型答)12

4. 作者的判断与证据

书里有证据的部分:选法 A/B 的矩阵是书中真实数字;DPO 推导逐步给出;「同数据 受控对比 PPO 胜 DPO」「合成偏好的 on-policy 需求」「Delta Learning」全部挂 实名论文;SLiC-HF 比 DPO 更早但没有流行,书里也如实记录。书里给判断的部分: 作者断言「算法选择远不如初始模型和数据重要」——DPO 系的工程便利常常盖过 那一点性能差;并预言推理模型时代 RL 基建回流后,这条差距会被进一步拉开13

作者在本章还有一个罕见的亲历细节:DPO 2023 年 5 月发布后半年没有产出像样的 模型,直到 Zephyr-Beta、Tulu 2 等发现把学习率(每步调多大幅度的旋钮)降到出奇地低才跑通——第 01 章 提过的「Chris Manning 谢我救了 DPO」正是这段,作者本人是当事人14

判断(我们的,不是书里的): DPO 与在线 RL 的选择,本质是「反复试的速度(行话叫迭代)」 与「性能上限」的交换。数据工程还在试探期(第 10、11 章全是未决问题)时, DPO 的快速迭代值钱;数据配方定型后,上限的那一点差距开始值钱——这解释了 开源圈「先用 DPO 起步、前沿实验室全面回 RL」的分工。 如果错,会错在: 如果出现某种离线数据增强手段能系统性补上「没有新样本」 的缺口,这条交换关系就不成立,DPO 的天花板论过期。

5. 边界与局限

  • 拒绝采样没有标准书:哪些 prompt、怎么选 RM、怎么排程,书里明说「文献里 没有好好记载」15;
  • DPO 推导依赖 BT 假设:偏好服从 Bradley-Terry 是近似;论文里还有 Plackett-Luce 版,书里说「实践中用得很少」16;
  • ** displaced 行为的机理未定**:likelihood displacement 的确切后果,书里引的 研究自己也标注「exact impact is not well known」17;
  • BoN 与 RL 的对比口径:两者都按 KL 算账是书里认可的,但 BoN 的 KL 口径 随采样策略变化,严格可比性有限。

6. 可带走的

  1. 拒绝采样 = 生成 N 条、RM 挑最好、回去做 SFT;BoN 是不训练版,Pro 档 档订阅(Pro,即付费高档位)的常见机关;
  2. 每题 10–30 条起,温度 0.7–1.0;按长度分批打分省算力;
  3. DPO 的一行损失:β 控制的相对 log 概率差;「你的语言模型其实是个奖励模型」;
  4. β 是一次性定死的 KL 距离,RLHF 的 KL 是现金流——一个静态一个动态;
  5. DPO 的三处软肋:似然位移、硬标签、离线上限;
  6. DPO 跑通靠的是低到出奇的学习率——2023 年那半年全社区都在交学费;
  7. 合成偏好的两条经验:要带 on-policy 成分;选中与被弃的差距比来源更重要;
  8. 选型口诀:算法的差距 < 数据与初始模型的差距——但数据定型后,差距会回来。

7. 原文地图

主题原书章原文位置
DAA 的定义与 DPO 地位8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:29(搜「without ever training an intermediate reward model」) · text/27-ch08-8-direct-alignment-algorithms.txt:48(搜「surprisingly low learning rates」)
隐式奖励与梯度解读8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:97(搜「implicit reward」) · text/27-ch08-8-direct-alignment-algorithms.txt:141(搜「higher when the reward estimate is incorrect」)
「其实是奖励模型」与静态 β8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:152(搜「Secretly a Reward Model」) · text/27-ch08-8-direct-alignment-algorithms.txt:645(搜「KL distance is static」)
推导三步8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:260(搜「partition function」) · text/27-ch08-8-direct-alignment-algorithms.txt:351(搜「Gibb」) · text/27-ch08-8-direct-alignment-algorithms.txt:474(搜「sigmoid function as」)
似然位移8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:588(搜「reduces the probability of both」) · text/27-ch08-8-direct-alignment-algorithms.txt:588(搜「not well known」)
变体家族8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:559(搜「cDPO」) · text/27-ch08-8-direct-alignment-algorithms.txt:573(搜「ORPO」) · text/27-ch08-8-direct-alignment-algorithms.txt:576(搜「SimPO」)
实现与缓存8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:619(搜「pi_logratios」) · text/27-ch08-8-direct-alignment-algorithms.txt:648(搜「50%」)
合成偏好与 Delta Learning8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:665(搜「on-policy」) · text/27-ch08-8-direct-alignment-algorithms.txt:665(搜「Delta Learning」)
DAA vs RL8 Direct Alignment Algorithmstext/27-ch08-8-direct-alignment-algorithms.txt:695(搜「a hair behind」) · text/27-ch08-8-direct-alignment-algorithms.txt:701(搜「data is often far more important」)
拒绝采样流程9 Rejection Samplingtext/28-ch09-9-rejection-sampling.txt:26(搜「filtering them based on a trained reward model」) · text/28-ch09-9-rejection-sampling.txt:32(搜「computational statistics」)
选法与例子9 Rejection Samplingtext/28-ch09-9-rejection-sampling.txt:187(搜「max reward per prompt」) · text/28-ch09-9-rejection-sampling.txt:305(搜「completion 1 (reward 0.7)」)
实践参数9 Rejection Samplingtext/28-ch09-9-rejection-sampling.txt:438(搜「0.7 and 1.0」) · text/28-ch09-9-rejection-sampling.txt:441(搜「10 to 30」) · text/28-ch09-9-rejection-sampling.txt:455(搜「similar lengths」)
Best-of-N9 Rejection Samplingtext/28-ch09-9-rejection-sampling.txt:467(搜「Pro」) · text/28-ch09-9-rejection-sampling.txt:473(搜「KL distance」)

Footnotes

  1. 出处:「9 Rejection Sampling」第 26 段(text/28-ch09-9-rejection-sampling.txt:26,搜「curating new candidate completions」)与「8 Direct Alignment Algorithms」第 29 段(text/27-ch08-8-direct-alignment-algorithms.txt:29,搜「literally the same data」)。

  2. 出处:「9 Rejection Sampling」第 261 段(text/28-ch09-9-rejection-sampling.txt:261,搜「5 prompts and 4 completions」)与第 305 段(text/28-ch09-9-rejection-sampling.txt:305,搜「completion 1 (reward 0.7)」)。每题最大值与全表前五的选中结果是书中例子的真实数字;矩阵里其余格子是为凑齐形状编的演示值。

  3. 出处:「9 Rejection Sampling」第 32 段(text/28-ch09-9-rejection-sampling.txt:32,搜「computational statistics」)。

  4. 出处:「9 Rejection Sampling」第 438 段(text/28-ch09-9-rejection-sampling.txt:438,搜「0.7 and 1.0」)、第 441 段(text/28-ch09-9-rejection-sampling.txt:441,搜「10 to 30」)、第 455 段(text/28-ch09-9-rejection-sampling.txt:455,搜「similar lengths」)。

  5. 出处:「9 Rejection Sampling」第 467 段(text/28-ch09-9-rejection-sampling.txt:467,搜「Best-of-N」)与第 473 段(text/28-ch09-9-rejection-sampling.txt:473,搜「still valid in some contexts」)。

  6. 出处:「8 Direct Alignment Algorithms」第 84 段(text/27-ch08-8-direct-alignment-algorithms.txt:84,搜「pairwise relationship of log-probabilities」)、推导部分第 260 段(text/27-ch08-8-direct-alignment-algorithms.txt:260,搜「partition function」)、第 351 段(text/27-ch08-8-direct-alignment-algorithms.txt:351,搜「minimized at a distance of 0」)、第 474 段(text/27-ch08-8-direct-alignment-algorithms.txt:474,搜「sigmoid function as」)。

  7. 出处:「8 Direct Alignment Algorithms」第 141 段(text/27-ch08-8-direct-alignment-algorithms.txt:141,搜「higher when the reward estimate is incorrect」)与第 144 段(text/27-ch08-8-direct-alignment-algorithms.txt:144,搜「increase the likelihood of the chosen」)。

  8. 出处:「8 Direct Alignment Algorithms」第 158 段(text/27-ch08-8-direct-alignment-algorithms.txt:158,搜「not online as in policy gradient」)与第 645 段(text/27-ch08-8-direct-alignment-algorithms.txt:645,搜「static」)。

  9. 出处:「8 Direct Alignment Algorithms」第 619 段(text/27-ch08-8-direct-alignment-algorithms.txt:619,搜「pi_logratios」)与第 648 段(text/27-ch08-8-direct-alignment-algorithms.txt:648,搜「50%」)。

  10. 出处:「8 Direct Alignment Algorithms」第 550 段(text/27-ch08-8-direct-alignment-algorithms.txt:550,搜「treats every pair of preference data with equal weight」)、第 588 段(text/27-ch08-8-direct-alignment-algorithms.txt:588,搜「reduces the probability of both」)、第 594 段(text/27-ch08-8-direct-alignment-algorithms.txt:594,搜「Online DPO」)。

  11. 出处:「8 Direct Alignment Algorithms」第 695 段(text/27-ch08-8-direct-alignment-algorithms.txt:695,搜「a hair behind」)。

  12. 出处:「8 Direct Alignment Algorithms」第 659 段(text/27-ch08-8-direct-alignment-algorithms.txt:659,搜「UltraFeedback」)与第 665 段(text/27-ch08-8-direct-alignment-algorithms.txt:665,搜「Delta Learning」)。

  13. 出处:「8 Direct Alignment Algorithms」第 701 段(text/27-ch08-8-direct-alignment-algorithms.txt:701,搜「data is often far more important」)与第 707 段(text/27-ch08-8-direct-alignment-algorithms.txt:707,搜「cement this margin」)。

  14. 出处:「8 Direct Alignment Algorithms」第 48 段(text/27-ch08-8-direct-alignment-algorithms.txt:48,搜「surprisingly low learning rates」);后半出自「Overview」(text/04-ch01-1-overview.txt:448,搜「saving DPO」)。

  15. 出处:「9 Rejection Sampling」第 95 段(text/28-ch09-9-rejection-sampling.txt:95,搜「not well documented」)。

  16. 出处:「8 Direct Alignment Algorithms」第 487 段(text/27-ch08-8-direct-alignment-algorithms.txt:487,搜「Plackett-Luce」)。原文:该推导「far less used in practice」。

  17. 出处:「8 Direct Alignment Algorithms」第 588 段(text/27-ch08-8-direct-alignment-algorithms.txt:588,搜「not well known」)。