扩散模型(Diffusion Models)详解
扩散模型(Diffusion Models)在近几年成为了生成对抗网络(GAN)之外的又一重要生成模型方向。其核心理念可概括为:「先把一张清晰的图像逐渐加噪,最终变成纯随机噪声;然后训练神经网络逆向地一步步清除噪声,还原到清晰的原图」。本文将结合严谨的数学推导,深入解析扩散模型的运作原理与实现流程。
一、扩散过程的物理与数学解释
扩散过程在物理学中描述的是粒子从高浓度区域向低浓度区域移动的现象,遵循熵增原理。在概率模型中,我们将扩散过程形式化为:从数据分布逐步转变为简单的先验分布(如标准高斯分布)。
在扩散模型中,我们定义两个过程:
- 正向扩散:将数据分布逐步转换为噪声分布
- 逆向扩散:从噪声分布逆向还原数据分布
二、数学原理的严格推导
1. 正向扩散(Forward Diffusion)
设数据点 x 0 ∼ q ( x 0 ) \mathbf{x}_0 \sim q(\mathbf{x}_0) x0∼q(x0) 为原始数据分布,我们构建一个马尔可夫加噪过程:
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q(\mathbf{x}_{1:T}|\mathbf{x}_0) = \prod_{t=1}^T q(\mathbf{x}_t|\mathbf{x}_{t-1}) q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)
其中转移核为高斯条件分布:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(\mathbf{x}_t|\mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1-\beta_t}\mathbf{x}_{t-1}, \beta_t\mathbf{I}) q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
这里 { β t ∈ ( 0 , 1 ) } t = 1 T \{\beta_t \in (0,1)\}_{t=1}^T {βt∈(0,1)}t=1T 是预定义的方差调度系数。
累积加噪的重参数化技巧
为了更高效地采样中间状态,我们可以推导出从 x 0 \mathbf{x}_0 x0 直接得到任意时刻 x t \mathbf{x}_t xt 的闭式解。定义 α 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 = α t x t − 1 + 1 − α t ϵ t − 1 = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 \begin{align} \mathbf{x}_t &= \sqrt{\alpha_t}\mathbf{x}_{t-1} + \sqrt{1-\alpha_t}\boldsymbol{\epsilon}_{t-1} \\ &= \sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}\mathbf{x}_{t-2} + \sqrt{1-\alpha_{t-1}}\boldsymbol{\epsilon}_{t-2}) + \sqrt{1-\alpha_t}\boldsymbol{\epsilon}_{t-1} \\ &= \sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2} + \sqrt{\alpha_t(1-\alpha_{t-1})}\boldsymbol{\epsilon}_{t-2} + \sqrt{1-\alpha_t}\boldsymbol{\epsilon}_{t-1} \end{align} xt=αtxt−1+1−αtϵt−1=αt(αt−1xt−2+1−αt−1ϵt−2)+1−αtϵt−1=αtαt−1xt−2+αt(1−αt−1)ϵt−2+1−αtϵt−1
继续递归展开并整理,对独立同分布的噪声进行合并,可得:
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t}\mathbf{x}_0, (1-\bar{\alpha}_t)\mathbf{I}) q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
这就允许我们通过如下方式直接采样 x t \mathbf{x}_t xt:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon}, \quad \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) xt=αˉtx0+1−αˉtϵ,ϵ∼N(0,I)
这个重参数化技巧在训练中至关重要,它使我们能够从任意时间步直接采样,而不必顺序模拟整个马尔可夫链。
2. 逆向扩散过程的精确推导
在理想情况下,逆向过程也是一个马尔可夫链,从 p ( x T ) = N ( 0 , I ) p(\mathbf{x}_T) = \mathcal{N}(\mathbf{0}, \mathbf{I}) p(xT)=N(0,I) 开始,通过学习条件概率 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt−1∣xt) 逐步恢复 x 0 \mathbf{x}_0 x0。
让我们推导 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt−1∣xt,x0) 的精确形式。根据贝叶斯定理:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) = \frac{q(\mathbf{x}_t|\mathbf{x}_{t-1}, \mathbf{x}_0)q(\mathbf{x}_{t-1}|\mathbf{x}_0)}{q(\mathbf{x}_t|\mathbf{x}_0)} q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0)
由于是马尔可夫过程, q ( x t ∣ x t − 1 , x 0 ) = q ( x t ∣ x t − 1 ) q(\mathbf{x}_t|\mathbf{x}_{t-1}, \mathbf{x}_0) = q(\mathbf{x}_t|\mathbf{x}_{t-1}) q(xt∣xt−1,x0)=q(xt∣xt−1)。代入已知的高斯分布,并完成平方配方:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ t ( x t , x 0 ) , β ~ t I ) \begin{align} q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) &= \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t\mathbf{I}) \end{align} q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI)
其中:
μ ~ t ( x t , x 0 ) = α ˉ t − 1 β t 1 − α ˉ t x 0 + α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ t ) \begin{align} \tilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) &= \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}\mathbf{x}_0 + \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}\mathbf{x}_t \\ &= \frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}}\boldsymbol{\epsilon}_t\right) \end{align} μ~t(xt,x0)=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xt=αt1(xt−1−αˉt1−αtϵt)
且:
β ~ t = 1 − α ˉ t − 1 1 − α ˉ t β t \tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t β~t=1−αˉt1−αˉt−1βt
这个条件分布是精确的,但在实际情况中我们无法直接获得 x 0 \mathbf{x}_0 x0。因此,我们训练神经网络 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t) 来预测噪声 ϵ \boldsymbol{\epsilon} ϵ,从而间接估计 x 0 \mathbf{x}_0 x0:
x ^ 0 = 1 α ˉ t ( x t − 1 − α ˉ t ϵ θ ( x t , t ) ) \hat{\mathbf{x}}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t - \sqrt{1-\bar{\alpha}_t}\epsilon_\theta(\mathbf{x}_t, t)) x^0=αˉt1(xt−1−αˉtϵθ(xt,t))
将这个估计值代入 μ ~ t \tilde{\boldsymbol{\mu}}_t μ~t 的表达式,得到:
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) \boldsymbol{\mu}_\theta(\mathbf{x}_t, t) = \frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(\mathbf{x}_t, t)\right) μθ(xt,t)=αt1(xt−1−αˉtβtϵθ(xt,t))
3. 变分下界与损失函数
扩散模型的训练目标是最大化观测数据的对数似然。受变分推断启发,我们可以通过最大化证据下界(ELBO)来实现:
log p θ ( x 0 ) ≥ E q ( x 1 : T ∣ x 0 ) [ log p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] \log p_\theta(\mathbf{x}_0) \geq \mathbb{E}_{q(\mathbf{x}_{1:T}|\mathbf{x}_0)}\left[\log\frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T}|\mathbf{x}_0)}\right] logpθ(x0)≥Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)]
通过数学变形,ELBO可以分解为:
L = E q [ log p θ ( x 0 ∣ x 1 ) − D K L ( q ( x T ∣ x 0 ) ∣ ∣ p ( x T ) ) − ∑ t = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ] \begin{align} \mathcal{L} &= \mathbb{E}_q\left[\log p_\theta(\mathbf{x}_0|\mathbf{x}_1) - D_{KL}(q(\mathbf{x}_T|\mathbf{x}_0) || p(\mathbf{x}_T)) - \sum_{t=2}^T D_{KL}(q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0) || p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t))\right] \end{align} L=Eq[logpθ(x0∣x1)−DKL(q(xT∣x0)∣∣p(xT))−t=2∑TDKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))]
其中 D K L D_{KL} DKL 是KL散度。第一项是重构项,第二项是先验匹配项(当 T T T 足够大时接近0),第三项确保逆向过程接近真实的条件分布。
进一步,由于我们的模型形式,可以将上述目标简化为预测噪声的均方误差:
L simple = E t , x 0 , ϵ [ ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 ] \mathcal{L}_{\text{simple}} = \mathbb{E}_{t,\mathbf{x}_0,\boldsymbol{\epsilon}}\left[||\boldsymbol{\epsilon} - \epsilon_\theta(\mathbf{x}_t, t)||^2\right] Lsimple=Et,x0,ϵ[∣∣ϵ−ϵθ(xt,t)∣∣2]
这里 t t t 是均匀采样的时间步, ϵ \boldsymbol{\epsilon} ϵ 是标准高斯噪声。
4. 扩散模型的概率流ODE视角
扩散模型也可以从概率流常微分方程(ODE)的视角理解。当步数 T → ∞ T \rightarrow \infty T→∞ 时,离散马尔可夫链趋近于连续的扩散过程,由以下随机微分方程(SDE)描述:
d x = f ( x , t ) d t + g ( t ) d w d\mathbf{x} = \mathbf{f}(\mathbf{x}, t)dt + g(t)d\mathbf{w} dx=f(x,t)dt+g(t)dw
其中 f \mathbf{f} f 是漂移函数, g g g 是扩散系数, w \mathbf{w} w 是维纳过程。对应地,逆向过程满足:
d x = [ f ( x , t ) − g ( t ) 2 ∇ x log p t ( x ) ] d t + g ( t ) d w ˉ d\mathbf{x} = [\mathbf{f}(\mathbf{x}, t) - g(t)^2\nabla_\mathbf{x}\log p_t(\mathbf{x})]dt + g(t)d\bar{\mathbf{w}} dx=[f(x,t)−g(t)2∇xlogpt(x)]dt+g(t)dwˉ
其中 ∇ x log p t ( x ) \nabla_\mathbf{x}\log p_t(\mathbf{x}) ∇xlogpt(x) 是分数函数(score function)。在扩散模型中,我们实际上是在学习 s θ ( x , t ) ≈ ∇ x log p t ( x ) s_\theta(\mathbf{x}, t) \approx \nabla_\mathbf{x}\log p_t(\mathbf{x}) sθ(x,t)≈∇xlogpt(x)。
当将扩散过程视为连续流时,我们甚至可以使用数值微分方程求解器(如Runge-Kutta方法)来加速采样过程,这就是DDIM、DPM-solver等变种算法的理论基础。
三、高效采样策略的理论推导
1. DDIM: 确定性非马尔可夫采样
DDPM使用随机性采样,而DDIM提出了一种确定性变体,通过重新定义 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0) q(xt−1∣xt,x0):
x t − 1 = α ˉ t − 1 x ^ 0 + 1 − α ˉ t − 1 − σ t 2 ⋅ x t − α ˉ t x ^ 0 1 − α ˉ t + σ t ϵ \mathbf{x}_{t-1} = \sqrt{\bar{\alpha}_{t-1}}\hat{\mathbf{x}}_0 + \sqrt{1-\bar{\alpha}_{t-1} - \sigma_t^2}\cdot\frac{\mathbf{x}_t-\sqrt{\bar{\alpha}_t}\hat{\mathbf{x}}_0}{\sqrt{1-\bar{\alpha}_t}} + \sigma_t\boldsymbol{\epsilon} xt−1=αˉt−1x^0+1−αˉt−1−σt2⋅1−αˉtxt−αˉtx^0+σtϵ
当 σ t = 1 − α ˉ t − 1 1 − α ˉ t β t \sigma_t = \sqrt{\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t} σt=1−αˉt1−αˉt−1βt 时,恢复DDPM;当 σ t = 0 \sigma_t = 0 σt=0 时,得到确定性的DDIM,允许更大步长采样。
2. DPM-Solver: 通过高阶微分方程求解器加速采样
基于概率流ODE视角,我们可以构建高阶求解器。DPM-Solver引入了以下形式的ODE:
d x d λ = r θ ( x , λ ) \frac{d\mathbf{x}}{d\lambda} = \mathbf{r}_\theta(\mathbf{x}, \lambda) dλdx=rθ(x,λ)
其中 λ = − log α ˉ t \lambda = -\log\bar{\alpha}_t λ=−logαˉt, r θ \mathbf{r}_\theta rθ 是与分数函数相关的向量场。使用二阶或三阶方法,可以大幅减少采样步数:
二阶DPM-Solver更新公式:
x λ + h = x λ + h r θ ( x λ , λ ) + h 2 2 d r θ d λ ( x λ , λ ) ≈ x λ + h 2 [ r θ ( x λ , λ ) + r θ ( x ^ λ + h , λ + h ) ] \begin{align} \mathbf{x}_{\lambda+h} &= \mathbf{x}_\lambda + h\mathbf{r}_\theta(\mathbf{x}_\lambda, \lambda) + \frac{h^2}{2}\frac{d\mathbf{r}_\theta}{d\lambda}(\mathbf{x}_\lambda, \lambda) \\ &\approx \mathbf{x}_\lambda + \frac{h}{2}[\mathbf{r}_\theta(\mathbf{x}_\lambda, \lambda) + \mathbf{r}_\theta(\hat{\mathbf{x}}_{\lambda+h}, \lambda+h)] \end{align} xλ+h=xλ+hrθ(xλ,λ)+2h2dλdrθ(xλ,λ)≈xλ+2h[rθ(xλ,λ)+rθ(x^λ+h,λ+h)]
其中 x ^ λ + h = x λ + h r θ ( x λ , λ ) \hat{\mathbf{x}}_{\lambda+h} = \mathbf{x}_\lambda + h\mathbf{r}_\theta(\mathbf{x}_\lambda, \lambda) x^λ+h=xλ+hrθ(xλ,λ) 是一阶预测。
四、潜在扩散模型的理论基础
潜在扩散模型(LDM)在低维潜在空间中应用扩散过程,大幅降低计算成本。我们可以将其形式化为:
x = D ( z ) , z = E ( x ) \mathbf{x} = \mathcal{D}(\mathbf{z}), \quad \mathbf{z} = \mathcal{E}(\mathbf{x}) x=D(z),z=E(x)
其中 E \mathcal{E} E 是编码器, D \mathcal{D} D 是解码器, z \mathbf{z} z 是潜在表示。在潜在空间应用扩散过程:
q ( z t ∣ z 0 ) = N ( z t ; α ˉ t z 0 , ( 1 − α ˉ t ) I ) q(\mathbf{z}_t|\mathbf{z}_0) = \mathcal{N}(\mathbf{z}_t; \sqrt{\bar{\alpha}_t}\mathbf{z}_0, (1-\bar{\alpha}_t)\mathbf{I}) q(zt∣z0)=N(zt;αˉtz0,(1−αˉt)I)
LDM的优势在于潜在空间通常比像素空间低维得多(如4倍下采样会减少16倍计算量),同时保留了图像的语义信息。
五、条件生成的数学形式化
条件扩散模型在给定条件 c \mathbf{c} c 下生成样本。我们可以修改去噪网络:
ϵ θ ( x t , t , c ) \epsilon_\theta(\mathbf{x}_t, t, \mathbf{c}) ϵθ(xt,t,c)
条件可以是文本、类别、图像等。对于文本条件,通常使用交叉注意力机制:
Attention ( Q , K , V ) = softmax ( Q K T d ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V Attention(Q,K,V)=softmax(dQKT)V
其中 Q Q Q 来自UNet特征, K K K 和 V V V 来自文本编码。对于类别条件,可以使用类别嵌入或条件批归一化层:
γ c ( h ) + β c \gamma_c(\mathbf{h}) + \beta_c γc(h)+βc
其中 γ c \gamma_c γc 和 β c \beta_c βc 是依赖于条件 c c c 的缩放和偏移参数。
六、扩散模型的应用及实现
1. 代码实现示例(PyTorch)
import torch
import torch.nn as nn
import torch.optim as optim
# 定义简化版UNet网络结构
class SimpleUNet(nn.Module):
def __init__(self, in_channels=1, out_channels=1, time_emb_dim=32):
super().__init__()
# 时间步编码
self.time_mlp = nn.Sequential(
nn.Linear(1, time_emb_dim),
nn.SiLU(),
nn.Linear(time_emb_dim, time_emb_dim)
)
# 下采样路径
self.conv1 = nn.Conv2d(in_channels, 64, kernel_size=3, padding=1)
self.down1 = nn.Conv2d(64, 128, kernel_size=4, stride=2, padding=1)
self.conv2 = nn.Conv2d(128, 128, kernel_size=3, padding=1)
# 时间步条件
self.time_emb_mid = nn.Linear(time_emb_dim, 128)
# 上采样路径
self.up1 = nn.ConvTranspose2d(128, 64, kernel_size=4, stride=2, padding=1)
self.conv3 = nn.Conv2d(64 + 64, 64, kernel_size=3, padding=1) # 跳跃连接
self.conv_out = nn.Conv2d(64, out_channels, kernel_size=3, padding=1)
self.act = nn.SiLU()
def forward(self, x, t):
# 时间编码
t_emb = self.time_mlp(t.view(-1, 1).float())
# 下采样
h1 = self.act(self.conv1(x))
h2 = self.act(self.down1(h1))
h2 = self.act(self.conv2(h2))
# 添加时间信息
h2 = h2 + self.time_emb_mid(t_emb).view(-1, 128, 1, 1)
# 上采样(含跳跃连接)
h = self.act(self.up1(h2))
h = torch.cat([h, h1], dim=1) # 跳跃连接
h = self.act(self.conv3(h))
return self.conv_out(h)
# 正向扩散过程
def forward_diffusion(x0, t, beta_schedule):
"""
x0: 原始图像 [B,C,H,W]
t: 时间步 [B]
beta_schedule: 噪声调度 [T]
"""
batch_size = x0.shape[0]
sqrt_alpha_bar = torch.sqrt(1. - beta_schedule).cumprod(dim=0)[t]
sqrt_one_minus_alpha_bar = torch.sqrt(1. - sqrt_alpha_bar ** 2)
# 重参数化
epsilon = torch.randn_like(x0)
x_t = sqrt_alpha_bar.view(-1, 1, 1, 1) * x0 + sqrt_one_minus_alpha_bar.view(-1, 1, 1, 1) * epsilon
return x_t, epsilon
# 逆向过程采样
@torch.no_grad()
def reverse_diffusion(model, x_T, beta_schedule, timesteps=1000):
device = x_T.device
batch_size = x_T.shape[0]
# 初始化为纯噪声
x_t = x_T
for time_step in reversed(range(timesteps)):
t = torch.full((batch_size,), time_step, device=device, dtype=torch.long)
beta_t = beta_schedule[time_step]
alpha_t = 1. - beta_t
alpha_bar_t = torch.prod(1. - beta_schedule[:time_step+1])
# 预测噪声
predicted_noise = model(x_t, t)
# 无噪声分量
if time_step > 0:
noise = torch.randn_like(x_t)
else:
noise = 0
# 逆向更新方程
x_t = 1 / torch.sqrt(alpha_t) * (
x_t - beta_t / torch.sqrt(1 - alpha_bar_t) * predicted_noise
) + torch.sqrt(beta_t) * noise
return x_t
2. 训练和采样流程
训练流程:
- 采样时间步 t ∼ Uniform ( 1 , T ) t \sim \text{Uniform}(1, T) t∼Uniform(1,T)
- 从数据中采样 x 0 ∼ q ( x 0 ) \mathbf{x}_0 \sim q(\mathbf{x}_0) x0∼q(x0)
- 采样噪声 ϵ ∼ N ( 0 , I ) \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) ϵ∼N(0,I)
- 计算 x t = α ˉ t x 0 + 1 − α ˉ t ϵ \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon} xt=αˉtx0+1−αˉtϵ
- 计算损失 L = ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 \mathcal{L} = ||\boldsymbol{\epsilon} - \epsilon_\theta(\mathbf{x}_t, t)||^2 L=∣∣ϵ−ϵθ(xt,t)∣∣2
- 更新模型参数
采样流程:
- 采样 x T ∼ N ( 0 , I ) \mathbf{x}_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) xT∼N(0,I)
- 对
t
=
T
,
…
,
1
t = T, \ldots, 1
t=T,…,1 逐步迭代:
- 预测噪声 ϵ ^ = ϵ θ ( x t , t ) \hat{\boldsymbol{\epsilon}} = \epsilon_\theta(\mathbf{x}_t, t) ϵ^=ϵθ(xt,t)
- 计算 x t − 1 \mathbf{x}_{t-1} xt−1 使用逆向更新方程
- 返回 x 0 \mathbf{x}_0 x0
七、扩散模型与其他生成模型的理论对比
从统计角度比较扩散模型与GAN、VAE的主要理论差异:
特性 | 扩散模型 | GAN | VAE |
---|---|---|---|
训练目标 | 最大化似然下界 | 极小极大博弈 | 变分下界最大化 |
采样机制 | 逐步去噪 | 一次前向传递 | 一次解码 |
数学基础 | 马尔可夫链/SDE | 博弈论 | 变分推断 |
训练稳定性 | 高(MSE目标) | 低(微分博弈) | 中(重建+KL) |
密度估计 | 显式 | 隐式 | 显式 |
生成多样性 | 高 | 取决于训练 | 受限于编码器容量 |
计算复杂度 | 高(多步迭代) | 低(单步生成) | 低(单步生成) |
八、扩散模型的理论限制与未来方向
1. 当前理论局限
- 采样效率:必须逐步迭代,无法一次生成
- 离散数据建模:连续近似不适合离散结构
- 长程一致性:难以保证生成内容的全局一致性
- 计算需求:模型通常较大,需大量计算资源
2. 前沿研究方向
- 一致性模型:将去噪视为一步过程,极大提高采样效率
- 修正流:结合规范化流的思想,提高生成质量与效率
- 结构化预测:在特定领域引入结构化先验知识
- 半监督与自监督学习:减少对大量标注数据的依赖
- 多模态扩散:统一不同模态(文本、图像、音频等)的生成框架