DiffusionNFT

DiffusionNFT: Online Diffusion Reinforcement with Forward Process

作者:Kaiwen Zheng, Huayu Chen, Haotian Ye, Haoxiang Wang, Qinsheng Zhang, Kai Jiang, Hang Su, Stefano Ermon, Jun Zhu, Ming-Yu Liu
机构:清华大学 / NVIDIA / Stanford
会议:ICLR 2026 Oral
arXiv:2509.16117
项目主页:research.nvidia.com/labs/dir/DiffusionNFT

2509.16117_DiffusionNFT

0. TL;DR — 一句话定位

DiffusionNFT(Negative-aware Fine Tuning) 把 diffusion 的在线强化学习从「在反向采样轨迹上做 GRPO」彻底翻转为「在前向加噪过程上做 flow matching 监督」:通过对正样本与负样本分别构造一个隐式正策略与隐式负策略,把 RL 的优化方向「藏进」一个普通的 velocity 回归 loss 里。这一招同时解开了 FlowGRPO 系工作的三个死结——必须用一阶 SDE 采样、forward/reverse 不一致、与 CFG 难以协同——并在 SD3.5-Medium 上把 GenEval 从 0.24 推到 0.98,速度比 FlowGRPO 快 3–25×。

它最值得记住的洞察是:diffusion RL 不必显式估计似然,也不必跟着反向轨迹走;只要能把"奖励高的样本"和"奖励低的样本"分别投影到 flow matching 的目标向量场上,正负样本的差异本身就构成了策略改进的方向。 这本质上把 RL 退化成了"带正负标签的有监督微调"。

_attachments/DiffusionNFT/file-20260720112535436.png

  • DiffusionNFT的优化速度明显快于Flow-GRPO

1. 研究背景:为什么 diffusion RL 这么难

1.1 LLM 的 RL 公式为何无法直接搬过来

  • LLM 的 RLHF / GRPO 之所以好做,是因为自回归模型的 token-level 似然 \(\pi_\theta(y|x) = \prod_t \pi_\theta(y_t|x,y_{<t})\) 天然可计算。PPO 的 importance ratio、KL 正则、价值函数都建立在「能算出当前策略下的样本概率」之上。
  • 但 diffusion 模型给出的是一个边际似然

\[p_\theta(\mathbf{x}_0|c) = \int p_\theta(\mathbf{x}_{0:T}|c) \, \mathrm{d}\mathbf{x}_{1:T}, \]

它是一个 \(T\) 维高斯链上的边际化积分,没有闭式解,且不能像 LLM 那样按 token 累乘。这意味着所有依赖 \(\log \pi_\theta(\mathbf{x}_0)\) 的策略梯度方法都得另想办法。

  • 对于LLM,每个词的概率密度算完直接就是最终输出的该词的pdf,但是对于扩散模型,需要经过多步去噪之后,才能得到最终的输出,而需要用来进行reward计算的pdf是最终输出pdf
  • diffusion的中间去噪状态是隐变量,而 LLM token 是显式输出
    • 在 LLM 中:token \(y_t\)​ 既是动作,也是最终回答的一部分,每个动作的概率可以精确保存和重新计算。
    • 在扩散模型中,最终用户只看到 \(x_0\),而\(x_T,x_{T-1},\dots,x_1\)都是采样器产生的中间隐状态,同一张最终图像可能对应许多随机去噪轨迹。
    • 因此,已有方法如 DDPO、FlowGRPO 通常不计算真正的最终图像概率,而是把一次具体采样轨迹的概率当作策略概率:

      \[\]

      \[\]

1.2 FlowGRPO 路线的妥协与三个隐患

flow_grpo 等工作选择了一条迂回:把反向 ODE (采样过程)改写成反向 SDE,然后 Euler 离散化得到 Gaussian 转移核

\[\pi_\theta(\mathbf{x}_{t-\Delta t}|\mathbf{x}_t) = \mathcal{N}(\mu_\theta(\mathbf{x}_t,t),\, \Sigma(t)), \]

这样每一个反向步就像 LLM 的一个 token,可以套 GRPO。代价是:

隐患 表现
Forward inconsistency 训练时只优化反向链,前向加噪分布会与训练好的反向链不再一致,作者描述为"模型退化成级联高斯"
Solver restriction 必须用一阶 SDE 采样以匹配训练时的离散化,排除 ODE 与高阶求解器
CFG 集成繁琐 CFG 需要条件 / 无条件两份模型,反向轨迹上的概率比要在两份模型上分别算
更细节的一个隐患:反向链上的"轨迹存储"开销巨大——每个 prompt 要保存 \(T\) 个 \(\mathbf{x}_t\) 才能反向传梯度。

1.3 论文要回答的核心问题

Can diffusion reinforcement be performed on the forward process instead of the reverse?

把视角从「沿着反向轨迹爬梯度」翻转为「在前向加噪的有监督目标上做 RL」,如果可行,以上三个隐患同时消失:前向加噪是闭式 Gaussian、与求解器无关、与 CFG 解耦。

_attachments/DiffusionNFT/file-20260720112643171.png


2. Background:Flow Matching 与"奖励即最优性"

2.1 Flow / Diffusion 前向过程的统一形式

\[\pi_{t|0}(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\alpha_t \mathbf{x}_0,\, \sigma_t^2 \mathbf{I}) \quad\Longrightarrow\quad \mathbf{x}_t = \alpha_t \mathbf{x}_0 + \sigma_t \mathbf{\epsilon} \]

flow matching 用 velocity 参数化:

\[\mathbb{E}_{t,\mathbf{x}_0,\mathbf{\epsilon}}\big[w(t)\|\mathbf{v}_\theta(\mathbf{x}_t,t)-\mathbf{v}\|_2^2\big],\quad \mathbf{v}=\dot\alpha_t \mathbf{x}_0+\dot\sigma_t \mathbf{\epsilon}. \]

rectified flow: \(\alpha_t=1-t,\ \sigma_t=t,\ \mathbf{v}=\mathbf{\epsilon}-\mathbf{x}_0\)。

关键点:这是一个有监督目标——每条样本有一个明确的回归目标 \(\mathbf{v}\)。如果 RL 能塞进这种形式,就可以摆脱所有概率链。

2.2 奖励的"最优性概率"解释

将标量奖励 \(r \in [0,1]\) 定义为最优性概率:\(r(\mathbf{x}_0, \mathbf{c}) = p(\mathbf{o}=1 | \mathbf{x}_0, \mathbf{c})\),其中\(\mathbf{o}=1\)表示样本\(\mathbf{x}_0\)在prompt \(\mathbf{c}\)下达到最优,该式将reward表示为:给定 prompt \(c\) 和生成图片 \(x0\)​,它属于正样本的概率;对于prompt下的K张图像 \(x_0^{1:K}\),可以被划分为正样本集合\(D^+\)和负样本集合\(D^-\)。

基于贝叶斯定理,旧策略 \(\pi^{\text{old}}(\mathbf{x}_0|\mathbf{c})\) ——表示给定prompt \(c\)下生成样本\(x_0\)的概率,生成的样本可按最优性拆分为两个纯条件分布:

\[\begin{align*} \pi^+(\mathbf{x}_0|\mathbf{c}) &= \pi^{\text{old}}(\mathbf{x}_0|o=1,\mathbf{c}) = \frac{p(o=1|\mathbf{x}_0,\mathbf{c})\pi^{\text{old}}(\mathbf{x}_0,\mathbf{c})}{p(o=1|\mathbf{c})} = \frac{r(\mathbf{x}_0,\mathbf{c})}{p_{\pi^{\text{old}}}(\mathbf{o}=1|\mathbf{c})} \pi^{\text{old}}(\mathbf{x}_0|\mathbf{c}) \\ \\ \pi^-(\mathbf{x}_0|\mathbf{c}) &= \pi^{\text{old}}(\mathbf{x}_0|o=0,\mathbf{c}) = \frac{p(o=0|\mathbf{x}_0,\mathbf{c})\pi^{\text{old}}(\mathbf{x}_0,\mathbf{c})}{p(o=0|\mathbf{c})} = \frac{1-r(\mathbf{x}_0,\mathbf{c})}{1-p_{\pi^{\text{old}}}(\mathbf{o}=1|\mathbf{c})} \pi^{\text{old}}(\mathbf{x}_0|\mathbf{c}) \end{align*} \]

其中 \(p_{\pi^{\text{old}}}(\mathbf{o}=1|\mathbf{c}) = \int r(\mathbf{x}_0,\mathbf{c}) \pi^{\text{old}}(\mathbf{x}_0|\mathbf{c}) d\mathbf{x}_0\) 表示旧策略下生成最优样本的总概率(平均reward),用于归一化分布。上式表示正策略\(\pi^+({x}_0|{c})\)就是:

把旧策略中的每个样本概率乘上它的 reward,然后重新归一化。高 reward 样本被放大,低 reward 样本被压低。

由全概率公式直接可得 Lemma A.1,推导过程见附录A3:

\[\pi^{\text{old}} = p(\mathbf{o}=1|\mathbf{c})\,\pi^+ + [1-p(\mathbf{o}=1|\mathbf{c})]\,\pi^-. \]

显然在奖励指标下 \(\pi^+ \succ \pi^{\text{old}} \succ \pi^-\),因此RL的核心目标就是将策略往\(\pi^+\)的方向推动——即提升高最优性概率样本的生成比例,降低低质量样本的占比。

这是一个旧观点的复述,但作者用它做了一个非常巧的事情:既然 \(\pi^{\text{old}}\) 是 \(\pi^+\) 和 \(\pi^-\) 的混合,那么 \(\pi^+\) 就是 \(\pi^{\text{old}}\) 偏离 \(\pi^-\) 的"反方向"。正负样本之差,本身就是改进方向。


3. 方法核心:DiffusionNFT 的构造

  • 基础flow-matching -> 正负样本构造 -> 速度场分解 -> 隐式参数化 -> 最终训练目标

3.1 第一步:把"奖励梯度"变成"velocity 之差"

先假设 RL 的目标 velocity 为旧策略 velocity 加上一个改进方向:

\[\boxed{\mathbf{v}^*(\mathbf{x}_t,\mathbf{c},t) := \mathbf{v}^{\text{old}}(\mathbf{x}_t,\mathbf{c},t) + \tfrac{1}{\beta}\Delta(\mathbf{x}_t,\mathbf{c},t)} \]

这个形式与 CFG 完全同构——CFG 就是"无条件 velocity + 一个引导方向"。论文把它叫做 reinforcement guidance,从命名就能看出这种类比是有意的:把 RL 看成 inference-time guidance 的"训练时版本"。

velocity差 \(\Delta\)表示优化后策略与原始策略的优化方向,对优化方向进行以下定义,详细证明过程见附录:
Theorem 3.1:

\[\Delta := [1-\alpha(\mathbf{x}_t)]\,[\mathbf{v}^{\text{old}}-\mathbf{v}^-] = \alpha(\mathbf{x}_t)\,[\mathbf{v}^+ - \mathbf{v}^{\text{old}}], \]

其中 \(\alpha(x_t)\in(0, 1)\),为系数标量:

\[\alpha(\mathbf{x}_t) := \frac{\pi_t^+(\mathbf{x}_t|\mathbf{c})}{\pi_t^{\text{old}}(\mathbf{x}_t|\mathbf{c})}\, \mathbb{E}_{\pi^{\text{old}}} r(\mathbf{x}_0,\mathbf{c}) \]

这个等式的几何含义:改进方向 \(\Delta\) 可以从两个互补视角等价表达——「正方向」(\(\mathbf{v}^+ - \mathbf{v}^{\text{old}}\),鼓励向好样本靠近)与「反方向」(\(\mathbf{v}^{\text{old}} - \mathbf{v}^-\),鼓励远离坏样本),如下图所示:

_attachments/DiffusionNFT/file-20260721100929178.png
基于上述定义,可以进一步构造目标函数,详细证明过程见附录:

Theorem 3.2(DiffusionNFT损失函数):

\[\boxed{\mathcal{L}(\theta) = \mathbb{E}_{\mathbf{c},\,\pi^{\text{old}}(\mathbf{x}_0|\mathbf{c}),\,t}\left[\,r\,\|\mathbf{v}_\theta^+(\mathbf{x}_t,\mathbf{c},t)-\mathbf{v}\|_2^2 + (1-r)\,\|\mathbf{v}_\theta^-(\mathbf{x}_t,\mathbf{c},t)-\mathbf{v}\|_2^2\,\right]} \]

其中:

\[\boxed{\mathbf{v}_\theta^+ := (1-\beta)\mathbf{v}^{\text{old}} + \beta \mathbf{v}_\theta} \quad \boxed{\mathbf{v}_\theta^- := (1+\beta)\mathbf{v}^{\text{old}} - \beta \mathbf{v}_\theta} \]

直观理解:

  • 用最优性概率\(r\)加权正分支flow matching损失,鼓励模型向好样本靠近
  • 用\(1-r\)加权负分支flow matching损失,鼓励模型远离坏样本

当\(r=1\)时仅正分支生效,将\(\mathbf{v}_\theta^+\)拟合到真实速度场(以好样本为监督目标);当\(r=0\)时仅负分支生效,推动模型远离坏样本。

_attachments/DiffusionNFT/file-20260721104158205.png

Theorem A.4 通过代数化简(合并平方项)可得(详细证明过程见附录):

\[\mathcal{L}(\theta) = \beta^2 \mathbb{E}\left\|\mathbf{v}_\theta - \left(\mathbf{v}^{\text{old}} + \frac{2}{\beta}\Delta\right)\right\|_2^2 + C, \]

最优解为 \(\mathbf{v}_{\theta^*} = \mathbf{v}^{\text{old}} + \frac{2}{\beta}\Delta\),与reinforcement guidance形式完全一致(系数因子可通过调整\(\beta\)吸收)。

核心总结:将"沿\(\Delta\)方向改进策略"重新参数化为"正样本拟合 + 负样本反向拟合",通过奖励权重\(r\)与\(1-r\)实现混合控制——既保留RL的方向性指导,又完全转化为标准supervised flow matching训练形式。

3.4 该构造的优势对比

传统扩散RL方法需完成 DiffusionNFT实现方式
估计 \(\log \pi_\theta(\mathbf{x}_0)\) 无需,损失函数不包含似然项
存储完整反向轨迹 \(\mathbf{x}_{T:0}\) 正向过程损失,仅需单步样本对 \((\mathbf{x}_0, \mathbf{x}_t, \mathbf{v})\)
限制特定solver 无限制,采样器可作为黑盒,训练与采样解耦
额外训练CFG模型 无需,\(\mathbf{v}^{\text{old}}\)为冻结的条件模型

唯一代价:\(\mathbf{v}_{\theta^*}\) 收敛到 \(\mathbf{v}^{\text{old}} + \frac{2}{\beta}\Delta\) 而非严格的\(\mathbf{v}^+\),通过EMA软更新\(\mathbf{v}^{\text{old}} \leftarrow \mathbf{v}_\theta\)逐步累积逼近\(\pi^+\)。这正是PPO/TRPO思想在扩散模型上的延伸——每一步仅在旧策略邻域内进行有界改进。


4. 具体实现细节

理论很漂亮,但要在 SD3.5 这种规模上跑通,论文做了几个工程化优化:

4.1 奖励的最优性化

原始奖励 \(r^{\text{raw}}\) 是任意 reward model 的输出,不在 \([0,1]\)。作者用组内归一化 + clipping 将其映射:

\[r = \tfrac{1}{2} + \tfrac{1}{2}\operatorname{clip}\!\Big[\tfrac{r^{\text{raw}}-\bar r}{Z_{\mathbf{c}}},\, -1,\, 1\Big], \]

其中 \(\bar r\) 与 \(Z_{\mathbf{c}}\) 是同一 prompt 下 \(G\) 个 rollouts 的均值与标准差。这等价于 GRPO 风格的 group advantage normalization,让"好"与"坏"的定义在每个 prompt 上都是相对的——不会因为某 prompt 的奖励整体偏低就把所有样本都当成负样本。

4.2 软 EMA 更新(\(\theta^{\text{old}}\) 的节奏)

\(\pi_{old}\)更新策略如下:

\[\theta^{old} \leftarrow \eta_i\theta^{old}+(1-\eta_i)\theta \]

  • 严格 on-policy (\(\eta=0\),每步重采):训练崩溃,因为每步策略变动太大导致 reinforcement guidance 的局部线性假设失效。
  • 接近 off-policy (\(\eta \to 1\)):收敛太慢,等同于反复在过时的样本上训。
  • 最终方案:\(\eta\) 随训练递增,前期快速跟踪以拿到信,后期慢慢稳定。这是与 TRPO 的「trust region 自适应」类似的工程经验。

4.3 自适应 loss 加权(借鉴 DMD)

原始 flow matching 的 \(w(t)\|\mathbf{v}_\theta-\mathbf{v}\|^2\) 在 RL 设定下不稳。作者改成

\[\frac{\|\mathbf{x}_\theta - \mathbf{x}_0\|_2^2}{\operatorname{sg}\!\big(\operatorname{mean}(|\mathbf{x}_\theta-\mathbf{x}_0|)\big)}, \]

其中 sg 是 stop-gradient。这是 DMD (Distribution Matching Distillation) 的归一化技巧——让损失的大小不被噪声水平的尺度差异主导。消融显示用 \(w(t)=1-t\) 直接崩溃,自适应权重是关键的稳定剂。

4.4 CFG-free

CFG 在论文里被重新解释为"离线的 reinforcement guidance":无条件模型扮演 \(\mathbf{v}^-\) 的角色,条件模型扮演 \(\mathbf{v}^{\text{old}}\) 的角色,推理时的引导方向 \(\mathbf{v}^c + s(\mathbf{v}^c - \mathbf{v}^u)\) 与训练时的 reinforcement guidance 同构。

既然在线 RL 已经在每一步把 guidance 烧进了单一策略,就没必要在推理时再做一次 CFG——这同时省了一半推理算力,也避免了 CFG 与 RL 训练目标互相干扰的耦合问题。

4.5 采样器选择

  • 数据采用用 ODE 优于 SDE:SDE 的额外噪声会让某些噪声敏感的 reward(如 PickScore)的奖励信号被稀释。
  • 2 阶 ODE 略优于 1 阶:GenEval 上有小幅提升,但收益边际。
  • 关键:由于训练 loss 与采样器解耦,可以自由切换最适合的采样器,这是相对 FlowGRPO 的一个结构性优势。

整体优化流程如下:
_attachments/DiffusionNFT/file-20260721102253036.png


5. 实验结果

5.1 多奖励实验

实验配置:

  • reward model包括:
    1. 基于规则的reward(GenEval、OCR)
    2. 基于模型的reward(PickScore、ClipScore、HPS、Aesthetics、ImageReward、UnifiedReward)等
  • prompt数据集:采用GenEval、OCR、pick-a-Pic
  • 训练配置:基于SD3.5-Medium,分辨率为512x512,采用LoRA(\(\alpha=64, r=32\)),每个epoch包含48个epoch,每个group size=24,采样步数为10、40
Model GenEval OCR PickScore ClipScore HPSv2.1 Aesthetic ImgRwd UniRwd
SD3.5-M (w/o CFG) 0.24 0.12 20.51 0.237 0.204 5.13 −0.58 2.02
SD3.5-M + CFG 0.63 0.59 22.34 0.285 0.279 5.36 0.85 3.03
SD3.5-M + FlowGRPO (>5k) 0.95 0.66 22.51 0.293 0.274 5.32 1.06 3.18
SD3.5-L (CFG, 8B) 0.71 0.68 22.91 0.289 0.288 5.50 0.96 3.25
FLUX.1-Dev (12B) 0.66 0.59 22.84 0.295 0.274 5.71 0.96 3.27
Ours (1.7k it, CFG-free) 0.94 0.91 23.80 0.293 0.331 6.01 1.49 3.49
观察:
  1. 本文CFG-free 的模型在大多数 reward 上同时超过 8B 的 SD3.5-L 与 12B 的 FLUX.1-Dev——尤其是 HPS、Aesthetic、UnifiedReward 这类 OOD 指标,说明并非单纯过拟合训练奖励。
  2. OCR 从 0.12 → 0.91 是质变,说明前向过程的 supervised flow matching 能够把奖励信号高效地"塞进"模型权重。
  3. 仅 1.7k iterations 就追平 FlowGRPO 5k+ 步的效果——这才是论文真正的卖点。
    _attachments/DiffusionNFT/file-20260721110246948.png

5.2 消融实验

  1. 负分支不能去掉:LLM 里只用 rejection fine-tuning (RFT,只学正样本) 也常常有效,但 diffusion 里只学正样本会"几乎立刻崩溃"。作者把它归因于 diffusion 的分布是连续高维的,丢弃 \(1-r\) 加权的负梯度会让 \(\mathbf{v}^{\text{old}}\) 与 \(\mathbf{v}_\theta\) 的镜像约束失效。这是一个非平凡的实证发现——它解释了为什么 diffusion RL 的设计原则不能简单地从 LLM 经验外推。
  2. 采样器:ODE > SDE,2 阶 > 1 阶(边际)。
  3. 加权:DMD 风格自适应 > \(w(t)=1-t\),后者直接 collapse。
  4. EMA \(\eta\):0 不稳、0.9 太慢,递增式 \(\eta\) 最佳。
  5. \(\beta\):\(\beta \approx 1\) 稳,\(\beta = 0.1\) 早期 reward 上升更快但有 overshoot 风险。

5.3 实验设计的盲区

  • 没有显式的 reward hacking 测试(例如让 reward 故意有 bug,看 DiffusionNFT 是否比 FlowGRPO 更容易钻空子)。
  • 仅在 SD3.5-Medium 上训练,未涉及视频 diffusion 或 12B+ 模型的 full fine-tune(主实验是 LoRA r=32)。
  • 没有对 \(\beta\) 与 \(\eta\) 调度的理论分析,只有经验性 schedule。
  • 缺失"在严格 on-policy 设定下与 FlowGRPO 公平比"的实验——DiffusionNFT 的 off-policy 性是结构性优势,但也意味着两者并不是在完全相同的实验条件下比较。

6. 创新与定位

6.1 创新点

  1. 范式转换:把 diffusion RL 从"反向轨迹上的概率论问题"翻转为"前向加噪上的回归问题"。这是叙事层面的最大贡献。
  2. 隐式策略参数化:用 \(\mathbf{v}_\theta^\pm\) 的镜像参数化把不可计算的密度比 \(\alpha(\mathbf{x}_t)\) 消掉,这是技术层面最关键的一步。
  3. CFG 的统一视角:把 CFG 解释为离线 reinforcement guidance,从而自然推出"CFG-free"作为副产品。
  4. 效率的实证证明:25× 不是小数字,意味着 diffusion RL 从"实验室级别"开始走向"工业级别"。

6.2 与相邻工作的本质差异

路线 代表 与 DiffusionNFT 的差异
反向 SDE GRPO FlowGRPO / DanceGRPO / MixGRPO / DSPO 仍在反向链上做策略梯度,绑死求解器
Diffusion DPO Wallace 2024 仍需 likelihood 近似;且是 pairwise 不是 reward-aware
Reward backprop DRaFT, DPOK 需要可微 reward 且 backprop 经过长 chain,易梯度爆炸
RWR / RFT 各种 reward-weighted regression 只学正样本,在 diffusion 上崩溃
Policy guidance classifier guidance 类 需额外引导模型,推理开销翻倍
DiffusionNFT 的位置是唯一一个同时做到 likelihood-free、solver-agnostic、CFG-free、off-policy、且使用监督式 loss 的方法。

6.3 未来价值

  • diffusion 监督训练与 RL 训练的统一框架——若 \(r=1\),DiffusionNFT 退化为标准 flow matching;若 \(r\) 是连续奖励,则是 RL。pretraining 与 post-training 不再需要换 codebase。
  • 视频 diffusion / 3D 生成的 RL 化——这些场景下反向轨迹更长,FlowGRPO 路线的轨迹存储开销几乎不可承受,而 DiffusionNFT 只要采样到 \(\mathbf{x}_0\) 即可。
  • reward model 设计空间扩展——既然不要求 reward 可微,任何 black-box reward(包括 LLM-as-a-judge)都可以直接接入。
  • diffusion world model 的 RL 训练——把 DiffusionNFT 当成 world model 的 fine-tune 工具,可能是一个潜在的下游应用。

7. 一句话回顾

DiffusionNFT 的核心是发现:在 flow matching 这种"有监督回归"框架下,RL 的策略改进方向可以被 \(r\) 与 \(1-r\) 加权的正负样本对完全编码进 loss 本身。这让 diffusion RL 第一次可以脱离反向链的概率论框架,变成一个"带正负标签的有监督微调"问题,从而同时获得求解器自由、CFG 自由、似然自由与轨迹存储自由——并把 RL 训练效率推进一个数量级。


附:速查公式表

量 形式
前向核 \(\mathbf{x}_t = \alpha_t\mathbf{x}_0 + \sigma_t\mathbf{\epsilon}\)
Flow matching loss \(\mathbb{E}|\mathbf{v}_\theta - \mathbf{v}|^2\)
Reinforcement guidance \(\mathbf{v}^* = \mathbf{v}^{\text{old}} + \tfrac{1}{\beta}\Delta\)
隐式正策略 \(\mathbf{v}_\theta^+ = (1-\beta)\mathbf{v}^{\text{old}} + \beta\mathbf{v}_\theta\)
隐式负策略 \(\mathbf{v}_\theta^- = (1+\beta)\mathbf{v}^{\text{old}} - \beta\mathbf{v}_\theta\)
DiffusionNFT loss \(\mathbb{E}\big[r|\mathbf{v}_\theta^+ - \mathbf{v}|^2 + (1-r)|\mathbf{v}_\theta^- - \mathbf{v}|^2\big]\)
最优收敛点 \(\mathbf{v}_{\theta^*} = \mathbf{v}^{\text{old}} + \tfrac{2}{\beta}\Delta\)
奖励最优性归一化 \(r = \tfrac{1}{2} + \tfrac{1}{2}\operatorname{clip}\!\big[(r^{\text{raw}} - \bar r)/Z_{\mathbf{c}}, -1, 1\big]\)
EMA 更新 \(\theta^{\text{old}} \leftarrow \eta_i \theta^{\text{old}} + (1-\eta_i)\theta\)

附录:公式推导

A. DiffusionNFT 公式推导过程解析

下面按论文逻辑,将 DiffusionNFT 从基础 flow matching 推导至最终训练目标,主线为:

\[\boxed{ \text{奖励构造正负分布} \implies \text{正负后验混合关系} \\ \implies \text{正负速度场共线} \implies \text{单模型隐式表示双分支} \\ \implies v_\theta^*=v^{\text{old}}+\frac{2}{\beta}\Delta } \]

论文正式版本为 ICLR 2026,核心推导位于第3节和附录A。


A1. 从标准 flow matching 开始

给定干净图像:

\[x_0\sim \pi_0(x_0\mid c), \]

前向加噪过程写成:

\[x_t=\alpha_t x_0+\sigma_t\epsilon, \qquad \epsilon\sim\mathcal N(0,I). \]

沿时间求导,条件轨迹的瞬时速度为:

\[u_t(x_t\mid x_0,\epsilon) = \frac{dx_t}{dt} = \dot\alpha_t x_0+\dot\sigma_t\epsilon. \]

标准 flow-matching 损失是:

\[\mathcal L_{\mathrm{FM}} = \mathbb E_{x_0,\epsilon,t} \left[ \frac12 \left\| v_\theta(x_t,c,t)-u_t \right\|^2 \right]. \]

其中 \(v_\theta\) 是模型预测的边缘速度场,采样 ODE 为:

\[\frac{dx_t}{dt}=v_\theta(x_t,c,t). \]

对于 rectified flow:

\[\alpha_t=1-t,\qquad \sigma_t=t, \]

所以:

\[x_t=(1-t)x_0+t\epsilon, \qquad u_t=\epsilon-x_0. \]

这是 DiffusionNFT 最终仍然使用的监督学习基础。


A1.1 为什么 MSE 最优解是条件平均速度

对固定的 \((x_t,c,t)\),最小化:

\[\mathbb E \left[ \|v_\theta-u_t\|^2 \mid x_t,c,t \right] \]

的最优解是:

\[v^*(x_t,c,t) = \mathbb E[u_t\mid x_t,c,t]. \]

这是标准平方误差回归的条件均值性质。
为了把它写成关于 \(x_0\) 后验均值的形式,由:

\[\epsilon=\frac{x_t-\alpha_t x_0}{\sigma_t} \]

代入 \(u_t\):

\[\begin{aligned} u_t &= \dot\alpha_t x_0 + \dot\sigma_t \frac{x_t-\alpha_t x_0}{\sigma_t} \\ &= \frac{\dot\sigma_t}{\sigma_t}x_t + \left( \dot\alpha_t- \frac{\dot\sigma_t\alpha_t}{\sigma_t} \right)x_0. \end{aligned} \]

定义:

\[a_t=\frac{\dot\sigma_t}{\sigma_t}, \qquad b_t= \dot\alpha_t- \frac{\dot\sigma_t\alpha_t}{\sigma_t}, \]

则任意数据分布 \(\pi\) 的最优速度场为:

\[\boxed{ v^\pi(x_t,c,t) = a_t x_t+ b_t \mathbb E_{\pi(x_0\mid x_t,c)}[x_0] } \]

这条“速度场是 \(x_0\) 后验均值的仿射函数”的性质,是后面正负速度场分解成立的关键。


A2. 将奖励解释为 optimality probability

DiffusionNFT 引入二元随机变量:

\[o\in\{0,1\}, \]

其中:

\[o=1 \]

表示样本是“optimal”的。
将归一化后的奖励定义为:

\[r(x_0,c) := p(o=1\mid x_0,c), \qquad r\in[0,1]. \]

注意,这并不意味着真的要随机把每张图划成正负样本。它是一个概念上的概率分解:

  • 以概率 \(r(x_0,c)\) 属于正分布;
  • 以概率 \(1-r(x_0,c)\) 属于负分布。
    设当前用于 rollout 的策略为:

\[\pi^{\mathrm{old}}(x_0\mid c). \]

定义当前策略的平均 optimality:

\[Z(c) := p_{\pi^{\mathrm{old}}}(o=1\mid c) = \mathbb E_{x_0\sim\pi^{\mathrm{old}}} [r(x_0,c)]. \]

论文据此构造正、负策略分布。


A3. 正分布和负分布

根据贝叶斯公式:

\[\begin{aligned} \pi^+(x_0\mid c) &:= \pi^{\mathrm{old}}(x_0\mid o=1,c) \\ &= \frac{ p(o=1\mid x_0,c) \pi^{\mathrm{old}}(x_0\mid c) }{ p_{\pi^{\mathrm{old}}}(o=1\mid c) } \\ &= \boxed{ \frac{r(x_0,c)}{Z(c)} \pi^{\mathrm{old}}(x_0\mid c) }. \end{aligned} \]

同理:

\[\boxed{ \pi^-(x_0\mid c) = \frac{1-r(x_0,c)} {1-Z(c)} \pi^{\mathrm{old}}(x_0\mid c) }. \]

因此:

\[Z\pi^+ = r\pi^{\mathrm{old}}, \]

\[(1-Z)\pi^- = (1-r)\pi^{\mathrm{old}}. \]

两式相加:

\[\boxed{ \pi^{\mathrm{old}} = Z\pi^+ + (1-Z)\pi^- } \]

即旧策略是正、负策略的混合分布。


A4. 为什么正策略的期望奖励更高

论文给出:

\[\pi^+\succ\pi^{\mathrm{old}}\succ\pi^-. \]

这个结论可以直接推导。
记:

\[Z=\mathbb E_{\pi^{\mathrm{old}}}[r]. \]

正策略下的期望奖励:

\[\begin{aligned} \mathbb E_{\pi^+}[r] &= \int r(x_0) \frac{r(x_0)}{Z} \pi^{\mathrm{old}}(x_0) dx_0 \\ &= \frac{\mathbb E_{\pi^{\mathrm{old}}}[r^2]}{Z}. \end{aligned} \]

与旧策略比较:

\[\begin{aligned} \mathbb E_{\pi^+}[r]-Z &= \frac{\mathbb E[r^2]-Z^2}{Z} \\ &= \frac{\operatorname{Var}(r)}{Z} \geq 0. \end{aligned} \]

同理,负策略下:

\[\mathbb E_{\pi^-}[r] = \frac{\mathbb E[r(1-r)]}{1-Z} = \frac{Z-\mathbb E[r^2]}{1-Z}. \]

所以:

\[\begin{aligned} Z-\mathbb E_{\pi^-}[r] &= \frac{\mathbb E[r^2]-Z^2}{1-Z} \\ &= \frac{\operatorname{Var}(r)}{1-Z} \geq0. \end{aligned} \]

因此:

\[\boxed{ \mathbb E_{\pi^+}[r] \geq \mathbb E_{\pi^{\mathrm{old}}}[r] \geq \mathbb E_{\pi^-}[r] } \]

当奖励不是常数且 \(0<Z<1\) 时,两个不等式严格成立。
所以,单纯让模型拟合 \(\pi^+\) 已经能够带来策略改进,这对应 rejection fine-tuning;DiffusionNFT 的目的则是同时利用负分布。


A5. 从干净分布混合推到 noisy marginal 混合

所有三个分布使用相同的前向核:

\[q_t(x_t\mid x_0) = \mathcal N( x_t;\alpha_t x_0,\sigma_t^2I ). \]

定义其 noisy marginal:

\[\pi_t^j(x_t\mid c) = \int q_t(x_t\mid x_0) \pi^j(x_0\mid c) dx_0, \]

其中:

\[j\in\{+,-,\mathrm{old}\}. \]

由于前向扩散是一个线性积分算子,对:

\[\pi^{\mathrm{old}} = Z\pi^+ + (1-Z)\pi^- \]

两边同时加噪,可得:

\[\boxed{ \pi_t^{\mathrm{old}}(x_t\mid c) = Z\pi_t^+(x_t\mid c) + (1-Z)\pi_t^-(x_t\mid c) }. \]

也就是说,干净数据分布的混合关系在每个噪声时刻都保持成立。


A6. 推导 noisy state 下的后验分解

接下来研究:

\[\pi^{\mathrm{old}}(x_0\mid x_t,c). \]

定义:

\[\gamma_t(x_t,c) := \frac{ Z(c)\pi_t^+(x_t\mid c) }{ \pi_t^{\mathrm{old}}(x_t\mid c) }. \]

论文把这个量记作 \(\alpha(x_t)\)。这里改用 \(\gamma_t\),避免和噪声调度中的 \(\alpha_t\) 混淆。
由贝叶斯公式:

\[\gamma_t(x_t,c) = p(o=1\mid x_t,c). \]

它表示:

只观察 noisy latent \(x_t\) 时,该 latent 最终来自正样本的后验概率。
相应地:

\[1-\gamma_t(x_t,c) = p(o=0\mid x_t,c). \]

于是旧策略的 clean posterior 可以写成:

\[\boxed{ \pi^{\mathrm{old}}(x_0\mid x_t,c) = \gamma_t \pi^+(x_0\mid x_t,c) + (1-\gamma_t) \pi^-(x_0\mid x_t,c) } \]

这是附录 Lemma A.2。

A6.1 一个重要等式

从定义还可得到:

\[\boxed{ r(x_0,c) \pi^{\mathrm{old}}(x_0\mid x_t,c) = \gamma_t(x_t,c) \pi^+(x_0\mid x_t,c) } \]

以及:

\[\boxed{ [1-r(x_0,c)] \pi^{\mathrm{old}}(x_0\mid x_t,c) = [1-\gamma_t(x_t,c)] \pi^-(x_0\mid x_t,c) } \]

这两个式子稍后用于把“reward-weighted 旧策略损失”变成“正负分布上的 flow-matching 损失”。


A7. 从后验分解推到速度场分解

根据第 1 节:

\[v^{\mathrm{old}} = a_tx_t + b_t \mathbb E_{\pi^{\mathrm{old}}(x_0\mid x_t,c)}[x_0]. \]

而后验分解给出:

\[\mathbb E_{\pi^{\mathrm{old}}}[x_0\mid x_t,c] = \gamma_t \mathbb E_{\pi^+}[x_0\mid x_t,c] + (1-\gamma_t) \mathbb E_{\pi^-}[x_0\mid x_t,c]. \]

代入速度表达式:

\[\begin{aligned} v^{\mathrm{old}} &= a_tx_t + b_t \left[ \gamma_tE_+[x_0] + (1-\gamma_t)E_-[x_0] \right] \\ &= \gamma_t \left[ a_tx_t+b_tE_+[x_0] \right] + (1-\gamma_t) \left[ a_tx_t+b_tE_-[x_0] \right]. \end{aligned} \]

所以:

\[\boxed{ v^{\mathrm{old}} = \gamma_t v^+ + (1-\gamma_t)v^- } \]

这是 DiffusionNFT 最关键的速度场混合公式。


A8. 推导 reinforcement guidance 方向

由:

\[v^{\mathrm{old}} = \gamma_t v^+ + (1-\gamma_t)v^-, \]

可以得到:

\[v^{\mathrm{old}}-v^- = \gamma_t(v^+-v^-), \]

以及:

\[v^+-v^{\mathrm{old}} = (1-\gamma_t)(v^+-v^-). \]

因此:

\[(1-\gamma_t)(v^{\mathrm{old}}-v^-) = \gamma_t(v^+-v^{\mathrm{old}}). \]

论文将共同的向量定义为:

\[\boxed{ \Delta := (1-\gamma_t) \left(v^{\mathrm{old}}-v^-\right) = \gamma_t \left(v^+-v^{\mathrm{old}}\right) } \]

等价地:

\[\boxed{ \Delta = \gamma_t(1-\gamma_t) (v^+-v^-) } \]

这说明两个看似不同的操作:

\[\text{远离负策略} \]

和:

\[\text{靠近正策略} \]

实际上方向完全一致,只是尺度不同。论文称 \(\Delta\) 为 reinforcement guidance。


A8.1 几何直觉

速度场在某个固定的 \((x_t,c,t)\) 上都是高维向量:

\[v^-,\quad v^{\mathrm{old}},\quad v^+. \]

由于:

\[v^{\mathrm{old}} = \gamma_tv^+ + (1-\gamma_t)v^-, \]

旧速度场必然位于正、负速度场之间的线段上:

\[v^- \longrightarrow v^{\mathrm{old}} \longrightarrow v^+. \]

因此:

\[v^{\mathrm{old}}-v^- \parallel v^+-v^{\mathrm{old}}. \]

这不是经验假设,而是正负分布混合和 MSE 条件均值性质共同推出的。


A9. 概念上的策略改进目标

DiffusionNFT 首先提出:

\[\boxed{ v^* = v^{\mathrm{old}} + \frac{1}{\beta}\Delta } \]

其中:

\[\frac1\beta \]

是 guidance strength。
由于:

\[\Delta = \gamma_t(v^+-v^{\mathrm{old}}), \]

若理论上选择:

\[\beta=\gamma_t, \]

则:

\[\begin{aligned} v^* &= v^{\mathrm{old}} + \frac1{\gamma_t} \gamma_t (v^+-v^{\mathrm{old}}) \\ &= v^+. \end{aligned} \]

而前面已经证明:

\[\pi^+\succ\pi^{\mathrm{old}}, \]

所以达到 \(v^+\) 就对应一个奖励更高的策略。这里的 \(\beta=\gamma_t(x_t)\)主要用于理论说明;实践中论文把 \(\beta\) 作为超参数。
问题在于:

  • 我们没有独立训练好的 \(v^+\);
  • 也没有独立训练好的 \(v^-\);
  • 不希望维护三个模型。
    所以论文接下来引入隐式参数化。

A10. 隐式正策略和隐式负策略

定义待训练模型:

\[v_\theta. \]

以旧模型为中心,构造两个对称分支:

\[\boxed{ v_\theta^+ = (1-\beta)v^{\mathrm{old}} + \beta v_\theta } \]

以及:

\[\boxed{ v_\theta^- = (1+\beta)v^{\mathrm{old}} - \beta v_\theta } \]

令:

\[d_\theta:=v_\theta-v^{\mathrm{old}}, \]

则上述两式可以写成:

\[v_\theta^+ = v^{\mathrm{old}} + \beta d_\theta, \]

\[v_\theta^- = v^{\mathrm{old}} - \beta d_\theta. \]

所以两个隐式分支关于旧策略对称:

\[v_\theta^+ - v^{\mathrm{old}} = - \left( v_\theta^- - v^{\mathrm{old}} \right). \]

直观上:

  • 增大 \(v_\theta\) 向某个方向移动,会令隐式正策略沿该方向移动;
  • 同时令隐式负策略沿相反方向移动。
    这使一个参数模型同时承担“拟合正策略”和“排斥负策略”的作用。

A11. DiffusionNFT 的最终损失

对 rollout 图像:

\[x_0\sim\pi^{\mathrm{old}}(x_0\mid c), \]

重新进行前向加噪:

\[x_t=\alpha_tx_0+\sigma_t\epsilon, \]

并计算真实条件速度:

\[u_t=\dot\alpha_tx_0+\dot\sigma_t\epsilon. \]

定义损失:

\[\boxed{ \mathcal L(\theta) = \mathbb E \left[ \frac r2 \|v_\theta^+-u_t\|^2 + \frac{1-r}{2} \|v_\theta^--u_t\|^2 \right] } \]

这里:

  • 高奖励样本主要训练隐式正分支;
  • 低奖励样本主要训练隐式负分支;
  • \(r=0.5\) 时两个分支贡献相同。
    这是论文公式(5)。

A12. 将 reward-weighted loss 改写为正负分布损失

对固定的 \((x_t,c,t)\),根据前面的关系:

\[r\, \pi^{\mathrm{old}}(x_0\mid x_t,c) = \gamma_t \pi^+(x_0\mid x_t,c), \]

因此:

\[\begin{aligned} & \mathbb E_{\pi^{\mathrm{old}}(x_0\mid x_t,c)} \left[ r\|v_\theta^+-u_t\|^2 \right] \\ &= \gamma_t \mathbb E_{\pi^+(x_0\mid x_t,c)} \left[ \|v_\theta^+-u_t\|^2 \right]. \end{aligned} \]

同理:

\[\begin{aligned} & \mathbb E_{\pi^{\mathrm{old}}(x_0\mid x_t,c)} \left[ (1-r)\|v_\theta^--u_t\|^2 \right] \\ &= (1-\gamma_t) \mathbb E_{\pi^-(x_0\mid x_t,c)} \left[ \|v_\theta^--u_t\|^2 \right]. \end{aligned} \]

于是损失等价于:

\[\begin{aligned} \mathcal L(\theta) = \mathbb E_{x_t} \Bigg[ & \frac{\gamma_t}{2} \mathbb E_{\pi^+} \|v_\theta^+-u_t\|^2 \\ +& \frac{1-\gamma_t}{2} \mathbb E_{\pi^-} \|v_\theta^--u_t\|^2 \Bigg]. \end{aligned} \]

也就是说,虽然代码只从旧策略样本训练,但奖励加权使它在期望意义上等价于分别对正分布和负分布做 flow matching。


A13. 利用 MSE 偏差—方差分解

对于任意随机变量 \(U\) 和确定向量 \(a\):

\[\mathbb E\|a-U\|^2 = \|a-\mathbb E[U]\|^2 + \mathbb E\|U-\mathbb E[U]\|^2. \]

第二项与 \(a\) 无关。
正分布下:

\[\mathbb E_{\pi^+}[u_t\mid x_t,c] = v^+(x_t,c,t). \]

负分布下:

\[\mathbb E_{\pi^-}[u_t\mid x_t,c] = v^-(x_t,c,t). \]

所以忽略与 \(\theta\) 无关的常数 \(C\):

\[\boxed{ \mathcal L(\theta) = \mathbb E_{x_t} \left[ \frac{\gamma_t}{2} \|v_\theta^+-v^+\|^2 + \frac{1-\gamma_t}{2} \|v_\theta^--v^-\|^2 \right] +C } \]

这一步表明,DiffusionNFT 的实际损失确实在隐式地要求:

\[v_\theta^+\rightarrow v^+, \qquad v_\theta^-\rightarrow v^-. \]


A14. 求这个二次目标的闭式最优解

记:

\[d_\theta = v_\theta-v^{\mathrm{old}}. \]

隐式参数化为:

\[v_\theta^+ = v^{\mathrm{old}}+\beta d_\theta, \]

\[v_\theta^- = v^{\mathrm{old}}-\beta d_\theta. \]

而由 \(\Delta\) 的定义:

\[\Delta = \gamma_t(v^+-v^{\mathrm{old}}), \]

所以:

\[v^+ = v^{\mathrm{old}} + \frac{\Delta}{\gamma_t}. \]

同理:

\[\Delta = (1-\gamma_t)(v^{\mathrm{old}}-v^-), \]

所以:

\[v^- = v^{\mathrm{old}} - \frac{\Delta}{1-\gamma_t}. \]


A14.1 正分支误差

\[\begin{aligned} v_\theta^+-v^+ &= v^{\mathrm{old}} +\beta d_\theta - \left( v^{\mathrm{old}} +\frac{\Delta}{\gamma_t} \right) \\ &= \beta \left( d_\theta- \frac{\Delta}{\beta\gamma_t} \right). \end{aligned} \]


A14.2 负分支误差

\[\begin{aligned} v_\theta^--v^- &= v^{\mathrm{old}} -\beta d_\theta - \left( v^{\mathrm{old}} -\frac{\Delta}{1-\gamma_t} \right) \\ &= -\beta \left( d_\theta- \frac{\Delta}{\beta(1-\gamma_t)} \right). \end{aligned} \]

代回损失:

\[\begin{aligned} \mathcal L = \frac{\beta^2}{2} \mathbb E_{x_t} \Bigg[ & \gamma_t \left\| d_\theta- \frac{\Delta}{\beta\gamma_t} \right\|^2 \\ +& (1-\gamma_t) \left\| d_\theta- \frac{\Delta} {\beta(1-\gamma_t)} \right\|^2 \Bigg] +C. \end{aligned} \]


A15. 对 \(d_\theta\) 求最优解

对于固定的 \((x_t,c,t)\),对 \(d_\theta\) 求导:

\[\begin{aligned} 0 =&\; \gamma_t \left( d_\theta- \frac{\Delta}{\beta\gamma_t} \right) \\ &+ (1-\gamma_t) \left( d_\theta- \frac{\Delta}{\beta(1-\gamma_t)} \right). \end{aligned} \]

展开:

\[0 = \gamma_td_\theta - \frac{\Delta}{\beta} + (1-\gamma_t)d_\theta - \frac{\Delta}{\beta}. \]

因为:

\[\gamma_t+(1-\gamma_t)=1, \]

所以:

\[0 = d_\theta- \frac{2\Delta}{\beta}. \]

得到:

\[d_\theta^* = \frac{2}{\beta}\Delta. \]

由于:

\[d_\theta = v_\theta-v^{\mathrm{old}}, \]

最终:

\[\boxed{ v_\theta^*(x_t,c,t) = v^{\mathrm{old}}(x_t,c,t) + \frac{2}{\beta} \Delta(x_t,c,t) } \]

这就是论文 Theorem 3.2 / Theorem A.4 的结论。


A16. 为什么最后是 \(2/\beta\),而不是 \(1/\beta\)

这是阅读论文时最容易困惑的地方。
论文公式(3)首先提出概念上的 guidance target:

\[v^* = v^{\mathrm{old}} + \frac1\beta\Delta. \]

但完整的双分支损失最终得到:

\[v_\theta^* = v^{\mathrm{old}} + \frac2\beta\Delta. \]

这个因子 2 来自两个分支:
正分支的加权贡献是:

\[\gamma_t \frac{\Delta}{\beta\gamma_t} = \frac{\Delta}{\beta}, \]

负分支的加权贡献是:

\[(1-\gamma_t) \frac{\Delta}{\beta(1-\gamma_t)} = \frac{\Delta}{\beta}. \]

相加得到:

\[\frac{\Delta}{\beta} + \frac{\Delta}{\beta} = \frac{2\Delta}{\beta}. \]

也就是说:

\[\boxed{ \text{向正策略靠近} + \text{从负策略远离} = \text{两份同方向的 guidance} } \]

这不是代数错误。由于 \(\beta\) 本身是可调超参数,该常数因子也可以吸收到 \(\beta\) 的定义中。


A17. 用一个简单的一维例子理解

假设某个位置:

\[v^-=0,\qquad v^+=10, \]

并且:

\[\gamma_t=0.4. \]

那么:

\[v^{\mathrm{old}} = 0.4\times10+0.6\times0 = 4. \]

guidance 为:

\[\begin{aligned} \Delta &= \gamma_t(v^+-v^{\mathrm{old}}) \\ &= 0.4(10-4) \\ &= 2.4. \end{aligned} \]

从负策略一侧计算:

\[\begin{aligned} \Delta &= (1-\gamma_t)(v^{\mathrm{old}}-v^-) \\ &= 0.6(4-0) \\ &= 2.4. \end{aligned} \]

两者完全一致。
若:

\[\beta=1, \]

双分支目标的最优模型输出为:

\[v_\theta^* = 4+2\times2.4 = 8.8. \]

它从旧速度 \(4\) 向正速度 \(10\) 明显移动,但没有必然等于 \(10\)。因此,实践中的实际移动程度由:

  • \(\beta\);
  • 优化步数;
  • 学习率;
  • 有限模型容量;
  • EMA 旧策略;
    共同决定。

A18. 实践中的奖励归一化

实际 reward model 输出通常不是 \([0,1]\) 概率。论文先对每个 prompt 的 group reward 去均值:

\[r^{\mathrm{norm}}_i = r_i^{\mathrm{raw}} - \frac1K \sum_{j=1}^K r_j^{\mathrm{raw}}. \]

再映射成:

\[\boxed{ r_i = \frac12 + \frac12 \operatorname{clip} \left( \frac{r_i^{\mathrm{norm}}}{Z_c}, -1,1 \right) } \]

因此:

  • 高于组均值的样本:\(r>0.5\);
  • 低于组均值的样本:\(r<0.5\);
  • 等于组均值:\(r=0.5\)。
    这个 \(r\) 被当作 optimality probability,而不需要真的进行 Bernoulli 抽样。

A19. 完整训练流程

一次在线迭代可以写成:

Rollout

使用:

\[v^{\mathrm{old}} \]

生成 \(K\) 张图:

\[x_0^{1:K}\sim\pi^{\mathrm{old}}(\cdot\mid c). \]

计算并归一化奖励:

\[r_i\in[0,1]. \]

只保存:

\[(c,x_0,r). \]

Forward training

重新采样:

\[t,\epsilon, \]

构造:

\[x_t=\alpha_tx_0+\sigma_t\epsilon, \]

\[u_t=\dot\alpha_tx_0+\dot\sigma_t\epsilon. \]

前向计算:

\[v_\theta,\qquad v^{\mathrm{old}}. \]

构造:

\[v_\theta^+ = (1-\beta)v^{\mathrm{old}}+\beta v_\theta, \]

\[v_\theta^- = (1+\beta)v^{\mathrm{old}}-\beta v_\theta. \]

优化:

\[\frac r2\|v_\theta^+-u_t\|^2 + \frac{1-r}{2}\|v_\theta^--u_t\|^2. \]

更新 rollout policy

论文使用 EMA:

\[\boxed{ \theta^{\mathrm{old}} \leftarrow \eta_i\theta^{\mathrm{old}} + (1-\eta_i)\theta } \]

从而让采样策略与训练策略软更新,而不是每轮完全同步。


A20. 整个推导最核心的三条等式

真正需要抓住的是以下三条。
第一,正负分布分解:

\[\boxed{ \pi^{\mathrm{old}} = Z\pi^+ + (1-Z)\pi^- } \]

第二,速度场分解:

\[\boxed{ v^{\mathrm{old}} = \gamma_tv^+ + (1-\gamma_t)v^- } \]

第三,最终隐式优化结果:

\[\boxed{ v_\theta^* = v^{\mathrm{old}} + \frac2\beta \gamma_t(1-\gamma_t) (v^+-v^-) } \]

因此 DiffusionNFT 本质上是在做:

\[\boxed{ \text{用奖励加权的标准 flow-matching 回归,} \quad \text{隐式估计并写入正负速度场之间的方向。} } \]


A21. 推导依赖的假设

论文的闭式结论需要注意几个理想假设:

  1. 无限数据:reward-weighted 样本分布能够精确表示 \(\pi^+\) 和 \(\pi^-\)。
  2. 无限模型容量:网络可以在每个 \((x_t,c,t)\) 上达到条件 MSE 最优解。
  3. 共同的前向核:\(\pi^+,\pi^-,\pi^{\mathrm{old}}\) 都通过相同的 \(q_t(x_t\mid x_0)\) 加噪。
  4. 奖励是合法概率:

\[0\le r(x_0,c)\le1. \]

  1. 优化阶段固定旧策略:推导 \(v_\theta^*\) 时,\(v^{\mathrm{old}}\) 被视为固定函数。
    因此,该定理严格证明的是理想条件下的目标速度场。它没有直接证明在有限 batch、LoRA、固定学习率和常数 \(\beta\) 下,每一次实际梯度更新都会单调提高奖励。

草稿推导

_attachments/DiffusionNFT/2807d96d33784b8f023b5781d1b1e9ce.jpg_attachments/DiffusionNFT/34632ef22653c32a42044c310eb5c326.jpg_attachments/DiffusionNFT/264fbe282b837e52e8343dd4af5b3b59.jpg_attachments/DiffusionNFT/99b0999df1bfe81d26f74ad18745db56.jpg_attachments/DiffusionNFT/3e5617da720a948a6690dd2ad2c15165.jpg_attachments/DiffusionNFT/8efc75fce0992edc729cad91f21b1133.jpg

代码解析

DiffusionNFT 训练过程与三大预测分析

对应命令:

torchrun --nproc_per_node=8 scripts/train_nft_sd3.py --config config/nft.py:sd3_multi_reward

1. 整体流程概览

用 8 卡 DDP + fp16,在 SD3.5-medium 上挂两个 LoRA 适配器,以「PickScore + HPSv2 + CLIPScore」三项加权为奖励,执行 DiffusionNFT 的在线强化学习。每个 outer epoch 分两大阶段:

  1. 采样(数据采集):old 策略 + dpm2 高阶求解器生成图像,异步计算多奖励。
  2. 训练(前向过程优化):在 clean latent 上做前向加噪,用 NFT 损失(自适应加权的正/负预测 + KL)更新 default 策略。

核心创新:训练阶段丢弃了采样轨迹(all_log_probs 被 _ 丢弃,见 train_nft_sd3.py:643),直接在 forward process 上做策略优化——这是其"求解器无关、内存高效"的关键。

2. 双 LoRA 适配器设计

模型上挂了两个 LoRA 适配器(train_nft_sd3.py:419-445):

适配器 含义 是否训练
default 当前训练策略 \(v_\theta\) 是(AdamW 优化)
old 行为/采样策略 \(v^{\text{old}}\) 否(每 epoch 末衰减追踪 default)

初始时 old ← default(:576-580);每个 outer epoch 结束后(:1034-1039):

\[\text{old} \leftarrow \text{decay}\cdot\text{old} + (1-\text{decay})\cdot\text{default} \]

其中 decay = return_decay(global_step, decay_type=1)(:169)线性增长 step*0.001,上限 0.5。即 old 缓慢追踪 default,使行为策略既稳定又逐步改进。

3. 前向过程训练核心

对每个(样本,时间步 \(j\))(train_nft_sd3.py:854-988):

3.1 前向加噪(Forward Process)

\[x_t = (1-t)\,x_0 + t\,\epsilon \]

其中 \(x_0 =\) latents_clean(采样得到的干净 latent)。这是与 GRPO 的根本区别——直接在干净图上前向加噪,而非依赖整条采样轨迹。

3.2 三次前向预测

三次前向输入完全相同(xt, timestep, embeds, pooled_embeds),区别只在于激活哪个 LoRA 状态、是否带梯度。

预测 适配器状态 梯度 数学含义 损失中的角色
old_prediction set_adapter("old") no_grad + .detach() \(v^{\text{old}}\) 行为策略 构造正/负预测的锚点
forward_prediction set_adapter("default") 有梯度 \(v_\theta\) 当前训练策略 唯一被优化的量,出现在策略损失 + KL
ref_forward_prediction disable_adapter()(基模型) no_grad \(v_{\text{ref}}\) 预训练冻结模型 仅用于 KL 正则

代码位置:train_nft_sd3.py:872-907

transformer_ddp.module.set_adapter("old")
with torch.no_grad():
    old_prediction = transformer_ddp(...)[0].detach()          # v^old,行为策略

transformer_ddp.module.set_adapter("default")
forward_prediction = transformer_ddp(...)[0]                  # v_theta,带梯度(唯一)

with torch.no_grad():                                          # Reference model
    with transformer_ddp.module.disable_adapter():             # 关闭所有 LoRA = 基座
        ref_forward_prediction = transformer_ddp(...)[0]       # v_ref,预训练冻结

old_prediction = \(v^{\text{old}}\)(行为/采样策略)

  • "old" 是一个独立的 LoRA 适配器,就是阶段 A 采样生成这批 clean 图像的那个策略。
  • 训练时冻结,每个 outer epoch 末尾通过衰减更新缓慢追踪 default。
  • 它的预测代表"产生这批(已打分)样本的策略本身会怎么预测",是构造正/负目标的参考锚点。

forward_prediction = \(v_\theta\)(当前训练策略)

  • "default" 适配器,保留梯度——唯一 requires_grad 的预测。
  • 所有梯度都从这里回流到 "default" 的 LoRA 参数。
  • 同时进入策略损失(经 positive/negative)和 KL 损失。

ref_forward_prediction = \(v_{\text{ref}}\)(预训练参考模型)

  • disable_adapter() 临时关闭所有 LoRA,即纯基座 SD3.5-medium(预训练权重,从不更新)。
  • 只出现在 KL 项:kl = (forward - ref)^2(:966),loss += train.beta · kl。

3.3 损失构造

模型预测的是流匹配速度 \(v\),满足 \(x_0 = x_t - t\cdot v\)。策略损失部分(:934-960):

positive_prediction          = β·forward + (1-β)·old           # β = config.beta = 0.1
implicit_negative_prediction = (1+β)·old - β·forward

x0_pos = xt - t·positive_prediction           # 正目标:逼近 clean 图 x0
x0_neg = xt - t·implicit_negative_prediction  # 负目标:隐式远离 x0

policy_loss = r·(positive_loss/β) + (1-r)·(negative_loss/β)   # r∈[0,1] 是归一化优势
loss = policy_loss + train.β · KL(forward, ref)
  • 高奖励样本(\(r\to1\)):最小化 positive_loss,把 forward 推向使 \(x_0^{\text{pos}}\to x_0\) 的方向(即强化好样本);
  • 低奖励样本(\(r\to0\)):最小化 negative_loss,把 forward 推向使 \(x_0^{\text{neg}}\) 远离 \(x_0\) 的方向(即抑制差样本)。

forward 同时出现在正负两个目标里且都带梯度,所以同一预测同时承担"靠近好样本"和"远离差样本"两个信号;old 仅作为构造这两个目标的(冻结)基底。"implicit negative"(隐式负)之名正源于此:不需要显式的负样本/负模型,直接用 old 和 forward 的线性组合隐式构造负目标。

4. 关键区别:old vs ref

两者都是"冻结、no_grad"的预测,但用途和本质完全不同:

old ref
是什么 一个会缓慢更新的 LoRA 适配器 基座模型(无 LoRA,永不更新)
角色 行为策略:构造正/负预测的局部 RL 锚点 预训练锚点:KL 正则的全局基准
出现在 策略损失(positive/negative) 仅 KL 损失
为何不能互换 用 old 构造目标,因为数据是 old 采的(带 off-policy / 重要性采样的含义) old 会向 forward 收敛,KL(forward, old) 最终 →0,无法提供正则;只有冻结的 ref 才能持续约束不漂移

一句话总结三者分工:

  • KL(forward, ref) = "别离预训练模型太远"(防奖励 hacking / 模式坍塌的全局约束);
  • 正/负目标用 old = "在当前行为策略采到的这批数据上,按奖励改进"(局部 RL 信号);
  • forward = 唯一被优化的对象,同时接受上述两类梯度。

old 提供局部改进基线,forward 是被优化的对象,ref 提供全局防漂移约束。

5. 关键超参(sd3_multi_reward)

参数 值 含义 来源
pretrained.model stabilityai/stable-diffusion-3.5-medium 基座 nft.py:19
sample.num_steps 25 采样步数(被覆盖) nft.py:136
sample.guidance_scale 1.0 关闭 CFG nft.py:64
sample.solver dpm2 高阶 ODE 采样器 nft.py:66
config.beta 0.1 正/负预测混合系数 β nft.py:137
train.beta 1e-4 KL 权重 base.py:89
train.adv_clip_max 5 优势裁剪范围 base.py:84
train.timestep_fraction 0.99 训练时间步子集比例 base.py:87
num_image_per_prompt 24 每 prompt 采样数 nft.py:28
reward_fn {pickscore, hpsv2, clipscore} 各权重 1 多奖励加权 nft.py:123-127

派生量:

  • num_train_timesteps = int(25 × 0.99) = 24
  • train_batch_size = 9,num_batches_per_epoch = 16 → 每 epoch 全局 9×8×16 = 1152 张样本(= 48 prompt × 24 张/prompt)
  • gradient_accumulation_steps = 16
  • effective_grad_accum_steps = 16 × 24 = 384(每 384 次反向做一次 optimizer.step)
  • 每 inner epoch 约 9 次梯度更新(3456 / 384)
posted @ 2026-07-21 12:07  kiyoxi  阅读(83)  评论(0)    收藏  举报