扩散模型(Diffusion Models)详解

扩散模型(Diffusion Models)详解

扩散模型(Diffusion Models)在近几年成为了生成对抗网络(GAN)之外的又一重要生成模型方向。其核心理念可概括为:「先把一张清晰的图像逐渐加噪,最终变成纯随机噪声;然后训练神经网络逆向地一步步清除噪声,还原到清晰的原图」。本文将结合严谨的数学推导,深入解析扩散模型的运作原理与实现流程。

一、扩散过程的物理与数学解释

扩散过程在物理学中描述的是粒子从高浓度区域向低浓度区域移动的现象,遵循熵增原理。在概率模型中,我们将扩散过程形式化为:从数据分布逐步转变为简单的先验分布(如标准高斯分布)

在扩散模型中,我们定义两个过程:

  1. 正向扩散:将数据分布逐步转换为噪声分布
  2. 逆向扩散:从噪声分布逆向还原数据分布

二、数学原理的严格推导

1. 正向扩散(Forward Diffusion)

设数据点 x 0 ∼ q ( x 0 ) \mathbf{x}_0 \sim q(\mathbf{x}_0) x0q(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:Tx0)=t=1Tq(xtxt1)

其中转移核为高斯条件分布:

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(xtxt1)=N(xt;1βt xt1,β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=αt xt1+1αt ϵt1=αt (αt1 xt2+1αt1 ϵt2)+1αt ϵt1=αtαt1 xt2+αt(1αt1) ϵt2+1αt ϵt1

继续递归展开并整理,对独立同分布的噪声进行合并,可得:

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(xtx0)=N(xt;αˉt x0,(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=αˉt x0+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θ(xt1xt) 逐步恢复 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(xt1xt,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(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)

由于是马尔可夫过程, 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(xtxt1,x0)=q(xtxt1)。代入已知的高斯分布,并完成平方配方:

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(xt1xt,x0)=N(xt1;μ~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αˉt1 βtx0+1αˉtαt (1αˉt1)xt=αt 1(xt1αˉt 1α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αˉt1β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=αˉt 1(xt1αˉ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)=αt 1(xt1αˉ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:Tx0)[logq(x1:Tx0)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θ(x0x1)DKL(q(xTx0)∣∣p(xT))t=2TDKL(q(xt1xt,x0)∣∣pθ(xt1xt))]

其中 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)2xlogpt(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(xt1xt,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} xt1=αˉt1 x^0+1αˉt1σt2 1αˉt xtαˉt x^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αˉt1β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(ztz0)=N(zt;αˉt z0,(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(d QKT)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. 训练和采样流程

训练流程:

  1. 采样时间步 t ∼ Uniform ( 1 , T ) t \sim \text{Uniform}(1, T) tUniform(1,T)
  2. 从数据中采样 x 0 ∼ q ( x 0 ) \mathbf{x}_0 \sim q(\mathbf{x}_0) x0q(x0)
  3. 采样噪声 ϵ ∼ N ( 0 , I ) \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) ϵN(0,I)
  4. 计算 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=αˉt x0+1αˉt ϵ
  5. 计算损失 L = ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 \mathcal{L} = ||\boldsymbol{\epsilon} - \epsilon_\theta(\mathbf{x}_t, t)||^2 L=∣∣ϵϵθ(xt,t)2
  6. 更新模型参数

采样流程:

  1. 采样 x T ∼ N ( 0 , I ) \mathbf{x}_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) xTN(0,I)
  2. 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} xt1 使用逆向更新方程
  3. 返回 x 0 \mathbf{x}_0 x0

七、扩散模型与其他生成模型的理论对比

从统计角度比较扩散模型与GAN、VAE的主要理论差异:

特性扩散模型GANVAE
训练目标最大化似然下界极小极大博弈变分下界最大化
采样机制逐步去噪一次前向传递一次解码
数学基础马尔可夫链/SDE博弈论变分推断
训练稳定性高(MSE目标)低(微分博弈)中(重建+KL)
密度估计显式隐式显式
生成多样性取决于训练受限于编码器容量
计算复杂度高(多步迭代)低(单步生成)低(单步生成)

八、扩散模型的理论限制与未来方向

1. 当前理论局限

  • 采样效率:必须逐步迭代,无法一次生成
  • 离散数据建模:连续近似不适合离散结构
  • 长程一致性:难以保证生成内容的全局一致性
  • 计算需求:模型通常较大,需大量计算资源

2. 前沿研究方向

  • 一致性模型:将去噪视为一步过程,极大提高采样效率
  • 修正流:结合规范化流的思想,提高生成质量与效率
  • 结构化预测:在特定领域引入结构化先验知识
  • 半监督与自监督学习:减少对大量标注数据的依赖
  • 多模态扩散:统一不同模态(文本、图像、音频等)的生成框架
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DuHz

喜欢就支持一下 ~ 谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值