Appearance
第3章 扩散模型
Chapter 3: Diffusion Models
扩散(diffusion /dɪˈfjuːʒən/)模型 (Diffusion Models) 是一类受非平衡热力学启发的生成模型。它们通过逐步向数据添加噪声(前向过程),然后学习逐步去噪(反向过程)来生成数据。DDPM 奠定了扩散模型的理论基础,DDIM 实现了加速采样,而潜在(latent /ˈleɪtənt/)扩散模型 (LDM) 让扩散模型在图像生成领域大放异彩——Stable Diffusion 正是其代表。
时间线:
- 2015: Sohl-Dickstein et al. 首次提出扩散模型
- 2020: Ho, Jain & Abbeel 提出 DDPM
- 2021: Song, Meng & Ermon 提出 DDIM
- 2022: Rombach et al. 提出 Stable Diffusion
Diffusion Models are a class of generative models inspired by non-equilibrium thermodynamics. They generate data by progressively adding noise to data (forward process) and then learning to denoise step by step (reverse process). DDPM laid the theoretical foundation, DDIM achieved accelerated sampling, and Latent Diffusion Models (LDM) brought diffusion models to the forefront of image generation — with Stable Diffusion as their flagship.
前置知识 (Prerequisites): 概率论(高斯分布、条件概率、KL 散度)、变分(variational /ˌveəriˈeɪʃənl/)推断、VAE、PyTorch 基础 依赖库 (Dependencies): torch>=2.0.0, numpy>=1.21.0, matplotlib>=3.4.0Code companion: code/diffusion_demo.py
目录 (Table of Contents)
1. 前向扩散过程 (Forward Diffusion Process)
1.1 定义 (Definition)
前向过程是一个马尔可夫链 (Markov chain),逐步向数据
其中每一步的转移核(kernel /ˈkɜːrnl/)为:
参数(parameter /pəˈræmɪtər/):
: 每步的噪声调度 (noise schedule),通常 很小( ), 较大( ),即线性增长或余弦调度 - 当
足够大且 足够小时,
ascii
Forward Diffusion: x₀ ──→ x₁ ──→ x₂ ──→ ... ──→ x_T
q(x₁|x₀) q(x₂|x₁) q(x_T|x_{T-1})
x₀ (data) x_{t/2} (partially noised) x_T (pure noise)
████ ██░░ ░░░░
████ → ██░░ → ░░░░
████ ██░░ ░░░░1.2 重参数化技巧 (Reparameterization Trick)
利用高斯分布的性质,我们可以直接从
则:
推导:
其中合并两个高斯噪声利用了独立高斯分布的可加性:
核心性质: 当
1.3 后验条件概率 (Posterior Conditional)
在给定
其中:
推导概要:
合并
2. 反向去噪过程 (Reverse Denosing Process)
2.1 定义 (Definition)
反向过程同样是马尔可夫链,从
其中每一步的转移核由神经网络参数化:
2.2 为什么反向过程也是高斯分布?
DDPM 论文的核心洞察:当
虽然
ascii
Reverse Denoising: x_T ──→ x_{T-1} ──→ ... ──→ x_0
p_θ(x_{T-1}|x_T) p_θ(x_0|x_1)
x_T (pure noise) x_{t/2} (partially denoised) x₀ (generated)
░░░░ ░░█░ ████
░░░░ → ░██░ → ████
░░░░ ░░██ ████2.3 参数化选择
DDPM 做出了两个关键的设计选择:
1. 固定方差 (Fixed Variance):
2. 预测噪声 (Predict Noise): 不直接预测
采样算法:
Algorithm: DDPM Sampling
──────────────────────────────────────────
1: x_T ~ N(0, I)
2: for t = T, T-1, ..., 1 do
3: z ~ N(0, I) (if t > 1, else z = 0)
4: ε_pred = ε_θ(x_t, t)
5: x_{t-1} = 1/√α_t · (x_t - β_t/√(1-ᾱ_t) · ε_pred) + σ_t · z
6: end for
7: return x_03. DDPM 推导 (DDPM Derivation) ⭐
3.1 优化目标 (Variational Lower Bound)
DDPM 的训练目标是最大化数据的对数似然,通过 变分下界 (ELBO):
展开 ELBO:
3.2 简化损失函数 (Simplified Loss)
所有
代入
最终简化损失 (Simplified Loss): DDPM 发现去掉权重系数后训练更稳定:
3.3 训练算法 (Training Algorithm)
Algorithm: DDPM Training
──────────────────────────────────────────
1: repeat
2: x_0 ~ q(x_0) // sample data
3: t ~ Uniform({1, 2, ..., T}) // random timestep
4: ε ~ N(0, I) // random noise
5: x_t = √ᾱ_t · x_0 + √(1-ᾱ_t) · ε // forward diffusion
6: Take gradient step on:
7: ∇_θ ||ε - ε_θ(x_t, t)||² // predict noise
8: until converged关键洞察: DDPM 的训练极其简洁——随机(stochastic /stəˈkæstɪk/)采样一个时间步,对数据加噪,然后让网络预测所加的噪声。
3.4 网络架构 (Network Architecture)
Input: x_t (e.g., 32×32×3 image at timestep t)
│
[Conv 3×3]
│
┌────── Down Block 1 ──────┐
│ │ │
│ Down Block 2 ──── Skip Connection ────┐
│ │ │
│ Down Block 3 ──── Skip Connection ────┤
│ │ │
│ Bottleneck │
│ │ │
│ Up Block 3 ←─── Skip Connection ────┤
│ │ │
│ Up Block 2 ←─── Skip Connection ────┘
│ │
└────── Up Block 1 ──────┘
│
[Conv 3×3]
│
Output: ε_pred时间步编码 (Timestep Embedding(/ɪmˈbedɪŋ/)): 使用正弦位置编码 (sinusoidal positional encoding) 将
其中
4. DDIM: 确定性加速采样 (Deterministic Accelerated Sampling)
4.1 动机 (Motivation)
DDPM 的一个主要缺点:采样速度慢。生成一张图像需要 1000 次神经网络前向传播。
DDIM (Denoising Diffusion Implicit Models, Song et al., 2021) 提出了非马尔可夫 (non-Markovian) 的扩散过程,使得可以使用更少的步骤(10-50 步)生成高质量样本。
4.2 核心思想 (Core Idea)
DDIM 的采样过程是确定性 (Deterministic) 的:
与 DDPM 的对比:
| 特性 | DDPM | DDIM |
|---|---|---|
| 采样过程 | 随机(需添加噪声 | 确定性(无额外噪声) |
| 马尔可夫性 | 是 | 否 |
| 采样步数 | 1000 步 | 10-50 步 |
| 图像质量 | 高 | 接近 DDPM |
| 一致性 | 无,每次采样不同 | 确定性,给定 |
| 插值能力 | 弱 | 可在潜在空间插值 |
4.3 DDIM 的通用形式
DDIM 和 DDPM 可以统一为:
其中:
: DDIM(确定性采样) : DDPM(随机采样) : 部分随机,折中方案
ascii
DDPM Sampling (stochastic, 1000 steps):
x_T → x_{T-1} → ... → x_0
│ε │ε+z │
random path, each run different
DDIM Sampling (deterministic, 50 steps):
x_T ──→ x_{T-2} ──→ ... ──→ x_0
skip steps, same x_T → same x_04.4 加速采样子序列 (Accelerated Subsequence)
DDIM 可以在一个子序列
Example: T = 1000, S = 50
Skip strategy: τ_i = ⌊T · (i/S)^p⌋ where p > 1 (more steps at early stage)
Or uniform: τ_i = i · (T/S)关键点: DDIM 使用与 DDPM 完全相同的训练过程,只是采样不同。因此,一个预训练的 DDPM 模型可以直接用 DDIM 采样。
5. 潜在扩散模型 (Latent Diffusion Models)
5.1 动机 (Motivation)
直接在像素空间运行扩散模型有两大问题:
- 计算成本高 — 高分辨率图像(
)的扩散过程极其昂贵 - 冗余 — 像素空间包含大量感知上不重要的细节
LDM (Latent Diffusion Models, Rombach et al., 2022) 将扩散过程从像素空间转移到潜在空间 (Latent Space)。
5.2 架构 (Architecture)
┌─────────────────────────────────────────────────────┐
│ LDM Architecture │
│ │
│ ┌──────────┐ ┌──────────────────┐ ┌──────────┐│
│ │ │ │ │ │ ││
│ │ Image │───→│ VAE Encoder E │───→│ Latent ││
│ │ x ∈ R^HWC│ │ │ │ z ∈ R^hwc││
│ │ │ │ (downsample) │ │ ││
│ └──────────┘ └──────────────────┘ └──────────┘│
│ │ │
│ Diffusion in │
│ Latent Space │
│ │ │
│ ┌──────────┐ ┌──────────────────┐ ┌──────────┐│
│ │ │ │ │ │ ││
│ │ Image │←───│ VAE Decoder D │←───│ Denoised ││
│ │ x̂ ∈ R^HWC│ │ (upsample) │ │ ẑ ││
│ │ │ │ │ │ ││
│ └──────────┘ └──────────────────┘ └──────────┘│
└─────────────────────────────────────────────────────┘关键优势:
| 指标 | 像素空间扩散 | 潜在空间扩散 |
|---|---|---|
| 空间维度 | ||
| 扩散步数 | 1000 | 1000(但每步计算量小得多) |
| 训练收敛速度 | 慢 | 快 3-5 倍 |
| 高质量生成 | 困难(资源需求高) | 可行(Stable Diffusion 等) |
5.3 条件生成 (Conditional Generation)
LDM 通过交叉注意力(attention /əˈtenʃən/) (Cross-Attention) 注入条件信息(文本、类别、语义图等):
其中
Condition Injection via Cross-Attention:
z_t (latent) ──→ φ(z_t) ──→ Q ──┐
├──→ Attention → Output
c (text) ──→ τ_θ(c) ──→ K,V ────┘
"A cute cat sitting on a chair"
↓ CLIP Text Encoder
[0.23, 0.87, ..., 0.12] ← text embedding5.4 Stable Diffusion
Stable Diffusion 是基于 LDM 的著名开源图像生成模型:
| 配置 | 数值 |
|---|---|
| 参数量 | ~860M U-Net + ~1.2B 总参数量 |
| 潜在空间 | |
| 条件编码 | CLIP ViT-L/14 text encoder |
| 训练数据 | LAION-5B (5 billion image-text pairs) |
| 训练成本 | ~150,000 GPU hours (A100) |
SDXL (Stable Diffusion XL) 进一步改进:
- 更大的 U-Net(~2.6B 参数)
- 双文本编码器(CLIP + OpenCLIP)
- 尺寸条件化(支持不同宽高比)
- Refiner 模型(级联去噪)
5.5 其他重要变体 (Other Important Variants)
| 模型 | 特点 | 发表时间 |
|---|---|---|
| DALL·E 2 | 扩散先验 + 解码器(decoder /diːˈkoʊdər/),文本→图像 | 2022 |
| Imagen | 级联扩散,文本条件使用 T5-XXL | 2022 |
| ControlNet | 在预训练扩散中添加空间控制条件 | 2023 |
| Sora | 扩散 Transformer(/trænsˈfɔːrmər/) (DiT),视频生成 | 2024 |
| Flux | 整流流 (Rectified Flow),改进的训练和采样 | 2024 |
6. 代码实战: 2D 扩散模型 (Code in Action)
详见配套代码文件 code/diffusion_demo.py,该代码展示了:
- 前向扩散可视化 — 在 Swiss Roll 2D 数据上一步步添加噪声,展示
- 训练简单扩散模型 — 一个 MLP 作为
- 反向采样 — 从纯噪声中逐步去噪,生成符合原始数据分布的样本
- 结果展示 — 打印损失曲线,可视化生成结果
Expected output:
═══════════════════════════════════════════════
1. Forward Diffusion Visualization
═══════════════════════════════════════════════
t=0 (original) t=100 t=500 t=1000 (noise)
╭──────────╮ ╭──────────╮ ╭──────────╮ ╭──────────╮
│ ╭╮ │ │ ╭╮ │ │ ░░ │ │ ░░░░ │
│ ╭╯╰╮ │ │ ╭╯░░ │ │ ░░░░ │ │ ░░░░░░ │
│ ╰╮╭╯ │ │ ╰░░╯ │ │ ░░░░ │ │ ░░░░░░ │
│ ╰╯ │ │ ░░ │ │ ░░ │ │ ░░░░ │
╰──────────╯ ╰──────────╯ ╰──────────╯ ╰──────────╯
t=0 (original) t=100 t=500 t=1000
═══════════════════════════════════════════════
2. Training Noise Prediction Network
═══════════════════════════════════════════════
Epoch 1 | Loss: 0.2345
Epoch 2 | Loss: 0.1234
...
Epoch 50| Loss: 0.0234
═══════════════════════════════════════════════
3. Reverse Sampling (Generating New Data)
═══════════════════════════════════════════════
Generated samples match Swiss Roll distribution ✓运行方式 (Usage):
bash
python code/diffusion_demo.py小结 (Summary)
前向扩散 — 马尔可夫链逐步加噪,
,可重参数化为 。 反向去噪 — 学习预测噪声
, ,通过 间接生成数据。 DDPM 核心公式 —
,极其简洁的训练目标。 DDIM — 确定性采样,10-50 步生成高质量图像,与 DDPM 共享训练权重。
潜在扩散模型 (LDM) — 在 VAE 的潜在空间中进行扩散,大幅降低计算成本。Stable Diffusion 是其最成功的应用。
对比总结 (Comparison Summary)
| 方法 | 采样步数 | 训练复杂度 | 采样确定性 | 生成质量 |
|---|---|---|---|---|
| DDPM | 1000 步 | 低(预测噪声) | 随机 | ★★★★★ |
| DDIM | 10-50 步 | 同 DDPM | 确定 | ★★★★☆ |
| LDM | 20-50 步 | 中(+ VAE 训练) | 可调 | ★★★★★ |
| Flow Matching | 10-50 步 | 中 | 确定 | ★★★★★ |
进一步阅读 (Further Reading):
- Ho et al. (2020). "Denoising Diffusion Probabilistic Models." — DDPM 原始论文
- Song et al. (2021). "Denoising Diffusion Implicit Models." — DDIM 论文
- Song & Ermon (2019). "Generative Modeling by Estimating Gradients of the Data Distribution." — Score Matching
- Song et al. (2021). "Score-Based Generative Modeling through Stochastic Differential Equations." — SDE 统一框架
- Rombach et al. (2022). "High-Resolution Image Synthesis with Latent Diffusion Models." — LDM / Stable Diffusion 论文
- Peebles & Xie (2023). "Scalable Diffusion Models with Transformers." — DiT (Diffusion Transformer)
- Lipman et al. (2023). "Flow Matching for Generative Modeling." — Flow Matching
参考文献 (References)
- Ho, J., Jain, A. & Abbeel, P. (2020). Denoising diffusion probabilistic models. NeurIPS.
- Song, J., Meng, C. & Ermon, S. (2021). Denoising diffusion implicit models. ICLR.
- Rombach, R. et al. (2022). High-resolution image synthesis with latent diffusion models. CVPR.