Step-by-Step Notes
Fundamentals of Diffusion
生成模型的目标与扩散模型的基本思想
生成模型的目标
生成模型的目的是给定一组来自某个未知分布p∗(x)p^{*}(x)p∗(x)的独立同分布(i.i.d.)样本,构建一个采样器,能够近似地从相同的分布中生成新的样本。例如,假设我们有一组狗的图像训练集,这些图像来自某个潜在分布pdogp_{\text{dog}}pdog,我们的目标是生成新的狗的图像,这些图像看起来像是从pdogp_{\text{dog}}pdog中抽取的。数学上,这意味着我们希望构造一个采样器,使得其输出的样本分布尽可能接近p∗(x)p^{*}(x)p∗(x)。
扩散模型的基本思想
直接从复杂的p∗(x)p^{*}(x)p∗(x)中采样通常是困难的。扩散模型提供了一种解决方案:通过学习从一个易于采样的分布(例如高斯噪声分布)到目标分布p∗(x)p^{*}(x)p∗(x)的转换,间接实现采样。扩散模型的巧妙之处在于,它将从p∗(x)p^{*}(x)p∗(x)采样的复杂问题分解成一系列更简单的子问题。具体来说,它通过一个逐步添加噪声的前向过程将数据转化为噪声,再通过一个逐步去除噪声的反向过程从噪声恢复到数据。
高斯扩散示例
为了直观理解扩散模型的工作原理,我们以高斯扩散为例进行讲解。这一示例将展示前向过程如何将数据变为噪声,以及反向过程如何从噪声恢复数据。
前向过程
假设我们从目标分布p∗(x)p^{*}(x)p∗(x)中抽取初始样本x0x_{0}x0,即x0∼p∗(x)x_{0}\sim p^{*}(x)x0∼p∗(x)。前向过程的目标是通过逐步添加高斯噪声,将x0x_{0}x0转化为一个接近标准高斯分布的样本。定义一个时间序列x0,x1,…,xTx_{0},x_{1},\dots,x_{T}x0,x1,…,xT,其中每一步都添加一个小的独立高斯噪声:
xt+1=xt+ϵt,ϵt∼N(0,σ2I)
x_{t+1} = x_{t}+\epsilon_{t},\quad\epsilon_{t}\sim\mathcal{N}(0,\sigma^{2} I)
xt+1=xt+ϵt,ϵt∼N(0,σ2I)
- xtx_{t}xt表示时间步ttt的样本。
- ϵt\epsilon_{t}ϵt是高斯噪声,均值为0,方差为σ2I\sigma^{2}Iσ2I(III是单位矩阵)。
- σ2\sigma^{2}σ2是每步添加噪声的方差,通常取小值。
推导前向过程的结果:经过TTT步后,xTx_{T}xT是x0x_{0}x0加上TTT个独立高斯噪声之和,即:
xT=x0+ϵ0+ϵ1+⋯+ϵT−1
x_{T} = x_{0}+\epsilon_{0}+\epsilon_{1}+\dots+\epsilon_{T-1}
xT=x0+ϵ0+ϵ1+⋯+ϵT−1
由于ϵt\epsilon_{t}ϵt是独立的,且每个ϵt∼N(0,σ2I)\epsilon_{t}\sim\mathcal{N}(0,\sigma^{2}I)ϵt∼N(0,σ2I),因此总噪声的分布是:
∑t=0T−1ϵt∼N(0,Tσ2I)
\sum_{t=0}^{T-1}{\epsilon_{t}}\sim\mathcal{N}(0,T\sigma^{2}I)
t=0∑T−1ϵt∼N(0,Tσ2I)
因此,xTx_{T}xT的分布为:
xT=x0+N(0,Tσ2I)
x_{T} = x_{0}+\mathcal{N}(0,T\sigma^{2}I)
xT=x0+N(0,Tσ2I)
当TTT足够大时,Tσ2T\sigma^{2}Tσ2变得很大,xTx_{T}xT的分布将趋近于一个均值为0、方差为Tσ2IT\sigma^{2}ITσ2I的高斯分布N(0,Tσ2I)\mathcal{N}(0,T\sigma^{2}I)N(0,Tσ2I),几乎完全覆盖了x0x_{0}x0的信息。此时,xTx_{T}xT可以近似看作从纯噪声分布pT≈N(0,Tσ2I)p_{T}\approx\mathcal{N}(0,T\sigma^{2}I)pT≈N(0,Tσ2I)中采样得到的。
反向过程
前向过程将数据x0x_{0}x0转化为噪声xTx_{T}xT,而反向过程的目标是逆转这一过程,从xTx_{T}xT开始逐步去除噪声,恢复到x0x_{0}x0。具体来说,我们需要构造一个反向采样器,能够从时间步t+1t+1t+1的分布pt+1p_{t+1}pt+1采样得到时间步ttt的分布ptp_{t}pt。如果我们能解决以下子问题:
给定来自pt+1p_{t+1}pt+1的样本,生成来自ptp_{t}pt的样本。
那么我们就可以从pT≈N(0,Tσ2I)p_{T}\approx\mathcal{N}(0,T\sigma^{2}I)pT≈N(0,Tσ2I)开始,逐步应用反向采样器,生成样本序列xT,xT−1,…,x1,x0x_{T},x_{T-1},\dots,x_{1},x_{0}xT,xT−1,…,x1,x0,最终得到x0∼p∗(x)x_{0}\sim p^{*}(x)x0∼p∗(x)。
反向采样器的构建
在高斯扩散的设置中,反向过程的条件分布p(xt−Δt∣xt)p(x_{t-\Delta t}|x_{t})p(xt−Δt∣xt)可以被近似为一个高斯分布,这为反向采样器的设计提供了便利。
反向条件分布的高斯近似
一个关键事实是,当噪声水平较小时(即Δt\Delta tΔt或σ2\sigma^{2}σ2较小),反向条件分布p(xt−Δt∣xt)p(x_{t-\Delta t}|x_{t})p(xt−Δt∣xt)接近于高斯分布。这个事实将在后续章节中详细推导,这里我们先接受其结论,并基于此构建反向采样器。
假设p(xt−Δt∣xt)≈N(μ,σ2I)p(x_{t-\Delta t}|x_{t})\approx \mathcal{N}(\mu,\sigma^{2}I)p(xt−Δt∣xt)≈N(μ,σ2I),我们需要确定均值μ\muμ和方差σ2\sigma^{2}σ2。
反向采样器的参数化
基于高斯近似,我们可以将反向采样器定义为:
xt−Δt∼N(μθ(x,t),σ2I)
x_{t-\Delta t}\sim\mathcal{N}(\mu_{\theta}(x,t),\sigma^{2}I)
xt−Δt∼N(μθ(x,t),σ2I)
- 均值μθ(x,t)\mu_{\theta}(x,t)μθ(x,t):由神经网络参数化,输入当前样本xtx_{t}xt和时间步ttt,输出预测的均值。
- 方差σ2I\sigma^{2}Iσ2I:通常固定为一个小的常数,表示反向步骤的噪声水平。
这种参数化简化了问题:我们只需要学习均值函数μθ\mu_{\theta}μθ,而不需要建模复杂的分布。
训练反向采样器
为了使反向采样器有效,我们需要训练一个模型来预测反向条件分布的参数。在高斯扩散中,这通常通过一个去噪模型实现。
去噪模型
一个常见的策略是训练一个神经网络fθ(xt,t)f_{\theta}(x_{t},t)fθ(xt,t)来预测原始无噪声样本x0x_{0}x0。训练过程如下:
数据生成:
-
从目标分布采样x0∼p∗(x)x_{0}\sim p^{*}(x)x0∼p∗(x)
-
通过前向过程生成xtx_{t}xt:xt=x0+∑i=0t−1ϵi,∑i=0t−1ϵi∼N(0,tσ2I)x_{t} = x_{0}+\sum_{i=0}^{t-1}{\epsilon_{i}},\quad \sum_{i=0}^{t-1}{\epsilon_{i}}\sim\mathcal{N}(0,t\sigma^{2}I)xt=x0+∑i=0t−1ϵi,∑i=0t−1ϵi∼N(0,tσ2I),或者更简洁的:
xt=x0+tσqz,z∼N(0,I)xt∼N(x0,σt2),σt=σqt x_{t} = x_{0}+\sqrt{t}\sigma_{q} z,\quad z\sim\mathcal{N}(0,I) \\[10pt] x_{t}\sim\mathcal{N}(x_{0},\sigma_{t}^{2}),\quad \sigma_{t} = \sigma_{q}\sqrt{t} xt=x0+tσqz,z∼N(0,I)xt∼N(x0,σt2),σt=σqt
损失函数:训练模型最小化预测值与真实x0x_{0}x0之间的均方误差:
L=∥fθ(xt,t)−x0∥2
\mathcal{L} = \|f_{\theta}(x_{t},t)-x_{0}\|^{2}
L=∥fθ(xt,t)−x0∥2
通过优化这个损失,fθf_{\theta}fθ学会从带噪样本xtx_{t}xt预测x0x_{0}x0。
反向过程的采样
在采样阶段,我们从纯噪声xT∼N(0,σT2I)x_{T}\sim\mathcal{N}(0,\sigma_{T}^{2}I)xT∼N(0,σT2I)开始,逐步应用反向采样器:
xt−Δt=μθ(xt,t)+σ⋅z,z∼N(0,I)
x_{t-\Delta t} = \mu_{\theta}(x_{t},t)+\sigma\cdot z,\quad z\sim\mathcal{N}(0,I)
xt−Δt=μθ(xt,t)+σ⋅z,z∼N(0,I)
步骤推导:
-
假设μθ(xt,t)\mu_{\theta}(x_{t},t)μθ(xt,t)近似于从xtx_{t}xt到xt−Δtx_{t-\Delta t}xt−Δt的均值移动。
-
添加噪声σ⋅z\sigma\cdot zσ⋅z模拟反向过程中的随机性。
-
迭代应用此公式,从t=Tt=Tt=T到t=0t=0t=0,最终得到x0x_{0}x0
Stochastic Sampling: DDPM
在本节中,我们将深入探讨 Denoising Diffusion Probabilistic Models (DDPM) 的随机采样机制。DDPM 是一种生成模型,通过从高斯噪声中逐步去噪生成高质量样本。
DDPM 概述
DDPM 由 Ho 等人在 2020 年提出,是一种基于扩散过程的生成模型。其核心思想是通过以下两个过程实现数据生成:
- 前向过程:从真实数据逐步添加高斯噪声,直到数据变成纯噪声。
- 反向过程:从纯噪声开始,通过学习去噪模型逐步恢复到真实数据。
DDPM 的随机采样过程是其反向过程的关键,依赖于反向条件分布的高斯近似和神经网络的去噪能力。
DDPM 的正确性
在介绍采样机制之前,我们需要证明一个关键事实:当噪声水平较小时,反向条件分布 p(xt−Δt∣xt)p(x_{t-\Delta t} | x_t)p(xt−Δt∣xt) 可以近似为高斯分布。
反向条件分布的高斯近似
问题重述
假设 pt−Δt(x)p_{t-\Delta t}(x)pt−Δt(x) 是 Rd\mathbb{R}^dRd 上一个充分光滑的密度函数。考虑联合分布 (xt−Δt,xt)(x_{t-\Delta t}, x_t)(xt−Δt,xt),其中:
xt=xt−Δt+ηt,ηt∼N(0,σ2I)
x_t = x_{t-\Delta t} + \eta_t, \quad \eta_t \sim \mathcal{N}(0, \sigma^2 I)
xt=xt−Δt+ηt,ηt∼N(0,σ2I)
当 Δt\Delta tΔt 足够小(即噪声水平低)时,对于任意条件 xt=z∈Rdx_t = z \in \mathbb{R}^dxt=z∈Rd,反向条件分布满足:
p(xt−Δt∣xt=z)≈N(μz,σ2I)
p(x_{t-\Delta t} | x_t = z) \approx \mathcal{N}(\mu_z, \sigma^2 I)
p(xt−Δt∣xt=z)≈N(μz,σ2I)
其中 μz\mu_zμz 是依赖于 zzz 的均值,方差为 σ2I\sigma^2 Iσ2I。
推导过程
我们通过贝叶斯定理推导这一近似:
-
前向过程:根据定义,xt=xt−Δt+ηtx_t = x_{t-\Delta t} + \eta_txt=xt−Δt+ηt,其中 ηt∼N(0,σ2I)\eta_t \sim \mathcal{N}(0, \sigma^2 I)ηt∼N(0,σ2I)。这意味着前向条件分布为:
p(xt∣xt−Δt)=N(xt;xt−Δt,σ2I) p(x_t | x_{t-\Delta t}) = \mathcal{N}(x_t; x_{t-\Delta t}, \sigma^2 I) p(xt∣xt−Δt)=N(xt;xt−Δt,σ2I)
即 xtx_txt 是以 xt−Δtx_{t-\Delta t}xt−Δt 为均值、方差为 σ2I\sigma^2 Iσ2I 的高斯分布。 -
反向条件分布:我们需要计算 p(xt−Δt∣xt=z)p(x_{t-\Delta t} | x_t = z)p(xt−Δt∣xt=z)。根据贝叶斯定理:
p(xt−Δt∣xt=z)=p(xt=z∣xt−Δt)p(xt−Δt)p(xt=z) p(x_{t-\Delta t} | x_t = z) = \frac{p(x_t = z | x_{t-\Delta t}) p(x_{t-\Delta t})}{p(x_t = z)} p(xt−Δt∣xt=z)=p(xt=z)p(xt=z∣xt−Δt)p(xt−Δt)- 似然项:p(xt=z∣xt−Δt)=N(z;xt−Δt,σ2I)p(x_t = z | x_{t-\Delta t}) = \mathcal{N}(z; x_{t-\Delta t}, \sigma^2 I)p(xt=z∣xt−Δt)=N(z;xt−Δt,σ2I),因为 xt=xt−Δt+ηtx_t = x_{t-\Delta t} + \eta_txt=xt−Δt+ηt。
- 先验项:p(xt−Δt)p(x_{t-\Delta t})p(xt−Δt) 是 xt−Δtx_{t-\Delta t}xt−Δt 的分布,通常假设为光滑的密度函数。
- 归一化项:p(xt=z)=∫p(xt=z∣xt−Δt)p(xt−Δt)dxt−Δtp(x_t = z) = \int p(x_t = z | x_{t-\Delta t}) p(x_{t-\Delta t}) dx_{t-\Delta t}p(xt=z)=∫p(xt=z∣xt−Δt)p(xt−Δt)dxt−Δt。
-
小噪声近似:当 σ2\sigma^2σ2 很小时,似然 p(xt=z∣xt−Δt)p(x_t = z | x_{t-\Delta t})p(xt=z∣xt−Δt) 在 xt−Δt=zx_{t-\Delta t} = zxt−Δt=z 附近高度集中。我们可以通过对 logp(xt−Δt)\log p(x_{t-\Delta t})logp(xt−Δt) 进行泰勒展开来近似整个分布:
- 取对数:
logp(xt−Δt∣xt=z)=logp(xt=z∣xt−Δt)+logp(xt−Δt)−logp(xt=z) \log p(x_{t-\Delta t} | x_t = z) = \log p(x_t = z | x_{t-\Delta t}) + \log p(x_{t-\Delta t}) - \log p(x_t = z) logp(xt−Δt∣xt=z)=logp(xt=z∣xt−Δt)+logp(xt−Δt)−logp(xt=z) - 因为 logp(xt=z∣xt−Δt)=−12σ2∣z−xt−Δt∣2+C\log p(x_t = z | x_{t-\Delta t}) = -\frac{1}{2\sigma^2} | z - x_{t-\Delta t} |^2 + Clogp(xt=z∣xt−Δt)=−2σ21∣z−xt−Δt∣2+C(忽略常数项),当 σ2\sigma^2σ2 小且 p(xt−Δt)p(x_{t-\Delta t})p(xt−Δt) 变化平缓时,反向分布近似为高斯形式。
- 取对数:
-
结果:通过拉普拉斯近似,反向分布可近似为:
p(xt−Δt∣xt=z)≈N(μz,σ2I) p(x_{t-\Delta t} | x_t = z) \approx \mathcal{N}(\mu_z, \sigma^2 I) p(xt−Δt∣xt=z)≈N(μz,σ2I)
其中 μz\mu_zμz 依赖于 zzz 和 p(xt−Δt)p(x_{t-\Delta t})p(xt−Δt) 的梯度(具体形式需进一步计算,但在 DDPM 中由神经网络估计)。
反向采样器的构建
基于此近似,反向采样器定义为:
xt−Δt∼N(μθ(xt,t),σ2I)
x_{t-\Delta t} \sim \mathcal{N}(\mu_\theta(x_t, t), \sigma^2 I)
xt−Δt∼N(μθ(xt,t),σ2I)
其中 μθ(xt,t)\mu_\theta(x_t, t)μθ(xt,t) 是神经网络参数化的均值函数,目标是学习这一函数以逆转前向噪声过程。
DDPM 的算法
训练目标
DDPM 的训练目标是学习去噪模型 fθ(xt,t)f_\theta(x_t, t)fθ(xt,t),使其能够预测无噪声样本 x0x_0x0。训练损失定义为:
L=Et∼U[0,1],x0∼p∗,ϵ∼N(0,I)[∣fθ(xt,t)−x0∣2]
L = \mathbb{E}_{t \sim \mathcal{U}[0,1], x_0 \sim p^*, \epsilon \sim \mathcal{N}(0, I)} \left[ | f_\theta(x_t, t) - x_0 |^2 \right]
L=Et∼U[0,1],x0∼p∗,ϵ∼N(0,I)[∣fθ(xt,t)−x0∣2]
其中:
- x0∼p∗x_0 \sim p^*x0∼p∗:真实数据分布。
- t∼U[0,1]t \sim \mathcal{U}[0,1]t∼U[0,1]:均匀采样的时间步。
- ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, I)ϵ∼N(0,I):标准高斯噪声。
- xt=x0+tσϵx_t = x_0 + \sqrt{t} \sigma \epsilonxt=x0+tσϵ:加噪样本。
训练伪代码
- 采样时间 t∼U[0,1]t \sim \mathcal{U}[0,1]t∼U[0,1]。
- 采样数据 x0∼p∗x_0 \sim p^*x0∼p∗。
- 采样噪声 ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, I)ϵ∼N(0,I)。
- 计算加噪样本 xt=x0+tσϵx_t = x_0 + \sqrt{t} \sigma \epsilonxt=x0+tσϵ。
- 计算损失 L=∣fθ(xt,t)−x0∣2L = | f_\theta(x_t, t) - x_0 |^2L=∣fθ(xt,t)−x0∣2。
3.2 采样过程
采样从纯噪声 xT∼N(0,σT2I)x_T \sim \mathcal{N}(0, \sigma_T^2 I)xT∼N(0,σT2I) 开始,逐步应用反向采样器:
xt−Δt=μθ(xt,t)+σ⋅z,z∼N(0,I)
x_{t-\Delta t} = \mu_\theta(x_t, t) + \sigma \cdot z, \quad z \sim \mathcal{N}(0, I)
xt−Δt=μθ(xt,t)+σ⋅z,z∼N(0,I)
其中 μθ(xt,t)\mu_\theta(x_t, t)μθ(xt,t) 可通过训练好的 fθf_\thetafθ 推导。
采样伪代码
-
采样初始噪声 xT∼N(0,σT2I)x_T \sim \mathcal{N}(0, \sigma_T^2 I)xT∼N(0,σT2I)。
-
对于t=Tt = Tt=T 到1:
- 计算 μθ(xt,t)\mu_\theta(x_t, t)μθ(xt,t)。
- 采样 z∼N(0,I)z \sim \mathcal{N}(0, I)z∼N(0,I)。
- 更新 xt−Δt=μθ(xt,t)+σ⋅zx_{t-\Delta t} = \mu_\theta(x_t, t) + \sigma \cdot zxt−Δt=μθ(xt,t)+σ⋅z。
- 返回生成的 x0x_0x0。
DDPM 与 SDE 的联系
DDPM 的离散时间过程可以看作随机微分方程(SDE)的离散化形式。
前向 SDE
连续时间下的扩散过程表示为:
dxt=f(xt,t)dt+g(t)dWt
dx_t = f(x_t, t) dt + g(t) dW_t
dxt=f(xt,t)dt+g(t)dWt
其中 f(xt,t)f(x_t, t)f(xt,t) 是漂移项,g(t)g(t)g(t) 是扩散系数,与时间ttt有关,WtW_tWt 是布朗运动。
反向 SDE
反向过程对应:
dxt=[f(xt,t)−g(t)2∇xlogpt(xt)]dt+g(t)dWt
dx_t = \left[ f(x_t, t) - g(t)^2 \nabla_x \log p_t(x_t) \right] dt + g(t) dW_t
dxt=[f(xt,t)−g(t)2∇xlogpt(xt)]dt+g(t)dWt
其中 ∇xlogpt(xt)\nabla_x \log p_t(x_t)∇xlogpt(xt) 是得分函数,DDPM 的 fθ(xt,t)f_\theta(x_t, t)fθ(xt,t) 实际上在近似这一项。
Deterministic Sampling: DDIM
DDIM 是一种高效的扩散模型采样方法,通过确定性流逆转前向扩散过程,从高斯噪声生成高质量样本。与 DDPM 的随机性不同,DDIM 的确定性使其在生成过程中更可控且计算效率更高。其核心是通过学习一个速度场(velocity field),从噪声分布(如高斯分布)逐步恢复到目标数据分布(如狗的图像分布)。它利用了前向扩散过程中条件分布的高斯近似,并通过确定性更新规则避免了随机噪声的引入。
DDIM 概述
DDIM(去噪扩散隐式模型)由 Song 等人在 2021 年提出,是一种确定性采样方法,用于从高斯噪声生成目标分布的样本。与 DDPM 的随机采样不同,DDIM 通过确定性流逆转扩散过程,减少了采样步骤并提高了计算效率。DDIM 被视为流匹配的一种特殊形式,并与概率流常微分方程(ODE)密切相关。
核心概念
确定性采样
DDIM的核心在于其确定性逆转过程。给定一个初始噪声样本xT∼N(0,σT2I)x_T \sim \mathcal{N}(0, \sigma_T^2 I)xT∼N(0,σT2I) ,DDIM通过一系列确定性步骤生成 x0x_0x0,确保每次运行结果相同。这种确定性提高了可重复性和计算效率。
流匹配
DDIM 被描述为流匹配的一种特殊形式。流匹配的目标是学习一个速度场v(x,t)v(x, t)v(x,t),将基分布qqq(如高斯分布)映射到目标分布 ppp(如数据分布)。在 DDIM 中,速度场是确定性的,定义了从噪声到数据的轨迹。
概率流 ODE
DDIM 可以看作是对概率流 ODE 的离散化。概率流 ODE 描述了从噪声到数据的确定性路径,去除了随机扩散项:
dxtdt=f(xt,t)−12g(t)2∇xlogpt(xt)
\frac{dx_t}{dt} = f(x_t, t) - \frac{1}{2} g(t)^2 \nabla_x \log p_t(x_t)
dtdxt=f(xt,t)−21g(t)2∇xlogpt(xt)
其中:
- f(xt,t)f(x_t, t)f(xt,t) 是漂移项,描述确定性趋势。
- g(t)g(t)g(t)是扩散系数。
- ∇xlogpt(xt)\nabla_x \log p_t(x_t)∇xlogpt(xt) 是得分函数,指示分布的梯度方向。
线性流:DDIM 的轨迹可以表示为线性点流(pointwise flows)的组合,通过时间缩放调整。这些线性流简化了计算,使得 DDIM 在实践中更易实现。
效率:DDIM 通常需要较少的采样步骤(例如 50-100 步,而 DDPM 可能需要 1000 步),显著降低了计算成本。这得益于其确定性更新规则和对 ODE 的数值求解。
数学推导
前向扩散过程
前向扩散过程从目标分布p∗(x)p^{*}(x)p∗(x)开始,逐步添加高斯噪声:
xt=xt−1+ηt,ηt∼N(0,σ2I)
x_t = x_{t-1} + \eta_t, \quad \eta_t \sim \mathcal{N}(0, \sigma^2 I)
xt=xt−1+ηt,ηt∼N(0,σ2I)
经过TTT步,xTx_{T}xT接近高斯分布 N(0,Tσ2I)\mathcal{N}(0, T \sigma^2 I)N(0,Tσ2I)。在连续时间下,这对应于随机微分方程(SDE):
dx=f(x,t)dt+g(t)dW
dx = f(x, t)dt + g(t)dW
dx=f(x,t)dt+g(t)dW
其中dWdWdW是布朗运动。
DDIM 反向过程
DDIM 的反向过程通过确定性更新规则逆转前向扩散。关键假设是反向条件分布p(xt−1∣xt)p(x_{t-1} | x_t)p(xt−1∣xt)在小噪声水平下近似为高斯分布。DDIM 的更新规则为:
xt−1=αtxt+βtϵθ(xt,t)
x_{t-1} = \alpha_t x_t + \beta_t \epsilon_\theta(x_t, t)
xt−1=αtxt+βtϵθ(xt,t)
- 符号说明:
- αt,βt\alpha_t, \beta_tαt,βt:时间依赖的缩放系数,基于噪声调度。
- ϵθ(xt,t)\epsilon_\theta(x_t, t)ϵθ(xt,t):神经网络预测的噪声或相关量(如得分函数)。
此更新规则是确定性的,不引入随机噪声。
速度场
DDIM 使用速度场v(x,t)v(x, t)v(x,t) 定义点在时间上的移动方向:
v(x,t)≈−12g(t)2∇xlogpt(x)
v(x, t) \approx -\frac{1}{2} g(t)^2 \nabla_x \log p_t(x)
v(x,t)≈−21g(t)2∇xlogpt(x)
此速度场指向逆转扩散的方向,指导从 ( x_t ) 到 ( x_{t-1} ) 的移动。离散更新为:
xt−1=xt+v(xt,t)Δt
x_{t-1} = x_t + v(x_t, t) \Delta t
xt−1=xt+v(xt,t)Δt
概率流 ODE
DDIM 的连续形式是概率流 ODE:
dxtdt=f(xt,t)−12g(t)2∇xlogpt(xt)
\frac{dx_t}{dt} = f(x_t, t) - \frac{1}{2} g(t)^2 \nabla_x \log p_t(x_t)
dtdxt=f(xt,t)−21g(t)2∇xlogpt(xt)
通过数值求解器(如 Euler 或 Runge-Kutta)离散化此 ODE,得到 DDIM 的更新规则。
点流与线性流
DDIM 的轨迹可以通过点流表示。对于目标分布p0p_{0}p0是 Dirac-delta 分布的情况,点流定义为:
Gt(x1)=x1−Δ
G_t(x_1) = x_1 - \Delta
Gt(x1)=x1−Δ
其中Δ\DeltaΔ是从x1x_{1}x1到x0x_{0}x0的位移。DDIM 将这些点流组合为线性流,通过时间缩放调整轨迹。
推导 DDIM 更新规则
DDIM 的更新规则可以通过流匹配推导。假设目标分布p0p_{0}p0是 Dirac-delta 分布,流vvv将基分布p1p_{1}p1映射到p0p_{0}p0。离散更新为:
xt−1=xt−αtv(xt,t)
x_{t-1} = x_t - \alpha_t v(x_t, t)
xt−1=xt−αtv(xt,t)
其中v(xt,t)v(x_{t},t)v(xt,t)由神经网络预测,αt\alpha_{t}αt调整步长。
实际意义
高效采样:DDIM 的确定性使其采样步骤少于 DDPM,适合实时应用。例如,在图像生成中,DDIM 可以在 50-100 步内生成高质量图像,而 DDPM 可能需要 1000 步。
可重复性:由于没有随机噪声,DDIM 确保相同输入产生相同输出,便于调试和验证。
数值求解器:DDIM 使用 Euler 或 Runge-Kutta 等求解器离散化 ODE,提高采样效率。
挑战与局限性
学习误差:DDIM 的性能依赖于精确学习速度场v(xt,t)v(x_{t},t)v(xt,t)。时间依赖性或回归误差可能导致生成样本偏离目标分布。
数据集规模:在小数据集上,DDIM 可能过拟合,导致轨迹坍缩到训练点,影响泛化能力。
与 DDPM 的对比
特性 | DDPM | DDIM |
---|---|---|
采样性质 | 随机 | 确定性 |
步骤数 | 较多(1000+) | 较少(50-100) |
计算成本 | 高 | 低 |
可重复性 | 低 | 高 |
Flow Matching
Flow Matching 的核心目标是通过学习一个流vvv,将初始分布qqq(通常是易于采样的,如高斯分布)运输到目标分布ppp(如狗的图像分布),从而生成目标分布的样本。
主要概念
流与 ODE:
- 流vvv被定义为一个速度场,通过普通微分方程(ODE)描述点随时间移动。
- 例如,给定初始点x1x_{1}x1在时间t=1t=1t=1,流 v v v 将其运输到时间t=0t=0t=0的最终点xfx_{f}xf,用公式表示为xf=RunFlow(x1,v,t)x_{f} = \text{RunFlow}(x_{1},v,t)xf=RunFlow(x1,v,t)
- 这个过程不仅适用于单个点,还能通过“向前推送”(pushing forward)处理整个分布的转换。
点流(Pointwise Flows):
- 点流是 Flow Matching 的基本构建块,描述单个点x1x_{1}x1到另一个点x0x_{0}x0的轨迹,通过在路径上每个点的速度vt(x)v_{t}(x)vt(x)定义。
- 这可以直观地理解为粒子在空间中的移动,比如气体分子从一个位置移动到另一个位置。
- 一个简单的例子是线性流,其中点沿直线从x1x_{1}x1移动到x0x_{0}x0
分布运输:
- 流不仅能映射单个点,还能运输整个分布。如果初始分布p1p_{1}p1在t=1t=1t=1,应用流vvv后得到最终分布p0p_{0}p0,用符号表示为p1→vp0p_{1}\xrightarrow{v}p_{0}p1vp0
- Flow Matching的目标是找到一个流vvv,使基础分布qqq(如高斯)被运输到目标分布ppp。
基础分布与目标分布:
- 基础分布qqq通常是易于采样的分布,比如高斯分布或环形分布。
- 目标分布ppp是我们希望生成样本的分布,比如狗的图像分布。
- 使用耦合Hq,p\mathrm{H}_{q,p}Hq,p来联合采样来自qqq和ppp的点对,最简单的选择是独立耦合,即从每个分布独立采样点。
与扩散模型的关系
- Flow Matching 与扩散模型(如 DDPM 和 DDIM)有密切联系,尤其是与 DDIM 共享许多思想。
- 它被描述为 DDIM 的推广,DDIM 算法是 Flow Matching 的一种特殊情况,特别是在特定流vvv的选择下。
- 与扩散模型不同,Flow Matching 避免了显式的向前加噪过程,专注于学习确定性的速度场,简化了生成建模的学习问题。
实现细节
Flow Matching的实现需要以下关键选择:
- 基础分布 qqq:通常选择易于采样的分布,如高斯分布。
- 耦合 Πq,p\Pi_{q,p}Πq,p:定义点对 (x1,x0)(x_1, x_0)(x1,x0) 的联合分布,其中 x1∼qx_1 \sim qx1∼q,x0∼px_0 \sim px0∼p。常见选择是独立耦合,即 x1x_1x1 和 x0x_0x0 独立采样。
- 点流:定义从 x1x_1x1 到 x0x_0x0 的轨迹,例如线性流,点沿直线移动。
训练
训练目标是学习一个神经网络 fθf_\thetafθ,逼近边缘流 vt∗(xt)v^*_t(x_t)vt∗(xt)。
伪代码4:Flow Matching训练损失
-
输入:神经网络 fθf_\thetafθ
-
数据:耦合 Πq,p\Pi_{q,p}Πq,p 的采样访问
-
步骤
:
- 从 Πq,p\Pi_{q,p}Πq,p 采样 (x1,x0)(x_1, x_0)(x1,x0)
- 选择点流 v[x1,x0]v^{[x_1, x_0]}v[x1,x0]
- 对于时间 t∈[0,1]t \in [0,1]t∈[0,1],计算 xt=RunFlow(v[x1,x0],x1,t)x_t = \text{RunFlow}(v^{[x_1, x_0]}, x_1, t)xt=RunFlow(v[x1,x0],x1,t)
- 计算速度 vt[x1,x0](xt)v^{[x_1, x_0]}_t(x_t)vt[x1,x0](xt)
- 计算损失:
E∗t∼Uniform[0,1]E∗(x1,x0)[∣fθ(xt,t)−vt[x1,x0](xt)∣2] \mathbb{E}*{t \sim \text{Uniform}[0,1]} \mathbb{E}*{(x_1, x_0)} \left[ | f_\theta(x_t, t) - v^{[x_1, x_0]}_t(x_t) |^2 \right] E∗t∼Uniform[0,1]E∗(x1,x0)[∣fθ(xt,t)−vt[x1,x0](xt)∣2]
此损失函数促使 fθf_\thetafθ 在轨迹上匹配点流的速度。
采样
训练完成后,通过求解 fθf_\thetafθ 定义的常微分方程(ODE)从目标分布 ppp 采样。
伪代码5:采样
-
输入:训练好的神经网络 fθf_\thetafθ
-
步骤
:
- 从 qqq 采样 x1x_1x1
- 初始化 x=x1x = x_1x=x1
- 对于从 t=1t=1t=1 到 t=0t=0t=0,以小步长 Δt\Delta tΔt 迭代:
- 更新 x←x+fθ(x,t)⋅Δtx \leftarrow x + f_\theta(x, t) \cdot \Delta tx←x+fθ(x,t)⋅Δt
- 在 t=0t=0t=0 时的 xxx 为 ppp 的样本
与DDIM的关系
Flow Matching是DDIM(去噪扩散隐式模型)的推广。DDIM可以看作Flow Matching在特定点流和耦合选择下的特例。
(DDIM等价于线性流):DDIM采样器在时间重参数化下等价于使用线性点流和扩散耦合产生的边缘流。
具体地,使用线性点流 vt[x1,x0](xt)=12t(xt−x0)v^{[x_1, x_0]}_t(x_t) = \frac{1}{2t}(x_t - x_0)vt[x1,x0](xt)=2t1(xt−x0) 或 vt[x1,x0](xt)=12t(x0−x1)v^{[x_1, x_0]}_t(x_t) = \frac{1}{2\sqrt{t}}(x_0 - x_1)vt[x1,x0](xt)=2t1(x0−x1),结合扩散耦合 x1=x0+N(0,σq2)x_1 = x_0 + \mathcal{N}(0, \sigma_q^2)x1=x0+N(0,σq2),可重现DDIM轨迹。
额外备注
- 无需显式前向过程:与传统扩散模型不同,Flow Matching直接学习逆向过程,通过流定义。
- 点流别名:点流也称为双侧条件流,见Albergo和Vanden-Eijnden [2022]等。
- 进一步阅读:Fjelde等人 [2024] 提供了详细的可视化和数学阐述。
- 扩展:随机插值(Albergo等人 [2023])和非标准流(Stark等人 [2024])将框架扩展到离散空间等场景。
实践中的扩散模型
实用采样器
- DDPM和DDIM:Ho等人 [2020] 和Song等人 [2021] 提出的标准采样算法。
- 减少步数生成:使用高级数值求解器(如Euler、Heun、Runge-Kutta)减少采样步数。
- 时间蒸馏:如一致性模型(Song等人 [2023b])和对抗性蒸馏(Lin等人 [2024])等方法提高效率。
噪声调度
噪声调度 σt\sigma_tσt 决定每一步添加的噪声量。
-
简单扩散:p(xt)∼N(x0,σt2)p(x_t) \sim \mathcal{N}(x_0, \sigma_t^2)p(xt)∼N(x0,σt2),通常 σt∝t\sigma_t \propto \sqrt{t}σt∝t。
-
变异保持调度:如Ho等人 [2020],更新公式为:
xt=1−β(t)xt−1+β(t)εt,0<β(t)<1 x_t = \sqrt{1 - \beta(t)} x_{t-1} + \sqrt{\beta(t)} \varepsilon_t, \quad 0 < \beta(t) < 1 xt=1−β(t)xt−1+β(t)εt,0<β(t)<1
选择合适的噪声调度对模型性能至关重要。
似然解释与变分自编码器
扩散模型可通过变分自编码器(VAE)的视角解释:
- 前向过程:作为编码器,将数据映射到潜在空间。
- 逆向过程:作为解码器,重建数据。
- 训练目标:可从VAE的证据下界(ELBO)推导,简化为带时间加权的L2回归损失,支持最大似然训练。
参数化方法:e-预测与θ-预测
扩散模型使用不同的参数化方式预测不同量:
- e-预测:通常预测添加到数据的噪声分量。
- θ-预测:模型预测向量 v=αv⋅cxvv = \alpha_v \cdot c_{x_v}v=αv⋅cxv,具体含义需进一步上下文。
这些参数化方式影响训练稳定性和生成样本质量。