直接偏好优化(DPO)是近端策略优化(PPO)中显式奖励建模和强化学习循环的替代方法。对DPO和PPO这两种主要对齐技术进行直接比较,有助于阐明其工作机制和实际影响。两种方法都使用人类偏好数据($ (x, y_w, y_l) $,其中$x$是提示,$y_w$是偏好响应,$y_l$是不偏好响应)来引导语言模型产生期望的反应,但其内在的工作方式和实际影响差异很大。工作方式与流程的对比最根本的区别在于每种方法如何使用偏好数据。基于PPO的RLHF: 遵循三阶段流程:监督微调 (SFT): 初始策略 $ \pi_{\text{SFT}} $ 在高质量示例上训练。奖励建模 (RM): 一个独立的奖励模型 $ r_\phi(x, y) $ 在偏好数据集 $ \mathcal{D} $ 上训练。目标通常是在类似布拉德利-特里模型的框架下,最大化观察到的偏好的可能性,即对于 $ \mathcal{D} $ 中的配对,$ r_\phi(x, y_w) > r_\phi(x, y_l) $。RL微调: SFT策略 $ \pi_{\text{SFT}} $ 使用PPO进一步改进。PPO算法最大化从学习到的奖励模型 $ r_\phi $ 获得的预期奖励,同时一个KL散度惩罚项 $ \beta \mathbb{KL}(\pi || \pi_{\text{ref}}) $ 使学习到的策略 $ \pi $ 保持接近参考策略 $ \pi_{\text{ref}} $(通常是 $ \pi_{\text{SFT}} $)。目标函数大致如下: $$ \max_{\pi} \mathbb{E}{x \sim D, y \sim \pi(y|x)} [r\phi(x, y)] - \beta \mathbb{KL}(\pi(\cdot|x) || \pi_{\text{ref}}(\cdot|x)) $$直接偏好优化 (DPO): 跳过显式奖励建模阶段。它直接使用偏好数据优化语言模型策略 $ \pi $。DPO根据布拉德利-特里偏好模型下的最优RLHF策略与偏好对上的简单分类目的之间的理论关系,推导出一个损失函数。DPO损失函数为: $$ \mathcal{L}{\text{DPO}}(\pi; \pi{\text{ref}}) = - \mathbb{E}{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma \left( \beta \log \frac{\pi(y_w|x)}{\pi{\text{ref}}(y_w|x)} - \beta \log \frac{\pi(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right] $$ 在此,$ \pi_{\text{ref}} $ 通常是SFT模型,$ \beta $ 是一个参数,控制与参考策略的偏差(类似于隐式奖励模型中的逆温度或PPO中的KL系数),$ \sigma $ 是Sigmoid函数。此损失直接促使策略 $ \pi $ 对偏好响应 $ y_w $ 给予比不偏好响应 $ y_l $ 更高的似然比(相对于 $ \pi_{\text{ref}} $)。工作流程可以显示如下:digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", color="#495057", fontcolor="#495057"]; edge [fontname="sans-serif", color="#495057", fontcolor="#495057"]; subgraph cluster_ppo { label = "基于PPO的RLHF"; bgcolor="#e9ecef"; color="#adb5bd"; SFT_PPO [label="SFT模型\n(π_SFT)", fillcolor="#a5d8ff", style=filled]; PrefData_PPO [label="偏好数据\n(x, yw, yl)", shape=cylinder, fillcolor="#ffd8a8", style=filled]; RM [label="训练奖励模型\n(r_φ)", fillcolor="#b2f2bb", style=filled]; PPO [label="PPO优化\n(最大化 r_φ - β KL)", fillcolor="#ffc9c9", style=filled]; FinalPolicy_PPO [label="对齐策略\n(π)", fillcolor="#d0bfff", style=filled]; SFT_PPO -> RM [label="提供 π_ref\n(可选)", style=dashed]; PrefData_PPO -> RM; RM -> PPO [label="提供 r_φ"]; SFT_PPO -> PPO [label="初始策略\n参考策略 (π_ref)"]; PPO -> FinalPolicy_PPO; } subgraph cluster_dpo { label = "直接偏好优化 (DPO)"; bgcolor="#e9ecef"; color="#adb5bd"; SFT_DPO [label="SFT模型\n(π_ref)", fillcolor="#a5d8ff", style=filled]; PrefData_DPO [label="偏好数据\n(x, yw, yl)", shape=cylinder, fillcolor="#ffd8a8", style=filled]; DPO_Opt [label="DPO优化\n(最小化 L_DPO)", fillcolor="#ffec99", style=filled]; FinalPolicy_DPO [label="对齐策略\n(π)", fillcolor="#d0bfff", style=filled]; SFT_DPO -> DPO_Opt [label="参考策略 (π_ref)\n初始策略"]; PrefData_DPO -> DPO_Opt; DPO_Opt -> FinalPolicy_DPO; } }基于PPO的RLHF与DPO的高层次工作流程比较。PPO包含一个中间奖励模型训练步骤,而DPO则使用偏好数据直接优化策略。差异总结特点基于PPO的RLHF直接偏好优化 (DPO)奖励模型显式训练的独立模型 ($r_\phi$)隐式,直接从偏好似然中得出训练阶段三阶段:SFT -> RM训练 -> RL微调两阶段:SFT -> DPO微调优化强化学习 (PPO)监督学习(类似二分类的损失)复杂性较高:需要RM基础设施、RL微调、稳定性管理较低:SFT后单一优化阶段稳定性可能不稳定(RL方差,奖励欺骗)通常更稳定(损失更简单)超参数较多:PPO参数(裁剪、批次等)、KL系数 $ \beta $、RM参数较少:主要是DPO参数 $ \beta $灵活性较高:可检查/塑造RM,可能多目标较低:直接与偏好数据格式绑定实现更复杂:独立的RM/RL循环更简单:适合标准微调流程实现与调优考量PPO: 要求仔细实现PPO算法的各部分,包含策略网络和价值网络、优势估算(如GAE)、策略与参考模型分布之间的KL散度计算,以及处理强化学习中潜在的噪声梯度。调优涉及平衡奖励最大化与KL惩罚项,管理学习率、批处理大小以及PPO特有超参数(例如,裁剪epsilon、每批PPO训练的批次数量)。TRL等库简化了这一点,但了解其内在工作方式对于故障排除仍有帮助。调试通常包含观察奖励曲线、KL散度趋势、价值损失和生成样本质量。DPO: 实现主要包含计算当前策略 ($ \pi $) 和参考策略 ($ \pi_{\text{ref}} $) 下选择的 ($y_w$) 和拒绝的 ($y_l$) 响应的对数概率,然后将这些值代入DPO损失函数。这通常更契合现有的监督微调框架。主要的超参数是 $ \beta $,它控制策略应根据偏好与参考模型偏离的强度。较高的 $ \beta $ 会给予偏好数据更高的权重。调优通常比PPO更简单,常类似于标准监督学习的超参数查找。何时选择其中一种?若选择DPO:简单性和稳定性是优先考虑项。你想避免训练和管理独立奖励模型的额外负担。你的主要目的是直接基于成对偏好进行对齐,而无需在训练期间使用可解释的标量奖励信号。你有一个精心整理的偏好数据集。若选择基于PPO的RLHF:你需要或想要一个显式奖励模型,或许用于分析、内容过滤或纳入多重目标(通过组合不同的奖励信号)。你要求对RL优化过程有比DPO损失函数所能提供的更精细的控制。你正在研究更复杂的奖励塑形或RL技术,这些技术要求显式奖励函数。你拥有处理RL训练的复杂性和潜在不稳定性的基础设施和专业知识。PPO和DPO都是使大型语言模型与人类偏好对齐的有效方法。DPO通过将问题重新表述为类似监督学习的目的,带来更直接且通常更稳定的途径。PPO虽然更复杂,但提供显式奖励模型的灵活性和完整的强化学习体系。最佳选择取决于项目的具体限制和目的,包含可用资源、期望的模型反应以及对实现复杂度的接受度。理解此处阐述的权衡,可使你在制定对齐策略时做出明智的决定。