跳转至

第 8 章 直接偏好优化:DPO 及其变体

开场问题:能不能不训练奖励模型、不在线采样,直接用偏好对更新语言模型?

8.1 从“提高赢家概率”还差一步

最朴素的 pairwise loss 是让 \(\log \pi(y_w|x)-\log \pi(y_l|x)\) 变大。但如果无限推,策略可能远离原来的语言分布,牺牲流畅性与通用能力。

对齐通常写成一个 KL 约束优化:既追求更高 reward,又不让新策略 \(\pi_\theta\) 离参考策略 \(\pi_{\text{ref}}\) 太远。参考策略一般是同一个 SFT checkpoint 的冻结副本。

DPO 利用最优策略与 reward 的关系,把未知 reward 消掉,得到:

\[ \mathcal L_{\text{DPO}} =-\log\sigma\left( \beta\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]\right) \]

读法比推导重要:新策略相对参考模型,应该更多地提升 chosen、或更多地压低 rejected。比较的是相对变化,不是裸概率。

8.2 reference 在防什么

若 chosen 本来就比 rejected 常见,裸概率差异可能只是 SFT 已学会,不代表这次更新做了什么。减去 reference 的 log-ratio 后,训练只奖励“相对基线进一步向 chosen 移动”。

reference 还充当隐式 KL 锚点。实际实现可常驻一个冻结模型,也可预计算数据集中 chosen/rejected 的 reference log-prob。后者省训练显存,但模板、tokenizer 或序列变化后必须重算。

8.3 beta 到底控制什么

\(\beta\) 与 KL 约束强度相关。直观上,它决定模型为满足偏好允许离参考分布走多远,但不同实现的参数化和解释方向可能不同,不能只凭“beta 越大越激进”死记。

调参时直接监控:

  • chosen reward 与 rejected reward 的差。
  • policy 与 reference 的 KL。
  • chosen/rejected log-prob 各自变化。
  • 回答长度与格式分布。
  • 通用能力回归。

有时 loss 在下降,却主要是把 rejected 概率压到极低,chosen 本身没有提升;这会让模型更尖锐但不更好。

8.4 长度偏差与 token 求和

序列 log-prob 是每个 token log-prob 的总和,天然随长度变得更负。chosen 和 rejected 长度差异大时,DPO 会受到长度影响。

处理方式包括按 token 平均、控制配对长度、在数据和评测中显式监控长度,以及采用对长度更稳健的目标。但归一化也会改变“整条回答概率”的语义,没有一个对所有任务都正确的选项。

8.5 DPO 为什么简单,也为什么有上限

优点:离线训练、实现像分类 loss、不需要 rollout、不需要 value model,稳定且成本低。

上限来自数据:它只能学习偏好数据覆盖到的答案。若数据由旧策略生成,新策略变强后会进入新的行为区域,原偏好边界不再够用;它也不会主动探索全新的解题策略。DPO 是优秀的离线偏好学习方法,不是 RL 的完全替代。

8.6 IPO、SimPO、KTO、ORPO 各在改什么

  • IPO:避免 DPO 在可分数据上把偏好间隔无限推大,使用有有限目标间隔的回归式目标,提升噪声鲁棒性。
  • SimPO:不用 reference model,以平均 log-prob 和显式 margin 做偏好优化,减少显存与实现复杂度。
  • KTO:可用不成对的“好/坏”反馈,不要求同一 prompt 下严格配对,适合点赞/点踩日志,但更依赖数据分布和基线估计。
  • ORPO:把 SFT 的正样本似然和偏好 odds 目标合在一个阶段,不需 reference,适合简化流程。

这些名字不是四个必须都学的平行算法。先掌握 DPO 的“偏好间隔 + 参考锚点”,再看它们分别拿掉 reference、放宽数据格式或改变间隔形状。

8.7 一套可靠的 DPO 流程

  1. 用稳定 SFT 模型作为 policy 初始化和 reference。
  2. 确认 chosen/rejected 使用完全相同的 prompt 与模板。
  3. 过滤无区分度、长度极端和标注冲突的 pair。
  4. 小学习率、短训练,持续监控 KL、margin 和长度。
  5. 不只看偏好准确率;跑通用、领域、安全和格式回归。
  6. 用独立 judge 或人工盲评,不用训练该数据的同一个 reward 体系自证。

核心问答

Q:DPO 与 SFT 的本质差别? SFT 提高一个示范的绝对似然;DPO 利用成对偏好,要求新策略相对参考更多地偏向赢家。

Q:为什么需要 reference? 它提供基线并限制策略漂移,让模型学习“相对 SFT 应该改变什么”,而不是无界地追逐偏好数据。

Q:DPO 能替代 RLHF 吗? 在离线、已有高质量偏好对的行为对齐上经常可以;需要在线探索、可验证任务和超越已有答案时不能。

Q:DPO loss 降了但结果变差,先查什么? 查 KL 是否过大、是否只在压低 rejected、回答长度是否漂移,以及模板和 reference log-prob 是否一致。