跳转至

Diffusion-SDPO: Safeguarded Direct Preference Optimization for Diffusion Models

会议: ECCV2026
论文: ECCV 原文
代码: https://github.com/AIDC-AI/Diffusion-SDPO
领域: 图像生成
关键词: 扩散模型、直接偏好优化、梯度几何、优选分支保护、输出空间近似

一句话总结

Diffusion-SDPO 根据优选与非优选分支的梯度关系,自适应缩放非优选分支的反向梯度,缓解扩散模型 DPO 中“偏好差距变大、两边质量却一起变差”的问题;在论文的 FLUX.1-dev 设置中,GenEval 从基础模型的 0.66 提升至 0.71,而同学习率的普通 DPO 降至 0.23。

研究背景与动机

文本到图像模型的偏好微调通常使用同一提示词下的一对图像:人类更喜欢的一张是 winner,另一张是 loser。Diffusion-DPO 将这种排序转换为相对冻结参考模型的去噪误差比较,希望模型更擅长重建 winner、相对远离 loser。它不必再训练一个在线奖励模型,也不必执行完整的强化学习流程,但优化的是两支之间的相对差距,而不是直接约束某一支的绝对误差。

问题在于,两支使用同一套模型参数。沿着“增大 loser 误差”的方向更新时,也可能增大 winner 的误差;只要 loser 变差得更快,DPO 的排序目标仍然会改善。论文图 1 和图 3 展示的失败模式正是如此:偏好 margin 朝预期方向移动,两支去噪损失却一起上升,生成结果还会逐渐出现过饱和与纹理伪影。简单减小学习率可以避免某些崩溃,却也可能让模型几乎学不到新的偏好,因此关键不是统一减慢训练,而是识别哪部分更新正在伤害 winner。

本文将问题落到每一步更新的方向上:保留降低 winner 误差的梯度,只在 loser 分支的反向作用可能抵消它时缩小 loser 的权重。核心 idea:把偏好优化中的“拉开相对差距”附加一个优选分支保护条件,再用低成本的输出空间梯度近似决定每一步允许施加多强的 loser 更新。 这里的保护首先来自局部一阶分析,实际实现还包含近似,不能直接等同于任意有限训练步下生成质量必然单调提升。

方法详解

整体框架

输入仍是提示词与 winner/loser 图像对,训练模型和冻结参考模型分别处理加噪后的两张图像。在同一扩散时间步计算两支的残差目标后,SDPO 根据输出空间梯度的内积与 winner 梯度的平方范数,得到安全系数,再将它仅作用于 loser 分支的反向传播。

最终产物是经过偏好微调的生成模型;推理时不需要参考模型、成对图像或额外的安全系数计算。这不是新增一个生成网络,而是可叠加到 Diffusion-DPO、DSPO、DMPO 等训练目标上的更新规则,因此以下用梯度机制说明,不将损失改进画成多模块系统。

需要区分论文中的两种损失:单支的残差目标包含“当前模型的重建误差减去冻结参考模型的重建误差”,外层 DPO 损失再比较两支目标。对固定训练样本、噪声和时间步而言,参考项不随参数更新变化,因此降低 winner 的该残差目标也对应降低它的当前重建误差;这不意味着跨不同随机 minibatch 的原始损失一定逐步下降。

关键设计

1. 优选分支保护:先检查更新是否伤害 winner,再扩大偏好差距

普通 DPO 的局部更新方向可以理解为“降低 winner 损失”和“提高 loser 损失”的组合,外层 logistic 函数给这两个分量乘上共同的正尺度。论文先分析一个给 loser 分量增加权重的线性化目标:将 winner 损失梯度记为参数空间中的优选梯度,将 loser 损失梯度记为非优选梯度,后者在更新里带相反符号。关键问题是,这个组合方向在 winner 损失上的方向导数是否非正,而不是 DPO 标量损失是否下降。

一阶展开表明,winner 自己的梯度平方范数提供了下降余量,loser 权重乘以两支梯度内积会消耗这部分余量。因此,当两支损失梯度的内积为正时,不能无限增强 loser 更新:其权重至多是“winner 梯度平方范数除以内积”。内积非正则没有这一类冲突,因为用于提高 loser 误差的反向分量不会在一阶上增大 winner 误差。这里看似“梯度同向”反而危险,原因正是偏好训练对 loser 做的是提高损失,而不是像 winner 一样降低损失。

这个判据解释了为什么只监控 margin 不够,也解释了为什么固定地调低全部梯度不是同一件事。SDPO 希望保留 winner 的学习信号,并选择性限制有害的 loser 分量。该结论适用于线性化、足够小的梯度步;它不是对非线性网络整个训练过程的无条件收敛证明。

2. 输出空间安全系数:用便宜的残差信号近似昂贵的参数梯度几何

若直接执行上述判据,需要分别取得两支完整的参数梯度并计算内积,对大模型有明显的显存与计算代价。作者改用模型输出张量上的损失梯度:\(g^w\) 与 \(g^l\) 分别表示 winner、loser 损失对预测噪声等输出的梯度。对于平方残差损失,这些信号直接与预测残差相关,因此不必为构造系数保存两套完整参数梯度。

参数梯度和输出梯度之间隔着各分支的 Jacobian,所以输出内积并不严格等于参数内积。原文式 16 用几何因子 \(\rho\) 表达这种差异,实际算法不显式估计它,而用安全松弛参数 \(\mu\) 收缩输出空间估计。下面合并算法 1 第 4 步与第 4.2 节明确给出的裁剪及分支规则;没有补写缓存里排版损坏的 Jacobian 公式:

\[ \lambda_{\mathrm{safe}}= \begin{cases} 1, & (g^w)^\top g^l\leq 0,\\ \operatorname{clip}_{[0,1]}\!\left(\dfrac{(1-\mu)\lVert g^w\rVert_2^2}{(g^w)^\top g^l}\right), & (g^w)^\top g^l>0. \end{cases} \]

内积非正时保留原来的 loser 权重;内积为正时,winner 的下降余量越小、交叉影响越强,允许的 loser 权重就越低。\(\mu\) 越大,收缩越保守;裁剪到 \([0,1]\) 则确保不会把 loser 分量放大到超过原始权重。因而这不是额外奖励,也不是把低质量图像删除,而是逐步调整其梯度影响。

这里的效率和保证之间有明确取舍:\(\mu\) 只是用来缓解未知局部几何造成的偏差,不是测得的 \(\rho\),也没有对任意 Jacobian 自动成立的保证。图 2 中输出空间与参数空间的系数轨迹接近,但作者明确说明两条曲线使用不同的 \(\mu\);它支持“经过调节能近似”,不支持“无需调节就严格等价”。

3. 仅缩放反向梯度:保留 DPO 的前向数值与偏好判别尺度

直接把 loser 损失乘上安全系数并送入 logistic 函数,会同时改变偏好 margin、外层权重以及梯度方向。算法 1 采用的是另一种做法:保留 loser 损失的前向数值,只在反向传播时缩放它。用 \(\operatorname{sg}\) 表示停止梯度,下面是算法第 5 步的等价记法,其中安全系数作为本次更新的常量使用:

\[ \widetilde{\mathcal L}^{l} =\operatorname{sg}(\mathcal L^{l}) +\lambda_{\mathrm{safe}}\bigl(\mathcal L^{l}-\operatorname{sg}(\mathcal L^{l})\bigr). \]

前向时括号内为零,所以数值仍是原始 loser 损失;反向时停止梯度的项不贡献导数,剩下的 loser 梯度才被安全系数缩放。这样既保留原本 DPO 对当前偏好差距的判断,也将几何保护落实到更新方向。实现时应落实这一反向缩放语义,而不是仅修改前向偏好分数。

这个设计也使其能迁移到不同偏好目标:不必把所有方法改写成同一个损失,只需在对应 loser 分支接入缩放。DSPO 已经逐渐提高 winner 分支权重,因此额外保护的收益较小;Diffusion-DPO 与 DMPO 的训练轨迹受修正更明显。该机制针对的是共享参数下两支的耦合,不依赖 UNet 或 DiT 的特定层结构。

损失函数 / 训练策略

算法 1 每次采样图像对、扩散时间步和噪声,运行训练模型与冻结参考模型,计算两支残差目标、安全系数和停止梯度版本的 loser 项,随后沿用原始 DPO 的 logistic 形式完成更新。此处不重录缓存中符号错位的 DPO 展开式;机制依赖的是明确的两支误差差与上述反向缩放规则。

SD 1.5 与 SDXL 使用 Pick-a-Pic V2 偏好对,正文给出的设置为 2000 步、全局 batch size 2048,学习率分别为 \(1\times10^{-8}\) 和 \(1\times10^{-9}\)。SD 1.5 的 Diffusion-DPO、DMPO 使用 \(\mu=0.9\),DSPO 使用 \(\mu=0.2\);SDXL 的三个变体均使用 \(\mu=0.6\)。作者保留对应基础方法的其余超参数。

更大规模的 FLUX.1-dev 是 12B rectified-flow DiT,使用内部构建的 186K 偏好样本、\(1024\times1024\) 分辨率、全局 batch size 512、学习率 \(1\times10^{-5}\)。其 \(\mu=0.99\),正文报告典型训练步中的有效系数约为 \(\lambda_{\mathrm{safe}}\approx0.1\),不能把 \(1-\mu=0.01\) 误当作最终缩放系数,因为还要乘上梯度范数与内积的比值。

调参时,作者建议观察 winner 损失和 margin 的联合动态:winner 损失上漂或振荡时增大 \(\mu\);winner 稳定但偏好差距停止改善时,小幅减小 \(\mu\)。这是一条经验策略,不是额外的自动控制模块,也不替代对训练稳定性的实际监测。

实验关键数据

主实验

SD 系列使用 Pick V2、HPS V2 和 PartiPrompts 的测试提示词;自动指标包括 PickScore、HPS V2、LAION 美学分数、CLIP 和 ImageReward(IR)。正文评测设置列出 guidance scale 7.5、50 个去噪步;Ovis-U1 与 FLUX.1-dev 另测 GenEval、DPG-Bench,Ovis-U1 还测图像编辑。

下表摘自主文表 1:SD 1.5 骨干,HPS V2 提示词,所有指标越高越好。保留 SFT 对照,避免将“增强对应 DPO 基线”误读为“超过所有训练方式”。

方法 PickScore HPS 美学 CLIP IR
SFT 0.2168 0.2838 5.7851 0.3591 0.6619
Diffusion-DPO 0.2131 0.2743 5.6639 0.3552 0.1705
Diffusion-DPO + SDPO 0.2174 0.2827 5.8744 0.3600 0.6211
DSPO 0.2168 0.2837 5.8346 0.3598 0.6483
DSPO + SDPO 0.2172 0.2847 5.8474 0.3586 0.6578
DMPO 0.2131 0.2766 5.6538 0.3551 0.3171
DMPO + SDPO 0.2182 0.2848 5.8574 0.3612 0.7061

DMPO 为作者实现的基线。Diffusion-DPO 加 SDPO 后的 IR 增加 0.4506,但仍低于 SFT 的 0.6619;DSPO 的 CLIP 从 0.3598 降至 0.3586。因此应概括为整体收益,而非每一项指标都提高。

下表摘自主文表 4,展示 FLUX.1-dev 的学习率对照,仅保留三个代表性指标;原表共报告七项指标。

方法 学习率 IR GenEval DPG-Bench
FLUX.1-dev 基础模型 不适用 0.9916 0.66 85.75
Diffusion-DPO \(1\times10^{-5}\) -0.7788 0.23 58.97
Diffusion-DPO,低学习率 \(1\times10^{-7}\) 0.9938 0.66 85.78
Diffusion-DPO + SDPO \(1\times10^{-5}\) 1.1108 0.71 86.36

这个对照把“防止崩溃”和“有效学习”区分开:减小学习率恢复到接近基础模型,SDPO 则在较大学习率下带来增益。但实验只展示这两档普通 DPO 学习率,不能推出其他调参方案都无法达到同等效果。

消融实验

主文表 5 使用 SD 1.5、HPS V2 提示词;效率在单张 NVIDIA A100、batch size 16、128 次梯度累积、BF16 下测量。时间对应包含该累积设置的一个训练步,不是一次小批次前向时间。

配置 PickScore HPS 单步时间 / 秒 峰值显存 / GB
Diffusion-DPO 0.2131 0.2743 183 57.0
固定安全系数的 SDPO 0.2158 0.2803 183 57.0
参数空间动态系数的 SDPO 0.2176 0.2828 314 63.3
输出空间动态系数的 SDPO 0.2174 0.2827 184 57.1

固定系数已能改善基线,说明减轻 loser 作用本身有帮助;动态输出系数进一步提高 PickScore 与 HPS,支持按当前梯度状态调节,而不只是永久设一个更小权重。输出空间方案比原始 DPO 多 1 秒和 0.1 GB;参数空间方案相较原始 DPO 多约 72% 时间、11% 显存。正文未给出固定系数的具体数值,不补猜。

关键发现

  • 主文表 2 的自动评估平均胜率中,Diffusion-DPO + SDPO 对其基础方法为 67.90%,DMPO + SDPO 为 68.90%,DSPO + SDPO 为 51.95%;这些是多种评分器的平均胜率,不是新的人类盲测结果。
  • 主文表 3 中,Ovis-U1 的 GenEval 为 0.89,DPO 为 0.88,SDPO 为 0.91;GEdit-EN 分别为 6.42、6.43、6.60,说明观察到的收益并不限于 SD 系列的偏好评分。
  • 图 3 的 SDPO 训练轨迹中,loser 损失也可能下降,winner 下降得更多仍能扩大差距。因此成功的偏好优化不要求 loser 的绝对误差持续升高。
  • 图 4 支持更长训练下的稳定收益;本缓存未包含正文提到的附录,不从图中文字抽取精确曲线数值,也不补写未见的 SDXL 完整结果或敏感性数据。

亮点与洞察

  • 把排序进步和绝对能力分开监测。 相对目标改善可以隐藏两个分支一起退化;同时记录 winner、loser 与 margin,比只看 DPO loss 更能发现危险更新。
  • 前向目标不变,反向影响可控。 停止梯度技巧让算法保留原来的偏好判别数值,只调整损害来源,适合已有 DPO 训练系统的小范围接入。
  • 用昂贵实现验证便宜近似。 参数空间方案提供对照,输出空间方案在表 5 上取得接近的分数;这比仅报告“额外开销很小”更能说明近似的实际价值。

局限与展望

  • 作者承认的理论边界。 一阶近似在高曲率区域会变弱,输出空间与参数空间的几何差异也可能造成不准确的缩放;作者提出二阶或信赖域保护作为后续方向。
  • 笔记观察:保护代理不等于保护所有生成质量。 当前训练样本的去噪误差并不是感知质量、提示词遵循或多样性的充分统计量,输出空间保护也不是每步真实参数更新的严格验证。
  • 笔记观察:评估与复现仍有缺口。 主文主要依赖自动评分器,FLUX 使用内部 186K 偏好数据,固定系数及部分完整结果需查附录;当前证据不能替代独立人评、更多随机种子和完整超参数搜索。
  • 可检验的改进。 可低频计算参数空间内积来校准 \(\mu\),或在检测到 winner 误差异常上升时执行更保守的步长检查;这属于后续建议,不是本文已实现的功能。

相关工作与启发

  • vs Diffusion-DPO: 基础方法只通过参考模型校准后的相对误差学习排序;SDPO 增加方向相关的 loser 梯度限制,直接针对 winner 被连带伤害的失败模式。
  • vs DSPO / DMPO: 两者是被增强的基础偏好目标,不是 SDPO 的互斥替代。DSPO 已逐步增加 winner 权重,额外收益较小也与机制一致。
  • vs MaPO / DPOP: 按本文分析,前者通过固定 winner 权重且不使用参考模型调整优化,后者通过阈值式保护规则限制退化;SDPO 用每步梯度几何决定 loser 影响,而非仅用固定权重或阈值。
  • 可迁移启发: 对其他共享参数的成对偏好任务,可先检查排斥负例的梯度是否伤害正例,再考虑单侧保护;是否存在同样便宜可靠的输出空间代理,需要针对任务重新验证。

评分

  • 新颖性: 4/5。将 winner 保护具体化为几何自适应的单侧梯度缩放,改动简洁且针对性强。
  • 实验充分度: 4/5。覆盖多个目标、UNet/DiT、编辑与效率对照,但人评及内部数据复现仍有限。
  • 写作质量: 4/5。失败现象、机制和消融衔接清楚;应严格区分一阶条件与输出空间近似的保证范围。
  • 价值: 4/5。适合已有扩散偏好训练流程,论文报告的低额外开销使其具有实际尝试价值。