偏好对齐深入:从 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 的改进与变体,可按需检索对应论文。
本文累计阅读