DPO原理
直接偏好优化算法原理
什么是DPO
DPO(Direct Preference Optimization)是一种简化版的RLHF方法,直接从偏好数据优化语言模型, 无需训练单独的奖励模型,大大简化了对齐训练流程。
PPO方式
训练RM → PPO优化 → 复杂流程
DPO方式
直接优化 → 无需RM → 简单高效
核心思想
DPO的核心洞察:最优策略可以通过偏好数据直接推导,无需显式学习奖励函数。
# DPO损失函数
L = -log σ(β × (log π(y_w|x)/π_ref(y_w|x)
- log π(y_l|x)/π_ref(y_l|x)))
# y_w: 胜者响应, y_l: 败者响应
# π_ref: 参考模型(通常是SFT模型)
# β: 控制偏离参考模型的惩罚强度
与PPO对比
| 特性 | PPO | DPO |
|---|---|---|
| 奖励模型 | 需要单独训练 | 不需要 |
| 训练复杂度 | 高(需要多个组件) | 低(单模型训练) |
| 训练稳定性 | 需要仔细调参 | 相对稳定 |
| 数据需求 | 偏好数据 | 偏好数据 |
| 效果 | 成熟,效果验证 | 接近PPO效果 |
训练流程
1. 准备SFT模型作为参考模型 π_ref
2. 收集偏好数据(prompt, winner, loser)
3. 计算两个响应的log概率
4. 优化DPO损失函数
5. 得到对齐后的模型
实践建议
•
β参数选择
通常0.1-0.5,越大越保守
•
参考模型冻结
保持参考模型不变,只训练策略模型
•
学习率
通常较小,1e-6到5e-5
----