DDPM
Denoising Diffusion Probabilistic Model 去噪扩散概率模型
DDPM 通过模拟一个逐步加噪的前向扩散过程和一个逐步去噪的反向生成过程,使用神经网络学习噪声预测,从而生成高质量样本。 由 Jonathan Ho 等人于 2020 年提出,是扩散模型领域的奠基性工作。
核心思想:噪声与去噪的循环
DDPM 的核心思想可以概括为两个过程:
- 前向扩散过程 (Forward Diffusion Process):固定的马尔可夫链,在每个时间步
向数据 中添加少量高斯噪声,经过 步后原始数据 完全变为纯高斯噪声 - 反向去噪过程 (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̂₀ 生成数据"]前向扩散过程
前向扩散是一个固定的马尔可夫链,在每个时间步
其中
关键性质——任意步采样:利用
等价于重参数化形式:
重参数化技巧
这个性质使得训练时无需逐步执行前向过程,可以直接对任意时间步
反向去噪过程
反向过程也是一个马尔可夫链,其转移概率需要学习:
DDPM 的关键洞察:当
训练目标
DDPM 的训练目标是最小化预测噪声与真实噪声之间的均方误差:
其中
简洁的损失函数
这个目标函数从变分下界 (VLB) 推导而来,但形式极其简洁——本质上就是一个去噪自编码器的训练目标。正是这种简洁性使得 DDPM 的训练非常稳定。
采样算法
text
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 中的噪声预测网络
| 组件 | 功能 |
|---|---|
| 编码器(下采样路径) | 通过 CNN 卷积 + 下采样逐步提取多尺度特征 |
| 解码器(上采样路径) | 通过转置卷积逐步恢复空间分辨率 |
| 跳跃连接 (Skip Connection) | 将编码器特征直接传递给对应层级的解码器 |
| 时间步嵌入 | 将时间步 |
| 自注意力层 | 在低分辨率特征图上捕捉全局依赖关系 |
PyTorch 训练示例
python
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 提出,信噪比更平滑 |
优缺点分析
| 优点 | 缺点 |
|---|---|
| 生成质量高,样本逼真 | 采样速度慢(需迭代 |
| 训练稳定,损失函数简单 | 单次采样需数秒至数分钟 |
| 模式覆盖好,不易出现模式崩溃 | 计算资源需求大 |
| 理论基础扎实(变分推断) | 隐空间缺乏可解释结构(对比 VAE) |
后续发展
| 模型 | 改进方向 | 关键贡献 |
|---|---|---|
| Improved DDPM | 方差学习 + 余弦调度 | 更少步数达到同等质量 |
| DDIM | 非马尔可夫采样 | 采样步数可降至 10-50 步 |
| Score SDE | 统一分数匹配与扩散模型 | 连续时间扩散框架 |
| Latent Diffusion (LDM) | 在潜空间而非像素空间扩散 | 大幅降低计算成本,Stable Diffusion 基础 |
| Classifier-Free Guidance | 无分类器引导 | 提升条件生成质量 |
| DiT | 用 Transformer 替代 U-Net | 更好的可扩展性 |