Diffusion DPO 偏好优化
Diffusion DPO(Direct Preference Optimization for Diffusion Models)是将原本为 LLM 设计的 DPO 方法迁移到扩散模型的偏好对齐技术,让生成模型学会”画出人类更喜欢的图”。它直接用人类偏好数据训练模型,绕过了显式奖励模型的训练环节。前置阅读:扩散模型、Stable Diffusion 架构、无分类器引导。
想象一位美术老师教学生画画:
- RLHF 方式:老师先花几个月时间总结出一套”好画评分标准”(构图、配色、线条……),写成一本厚厚的评分手册,然后让学生不断画画、按手册打分、学生再根据分数调整画法。手册本身就是个很难训练的模型,而且学生很容易钻空子——专画那些”恰好能拿高分但并不好看”的画。
- Diffusion-DPO 方式:老师根本不写评分手册。每次学生画完两张画,老师直接指着说”这张比那张好”。学生立刻据此调整画法。不需要中间那本手册,不需要打分,只需要”二选一”的判断。
关键洞察:人类标注”A 比 B 好”比给每张画打绝对分数容易得多(排序比评分简单),而且直接从偏好中学习绕过了奖励模型这个不稳定的中问环节。DPO 的数学优雅之处在于——它证明了”从偏好数据直接优化策略”和”先学奖励模型再做强化学习”在数学上等价,但前者训练更简单、更稳定。
小贴士:这里的”奖励模型(reward model)“是一个专门训练出来的打分模型,RLHF 要先花大量算力训练它;而”策略(policy)“就是正在训练的生成模型本身——在 LLM 场景下是语言模型,在扩散模型场景下就是那个预测噪声的 U-Net 或 DiT(Diffusion Transformer,用 Transformer 架构替代 U-Net 做去噪的模型,SD3 / FLUX 等新一代模型已全面采用)。
行业现状:到 2025 年,DPO 已基本取代 RLHF 成为扩散模型审美对齐的主流方案。Stable Diffusion 3、FLUX.1 等新一代模型社区均有 DPO 微调版本;Midjourney、Adobe Firefly 等闭源产品虽然不公开训练细节,但其”用户选哪张图放大”的交互模式天然契合 DPO 所需的配对偏好数据。
第一阶段:DPO 的 LLM 起源
Section titled “第一阶段:DPO 的 LLM 起源”DPO 由 Rafailov et al. 2023 提出,最初针对大语言模型。传统 RLHF 的流程是:
- 训练一个奖励模型 r(x, y),让它学会给”提示词 x 下的回答 y”打分。
- 用强化学习(PPO)优化语言模型策略,使它生成的回答拿到更高奖励,同时用 KL 散度约束策略不要偏离原始模型太远。
DPO 的突破在于:利用 Bradley-Terry 偏好模型和 RLHF 的 KL 约束最优解,可以推导出一个闭式解(closed-form solution)——直接把奖励 r(x, y) 用策略本身表达出来,从而绕过显式奖励模型。最终损失函数只涉及策略模型和参考模型的对数概率,不需要任何中间步骤。
对于 LLM,给定提示词 x、偏好回答 y_w(winner)和不偏好回答 y_l(loser),DPO 损失为:
其中 π 是当前策略,π_ref 是冻结的参考策略,β 是控制偏离程度的温度参数,σ 是 sigmoid 函数。
第二阶段:从 LLM 到扩散模型
Section titled “第二阶段:从 LLM 到扩散模型”Wallace et al. 2023(Diffusion-DPO)将 DPO 迁移到扩散模型。核心挑战在于:LLM 可以直接计算每个 token 的对数概率,但扩散模型生成的是连续图像,如何定义”图像的对数似然”?
关键适配方案:
- 偏好数据收集:对同一个提示词 c,让模型用不同随机种子生成两张图像 x_w 和 x_l,由人类标注哪张更好。注意扩散模型的生成过程是从纯噪声出发、逐步去噪直到得到清晰图像,所谓”随机种子”就是控制初始噪声和每步采样随机性的数值——同一提示词、不同种子会生成风格/构图不同的图像。
- 对数似然的计算:扩散模型的前向过程可以用变分下界(ELBO)表示图像的对数似然。ELBO(Evidence Lower Bound,证据下界)是变分推断中常用的技巧——真实对数似然无法直接计算,但 ELBO 给出了一个可以优化的下界,最大化它等价于最大化似然。Diffusion-DPO 推导出 ELBO 的关键项——每个去噪步骤的噪声预测损失——作为对数似然的代理。
- 去噪轨迹上的梯度:具体而言,对于图像 x 和提示词 c,在时间步 t 加噪得到 x_t,模型预测噪声 ε_θ(x_t, t, c),对数似然近似为对所有时间步 t 求和的噪声预测损失(MSE 形式)。这里的”时间步 t”并非真实时间,而是扩散过程的虚拟”噪声等级”标号——t 较大表示噪声重、图像接近纯噪;t 较小表示噪声轻、图像接近清晰。模型需要在所有噪声等级上都学会正确预测噪声。
为什么不用 classifier-free guidance 的梯度来对齐? 无分类器引导(CFG)是在推理时放大条件信号、牺牲多样性换质量的手法,它不改变模型权重。DPO 则是从根本上调整模型权重,让模型本身”更倾向于生成好图”——二者可以叠加使用,但解决的问题层次不同。
最终的 Diffusion-DPO 损失为:
其中:
其中 是偏好图像上的去噪损失, 是不偏好图像上的去噪损失。
直觉解释:训练让模型在偏好图像 x_w 上的去噪损失下降(即模型更”认同”这张好图是合理的生成结果),同时让不偏好图像 x_l 上的去噪损失上升(即模型”排斥”这张差图)。参考模型(冻结的原始模型)隐含在 β 的标定中——通过用参考模型的隐式先验做归一化,防止模型偏离原始分布太远。
Bradley-Terry 偏好模型
Section titled “Bradley-Terry 偏好模型”整个 DPO 框架的统计基础是 Bradley-Terry 模型:它假设人类偏好 x_w 优于 x_l 的概率正比于两者”质量分”的指数比:
DPO 的数学贡献是证明:在 RLHF 的 KL 约束最优解下,奖励 r 可以被策略 π 完全表达,于是 Bradley-Terry 模型可以直接用策略写成——这就是为什么不需要训练单独的奖励模型。
与 RLHF for Diffusion 的对比
Section titled “与 RLHF for Diffusion 的对比”| 维度 | RLHF for Diffusion | Diffusion-DPO |
|---|---|---|
| 是否需要奖励模型 | 需要,单独训练 | 不需要 |
| 优化方式 | 强化学习采样(REINFORCE/PPO) | 标准去噪损失梯度 |
| 训练稳定性 | 奖励模型不准会导致策略崩溃 | 两阶段对比,稳定 |
| 数据需求 | 偏好数据(训练奖励模型) | 偏好数据(直接训练) |
| 实现复杂度 | 高(两阶段 + RL 采样) | 低(修改损失函数即可) |
RLHF for Diffusion vs Diffusion-DPO 流程对比
Section titled “RLHF for Diffusion vs Diffusion-DPO 流程对比”Diffusion-DPO 训练单步流程
Section titled “Diffusion-DPO 训练单步流程”偏好数据如何”塑造”模型分布
Section titled “偏好数据如何”塑造”模型分布”以下代码演示 Diffusion-DPO 损失的核心计算逻辑(简化版,不含完整训练循环):
import torchimport torch.nn.functional as F
def diffusion_dpo_loss(model, ref_model, x_w, x_l, c, betas, beta=0.05): """计算 Diffusion-DPO 损失(简化版) model: 当前训练的去噪模型; ref_model: 冻结的参考模型 x_w: 偏好图像 [B,C,H,W]; x_l: 不偏好图像 [B,C,H,W] c: 文本条件; betas: 噪声时间表; beta: 温度系数 """ B = x_w.shape[0] t = torch.randint(0, len(betas), (B,), device=x_w.device) # 随机时间步 noise = torch.randn_like(x_w) # 随机高斯噪声 alphas_cumprod = torch.cumprod(1.0 - betas, dim=0) sqrt_ac = alphas_cumprod[t].view(B, 1, 1, 1).sqrt() sqrt_om = (1.0 - alphas_cumprod[t]).view(B, 1, 1, 1).sqrt() xw_t = sqrt_ac * x_w + sqrt_om * noise # 对偏好图加噪 xl_t = sqrt_ac * x_l + sqrt_om * noise # 对不偏好图加噪 # 当前模型在两张图上的去噪损失 loss_w = F.mse_loss(noise, model(xw_t, t, c)) # 好图:应该下降 loss_l = F.mse_loss(noise, model(xl_t, t, c)) # 差图:应该上升 # DPO 损失:拉低好图损失,推高差图损失 logits = -beta / 2.0 * (loss_w - loss_l) return -F.logsigmoid(logits).mean()# 实际训练中需要用 HuggingFace TRL 的 DPOTrainer 管理完整流程- 偏好数据质量决定上限:Diffusion-DPO 的效果完全取决于”哪张图更好”这个标注是否准确。大规模标注通常需要多名标注员交叉验证,取多数共识。
- 参考模型必须冻结:训练中保持参考模型 π_ref 的权重不变,只更新当前模型。如果参考模型也在变,KL 约束的”锚点”就消失了,模型会漂移到退化分布。
- β 值需要调参:β 太大模型过度偏离原始分布(可能丢失多样性),β 太小学不到偏好信号。实践中通常在 0.01 到 0.1 之间搜索。
- 可以与 LoRA 结合:用 LoRA 只训练低秩适配器,而非全量微调——这在显存受限时非常实用,且可以热插拔不同审美风格(详见 LoRA 训练)。
- 偏好数据可以来自模型自身:先让模型对同一提示词采样多张图(用不同随机种子),用更大/更强的模型(或人类)做偏好排序,形成自训练闭环。
- 注意”奖励黑客”(reward hacking):虽然 DPO 绕过了奖励模型,但如果偏好数据有系统性偏差(如标注员偏好高饱和度),模型会过度优化这个特征导致画面失真。
- 批内配对很重要:每对 x_w 和 x_l 必须来自同一个提示词,不同提示词之间不能配对——否则对比没有意义。
- Stable Diffusion 微调:社区使用 Diffusion-DPO 对 SDXL 等模型做审美对齐微调,生成的图像在构图、色彩、细节上更符合人类审美,减少手部畸形和伪影。
- Midjourney 风格进化:Midjourney 的每次版本迭代都隐含大量用户偏好信号(用户在四张候选图中选哪张放大),这些”二选一”数据天然适合 DPO 式训练。
- Adobe Firefly 商品质感:Firefly 通过偏好对齐确保生成结果符合专业设计师的审美标准,适合商业用途,减少低质量输出。
- Sora 视频生成:视频生成模型同样面临”哪段视频更好”的对齐问题,Diffusion-DPO 的方法可扩展到视频扩散模型(如 SVD 视频)的审美对齐。
- 个性化图像服务:Emoji 生成、头像生成等产品用偏好数据微调模型,让输出更贴合目标用户群体的审美偏好。
- 减少有害内容:偏好数据可以设计为”安全图优于不安全图”,用 DPO 做安全对齐,减少模型生成暴力、色情等有害图像(详见 AI 艺术伦理)。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| HuggingFace TRL | Python | 提供 DPOTrainer,原生支持 LLM 和扩散模型的 DPO 训练 |
| HuggingFace Diffusers | Python | 扩散模型库,配合 TRL 可对 SD/SDXL 做 DPO 微调 |
| diffusers-dpo | Python | Stability AI 等开源的 Diffusion-DPO 官方训练脚本参考实现 |
| PEFT | Python | 低秩适配器库,用于 Diffusion-DPO + LoRA 低显存训练 |
| PyTorch | Python | 底层自动微分框架,实现自定义 DPO 损失的基础 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 直接偏好优化 | DPO (Direct Preference Optimization) | 直接用偏好数据优化策略的方法,绕过显式奖励模型训练 |
| Bradley-Terry 模型 | Bradley-Terry Model | 将偏好建模为两者”质量分”之差的概率统计模型 |
| 奖励模型 | Reward Model | 从偏好数据中学习打分函数的模型,RLHF 的中间产物 |
| 参考模型 | Reference Model | DPO 训练中冻结的原始模型,用作 KL 约束的锚点 |
| 偏好数据 | Preference Data | 人类标注的”A 优于 B”配对数据,DPO 的直接训练信号 |
| 温度系数 | Beta (β) | 控制 DPO 中策略偏离参考模型程度的超参数 |
| 奖励黑客 | Reward Hacking | 模型过度优化奖励信号中的偏差特征而非真实质量 |
| 人类反馈强化学习 | RLHF | 先训练奖励模型再用强化学习对齐策略的传统方法 |
| 去噪损失 | Denoising Loss | 扩散模型预测噪声的 MSE 损失,DPO 中作为对数似然代理 |
| 对数似然 | Log-Likelihood | 数据在模型分布下的对数概率,DPO 中需对扩散模型做近似 |
- Rafailov et al., “Direct Preference Optimization: Your Language Model is Secretly a Reward Model” (NeurIPS 2023):DPO 原始论文,提出绕过奖励模型直接从偏好数据优化策略的方法,已成为 LLM 对齐的主流方法。
- Wallace et al., “Diffusion Model Alignment Using Direct Preference Optimization” (ICML 2024):Diffusion-DPO 论文,将 DPO 从 LLM 迁移到扩散模型,推导出去噪轨迹上的 DPO 损失,并在 SDXL 上验证审美对齐效果。
- Christiano et al., “Deep Reinforcement Learning from Human Preferences” (NeurIPS 2017):RLHF 的奠基论文,提出从人类偏好数据训练奖励模型的方法,DPO 正是对它的简化与改进。
- Ouyang et al., “Training language models to follow instructions with human feedback” (NeurIPS 2022):InstructGPT 论文,RLHF 在 GPT 系列上的大规模实践,理解 DPO 动机的关键背景。
- Lee et al., “Aligning Text-to-Image Models using Human Feedback” (ICLR 2024):RLHF for Diffusion 的代表工作,训练奖励模型 + 强化学习采样对齐扩散模型——与 Diffusion-DPO 形成直接对比。
- Clark et al., “Direct Preference Optimization on Stable Diffusion XL” (Stability AI Blog, 2024):Stability AI 的官方实践博客,展示 Diffusion-DPO 在 SDXL 上的完整训练流程和效果对比。