深度学习篇---DPO(直接偏好优化)
一、它要解决什么问题:让大模型“懂规矩”
大语言模型预训练时,只是学会了“接话”,还分不清好坏。比如你问“怎么做炸弹”,它可能真会回答。为了让模型安全、有用、讲礼貌,需要进行对齐,教它理解人类的偏好和价值观。
在 DPO 出现之前,主流的对齐方法是RLHF(基于人类反馈的强化学习),流程非常繁琐:
SFT:收集高质量问答对,做监督微调。
训练奖励模型:让人对模型的多个回答打分排序,训练一个模拟人类偏好的“打分员”模型。
PPO 强化学习:用打分员给出的分数作为奖励信号,用复杂的 PPO 算法更新模型。
这个流程需要额外训练一个奖励模型,强化学习训练又极不稳定,非常难调。
二、DPO 的核心思想:化繁为简,一步到位
DPO 直接拿人类标注的偏好数据,一步训练就完成对齐。
它的关键洞察是:最优策略和奖励模型之间存在精确的数学映射关系。既然我们最终要的就是最优策略,那就可以绕开显式训练奖励模型、绕开复杂的强化学习,直接从偏好数据里解出最优策略。
本质上,DPO 把对齐问题变成了一个简单的二分类问题:给定同一个问题,模型需要学会,给“好的回答”高于“差的回答”的生成概率。
三、DPO 是怎么工作的
它的学习过程很直观:
准备数据:每组数据包含一个提示(Prompt)和两个回答。好回答是胜出的,差回答是落败的。
双模型协同:
待优化模型:正在学习变好的那个。
参考模型:冻结的初始 SFT 模型,像“紧箍咒”,防止新模型跑偏太远。
计算损失:DPO 的损失函数直接比较——当前模型认为“好回答比差回答好多少”,目标是让这个相对概率最大化,同时受参考模型的约束。这就像教练不停在你耳边说:这个回答必须比那个排名更高才对。
四、为什么说这是革命性的
不需要奖励模型:省掉了训练和维护另一个大型模型的成本。
训练超稳定:不再和 PPO 这种强化学习算法打交道,就是一个标准的监督微调,训练曲线平滑,收敛稳定。
直接针对目标优化:RLHF 是间接的,先在奖励模型上逼近人类偏好,再在策略上逼近奖励模型,误差会传递。DPO 直击目标。
数据效率高:学习方式更直接,对偏好数据的利用更高效。
五、DPO 的主要变体
DPO 也有局限,比如可能被超长的好回答“蒙骗”,导致模型变得啰嗦。于是出现了改进版:
KTO:不强制要求同一提示的成对回答,可以处理“这个回答是赞还是踩”这种单点数据。
IPO:引入正则化项,防止 DPO 损失过拟合。
SimPO:干脆去掉参考模型,直接用回答长度做归一化的平均对数概率作奖励,缓解了 DPO 的“长度偏好”。
RSO:从统计估计的角度改进,力求达到 RLHF 同款的“最优解”。
六、DPO 的典型流程
收集人类偏好数据,得到一个排名对。
用高质量的对话数据,先做一轮 SFT,得到一个不错的基础模型。
设定 SFT 模型为参考模型,用偏好数据计算 DPO 损失进行训练。
训练完成后,参考模型就可以拿掉,只保留新的策略模型,用于线上服务。
七、总结框图
DPO 的精髓在于:它不是通过评估一个“分数”来间接优化,而是直接优化什么是更受人类偏好的“行为”。这种化繁为简的思路,极大降低了大模型对齐的门槛。
