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 公式:
内积非正时保留原来的 loser 权重;内积为正时,winner 的下降余量越小、交叉影响越强,允许的 loser 权重就越低。\(\mu\) 越大,收缩越保守;裁剪到 \([0,1]\) 则确保不会把 loser 分量放大到超过原始权重。因而这不是额外奖励,也不是把低质量图像删除,而是逐步调整其梯度影响。
这里的效率和保证之间有明确取舍:\(\mu\) 只是用来缓解未知局部几何造成的偏差,不是测得的 \(\rho\),也没有对任意 Jacobian 自动成立的保证。图 2 中输出空间与参数空间的系数轨迹接近,但作者明确说明两条曲线使用不同的 \(\mu\);它支持“经过调节能近似”,不支持“无需调节就严格等价”。
3. 仅缩放反向梯度:保留 DPO 的前向数值与偏好判别尺度
直接把 loser 损失乘上安全系数并送入 logistic 函数,会同时改变偏好 margin、外层权重以及梯度方向。算法 1 采用的是另一种做法:保留 loser 损失的前向数值,只在反向传播时缩放它。用 \(\operatorname{sg}\) 表示停止梯度,下面是算法第 5 步的等价记法,其中安全系数作为本次更新的常量使用:
前向时括号内为零,所以数值仍是原始 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。适合已有扩散偏好训练流程,论文报告的低额外开销使其具有实际尝试价值。