DDPM / DDIM / Flow Matching: 扩散模型与连续归一化流

本文档详细介绍三种深度生成模型:DDPM(去噪扩散概率模型)、DDIM(去噪扩散隐式模型)和 Flow Matching(流匹配)。它们基于概率流或扩散过程,但在建模、采样速度和理论框架上各有特色。


1. DDPM:Denoising Diffusion Probabilistic Models

1.1 前向扩散过程

定义从数据 x 0 ∼ q ( x 0 ) x_0 \sim q(x_0) x0q(x0) 到噪声 x T x_T xT 的马尔可夫链:

q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) , q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t   x t − 1 , β t I ) q(x_{1:T} \mid x_0) = \prod_{t=1}^T q(x_t \mid x_{t-1}), \quad q(x_t \mid x_{t-1}) = \mathcal{N}\left(x_t; \sqrt{1-\beta_t}\, x_{t-1}, \beta_t I\right) q(x1:Tx0)=t=1Tq(xtxt1),q(xtxt1)=N(xt;1βt xt1,βtI)

其中 β t \beta_t βt 是噪声调度(通常从 β 1 \beta_1 β1 线性增加到 β T \beta_T βT)。令 α t = 1 − β t \alpha_t = 1-\beta_t αt=1βt, α ˉ t = ∏ s = 1 t α s \bar{\alpha}_t = \prod_{s=1}^t \alpha_s αˉt=s=1tαs,可直接采样 x t x_t xt

x t = α ˉ t   x 0 + 1 − α ˉ t   ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1-\bar{\alpha}_t}\, \epsilon,\quad \epsilon \sim \mathcal{N}(0,I) xt=αˉt x0+1αˉt ϵ,ϵN(0,I)

1.2 反向去噪过程

反向过程也是马尔可夫链,从 p ( x T ) = N ( 0 , I ) p(x_T)=\mathcal{N}(0,I) p(xT)=N(0,I) 开始:

p θ ( x 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} \mid x_t) pθ(x0:T)=p(xT)t=1Tpθ(xt1xt)

建模为:

p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , σ t 2 I ) p_\theta(x_{t-1} \mid x_t) = \mathcal{N}\left(x_{t-1}; \mu_\theta(x_t, t), \sigma_t^2 I\right) pθ(xt1xt)=N(xt1;μθ(xt,t),σt2I)

其中 σ t 2 \sigma_t^2 σt2 常固定为 β t \beta_t βt 1 − α ˉ t − 1 1 − α ˉ t β t \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t 1αˉt1αˉt1βt。采用重参数化,用神经网络 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) 预测噪声 ϵ \epsilon ϵ,则均值:

μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}}\left( x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) μθ(xt,t)=αt 1(xt1αˉt βtϵθ(xt,t))

1.3 训练目标

简化损失函数(噪声预测均方误差):

L simple = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] \mathcal{L}_{\text{simple}} = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon, t) \|^2 \right] Lsimple=Et,x0,ϵ[ϵϵθ(αˉt x0+1αˉt ϵ,t)2]
预测噪声的好处是:

  • 训练稳定
  • 目标分布简单
  • 高斯噪声容易建模
  • 在不同时间步上目标尺度相对统一

1.4 采样(生成)

x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0,I) xTN(0,I) 开始,迭代 t = T , … , 1 t=T,\dots,1 t=T,,1

x t − 1 = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z , z ∼ N ( 0 , I ) x_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left( x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) + \sigma_t z,\quad z \sim \mathcal{N}(0,I) xt1=αt 1(xt1αˉt βtϵθ(xt,t))+σtz,zN(0,I)

特点:质量高,但采样需要数百至数千步(如 T=1000),速度慢。


2. DDIM:Denoising Diffusion Implicit Models

DDIM 是对 DDPM 的重要改进,核心目标是:在不重新训练模型的情况下,加速 DDPM 的采样。

DDIM 不是重新设计训练目标,而是重新设计采样路径。
也就是说:

  • DDPM 和 DDIM 可以使用同一个训练好的噪声预测网络
  • DDPM 是随机采样
  • DDIM 可以是确定性采样
  • DDIM 可以用更少步数生成图像

2.1 非马尔可夫前向过程

DDIM 定义一族非马尔可夫过程,使得反向过程可以跳步采样。前向仍满足边际分布 q ( x t ∣ x 0 ) = N ( α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t \mid x_0) = \mathcal{N}(\sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)I) q(xtx0)=N(αˉt x0,(1αˉt)I),但联合分布定义为:

q σ ( x 1 : T ∣ x 0 ) = q σ ( x T ∣ x 0 ) ∏ t = 2 T q σ ( x t − 1 ∣ x t , x 0 ) q_\sigma(x_{1:T} \mid x_0) = q_\sigma(x_T \mid x_0) \prod_{t=2}^T q_\sigma(x_{t-1} \mid x_t, x_0) qσ(x1:Tx0)=qσ(xTx0)t=2Tqσ(xt1xt,x0)

其中

q σ ( x t − 1 ∣ x t , x 0 ) = N ( α ˉ t − 1 x 0 + 1 − α ˉ t − 1 − σ t 2 ⋅ x t − α ˉ t x 0 1 − α ˉ t , σ t 2 I ) q_\sigma(x_{t-1} \mid x_t, x_0) = \mathcal{N}\left( \sqrt{\bar{\alpha}_{t-1}} x_0 + \sqrt{1-\bar{\alpha}_{t-1} - \sigma_t^2} \cdot \frac{x_t - \sqrt{\bar{\alpha}_t} x_0}{\sqrt{1-\bar{\alpha}_t}}, \sigma_t^2 I \right) qσ(xt1xt,x0)=N(αˉt1 x0+1αˉt1σt2 1αˉt xtαˉt x0,σt2I)

  • σ t = 0 \sigma_t = 0 σt=0:确定性过程(DDIM)
  • σ t = ( 1 − α ˉ t − 1 ) / ( 1 − α ˉ t ) 1 − α ˉ t / α ˉ t − 1 \sigma_t = \sqrt{(1-\bar{\alpha}_{t-1})/(1-\bar{\alpha}_t)} \sqrt{1-\bar{\alpha}_t/\bar{\alpha}_{t-1}} σt=(1αˉt1)/(1αˉt) 1αˉt/αˉt1 :恢复 DDPM

2.2 反向采样(确定性 DDIM)

给定 x t x_t xt 和预测噪声 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t),直接计算 x t − 1 x_{t-1} xt1(无额外噪声):

x t − 1 = α ˉ t − 1 ( x t − 1 − α ˉ t   ϵ θ ( x t , t ) α ˉ t ) ⏟ 预测的  x 0 + 1 − α ˉ t − 1 − σ t 2   ϵ θ ( x t , t ) x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \underbrace{\left( \frac{x_t - \sqrt{1-\bar{\alpha}_t}\, \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \right)}_{\text{预测的 }x_0} + \sqrt{1-\bar{\alpha}_{t-1} - \sigma_t^2}\, \epsilon_\theta(x_t, t) xt1=αˉt1 预测的 x0 (αˉt xt1αˉt ϵθ(xt,t))+1αˉt1σt2 ϵθ(xt,t)

σ t = 0 \sigma_t = 0 σt=0 时:

x t − 1 = α ˉ t − 1 ( x t − 1 − α ˉ t   ϵ θ ( x t , t ) α ˉ t ) + 1 − α ˉ t − 1   ϵ θ ( x t , t ) x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \left( \frac{x_t - \sqrt{1-\bar{\alpha}_t}\, \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \right) + \sqrt{1-\bar{\alpha}_{t-1}}\, \epsilon_\theta(x_t, t) xt1=αˉt1 (αˉt xt1αˉt ϵθ(xt,t))+1αˉt1 ϵθ(xt,t)

这相当于一个确定性 ODE 的离散化,可以采用大步长(例如每 20 步跳一次),用 50 步即可达到与 DDPM 1000 步相近的质量。

2.3 训练

DDIM 使用与 DDPM 完全相同的训练目标 L simple \mathcal{L}_{\text{simple}} Lsimple,无需改变模型结构。

优势:快速采样(50 步),确定性生成(便于隐空间插值),可调整随机性。


3. Flow Matching

3.1 连续归一化流视角

考虑时间 t ∈ [ 0 , 1 ] t \in [0,1] t[0,1] 上的概率路径 p t ( x ) p_t(x) pt(x),满足 p 0 = p noise p_0 = p_{\text{noise}} p0=pnoise(如 N ( 0 , I ) \mathcal{N}(0,I) N(0,I)), p 1 = p data p_1 = p_{\text{data}} p1=pdata。希望学习一个向量场 v t ( x ) v_t(x) vt(x),使得概率密度满足连续性方程

∂ p t ∂ t + ∇ ⋅ ( p t v t ) = 0 \frac{\partial p_t}{\partial t} + \nabla \cdot (p_t v_t) = 0 tpt+(ptvt)=0

相应的流 ϕ t ( x ) \phi_t(x) ϕt(x) 定义为 d d t ϕ t ( x ) = v t ( ϕ t ( x ) ) \frac{d}{dt} \phi_t(x) = v_t(\phi_t(x)) dtdϕt(x)=vt(ϕt(x)),且 ϕ 0 ( x ) = x \phi_0(x)=x ϕ0(x)=x。那么 x t = ϕ t ( x 0 ) ∼ p t x_t = \phi_t(x_0) \sim p_t xt=ϕt(x0)pt
ϕ t ( x ) \phi_t(x) ϕt(x)表示一个样本点从初始位置出发,经过时间 t 后被搬运到了哪里。

3.2 条件流匹配 (Conditional Flow Matching)

直接学习 v t ( x ) v_t(x) vt(x) 是困难的
条件概率路径 (在给定条件 z 的情况下,时间 t 时样本 x 应该分布在哪里) p t ( x ∣ z ) p_t(x \mid z) pt(xz)
条件向量场 v t ( x ∣ z ) v_t(x \mid z) vt(xz) (在给定条件 z 的情况下,路径上某个点应该以什么速度移动。)
其中 z z z 为条件变量(例如数据样本 x 1 x_1 x1 和噪声样本 x 0 x_0 x0)。

可以证明,边际向量场等于条件向量场的期望:
v t ( x ) = E z ∼ q ( z ∣ x ) [ v t ( x ∣ z ) ] v_t(x) = \mathbb{E}_{z \sim q(z \mid x)} \left[ v_t(x \mid z) \right] vt(x)=Ezq(zx)[vt(xz)]
可以理解为: 一个点 x 的整体速度,可以看成所有可能条件路径速度的平均。一个点 x 的整体速度,可以看成所有可能条件路径速度的平均。

  • 训练目标为条件流匹配损失

L CFM = E t ∼ U ( 0 , 1 ) ,   z ∼ q ( z ) ,   x ∼ p t ( x ∣ z ) [ ∥ v θ ( t , x ) − v t ( x ∣ z ) ∥ 2 ] \mathcal{L}_{\text{CFM}} = \mathbb{E}_{t \sim \mathcal{U}(0,1),\, z \sim q(z),\, x \sim p_t(x \mid z)} \left[ \| v_\theta(t, x) - v_t(x \mid z) \|^2 \right] LCFM=EtU(0,1),zq(z),xpt(xz)[vθ(t,x)vt(xz)2]
随机采样一个时间t,随机采样一个条件z, 根据条件路径得到中间点 x t x_t xt, 计算这条路劲上的真实速度 v t ( x ∣ z ) v_t(x|z) vt(xz) 让模型预测速度 v θ ( t , x ) v_\theta(t, x) vθ(t,x)
模型预测的速度 和 真实路径速度 越接近越好

3.3 一种简单实现:线性插值路径

z = ( x 0 , x 1 ) z = (x_0, x_1) z=(x0,x1),其中 x 0 ∼ N ( 0 , I ) x_0 \sim \mathcal{N}(0,I) x0N(0,I) x 1 ∼ p data ( x 1 ) x_1 \sim p_{\text{data}}(x_1) x1pdata(x1)。定义:

x t = ( 1 − t ) x 0 + t x 1 x_t = (1-t)x_0 + t x_1 xt=(1t)x0+tx1

则条件向量场为:

v t ( x ∣ x 0 , x 1 ) = x 1 − x 0 v_t(x \mid x_0, x_1) = x_1 - x_0 vt(xx0,x1)=x1x0

对应的条件概率路径 p t ( x ∣ x 0 , x 1 ) = N ( x ; ( 1 − t ) x 0 + t x 1 , 0 ) p_t(x \mid x_0, x_1) = \mathcal{N}(x; (1-t)x_0 + t x_1, 0) pt(xx0,x1)=N(x;(1t)x0+tx1,0)
给定 x 0 x_0 x0 x 1 x_1 x1之后,时间 t 的位置是确定的,没有随机性。
高斯分布其实退化成一个点,也可以理解成狄拉克分布:概率全部集中在 x t x_t xt 这个点上

CFM 损失简化为:

L CFM = E t , x 0 , x 1 [ ∥ v θ ( t , x t ) − ( x 1 − x 0 ) ∥ 2 ] , x t = ( 1 − t ) x 0 + t x 1 \mathcal{L}_{\text{CFM}} = \mathbb{E}_{t, x_0, x_1} \left[ \| v_\theta(t, x_t) - (x_1 - x_0) \|^2 \right], \quad x_t = (1-t)x_0 + t x_1 LCFM=Et,x0,x1[vθ(t,xt)(x1x0)2],xt=(1t)x0+tx1

3.4 采样(生成)

训练后,从 x 0 ∼ N ( 0 , I ) x_0 \sim \mathcal{N}(0,I) x0N(0,I) 开始,求解 ODE:

d x t d t = v θ ( t , x t ) , t : 0 → 1 \frac{dx_t}{dt} = v_\theta(t, x_t), \quad t: 0 \to 1 dtdxt=vθ(t,xt),t:01

可使用欧拉法或龙格-库塔法,通常 50 步即可获得高质量样本。

3.5 与扩散模型的关系

  • 扩散模型的概率流 ODE 可以看作 Flow Matching 的特例,其中向量场通过分数函数 ∇ log ⁡ p t ( x ) \nabla \log p_t(x) logpt(x) 构造。
  • Flow Matching 直接回归向量场,避免了对分数函数的间接估计和噪声调度的超参数调优。

优势:训练稳定,采样快速,框架统一,可灵活设计概率路径。


4. 对比总结

特性 DDPM DDIM Flow Matching
过程类型 随机 SDE 确定性/随机 ODE 确定性 ODE
训练目标 ∣ ϵ − ϵ θ ∣ 2 |\epsilon - \epsilon_\theta|^2 ϵϵθ2 同 DDPM ∣ v θ − ( x 1 − x 0 ) ∣ 2 |v_\theta - (x_1-x_0)|^2 vθ(x1x0)2
典型采样步数 1000+ 50 50
跳步采样 不支持 支持 支持(ODE 求解器)
随机性 固有 可调 ( σ t \sigma_t σt) 确定性(给定 ODE 求解器)
超参数 噪声调度 β t \beta_t βt 同 DDPM 路径选择(如插值)

Flow Matching 的核心是学习一个连续时间的速度场,把简单噪声分布逐渐搬运到真实数据分布。它假设在 t∈[0,1] 上存在一条概率路径 p t ( x ) p_t(x) pt(x),其中 p 0 p_0 p0是噪声分布,
p 1 p_1 p1是数据分布。速度场
v t ( x ) v_t(x) vt(x) 需要满足连续性方程,表示概率质量在速度场推动下守恒地流动。由于直接学习边际速度场比较困难,Conditional Flow Matching 会先构造条件路径,例如给定噪声样本 x 0 x_0 x0和真实样本 x 1 x_1 x1,定义线性插值 x t = ( 1 − t ) x 0 + t x 1 x_t=(1−t)x_0+t_{x_1} xt=(1t)x0+tx1。这条路径的真实速度就是 x 1 − x 0 x_1-x_0 x1x0,所以训练时让模型 v θ ( t , x t ) v_\theta(t,x_t) vθ(t,xt)去拟合这个速度。生成时从高斯噪声开始,沿着模型预测的速度场解 ODE,从 t=0 积分到 t=1,最后得到生成样本。

DDIM 公式的直观理解

DDIM 的公式看起来比较复杂,但核心其实只有一句话:

DDIM 在已知当前带噪样本 x t x_t xt 的情况下,先估计“干净图像方向”和“噪声方向”,然后按照更干净时间步的比例重新组合出 x t − 1 x_{t-1} xt1


先记住 DDPM / DDIM 共同的前向加噪公式

前向加噪的边际分布是:

q ( x t ∣ x 0 ) = N ( α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t \mid x_0) =\mathcal{N} \left( \sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)I \right) q(xtx0)=N(αˉt x0,(1αˉt)I)

等价地,可以写成:

x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon xt=αˉt x0+1αˉt ϵ

其中:

ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0,I) ϵN(0,I)

这个公式的直观含义是:

x t = 一部分原图 + 一部分噪声 x_t = \text{一部分原图} + \text{一部分噪声} xt=一部分原图+一部分噪声

其中:

  • x 0 x_0 x0:干净图像
  • x t x_t xt:第 t 步的带噪图像
  • ϵ \epsilon ϵ:标准高斯噪声
  • α ˉ t \sqrt{\bar{\alpha}_t} αˉt :原图保留比例
  • 1 − α ˉ t \sqrt{1-\bar{\alpha}_t} 1αˉt :噪声比例

所以任何一个 x t x_t xt,都可以理解成:

x_t = 原图成分 + 噪声成分

DDIM 想解决的问题

现在我们有一个带噪图像:

x t x_t xt

我们希望得到更干净一点的:

x t − 1 x_{t-1} xt1

DDIM 的想法是:

既然 x t x_t xt 是由“原图成分 + 噪声成分”组成的,那么我可以先把其中的噪声方向找出来,然后重新组合成 x t − 1 x_{t-1} xt1

也就是说:

x_t 里面有什么?
= 一部分 x_0 + 一部分 noise

x_{t-1} 应该是什么?
= 更多一点 x_0 + 少一点 noise

因为 (t-1) 比 (t) 更接近干净图像,所以:

  • 原图比例应该变大
  • 噪声比例应该变小

公式里最关键的一项

DDIM 的条件分布写作:

q σ ( x t − 1 ∣ x t , x 0 ) = N ( α ˉ t − 1 x 0 + 1 − α ˉ t − 1 − σ t 2 ⋅ x t − α ˉ t x 0 1 − α ˉ t , σ t 2 I ) q_\sigma(x_{t-1} \mid x_t, x_0) =\mathcal{N} \left( \sqrt{\bar{\alpha}_{t-1}} x_0 + \sqrt{1-\bar{\alpha}_{t-1} - \sigma_t^2} \cdot \frac{x_t - \sqrt{\bar{\alpha}_t}x_0} {\sqrt{1-\bar{\alpha}_t}}, \sigma_t^2 I \right) qσ(xt1xt,x0)=N(αˉt1 x0+1αˉt1σt2 1αˉt xtαˉt x0,σt2I)

里面最关键的是这一项:

x t − α ˉ t x 0 1 − α ˉ t \frac{x_t - \sqrt{\bar{\alpha}_t}x_0} {\sqrt{1-\bar{\alpha}_t}} 1αˉt xtαˉt x0

它看起来复杂,但本质上就是从 x t x_t xt 里面把噪声提取出来。

因为:

x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon xt=αˉt x0+1αˉt ϵ

所以:

x t − α ˉ t x 0 = 1 − α ˉ t ϵ x_t - \sqrt{\bar{\alpha}_t}x_0 =\sqrt{1-\bar{\alpha}_t}\epsilon xtαˉt x0=1αˉt ϵ

两边再除以:

1 − α ˉ t \sqrt{1-\bar{\alpha}_t} 1αˉt

得到:

x t − α ˉ t x 0 1 − α ˉ t = ϵ \frac{x_t - \sqrt{\bar{\alpha}_t}x_0} {\sqrt{1-\bar{\alpha}_t}} =\epsilon 1αˉt xtαˉt x0=ϵ

也就是说,公式里面这部分:

x t − α ˉ t x 0 1 − α ˉ t \frac{x_t - \sqrt{\bar{\alpha}_t}x_0} {\sqrt{1-\bar{\alpha}_t}} 1αˉt xtαˉt x0

本质上就是:

ϵ \epsilon ϵ

也就是“噪声方向”。


DDIM 公式的简化理解

原始公式是:

q σ ( x t − 1 ∣ x t , x 0 ) = N ( α ˉ t − 1 x 0 + 1 − α ˉ t − 1 − σ t 2 ⋅ x t − α ˉ t x 0 1 − α ˉ t , σ t 2 I ) q_\sigma(x_{t-1} \mid x_t, x_0) =\mathcal{N} \left( \sqrt{\bar{\alpha}_{t-1}} x_0 + \sqrt{1-\bar{\alpha}_{t-1} - \sigma_t^2} \cdot \frac{x_t - \sqrt{\bar{\alpha}_t}x_0} {\sqrt{1-\bar{\alpha}_t}}, \sigma_t^2 I \right) qσ(xt1xt,x0)=N(αˉt1 x0+1αˉt1σt2 1αˉt xtαˉt x0,σt2I)

把复杂的噪声项替换成 ϵ \epsilon ϵ,可以理解成:

x t − 1 = α ˉ t − 1 x 0 + 1 − α ˉ t − 1 − σ t 2 ϵ + σ t z x_{t-1} =\sqrt{\bar{\alpha}_{t-1}}x_0 + \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2}\epsilon + \sigma_t z xt1=αˉt1 x0+1αˉt1σt2 ϵ+σtz

其中:

z ∼ N ( 0 , I ) z \sim \mathcal{N}(0,I) zN(0,I)

现在这个公式就直观很多:

x t − 1 = 原图成分 + 保留下来的旧噪声方向 + 新加入的随机噪声 x_{t-1} =\text{原图成分} + \text{保留下来的旧噪声方向} + \text{新加入的随机噪声} xt1=原图成分+保留下来的旧噪声方向+新加入的随机噪声

也可以写成:

x_{t-1}
= 一部分干净图像
+ 一部分从 x_t 中继承来的噪声
+ 一部分额外随机噪声

每一项分别是什么意思?

第一项:干净图像方向

α ˉ t − 1 x 0 \sqrt{\bar{\alpha}_{t-1}}x_0 αˉt1 x0

它表示:

在 t-1 时刻,应该保留多少原图成分

因为 (t-1) 比 (t) 更干净,所以通常有:

α ˉ t − 1 > α ˉ t \bar{\alpha}_{t-1} > \bar{\alpha}_t αˉt1>αˉt

因此:

α ˉ t − 1 > α ˉ t \sqrt{\bar{\alpha}_{t-1}} > \sqrt{\bar{\alpha}_t} αˉt1 >αˉt

也就是说,往前去噪一步之后,原图成分变多了。


第二项:继承原来的噪声方向

1 − α ˉ t − 1 − σ t 2 ϵ \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2}\epsilon 1αˉt1σt2 ϵ

它表示:

从 x_t 中提取出来的噪声方向,在 x_{t-1} 中还保留多少

这里的 ϵ \epsilon ϵ不是新噪声,而是从当前 x t x_t xt 中反推出的噪声方向。

如果是确定性 DDIM 采样,就主要靠这个噪声方向继续走。


第三项:额外随机噪声

σ t z \sigma_t z σtz

它表示:

这一步额外加入多少随机性

其中:

z ∼ N ( 0 , I ) z \sim \mathcal{N}(0,I) zN(0,I)

(\sigma_t) 越大,随机性越强。

当:

σ t = 0 \sigma_t = 0 σt=0

时,就没有额外随机噪声。


σ t \sigma_t σt 控制什么?

σ t \sigma_t σt 控制的是:

x t x_t xt x t − 1 x_{t-1} xt1 的时候,要不要额外注入随机噪声。

因此:

σ t \sigma_t σt 含义
σ t \sigma_t σt= 0 不加新噪声,确定性采样
σ t \sigma_t σt > 0 加一些随机噪声,随机采样
特定 DDPM 取值 恢复 DDPM 的随机反向过程

为什么 σ t \sigma_t σt= 0 就是 DDIM?

当:

σ t = 0 \sigma_t = 0 σt=0

公式变成:

x t − 1 = α ˉ t − 1 x 0 + 1 − α ˉ t − 1 ϵ x_{t-1} =\sqrt{\bar{\alpha}_{t-1}}x_0 + \sqrt{1-\bar{\alpha}_{t-1}}\epsilon xt1=αˉt1 x0+1αˉt1 ϵ

也就是说:

x_{t-1}
= t-1 时刻应该有的原图比例
+ t-1 时刻应该有的噪声比例

这个过程中没有额外随机项。

所以只要:

  • 初始噪声 x T x_T xT 固定
  • 模型固定
  • 时间步序列固定

那么每一步的结果都是固定的。

这就是 DDIM 的确定性采样。


为什么 DDIM 可以跳步?

DDPM 原始采样是:

x T → x T − 1 → x T − 2 → ⋯ → x 0 x_T \rightarrow x_{T-1} \rightarrow x_{T-2} \rightarrow \cdots \rightarrow x_0 xTxT1xT2x0

它通常需要一步一步走。

而 DDIM 的关键是:

它不强制必须经过每一个相邻时间步,只要求每个时刻的边际分布形式保持一致。

也就是保持:

q ( x t ∣ x 0 ) = N ( α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t \mid x_0) =\mathcal{N} \left( \sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)I \right) q(xtx0)=N(αˉt x0,(1αˉt)I)

如果这个边际分布形式保持住,那么可以从:

x t x_t xt

直接跳到:

x s x_s xs

其中:

s < t s < t s<t

例如可以从:

1000 → 800 → 600 → 400 → 200 → 0 1000 \rightarrow 800 \rightarrow 600 \rightarrow 400 \rightarrow 200 \rightarrow 0 10008006004002000

而不是:

1000 → 999 → 998 → ⋯ → 0 1000 \rightarrow 999 \rightarrow 998 \rightarrow \cdots \rightarrow 0 10009999980

这就是 DDIM 能够加速采样的原因。


非马尔可夫是什么意思?

DDPM 的反向过程类似:

x t → x t − 1 x_t \rightarrow x_{t-1} xtxt1

它只依赖当前状态 x t x_t xt

这种过程是马尔可夫过程。

而 DDIM 定义的是:

q σ ( x t − 1 ∣ x t , x 0 ) q_\sigma(x_{t-1} \mid x_t, x_0) qσ(xt1xt,x0)

它不仅依赖:

x t x_t xt

还依赖:

x 0 x_0 x0

所以它不是普通的马尔可夫链。

可以直观理解为:

DDPM:
我只看当前带噪图像 x_t,然后生成下一步 x_{t-1}

DDIM:
我还参考这个样本最终应该对应的干净图像 x_0,
然后决定怎么从 x_t 走到 x_{t-1}

当然,真实采样时我们不知道真正的 (x_0),所以会用模型预测的:

x ^ 0 \hat{x}_0 x^0

来代替。


真实采样时没有 x 0 x_0 x0,怎么办?

理论公式里可以写 x 0 x_0 x0,但生成时我们只有:

x t x_t xt

没有真实图像 x 0 x_0 x0

因此,实际采样时会先用模型预测噪声:

ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)

然后估计干净图像:

x ^ 0 = x t − 1 − α ˉ t ϵ θ ( x t , t ) α ˉ t \hat{x}_0 =\frac{ x_t - \sqrt{1-\bar{\alpha}_t}\epsilon_\theta(x_t,t) } { \sqrt{\bar{\alpha}_t} } x^0=αˉt xt1αˉt ϵθ(xt,t)

然后把公式里的 (x_0) 替换成:

x ^ 0 \hat{x}_0 x^0

于是实际采样公式变成:

x t − 1 = α ˉ t − 1 x ^ 0 + 1 − α ˉ t − 1 − σ t 2 ϵ θ ( x t , t ) + σ t z x_{t-1} =\sqrt{\bar{\alpha}_{t-1}}\hat{x}_0 + \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2} \epsilon_\theta(x_t,t) + \sigma_t z xt1=αˉt1 x^0+1αˉt1σt2 ϵθ(xt,t)+σtz

这就是实际 DDIM / DDPM sampler 里面常见的形式。


一句话理解整个公式

DDIM 的复杂公式本质上是在说:

从当前带噪图像 x t x_t xt 出发,先估计它对应的干净图像 x 0 x_0 x0 和噪声方向 ϵ \epsilon ϵ,然后按照 t-1 时刻应该有的“图像比例”和“噪声比例”重新组合出 x t − 1 x_{t-1} xt1 σ t \sigma_t σt 决定是否额外加入随机噪声。



总结

DDIM 的采样公式可以理解为把 x t x_t xt 分解成两部分:干净图像成分和噪声成分。因为前向加噪满足

x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t=\sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\epsilon xt=αˉt x0+1αˉt ϵ
所以可以从 x t x_t xt x 0 x_0 x0 中反推出噪声方向 ϵ \epsilon ϵ。然后为了得到 x t − 1 x_{t-1} xt1,DDIM 按照 t − 1 t-1 t1 时刻对应的信噪比,重新组合干净图像方向和噪声方向。公式中的 σ t \sigma_t σt 控制额外随机噪声的大小,当 σ t = 0 \sigma_t=0 σt=0 时没有随机项,采样是确定性的,这就是 DDIM;当 σ t \sigma_t σt 取特定值时,可以恢复 DDPM 的随机采样过程。DDIM 的关键是保持每个时刻 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0) 的边际分布不变,但允许非马尔可夫的联合过程,因此可以跳过很多时间步进行快速采样。


最简洁记忆版

可以把 DDIM 公式记成:

x t − 1 = 更强的图像成分 + 更弱的噪声成分 + 可选随机噪声 x_{t-1} =\text{更强的图像成分} + \text{更弱的噪声成分} + \text{可选随机噪声} xt1=更强的图像成分+更弱的噪声成分+可选随机噪声

对应公式是:

x t − 1 = α ˉ t − 1 x ^ 0 + 1 − α ˉ t − 1 − σ t 2 ϵ θ + σ t z x_{t-1} =\sqrt{\bar{\alpha}_{t-1}}\hat{x}_0 + \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2} \epsilon_\theta + \sigma_t z xt1=αˉt1 x^0+1αˉt1σt2 ϵθ+σtz

其中:

作用
α ˉ t − 1 x ^ 0 \sqrt{\bar{\alpha}_{t-1}}\hat{x}_0 αˉt1 x^0 保留更多干净图像
1 − α ˉ t − 1 − σ t 2 ϵ θ \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2}\epsilon_\theta 1αˉt1σt2 ϵθ 保留一部分原噪声方向
σ t z \sigma_t z σtz 额外随机噪声
σ t = 0 \sigma_t=0 σt=0 确定性 DDIM
σ t \sigma_t σt 取 DDPM 对应值 恢复 DDPM 随机采样
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐