偏好对齐深入:从 RLHF 到 DPO
大模型在预训练阶段学会了「把概率最高的下一个词接上去」,在监督微调(SFT)阶段学会了「模仿示范数据怎么回答」。但光会模仿还不够:同一道题,模型可能给出流畅却答非所问、或者有用却带风险的回答。对齐(Alignment)要做的事,就是把这些模糊的人类期望,编进一个可以持续优化的训练目标。本文先讲清楚「为什么需要对齐」,再拆解经典路线 RLHF 的三阶段流程,接着引出更轻量的 DPO,最后对比二者的取舍并给出一个可直接运行的 DPO 损失最小示例。
一、为什么需要对齐
预训练加 SFT 得到的是一个「能写、会写」的模型,但它并不知道人类真正想要什么。对齐通常围绕三个相互牵制的维度展开:
- 有用(Helpful):回答要切中用户意图,信息准确、结构清晰、可执行。
- 无害(Harmless):不输出违法、危险、歧视或诱导伤害的内容。
- 诚实(Honest):在不知道的时候承认不确定,不编造事实、不幻觉式自信。
这三个目标常常彼此冲突:为了无害可能要拒绝某些合理请求,为了有用又得尽量满足。这正是对齐的难点——它不是单点优化,而是在多个偏好之间做权衡。
关键工程问题是:怎么把「人觉得好」变成可计算的目标?主流做法不是让标注者给每个回答打绝对分数(主观、方差大、昂贵),而是收集「成对偏好」(pairwise preference):给同一个提示生成多个回答,让人比较哪条更好。这种相对判断更稳定、更易收集,也成为 RLHF 与 DPO 共同的数据基础。对齐的本质,就是用这类偏好数据去塑造模型的行为分布。
二、RLHF 流程:SFT 到奖励模型到 PPO
经典 RLHF(以 InstructGPT 为范本,arXiv:2203.02155,已核验)分为三个阶段,直觉分别是「打底子、定标准、按标准练」。
阶段一:监督微调(SFT)
用人工撰写的示范回答,在基座模型上做一轮监督学习,得到初始策略 π_SFT。这一步的目标是把模型从一个「续写引擎」变成一个「会按指令作答的助手」,同时为后续强化学习提供一个质量尚可、不会胡说八道的起点。SFT 模型既是最终要优化的对象,也是后面奖励模型和参考模型的来源。
阶段二:训练奖励模型(RM)
收集人类对同一提示下多个回答的排序,训练一个标量奖励模型 r_φ(x, y),对任意「提示 x + 回答 y」输出一个实数分数。其训练损失建立在 Bradley-Terry 偏好模型上:
L_RM = -E_(x, y_w, y_l) [ log σ( r_φ(x, y_w) - r_φ(x, y_l) ) ]
其中 y_w 是被偏好的回答(chosen),y_l 是未被偏好的回答(rejected)。直觉很直接:让被人类选中的回答得分更高,落选的得分更低。奖励模型把「人类偏好」压缩成了一个可微的分数函数,后续强化学习就围绕这个分数展开。
阶段三:PPO 强化学习
把奖励模型当作环境给出的奖励信号,用 PPO(Proximal Policy Optimization)优化策略 π_θ,使其生成高奖励回答,同时不要偏离 SFT 太远。目标函数为:
max_π_θ E_(x, y~π_θ) [ r_φ(x, y) ] - β · KL( π_θ(y|x) || π_ref(y|x) )
KL 惩罚项(参考模型 π_ref 通常是 SFT 模型)防止模型为了刷高分而说出训练分布之外的怪话。训练时,每生成一个回答就由奖励模型打分,再由价值网络(value model)估计优势,PPO 据此更新策略。这条链路能接任意奖励信号,但也带来明显代价:要同时维护策略、参考、奖励、价值四个模型,且每个训练步都要在线生成样本,工程复杂、显存占用高,还容易遇到「奖励黑客」(reward hacking)——模型找到刷高奖励却实际变差的捷径。
三、DPO:绕过奖励模型的直接偏好优化
DPO(Direct Preference Optimization,arXiv:2305.18290,已核验)的核心洞察来自一个数学事实:在带 KL 约束的 RLHF 目标下,最优策略可以「闭式」写成奖励模型和参考模型的函数。也就是说,奖励模型其实被隐含在策略里——「你的语言模型本身就是个奖励模型」(论文副标题)。
基于此,DPO 把奖励参数化掉,推导出与 RLHF 等价的、但只需在偏好对上优化的分类损失,免去了显式训练奖励模型、免去在线采样、也免去了 PPO 的强化学习循环。其损失为:
L_DPO = -E [ log σ( β · log( π_θ(y_w|x) / π_ref(y_w|x) )
- β · log( π_θ(y_l|x) / π_ref(y_l|x) ) ) ]
直觉上,DPO 同时做两件事:增大被偏好回答(chosen)相对参考模型的概率,压低未被偏好回答(rejected)相对参考模型的概率。σ 里的差值越大,loss 越小,表示模型已学会把偏好差距拉开。超参数 β 控制「能偏离参考模型多远」:β 越大越保守、越贴近 SFT;β 越小越激进、对齐更强但可能不稳定。
相比 RLHF,DPO 的好处很实在:只需训练一个策略模型、冻结一个参考模型,单阶段、实现简单、训练稳定、显存省。它把「对齐」从一套 RL 流水线,降维成了一次带特殊损失的监督微调。
四、对比:RLHF 与 DPO 的取舍
| 维度 | RLHF(SFT + RM + PPO) | DPO |
|---|---|---|
| 稳定性 | PPO 对超参敏感,训练波动大,易崩溃 | 单阶段分类损失,训练稳定 |
| 算力成本 | 需策略、参考、奖励、价值四模型,且要在线生成 | 只需策略加冻结参考,省显存省算力 |
| 数据需求 | 需要偏好对(chosen, rejected)训练奖励模型 | 同样需要偏好对,且对数据质量与噪声更敏感 |
| 奖励灵活性 | 可接入任意奖励,含在线人类/AI 反馈、过程奖励 | 依赖静态偏好对,难以做在线探索 |
| 典型变体 | RRHF、RLAIF、过程奖励强化学习 | IPO、KTO、ORPO 等免配对或改进变体 |
一句话取舍:资源有限、想要快速稳定对齐,选 DPO;需要精细可控、能接在线奖励信号或复杂奖励塑形,选 RLHF 及其变体。实践中二者并非互斥——不少流程先用 DPO 做一轮粗对齐,再用 PPO 做精细打磨。需要提醒的是,DPO 对 β 和偏好数据噪声更敏感,偏好对质量差时反而容易过拟合到标注者的局部偏好。
五、代码示例:DPO 风格损失最小示例
下面用最小 Python 片段演示:给定一对偏好(chosen, rejected)的(对数)概率,如何计算一个 DPO 风格损失。为聚焦公式本身,这里用占位的概率值,真实训练时应由策略模型与参考模型对每个 token 的对数概率求和得到。
import math
def dpo_loss(chosen_logp, rejected_logp, ref_chosen_logp, ref_rejected_logp, beta=0.1):
# chosen/rejected 为策略模型给出的序列对数概率
# ref_* 为冻结的参考模型给出的序列对数概率
chosen_diff = chosen_logp - ref_chosen_logp
rejected_diff = rejected_logp - ref_rejected_logp
# 让 chosen 相对 ref 提升、rejected 相对 ref 下降
logits = beta * (chosen_diff - rejected_diff)
return -math.log(1.0 / (1.0 + math.exp(-logits)))
chosen_logp = -2.3 # 偏好对(chosen, rejected)的示例对数概率
rejected_logp = -5.1
ref_chosen_logp = -2.5
ref_rejected_logp = -4.8
loss = dpo_loss(chosen_logp, rejected_logp, ref_chosen_logp, ref_rejected_logp)
print("DPO loss =", loss)
这段代码的要点:损失完全由「策略模型相对参考模型的概率变化差」决定,不需要任何奖励模型打分,也不需要 PPO 的价值网络。把它替换成真实的 log π_θ(y|x) 与 log π_ref(y|x)(对每个 token 的对数概率求和),再套上批量数据与优化器,就是可训练的 DPO 主体。
小结
对齐的目标是把「有用、无害、诚实」这类人类偏好编进模型行为。RLHF 用 SFT 打底、奖励模型定标准、PPO 按标准强化,能力强但链路重、易不稳;DPO 借由「最优策略可闭式表达」的洞察,把奖励模型消掉,直接用一个分类损失在偏好对上优化策略,更稳定、更省资源。二者是互补而非替代:轻量对齐用 DPO,精细可控与在线奖励用 RLHF。无论选哪条路,偏好数据的质量都是天花板,配对噪声与覆盖不足会直接限制对齐效果。
参考与延伸阅读
- Ouyang 等,Training language models to follow instructions with human feedback(InstructGPT),arXiv:2203.02155,已核验。RLHF 三阶段流程的奠基性工作。
- Rafailov 等,Direct Preference Optimization: Your Language Model is Secretly a Reward Model(DPO),arXiv:2305.18290,已核验。证明奖励模型可被策略隐式表达,给出分类式对齐损失。
- Kaufmann 等,A Survey of Reinforcement Learning from Human Feedback,arXiv:2312.14925,已核验。覆盖 RLHF 理论基础、算法与人机反馈机制。
- Stiennon 等,Learning to summarize from human feedback,arXiv:2009.01325,待核实。早期把人类偏好奖励用于摘要任务的研究。
- 延伸:RRHF、RLAIF、IPO、KTO、ORPO 等 RLHF/DPO 的改进与变体,可按需检索对应论文。