Skip to content

DPO 直接偏好优化算法详解

DPO(Direct Preference Optimization)通过将 RLHF 的约束优化问题转化为简单的分类损失,实现了更稳定的对齐训练。

DPO 算法

数学推导

RLHF 的目标是最大化奖励同时约束策略不偏离参考模型。DPO 证明了存在闭式解:

python
def dpo_loss(policy_chosen_logps, policy_rejected_logps,
             ref_chosen_logps, ref_rejected_logps, beta=0.1):
    chosen_rewards = beta * (policy_chosen_logps - ref_chosen_logps)
    rejected_rewards = beta * (policy_rejected_logps - ref_rejected_logps)
    return -F.logsigmoid(chosen_rewards - rejected_rewards).mean()

DPO 变体

  • IPO:用更温和的损失替代 Logistic 损失
  • KTO:只需二元反馈(好/坏),无需配对数据
  • ORPO:将 SFT 和对齐合并为单阶段训练

DPO 实践建议

beta 参数控制对齐强度,典型值 0.1-0.5。过高会导致模型退化,过低则对齐不足。

相关资源

最近更新