DPO 直接偏好优化算法详解
DPO(Direct Preference Optimization)通过将 RLHF 的约束优化问题转化为简单的分类损失,实现了更稳定的对齐训练。
数学推导
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。过高会导致模型退化,过低则对齐不足。