DDPM / DDIM / Flow Matching 详解
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) x0∼q(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:T∣x0)=t=1∏Tq(xt∣xt−1),q(xt∣xt−1)=N(xt;1−βtxt−1,β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=αˉtx0+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=1∏Tpθ(xt−1∣xt)
建模为:
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θ(xt−1∣xt)=N(xt−1;μθ(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−αˉt−1β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)=αt1(xt−1−αˉ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,ϵ[∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2]
预测噪声的好处是:
- 训练稳定
- 目标分布简单
- 高斯噪声容易建模
- 在不同时间步上目标尺度相对统一
1.4 采样(生成)
从 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0,I) xT∼N(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) xt−1=αt1(xt−1−αˉtβtϵθ(xt,t))+σtz,z∼N(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(xt∣x0)=N(αˉtx0,(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:T∣x0)=qσ(xT∣x0)t=2∏Tqσ(xt−1∣xt,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σ(xt−1∣xt,x0)=N(αˉt−1x0+1−αˉt−1−σt2⋅1−αˉtxt−αˉtx0,σ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−αˉt−1)/(1−αˉt)1−αˉt/αˉt−1:恢复 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} xt−1(无额外噪声):
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) xt−1=αˉt−1预测的 x0 (αˉtxt−1−αˉtϵθ(xt,t))+1−αˉt−1−σ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) xt−1=αˉt−1(αˉtxt−1−αˉtϵθ(xt,t))+1−αˉt−1ϵθ(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 ∂t∂pt+∇⋅(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(x∣z)
条件向量场 v t ( x ∣ z ) v_t(x \mid z) vt(x∣z) (在给定条件 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)=Ez∼q(z∣x)[vt(x∣z)]
可以理解为: 一个点 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=Et∼U(0,1),z∼q(z),x∼pt(x∣z)[∥vθ(t,x)−vt(x∣z)∥2]
随机采样一个时间t,随机采样一个条件z, 根据条件路径得到中间点 x t x_t xt, 计算这条路劲上的真实速度 v t ( x ∣ z ) v_t(x|z) vt(x∣z) 让模型预测速度 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) x0∼N(0,I), x 1 ∼ p data ( x 1 ) x_1 \sim p_{\text{data}}(x_1) x1∼pdata(x1)。定义:
x t = ( 1 − t ) x 0 + t x 1 x_t = (1-t)x_0 + t x_1 xt=(1−t)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(x∣x0,x1)=x1−x0
对应的条件概率路径 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(x∣x0,x1)=N(x;(1−t)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)−(x1−x0)∥2],xt=(1−t)x0+tx1
3.4 采样(生成)
训练后,从 x 0 ∼ N ( 0 , I ) x_0 \sim \mathcal{N}(0,I) x0∼N(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:0→1
可使用欧拉法或龙格-库塔法,通常 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θ−(x1−x0)∣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=(1−t)x0+tx1。这条路径的真实速度就是 x 1 − x 0 x_1-x_0 x1−x0,所以训练时让模型 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} xt−1。
先记住 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(xt∣x0)=N(αˉtx0,(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=αˉtx0+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} xt−1
DDIM 的想法是:
既然 x t x_t xt 是由“原图成分 + 噪声成分”组成的,那么我可以先把其中的噪声方向找出来,然后重新组合成 x t − 1 x_{t-1} xt−1。
也就是说:
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σ(xt−1∣xt,x0)=N(αˉt−1x0+1−αˉt−1−σt2⋅1−αˉtxt−αˉtx0,σt2I)
里面最关键的是这一项:
x t − α ˉ t x 0 1 − α ˉ t \frac{x_t - \sqrt{\bar{\alpha}_t}x_0} {\sqrt{1-\bar{\alpha}_t}} 1−αˉtxt−αˉtx0
它看起来复杂,但本质上就是从 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=αˉtx0+1−αˉtϵ
所以:
x t − α ˉ t x 0 = 1 − α ˉ t ϵ x_t - \sqrt{\bar{\alpha}_t}x_0 =\sqrt{1-\bar{\alpha}_t}\epsilon xt−αˉtx0=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−αˉtxt−αˉtx0=ϵ
也就是说,公式里面这部分:
x t − α ˉ t x 0 1 − α ˉ t \frac{x_t - \sqrt{\bar{\alpha}_t}x_0} {\sqrt{1-\bar{\alpha}_t}} 1−αˉtxt−αˉtx0
本质上就是:
ϵ \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σ(xt−1∣xt,x0)=N(αˉt−1x0+1−αˉt−1−σt2⋅1−αˉtxt−αˉtx0,σ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 xt−1=αˉt−1x0+1−αˉt−1−σt2ϵ+σtz
其中:
z ∼ N ( 0 , I ) z \sim \mathcal{N}(0,I) z∼N(0,I)
现在这个公式就直观很多:
x t − 1 = 原图成分 + 保留下来的旧噪声方向 + 新加入的随机噪声 x_{t-1} =\text{原图成分} + \text{保留下来的旧噪声方向} + \text{新加入的随机噪声} xt−1=原图成分+保留下来的旧噪声方向+新加入的随机噪声
也可以写成:
x_{t-1}
= 一部分干净图像
+ 一部分从 x_t 中继承来的噪声
+ 一部分额外随机噪声
每一项分别是什么意思?
第一项:干净图像方向
α ˉ t − 1 x 0 \sqrt{\bar{\alpha}_{t-1}}x_0 αˉt−1x0
它表示:
在 t-1 时刻,应该保留多少原图成分
因为 (t-1) 比 (t) 更干净,所以通常有:
α ˉ t − 1 > α ˉ t \bar{\alpha}_{t-1} > \bar{\alpha}_t αˉt−1>αˉt
因此:
α ˉ t − 1 > α ˉ t \sqrt{\bar{\alpha}_{t-1}} > \sqrt{\bar{\alpha}_t} αˉt−1>αˉt
也就是说,往前去噪一步之后,原图成分变多了。
第二项:继承原来的噪声方向
1 − α ˉ t − 1 − σ t 2 ϵ \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2}\epsilon 1−αˉt−1−σ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) z∼N(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} xt−1 的时候,要不要额外注入随机噪声。
因此:
| σ 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 xt−1=αˉt−1x0+1−αˉt−1ϵ
也就是说:
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 xT→xT−1→xT−2→⋯→x0
它通常需要一步一步走。
而 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(xt∣x0)=N(αˉtx0,(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 1000→800→600→400→200→0
而不是:
1000 → 999 → 998 → ⋯ → 0 1000 \rightarrow 999 \rightarrow 998 \rightarrow \cdots \rightarrow 0 1000→999→998→⋯→0
这就是 DDIM 能够加速采样的原因。
非马尔可夫是什么意思?
DDPM 的反向过程类似:
x t → x t − 1 x_t \rightarrow x_{t-1} xt→xt−1
它只依赖当前状态 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σ(xt−1∣xt,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=αˉtxt−1−αˉ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 xt−1=αˉt−1x^0+1−αˉt−1−σ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} xt−1。 σ 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=αˉtx0+1−αˉtϵ
所以可以从 x t x_t xt 和 x 0 x_0 x0 中反推出噪声方向 ϵ \epsilon ϵ。然后为了得到 x t − 1 x_{t-1} xt−1,DDIM 按照 t − 1 t-1 t−1 时刻对应的信噪比,重新组合干净图像方向和噪声方向。公式中的 σ 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(xt∣x0) 的边际分布不变,但允许非马尔可夫的联合过程,因此可以跳过很多时间步进行快速采样。
最简洁记忆版
可以把 DDIM 公式记成:
x t − 1 = 更强的图像成分 + 更弱的噪声成分 + 可选随机噪声 x_{t-1} =\text{更强的图像成分} + \text{更弱的噪声成分} + \text{可选随机噪声} xt−1=更强的图像成分+更弱的噪声成分+可选随机噪声
对应公式是:
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 xt−1=αˉt−1x^0+1−αˉt−1−σt2ϵθ+σtz
其中:
| 项 | 作用 |
|---|---|
| α ˉ t − 1 x ^ 0 \sqrt{\bar{\alpha}_{t-1}}\hat{x}_0 αˉt−1x^0 | 保留更多干净图像 |
| 1 − α ˉ t − 1 − σ t 2 ϵ θ \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2}\epsilon_\theta 1−αˉt−1−σt2ϵθ | 保留一部分原噪声方向 |
| σ t z \sigma_t z σtz | 额外随机噪声 |
| σ t = 0 \sigma_t=0 σt=0 | 确定性 DDIM |
| σ t \sigma_t σt 取 DDPM 对应值 | 恢复 DDPM 随机采样 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)