墨绿色的连续曲线穿过疏密不同的开放环带,表现沿生成轨迹跳步前进的过程

DDIM

相同前向的 ODE 算法,加速采样

GO UP! Diffusion + RL学习 02

上一篇梳理了 DDPM 的完整推导。这一次继续问一个很自然的问题:能不能沿用已经训练好的噪声预测模型,让采样快一点?

我原来的直观理解是:前向过程从干净图像出发,为不同噪声程度的样本建立去噪的学习目标;反向过程再利用学到的方向,逐步生成图像。DDIM 就是在这两件事之间找到了更大的自由度。

PAPER · JIAMING SONG, CHENLIN MENG & STEFANO ERMONDenoising Diffusion Implicit ModelsICLR 2021 · arXiv:2010.02502 ↗

DDPM 通常按相邻时间步逐次去噪。如果想加速,可以改变采样过程,同时让训练时用到的加噪分布保持一致。关键就在于:相同的前向边缘分布,并不唯一决定整条随机轨迹。

#保持前向边缘分布

全文延续 DDPM 的标准记号,αt=1−βt\alpha_t=1-\beta_t,αˉt=∏i=1tαi\bar\alpha_t=\prod_{i=1}^t\alpha_i,并令 αˉ0=1\bar\alpha_0=1。我们希望保留:

q(xt∣x0)=N ⁣(αˉt x0,(1−αˉt)I),xt=αˉt x0+1−αˉt ϵ,ϵ∼N(0,I).\begin{aligned}q(x_t\mid x_0)&=\mathcal N\!\left(\sqrt{\bar\alpha_t}\,x_0,(1-\bar\alpha_t)I\right),\\x_t&=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\epsilon,\qquad\epsilon\sim\mathcal N(0,I).\end{aligned}

训练时,随机选一个时间步,再从这个条件分布直接得到加噪样本。常用的简化噪声预测损失是:

Lsimple=Ex0,t,ϵ ⁣[∥ϵ−ϵθ ⁣(αˉtx0+1−αˉtϵ,t)∥22].\mathcal L_{\mathrm{simple}}=\mathbb E_{x_0,t,\epsilon}\!\left[\left\|\epsilon-\epsilon_\theta\!\left(\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon,t\right)\right\|_2^2\right].

它用到的是各个时间步的加噪样本,而不是一条完整的加噪轨迹。因此,只要沿用相同的噪声日程和这个训练目标,就可以复用同一个噪声预测网络。

DDIM 不再要求沿用 DDPM 原来的相邻前向转移。它直接构造一个带 x0x_0 条件的反向分布,让它满足边缘一致性:

∫qσ(xs∣xt,x0) q(xt∣x0) dxt=q(xs∣x0),0≤s<t.\int q_\sigma(x_s\mid x_t,x_0)\,q(x_t\mid x_0)\,\mathrm dx_t=q(x_s\mid x_0),\qquad 0\le s<t.

先把 ss 理解为 t−1t-1;后面会看到,它也可以是更早的时间步。这就是原文手写推导最上方的那条等式。

#待定系数法:构造可行的反向过程

这里同样沿着苏神的推导来理解 (っ´ω`)ノ。原文截图中的系数记号与 DDPM 不同,下面统一写成 at=αˉta_t=\sqrt{\bar\alpha_t}、bt=1−αˉtb_t=\sqrt{1-\bar\alpha_t},减少混淆。

原文参考 · 苏剑林生成扩散模型漫谈(四):DDIM = 高观点 DDPM科学空间 · 待定系数法推导 ↗

先设一个高斯条件分布

qσ(xs∣xt,x0)=N ⁣(κxt+λx0,σ2I).q_\sigma(x_s\mid x_t,x_0)=\mathcal N\!\left(\kappa x_t+\lambda x_0,\sigma^2 I\right).

其中 κ,λ,σ\kappa,\lambda,\sigma 是这一对时间步对应的系数。取两个相互独立的标准高斯噪声,代入采样式:

ϵ1,ϵ2∼iidN(0,I),xt=atx0+btϵ1,xs=κxt+λx0+σϵ2=(κat+λ)x0+κbtϵ1+σϵ2.\begin{aligned}\epsilon_1,\epsilon_2&\overset{\mathrm{iid}}\sim\mathcal N(0,I),\\x_t&=a_t x_0+b_t\epsilon_1,\\x_s&=\kappa x_t+\lambda x_0+\sigma\epsilon_2\\&=(\kappa a_t+\lambda)x_0+\kappa b_t\epsilon_1+\sigma\epsilon_2.\end{aligned}

为了让它与 xs=asx0+bsϵx_s=a_s x_0+b_s\epsilon 同分布,只需要匹配条件均值和方差:

{κat+λ=as,κ2bt2+σ2=bs2.\begin{cases}\kappa a_t+\lambda=a_s,\\\kappa^2 b_t^2+\sigma^2=b_s^2.\end{cases}

三个未知数、两个方程,多出来的自由度就交给 σ\sigma。取通常使用的非负根:

κ=bs2−σ2bt,λ=as−atbs2−σ2bt,0≤σ2≤bs2.\begin{aligned}\kappa&=\frac{\sqrt{b_s^2-\sigma^2}}{b_t},\\\lambda&=a_s-a_t\frac{\sqrt{b_s^2-\sigma^2}}{b_t},\qquad 0\le\sigma^2\le b_s^2.\end{aligned}

于是,原截图中的完整条件分布就可以排成:

qσ(xs∣xt,x0)=N ⁣(μσ(xt,x0),σ2I),μσ(xt,x0)=asx0+bs2−σ2bt(xt−atx0).\begin{gathered}q_\sigma(x_s\mid x_t,x_0)=\mathcal N\!\left(\mu_\sigma(x_t,x_0),\sigma^2 I\right),\\\mu_\sigma(x_t,x_0)=a_s x_0+\frac{\sqrt{b_s^2-\sigma^2}}{b_t}(x_t-a_t x_0).\end{gathered}

代回 DDPM 的标准记号,采样式会更直观:

xs=αˉs x0+1−αˉs−σ2 xt−αˉtx01−αˉt+σz,z∼N(0,I).\begin{aligned}x_s&=\sqrt{\bar\alpha_s}\,x_0\\&\quad+\sqrt{1-\bar\alpha_s-\sigma^2}\,\frac{x_t-\sqrt{\bar\alpha_t}x_0}{\sqrt{1-\bar\alpha_t}}+\sigma z,\\z&\sim\mathcal N(0,I).\end{aligned}

这里没有用到“s=t−1s=t-1”这一条件,所以可以直接为两个相隔更远的噪声级构造转移。σ=0\sigma=0 时,高斯条件分布退化为一个确定性映射。

#从公式到跳步采样

用网络估计未知的原图

现在求出的是 qσ(xs∣xt,x0)q_\sigma(x_s\mid x_t,x_0),但推理时并不知道 x0x_0。参考 DDPM,把前向公式里的真实噪声替换成网络的预测:

x^0(xt,t)=xt−1−αˉt ϵθ(xt,t)αˉt.\hat x_0(x_t,t)=\frac{x_t-\sqrt{1-\bar\alpha_t}\,\epsilon_\theta(x_t,t)}{\sqrt{\bar\alpha_t}}.

原笔记里的 ξ\xi 在这里统一记为 ϵ\epsilon,网络输出则记为 ϵθ\epsilon_\theta。代回后,得到实际使用的更新:

xs=αˉs x^0(xt,t)⏟预测的干净图像+1−αˉs−σt→s2 ϵθ(xt,t)⏟指向下一噪声级的方向+σt→sz⏟额外随机噪声,z∼N(0,I).\begin{aligned}x_s&=\underbrace{\sqrt{\bar\alpha_s}\,\hat x_0(x_t,t)}_{\text{预测的干净图像}}\\&\quad+\underbrace{\sqrt{1-\bar\alpha_s-\sigma_{t\to s}^2}\,\epsilon_\theta(x_t,t)}_{\text{指向下一噪声级的方向}}\\&\quad+\underbrace{\sigma_{t\to s}z}_{\text{额外随机噪声}},\qquad z\sim\mathcal N(0,I).\end{aligned}

这三项也对应了原手写总结中的“均值”和“方差”:前两项组成条件均值,最后一项控制条件方差。

用一个参数控制随机性

常用的标准差选取如下,这里考虑 0≤η≤10\le\eta\le1:

σt→s(η)=η1−αˉs1−αˉt1−αˉtαˉs.\sigma_{t\to s}(\eta)=\eta\sqrt{\frac{1-\bar\alpha_s}{1-\bar\alpha_t}}\sqrt{1-\frac{\bar\alpha_t}{\bar\alpha_s}}.

当 η=0\eta=0 时不再注入新噪声,这就是确定性的 DDIM 采样。当 s=t−1s=t-1 且 η=1\eta=1 时:

σt→t−12=1−αˉt−11−αˉt βt=β~t.\sigma_{t\to t-1}^2=\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\,\beta_t=\tilde\beta_t.

此时均值与 DDPM 的噪声预测形式一致,并使用后验方差 β~t\tilde\beta_t。如果 DDPM 实现使用的是另一种方差约定,随机项需要相应区分。

Algorithm · DDIM 跳步采样

输入:已训练的噪声预测网络、原训练噪声日程、随机性参数 η\eta,以及时间步子序列:

0=τ0<τ1<⋯<τS=T,S≤T.0=\tau_0<\tau_1<\cdots<\tau_S=T,\qquad S\le T.
  1. 从 xT∼N(0,I)x_T\sim\mathcal N(0,I) 开始。
  2. 对 i=S,…,1i=S,\ldots,1,令 t=τit=\tau_i、s=τi−1s=\tau_{i-1},计算 ϵθ(xt,t)\epsilon_\theta(x_t,t) 和 x^0(xt,t)\hat x_0(x_t,t)。
  3. 按上式计算 σt→s(η)\sigma_{t\to s}(\eta),再更新到 xsx_s;最后一步 s=0s=0 时返回预测的干净样本。

注意,跳步以后仍使用原来时间步对应的 αˉτi\bar\alpha_{\tau_i} 和时间条件,不是把较短序列直接重新编号后套入原公式。

减少网络调用就能加快生成,但步子不能无限放大。噪声预测有误差,有限步更新也有离散化误差;跨度过大时,一次预测无法充分描述整段生成路径。原文推荐 Double 童发发的讲解,把这点说得很清楚:

原文推荐 · DOUBLE 童发发为什么 DDPM、DDIM 不能一步求得 X₀?为什么 DDIM 不能跳步过大?AI 知识分享 · Bilibili ↗

#确定性与 ODE

当 η=0\eta=0 时,给定初始噪声、网络、时间步序列和实现,后续采样路径就是确定的。不过,初始的 xTx_T 仍是随机变量,因此仍然可以生成一个分布。

为了理解标题中的 ODE,可以把确定性更新改写一下。令:

yt=xtαˉt,ut=1−αˉtαˉt.y_t=\frac{x_t}{\sqrt{\bar\alpha_t}},\qquad u_t=\sqrt{\frac{1-\bar\alpha_t}{\bar\alpha_t}}.

把 x^0\hat x_0 展开并整理,得到:

ys−yt=(us−ut) ϵθ(xt,t).y_s-y_t=(u_s-u_t)\,\epsilon_\theta(x_t,t).

它具有 Euler 离散步的形式。在连续噪声日程及合适的时间插值下,可以对应到:

dydu=ϵθ ⁣(y1+u2,t(u)).\frac{\mathrm dy}{\mathrm du}=\epsilon_\theta\!\left(\frac{y}{\sqrt{1+u^2}},t(u)\right).

采样时沿着从大到小的 uu 积分。这个视角解释了为什么确定性 DDIM 可以用更少的时间步沿路径前进,也提醒我们:有限步 DDIM 只是离散近似,改变步数不保证得到完全相同的像素结果。

这样再回看 DDPM → DDIM,核心就很清楚了:保留噪声预测的训练方式,重新构造生成路径;确定性路径让加速采样和连续时间的理解联系起来。下一篇继续从 Score-based Generative Models 的梯度视角理解这件事。

#参考与延伸阅读

  1. Jiaming Song, Chenlin Meng & Stefano Ermon. Denoising Diffusion Implicit Models, ICLR 2021. 第 3–4 节:非马尔可夫前向过程、采样与 ODE 联系。
  2. 苏剑林,生成扩散模型漫谈(四):DDIM = 高观点 DDPM。原文截图中的待定系数法来源;本文统一记号后重排。
  3. Double 童发发,理解扩散模型两大问题:为什么不能一步求得 X₀,为什么 DDIM 不能跳步过大。原文推荐视频。