RLHF的痛点
RLHF(Reinforcement Learning from Human Feedback)是大模型对齐的标准方案,但它以复杂著称。完整的RLHF流程包含三个阶段:SFT(监督微调)、RM(奖励模型训练)、PPO(强化学习优化)。其中PPO阶段尤其棘手——需要同时维护Policy Model、Reference Model、Reward Model和Value Model四个模型,训练过程不稳定,超参数敏感,显存开销巨大。
有没有更简单的方式来实现同样的目标?
DPO(Direct Preference Optimization)给出了一个令人惊喜的答案。
DPO的核心思想
DPO的核心洞察是:我们不需要显式地训练奖励模型,也不需要强化学习。 通过一个精巧的数学推导,DPO将偏好学习问题转化为一个简单的分类问题。
数学推导
在RLHF框架中,最优策略可以表示为:
π*(y|x) ∝ π_ref(y|x) · exp(r(x,y)/β)
其中π_ref是参考策略,r是奖励函数,β是温度参数。这个关系意味着给定奖励函数,我们可以直接写出最优策略的形式。
DPO的关键步骤是反过来——给定偏好数据,我们可以直接从策略形式中推导出隐含的奖励函数:
r(x,y) = β · log(π(y|x)/π_ref(y|x))
将这个隐含奖励代入Bradley-Terry偏好模型,偏好概率变为:
P(y_w > y_l | x) = σ(β · log(π(y_w|x)/π_ref(y_w|x)) - β · log(π(y_l|x)/π_ref(y_l|x)))
其中y_w是偏好回答,y_l是非偏好回答,σ是sigmoid函数。
这就是DPO的损失函数——一个简单的二元交叉熵!不需要奖励模型,不需要强化学习,只需要偏好数据对和一个参考模型。
与RLHF的对比
| 维度 | RLHF (PPO) | DPO |
|---|---|---|
| 训练阶段 | SFT → RM → PPO | SFT → DPO |
| 需要的模型 | 4个(Policy, Ref, Reward, Value) | 2个(Policy, Ref) |
| 超参数 | 多且敏感 | 少且鲁棒 |
| 训练稳定性 | 差,需要多种trick | 好,类似标准训练 |
| 显存开销 | 极高 | 中等 |
实践经验
在过去一年中,我们在多个项目上使用DPO替代RLHF,总结出以下经验:
优势
工程复杂度大幅降低。 从4个模型减到2个模型,训练pipeline的复杂度下降一个量级。不需要担心PPO的各种trick——KL散度惩罚、优势函数裁剪、学习率warmup等。
训练更稳定。 DPO的损失函数是凸的(在策略空间中),训练曲线比PPO平稳得多。不再需要盯着训练曲线担心mode collapse。
效果不逊于RLHF。 在我们的大多数实验中,DPO训练出的模型在人类评估中与RLHF模型没有显著差异,部分场景甚至更好。
挑战
对偏好数据质量更敏感。 DPO直接从偏好数据学习,数据中的噪声会直接影响模型。RLHF有奖励模型作为中间层,对噪声有一定的缓冲作用。
探索不足。 PPO的on-policy采样会探索新的回答空间,而DPO仅从离线数据学习。这意味着DPO模型可能无法发现训练数据中不存在的更好的回答模式。
β参数调节。 β控制模型偏离参考策略的程度。太大会导致模型几乎不更新,太小会导致模型偏离过多。实践中β通常在0.01-0.1之间。
DPO的变体
DPO的成功催生了一系列改进方案:
IPO(Identity Preference Optimization):通过添加KL正则化来解决DPO在偏好数据无噪声假设下过拟合的问题。
KTO(Kahneman-Tversky Optimization):不需要成对偏好数据,只需要二元反馈(好/坏),降低了数据标注成本。
SimPO:去除参考模型,用回答长度归一化的似然比作为隐含奖励,进一步简化了训练流程。
ORPO:将偏好优化与SFT融合在一个阶段完成,省去了先SFT再DPO的两步流程。
何时选DPO,何时选RLHF
我们的建议:
选DPO当:
- 有高质量的偏好数据对
- 工程资源有限,需要快速迭代
- 任务可以用离线数据充分覆盖
选RLHF当:
- 需要模型探索新的行为空间
- 偏好数据不足,需要on-policy采样
- 任务涉及复杂的多轮交互(当前DPO主要针对单轮)
结语
DPO不代表RLHF的终结,而是提供了一个更简洁的选择。正如深度学习中并非所有问题都需要最复杂的架构一样,对齐方法的选择也应该是问题导向的。DPO的价值在于让更多团队能够负担得起对齐训练,这对整个生态的健康发展是好事。
本文同步发布于 硅基AGI论坛