Denoising Diffusion Probabilistic Model 去噪扩散概率模型

DDPM 通过模拟一个逐步加噪的前向扩散过程和一个逐步去噪的反向生成过程,使用神经网络学习噪声预测,从而生成高质量样本。 由 Jonathan Ho 等人于 2020 年提出,是扩散模型领域的奠基性工作。

核心思想:噪声与去噪的循环

DDPM 的核心思想可以概括为两个过程:

  1. 前向扩散过程 (Forward Diffusion Process):固定的马尔可夫链,在每个时间步 向数据 中添加少量高斯噪声,经过 步后原始数据 完全变为纯高斯噪声
  2. 反向去噪过程 (Reverse Denoising Process):训练一个神经网络预测并移除每个时间步添加的噪声,从纯高斯噪声 逐步恢复出原始数据
graph LR
    A["x₀ 原始数据"] -->|"q(xₜ|xₜ₋₁) 加噪"| B["x₁"]
    B -->|"..."| C["xₜ"]
    C -->|"..."| D["x_T ~ N(0,I)"]
    D -->|"pθ(xₜ₋₁|xₜ) 去噪"| E["x_{T-1}"]
    E -->|"..."| F["x̂₀ 生成数据"]

前向扩散过程

前向扩散是一个固定的马尔可夫链,在每个时间步 根据预设的方差调度 添加噪声:

其中 是噪声调度参数,通常随 线性或余弦递增。经过 步后(通常 ), 近似于标准正态分布。

关键性质——任意步采样:利用 和 ,可以直接从 采样得到任意时间步的 :

等价于重参数化形式:

重参数化技巧

这个性质使得训练时无需逐步执行前向过程,可以直接对任意时间步 进行采样,大幅提高了训练效率。同样的技巧在 VAE 中也被使用。

反向去噪过程

反向过程也是一个马尔可夫链,其转移概率需要学习:

DDPM 的关键洞察:当 足够小时,反向过程的均值 可以通过预测噪声 来参数化:

训练目标

DDPM 的训练目标是最小化预测噪声与真实噪声之间的均方误差:

其中 ,,。

简洁的损失函数

这个目标函数从变分下界 (VLB) 推导而来,但形式极其简洁——本质上就是一个去噪自编码器的训练目标。正是这种简洁性使得 DDPM 的训练非常稳定。

采样算法

Algorithm: DDPM Sampling
Input: 训练好的噪声预测网络 ε_θ
Output: 生成样本 x_0
 
1. x_T ~ N(0, I)
2. for t = T, T-1, ..., 1:
     z ~ N(0, I) if t > 1, else z = 0
     x_{t-1} = (1/√α_t)(x_t - β_t/√(1-ᾱ_t) · ε_θ(x_t, t)) + σ_t · z
3. return x_0

数学形式:

其中 (或 ,)。

U-Net 架构

DDPM 中的噪声预测网络 采用 U-Net 架构,包含以下关键组件:

组件功能
编码器(下采样路径)通过 CNN 卷积 + 下采样逐步提取多尺度特征
解码器(上采样路径)通过转置卷积逐步恢复空间分辨率
跳跃连接 (Skip Connection)将编码器特征直接传递给对应层级的解码器
时间步嵌入将时间步 通过正弦位置编码 + MLP 注入网络各层
自注意力层在低分辨率特征图上捕捉全局依赖关系

PyTorch 训练示例

import torch
import torch.nn as nn
 
def ddpm_train_step(model, x_0, T=1000, beta_min=1e-4, beta_max=0.02):
    """DDPM 单步训练"""
    betas = torch.linspace(beta_min, beta_max, T)
    alphas = 1.0 - betas
    alpha_bars = torch.cumprod(alphas, dim=0)
 
    # 随机采样时间步
    t = torch.randint(0, T, (x_0.shape[0],))
    alpha_bar_t = alpha_bars[t].view(-1, 1, 1, 1)
 
    # 前向加噪(重参数化)
    epsilon = torch.randn_like(x_0)
    x_t = torch.sqrt(alpha_bar_t) * x_0 + torch.sqrt(1 - alpha_bar_t) * epsilon
 
    # 预测噪声
    epsilon_pred = model(x_t, t)
 
    # 计算损失
    loss = nn.functional.mse_loss(epsilon_pred, epsilon)
    return loss

噪声调度策略

调度方式公式特点
线性 (Linear) 从 线性增长到 DDPM 原始方案,简单直接
余弦 (Cosine), Improved DDPM 提出,信噪比更平滑

优缺点分析

优点缺点
生成质量高,样本逼真采样速度慢(需迭代 步,通常 1000 步)
训练稳定,损失函数简单单次采样需数秒至数分钟
模式覆盖好,不易出现模式崩溃计算资源需求大
理论基础扎实(变分推断)隐空间缺乏可解释结构(对比 VAE)

后续发展

模型改进方向关键贡献
Improved DDPM方差学习 + 余弦调度更少步数达到同等质量
DDIM非马尔可夫采样采样步数可降至 10-50 步
Score SDE统一分数匹配与扩散模型连续时间扩散框架
Latent Diffusion (LDM)在潜空间而非像素空间扩散大幅降低计算成本,Stable Diffusion 基础
Classifier-Free Guidance无分类器引导提升条件生成质量
DiT用 Transformer 替代 U-Net更好的可扩展性

扩散模型 | 深度学习 | GAN | VAE