论文:https://arxiv.org/pdf/2305.18290.pdf (NIPS 2023)
解读:https://zhuanlan.zhihu.com/p/642569664 (loss的解读很清晰,提供了最小实现)
DPO(Direct Preference Optimization,直接偏好优化)是由斯坦福大学等研究团队于2023年提出的一种偏好优化算法,可用于LLM、VLM与MLLM的对齐训练。
1 DPO 的核心思想
算法基于PPO的RLHF基础上进行了大幅简化。
跳过了奖励建模步骤,直接使用偏好数据优化语言模型;“D(Direct)”的含义所在。
解决三个阶段的训练(SFT->RM->PPO)过程较长,更新迭代较慢的问题
https://juejin.cn/post/7302993899106713600
DPO (Direct Preference Optimization) 提出了一种使用二进制交叉熵目标来精确优化 LLM 的方法,以替代基于 RLHF 的优化目标,从而大大简化偏好学习 pipeline。
也就是说,完全可以直接优化语言模型以实现人类的偏好,而不需要明确的奖励模型或强化学习。
与现有的算法一样,DPO 也依赖于理论上的偏好模型(如 Bradley-Terry 模型),以此衡量给定的奖励函数与经验偏好数据的吻合程度。然而,现有的方法使用偏好模型定义偏好损失来训练奖励模型,然后训练优化所学奖励模型的策略,而 DPO 使用变量的变化来直接定义偏好损失作为策略的一个函数。鉴于人类对模型响应的偏好数据集,DPO 因此可以使用一个简单的二进制交叉熵目标来优化策略,而不需要明确地学习奖励函数或在训练期间从策略中采样。
2 主要流程
2.1 数据收集:
基于SFT训练的模型作为推理模型,用户输入prompt,模型多次推理,找到好的答案和不好的答案。如果都是不好(rejected)的答案,则人工修改把不好的答案变为好的答案。
2.2 只有策略模型&参考模型(不需要Reward模型)
在trl强化学习框架中,只需要传入策略模型,参考模型会复制一份策略模型。
策略模型是DPO需要训练的模型,后用在项目中的模型。策略模型的权重直接复制SFT阶段微调模型的权重
参考模型是策略模型的帮衬,其权重参数冻结不变。主要两个作用,其一协助其计算reward loss,其二计算kl正则项,防止其训练偏移初始SFT模型太远,由一个β参数控制。
3 loss推导
3.1 DPO 的Loss
3.2 为什么DPO里Chosen和Rejected概率会同时下降???
在DPO优化过程中, 对于chosen优化的方向是有不确定性的,DPO实际上优化保证整体
增大 ,而不是单一的让chosen prob增大。
解决方案
为chosen/rejected ratio设定不同的
我们在DPO优化时,可以确定性的优化使得正例reward>0,如DPO-P
在DPO优化时,同时对正利增加SFT优化
我们可以确定性优化单个策略,如KTO
总结
DPO优化调整参数后,chosen/rejected prob的变化不是确定性的一增一减
我们用最简单的数值来说明DPO实际上对chosen策略优化方向是具有不确定性的,而这个不确定性在BTmodel里就存在我们设定的Case里容易chosen/rejected prob同时下降,改进方法实际上要避免hacking的发生,尽量提升chosen prob,降低rejected prob
DPO实际优化是token序列,并不会像我们示例(仅1个token策略)那么脆弱
3.3 DPO 的超参
3.3.1 pref_beta
控制策略模型(policy model)与参考模型(reference model)之间的 KL 散度约束强度
loss = − log σ ( β ( log π θ ( y w ∣ x ) π ref ( y w ∣ x ) − log π θ ( y l ∣ x ) π ref ( y l ∣ x ) ) ⏟ 隐式奖励差 ) \text{loss} = -\log \sigma \left( \beta \underbrace{ \left( \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) }_{\text{隐式奖励差}} \right) loss=−logσ β隐式奖励差 (logπref(yw∣x)



最低0.47元/天 解锁文章
1167

被折叠的 条评论
为什么被折叠?



