Skip to content

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 由 Rafailov et al. 2023 提出,最初针对大语言模型。传统 RLHF 的流程是:

  1. 训练一个奖励模型 r(x, y),让它学会给”提示词 x 下的回答 y”打分。
  2. 用强化学习(PPO)优化语言模型策略,使它生成的回答拿到更高奖励,同时用 KL 散度约束策略不要偏离原始模型太远。

DPO 的突破在于:利用 Bradley-Terry 偏好模型和 RLHF 的 KL 约束最优解,可以推导出一个闭式解(closed-form solution)——直接把奖励 r(x, y) 用策略本身表达出来,从而绕过显式奖励模型。最终损失函数只涉及策略模型和参考模型的对数概率,不需要任何中间步骤。

对于 LLM,给定提示词 x、偏好回答 y_w(winner)和不偏好回答 y_l(loser),DPO 损失为:

LDPO=−log⁡σ(β(log⁡π(yw∣x)πref(yw∣x)−log⁡π(yl∣x)πref(yl∣x)))L_{\text{DPO}} = -\log \sigma \left( \beta \left( \log \frac{\pi(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \log \frac{\pi(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right)

其中 π 是当前策略,π_ref 是冻结的参考策略,β 是控制偏离程度的温度参数,σ 是 sigmoid 函数。

Wallace et al. 2023(Diffusion-DPO)将 DPO 迁移到扩散模型。核心挑战在于:LLM 可以直接计算每个 token 的对数概率,但扩散模型生成的是连续图像,如何定义”图像的对数似然”?

关键适配方案:

  1. 偏好数据收集:对同一个提示词 c,让模型用不同随机种子生成两张图像 x_w 和 x_l,由人类标注哪张更好。注意扩散模型的生成过程是从纯噪声出发、逐步去噪直到得到清晰图像,所谓”随机种子”就是控制初始噪声和每步采样随机性的数值——同一提示词、不同种子会生成风格/构图不同的图像。
  2. 对数似然的计算:扩散模型的前向过程可以用变分下界(ELBO)表示图像的对数似然。ELBO(Evidence Lower Bound,证据下界)是变分推断中常用的技巧——真实对数似然无法直接计算,但 ELBO 给出了一个可以优化的下界,最大化它等价于最大化似然。Diffusion-DPO 推导出 ELBO 的关键项——每个去噪步骤的噪声预测损失——作为对数似然的代理。
  3. 去噪轨迹上的梯度:具体而言,对于图像 x 和提示词 c,在时间步 t 加噪得到 x_t,模型预测噪声 ε_θ(x_t, t, c),对数似然近似为对所有时间步 t 求和的噪声预测损失(MSE 形式)。这里的”时间步 t”并非真实时间,而是扩散过程的虚拟”噪声等级”标号——t 较大表示噪声重、图像接近纯噪;t 较小表示噪声轻、图像接近清晰。模型需要在所有噪声等级上都学会正确预测噪声。

为什么不用 classifier-free guidance 的梯度来对齐? 无分类器引导(CFG)是在推理时放大条件信号、牺牲多样性换质量的手法,它不改变模型权重。DPO 则是从根本上调整模型权重,让模型本身”更倾向于生成好图”——二者可以叠加使用,但解决的问题层次不同。

最终的 Diffusion-DPO 损失为:

L=−log⁡σ(−β2(Lw−Ll))L = -\log \sigma \left( -\frac{\beta}{2} (L_w - L_l) \right)

其中:

Lw=Et,ϵ[MSE(ϵ,ϵθ(xtw,t,c))]L_w = \mathbb{E}_{t,\epsilon} \left[ \text{MSE}(\epsilon, \epsilon_\theta(x^w_t, t, c)) \right] Ll=Et,ϵ[MSE(ϵ,ϵθ(xtl,t,c))]L_l = \mathbb{E}_{t,\epsilon} \left[ \text{MSE}(\epsilon, \epsilon_\theta(x^l_t, t, c)) \right]

其中 LwL_w 是偏好图像上的去噪损失,LlL_l 是不偏好图像上的去噪损失。

直觉解释:训练让模型在偏好图像 x_w 上的去噪损失下降(即模型更”认同”这张好图是合理的生成结果),同时让不偏好图像 x_l 上的去噪损失上升(即模型”排斥”这张差图)。参考模型(冻结的原始模型)隐含在 β 的标定中——通过用参考模型的隐式先验做归一化,防止模型偏离原始分布太远。

整个 DPO 框架的统计基础是 Bradley-Terry 模型:它假设人类偏好 x_w 优于 x_l 的概率正比于两者”质量分”的指数比:

P(xw preferred over xl)=σ(r(xw)−r(xl))P(x_w \text{ preferred over } x_l) = \sigma(r(x_w) - r(x_l))

DPO 的数学贡献是证明:在 RLHF 的 KL 约束最优解下,奖励 r 可以被策略 π 完全表达,于是 Bradley-Terry 模型可以直接用策略写成——这就是为什么不需要训练单独的奖励模型。

维度RLHF for DiffusionDiffusion-DPO
是否需要奖励模型需要,单独训练不需要
优化方式强化学习采样(REINFORCE/PPO)标准去噪损失梯度
训练稳定性奖励模型不准会导致策略崩溃两阶段对比,稳定
数据需求偏好数据(训练奖励模型)偏好数据(直接训练)
实现复杂度高(两阶段 + RL 采样)低(修改损失函数即可)

RLHF for Diffusion vs Diffusion-DPO 流程对比

Section titled “RLHF for Diffusion vs Diffusion-DPO 流程对比”

偏好数据如何”塑造”模型分布

Section titled “偏好数据如何”塑造”模型分布”

以下代码演示 Diffusion-DPO 损失的核心计算逻辑(简化版,不含完整训练循环):

import torch
import 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 艺术伦理)。
类库语言说明
HuggingFace TRLPython提供 DPOTrainer,原生支持 LLM 和扩散模型的 DPO 训练
HuggingFace DiffusersPython扩散模型库,配合 TRL 可对 SD/SDXL 做 DPO 微调
diffusers-dpoPythonStability AI 等开源的 Diffusion-DPO 官方训练脚本参考实现
PEFTPython低秩适配器库,用于 Diffusion-DPO + LoRA 低显存训练
PyTorchPython底层自动微分框架,实现自定义 DPO 损失的基础
术语英文解释
直接偏好优化DPO (Direct Preference Optimization)直接用偏好数据优化策略的方法,绕过显式奖励模型训练
Bradley-Terry 模型Bradley-Terry Model将偏好建模为两者”质量分”之差的概率统计模型
奖励模型Reward Model从偏好数据中学习打分函数的模型,RLHF 的中间产物
参考模型Reference ModelDPO 训练中冻结的原始模型,用作 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 上的完整训练流程和效果对比。