直接偏好优化

DPO (Direct Preference Optimization)

DPO 直接偏好优化是 2023 年斯坦福提出的 RLHF 轻量替代对齐方案:跳过 Reward Model 训练 + PPO 强化学习两步,直接把成对偏好数据融入一次简单的分类式监督损失,对齐效果接近 RLHF 但成本与复杂度砍 90%。

详细解释

DPO(Direct Preference Optimization,直接偏好优化) 是 2023 年《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》一作论文出来后直接改写了整个对齐(Alignment)领域的格局。在它之前,想让大模型”更听话、更有帮助、更少输出有害内容”的标准路径是 RLHF(Reinforcement Learning from Human Feedback),三步:

  1. SFT(监督微调):准备优质问答对,教模型会说话;
  2. RM(奖励模型):准备人类标好的 (回答 A 优于回答 B) 成对数据,训练一个专门打分的奖励模型;
  3. PPO(强化学习):把 RM 当奖励信号,用 PPO 算法把 SFT 模型往高分方向微调。

RLHF 问题多多:PPO 极不稳定(超参敏感、Reward Hacking 容易爆、价值函数要训两个模型)、要调 3 个模型、显存爆炸、工程门槛高。2023 年之前只有大厂能做好。

DPO 的核心定理(论文最重要的一页):在标准 Bradley-Terry 偏好假设下,RM + PPO 整个流程的最优解,可以用一个等价的、只基于成对偏好数据的简单二元交叉熵(BCE-like)损失,直接在 SFT 模型上一步得到。 也就是——你不再需要 RM 和 PPO。流程直接缩水成两步:

  1. SFT(和 RLHF 一样);
  2. DPO:给成对偏好数据 → 一次普通的监督式微调,损失函数变一下就行。

论文+社区实测:DPO 的对齐效果(Helpfulness、Harmlessness、MT-Bench 分)和全流程 RLHF 差不多,大多数场景甚至略好(没有 PPO 训练不稳定带来的分布漂移)。唯一弱项是”极致的无害性对齐(如拒绝率特别高的合规模型)“RLHF 做得更激进一点,企业合规场景可以 DPO + 后期 Guardrails(护栏) 组合。

代表:Zephyr(Mistral-7B + DPO,第一个在 MT-Bench 上追平 GPT-3.5 的 7B 模型)、Llama 3.x 的后续对齐也广泛引入 DPO。国内的 唯元智创 Weimeta LLM 平台在自托管客户侧也默认提供 DPO 对齐管线服务,帮助客户一键完成自己的业务风格对齐。

RLHF / DPO / ORPO 家族对比

方法所需数据训练步数工程复杂度对齐效果(行业经验)
RLHF标注偏好对 (A > B) 几万对SFT + RM + PPO 三步极高(PPO 极吃工程)Harmlessness 最强,但容易丢能力
DPO(当前主流)同样的成对偏好数据SFT + DPO 两步低(就是一次 SFT 风格训练)综合最优:Helpful + Harmless 接近 RLHF 上限
ORPO / KTO / IPO(DPO 家族变种)ORPO:偏好对;KTO:偏好/非偏好二进制一步训练(连 SFT 都省了)更低效果接近 DPO,数据成本最省
RLAIF(AI 反馈替代人类)先让强模型 L Judge 标偏好对,再 DPO/RLHF多一步 AI 标注解决人类标注贵/慢的问题,效果接近人工标

2025 年生产实践首选:人工标一小批(2000 至 5000 对)种子偏好对 → 用 GPT-4o / Claude 3.5 做 RLAIF 扩大到几万对 → 跑 DPO。成本最低、效果最稳。

用 DPO 做一次自己风格对齐的标准流程

  1. 准备成对偏好数据{"prompt": "...", "chosen": "好的回答", "rejected": "差的回答"} JSONL。常见来源:(a) 人工标业务对话的 A/B 胜方;(b) 让强模型和弱模型分别回答,强的当 chosen;(c) 把同一 Prompt 的高 Temperature 采样和低 Temperature 正确回答做对比。
  2. 选参考模型(Reference Model):选你用的基础模型 SFT 版本或原厂基座,DPO 损失里要拿 ref model 的 logits 做 KL 正则项,避免学崩。
  3. LoRA/QLoRA DPO:用 LoRA / QLoRA 只训 A/B 矩阵,单卡 24G 能跑 70B。参数:β (KL 系数) 一般 0.1 至 0.5,LR 1e-6 至 1e-5,1–3 epoch。
  4. 评估 AB 对比:用人类评估或 LLM-as-Judge 对比 DPO 前后”回答更符合你风格的比例”,一般 500 条评测集 + 95% 置信区间就够用了。
  5. 上线 & 内容审核 兜底:DPO 不是银弹,合规场景仍要在输入输出两侧加 Guardrails 和内容审核模型。

常见问题

做了 DPO 之后我的模型会不会出现”能力下降”?
有这种可能,行业叫”对齐税 Alignment Tax”。DPO 的对齐税比 PPO 小很多,一般 MMLU 掉分不超过 1–2%。两个保险措施:(1)β 系数别调太小(太小 KL 正则太弱容易学偏),默认 0.1 是甜点;(2)偏好数据里混入 10% 至 20% 的”通用高质量 SFT 正例数据”,不要全是风格偏好。
我怎么判断该做 DPO 还是该写 System Prompt
经验法则:先花 3 天写好 System Prompt + Few-Shot,做到天花板,再看还差多少。如果还差 5–10% 且你有 2000+ 对高质量偏好数据,再动 DPO。DPO 一次性投入大、有对齐税,效果增益通常 10% 至 20% 顶天。不要一上来就搞 DPO——大多数场景 System Prompt + 好的 Few-Shot 能做到 85 分。
DPO 对标注质量的要求有多高?
极高。DPO 的效果几乎和”chosen vs rejected 真实差异大小”线性相关。如果你的标注员随便标标,chosen 和 rejected 差不多甚至标反,DPO 会学反——模型反而对齐到”更差”的分布。经验值:标注双人交叉验证 → 取一致率,低于 80% 的标就扔;宁缺毋滥,2000 对高质量 > 2 万对脏数据。