01 - 扩散模型概述¶
⚠️ 时效性说明:本章涉及前沿模型/价格/榜单等信息,可能随版本快速变化;请以论文原文、官方发布页和 API 文档为准。
学习时间: 2小时 重要性: ⭐⭐⭐⭐⭐ 建立整体框架,理解核心思想
🎯 学习目标¶
完成本章后,你将能够: - 理解扩散模型的核心思想(前向加噪 + 反向去噪) - 区分扩散模型与其他生成模型(GAN、VAE) - 了解扩散模型的主要应用场景 - 建立学习扩散模型的整体框架
1. 什么是扩散模型?¶
1.1 一句话定义¶
扩散模型是一类通过学习"去噪过程"来生成数据的生成模型。
1.2 核心思想(类比理解)¶
想象你在看一幅画逐渐被墨水覆盖的过程:
原始画作 ──→ 加一点墨水 ──→ 再加一点 ──→ ... ──→ 完全模糊
↑ ↓
清晰 纯噪声
│ │
└──────── 学习反向过程:从纯噪声恢复画作 ────────┘
扩散模型学习的就是这个"反向过程": - 前向过程(Forward Process):给图像逐步添加噪声,直到变成纯噪声 - 反向过程(Reverse Process):学习如何从噪声中恢复图像
1.3 为什么叫"扩散"?¶
这个名字来自物理学中的扩散现象: - 一滴墨水在水中会逐渐扩散,最终均匀分布 - 类似地,图像中的信息会逐渐"扩散"成噪声
2. 扩散模型 vs 其他生成模型¶
2.1 生成模型家族¶
生成模型
├── 显式密度模型
│ ├── 自回归模型(PixelCNN、GPT)
│ └── 流模型(Normalizing Flows)
│
├── 隐式密度模型
│ ├── GAN(生成对抗网络)
│ ├── VAE(变分自编码器)
│ └── 扩散模型(Diffusion Models)← 我们在这里
│
└── 能量模型
└── 基于能量的模型(EBM)
2.2 对比:GAN vs VAE vs Diffusion¶
| 特性 | GAN | VAE | 扩散模型 |
|---|---|---|---|
| 训练稳定性 | 较难(模式崩溃) | 较易 | 稳定 |
| 生成质量 | 高 | 中等 | 很高 |
| 多样性 | 可能不足 | 较好 | 很好 |
| 训练速度 | 快 | 快 | 慢 |
| 采样速度 | 快(一次前向) | 快(一次前向) | 慢(多步迭代) |
| 可解释性 | 低 | 中等 | 较高 |
| 数学基础 | 博弈论 | 变分推断 | 随机过程 |
2.3 扩散模型的优势¶
- 训练稳定
- 没有GAN中的模式崩溃问题
-
不需要对抗训练
-
生成质量高
- 可以生成非常逼真的图像
-
覆盖数据分布的多样性更好
-
数学上可解释
- 基于明确的概率模型
-
可以计算似然
-
灵活性
- 容易进行条件生成
- 支持图像编辑、修复等任务
2.4 扩散模型的劣势¶
- 采样速度慢
- 需要多步迭代(通常50-1000步)
-
相比GAN/VAE的一次前向传播慢很多
-
训练计算量大
- 需要大量计算资源
- 训练时间长
3. 扩散模型的核心组件¶
3.1 前向过程(Forward Process)¶
目标:将数据 \(x_0\) 逐步转化为纯噪声 \(x_T\)
过程:
关键特性: - 马尔可夫链:\(x_t\) 只依赖于 \(x_{t-1}\) - 高斯噪声:每一步都添加高斯噪声 - 可闭合形式计算:可以直接得到任意时刻 \(x_t\)
数学表达: $\(q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I)\)$
3.2 反向过程(Reverse Process)¶
目标:从噪声 \(x_T\) 逐步恢复数据 \(x_0\)
过程:
关键特性: - 也是马尔可夫链 - 用神经网络学习去噪 - 如果前向步数足够多,反向也是高斯
数学表达: $\(p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t))\)$
3.3 神经网络(Noise Prediction Network)¶
作用:预测噪声,指导去噪过程
输入: - 带噪声的图像 \(x_t\) - 时间步 \(t\)(告诉模型"现在有多噪")
输出: - 预测的噪声 \(\epsilon_\theta(x_t, t)\)
架构: - 通常使用 U-Net - 包含时间步嵌入 - 残差连接和注意力机制
3.4 整体流程图¶
训练阶段:
┌─────────────────────────────────────────────────────────────┐
│ 数据 x_0 ──→ [前向过程] ──→ x_t (加噪图像) │
│ ↓ │
│ [神经网络] │
│ 预测噪声 ε_θ │
│ ↓ │
│ 对比真实噪声 ε │
│ ↓ │
│ 计算损失 │
│ ↓ │
│ 更新参数 │
└─────────────────────────────────────────────────────────────┘
采样阶段:
┌─────────────────────────────────────────────────────────────┐
│ 随机噪声 x_T ~ N(0, I) │
│ ↓ │
│ for t = T, T-1, ..., 1: │
│ ↓ │
│ [神经网络] 预测噪声 ε_θ(x_t, t) │
│ ↓ │
│ 去噪得到 x_{t-1} │
│ ↓ │
│ 输出 x_0 (生成图像) │
└─────────────────────────────────────────────────────────────┘
4. 扩散模型的应用¶
4.1 图像生成¶
无条件生成: - 从随机噪声生成逼真图像 - 示例:生成人脸、风景、艺术作品
条件生成: - 文本到图像(Text-to-Image) - DALL-E 2、Stable Diffusion、Midjourney - 输入:"一只宇航员在月球上骑马的油画" - 输出:对应图像
- 类别条件生成
- 输入:类别标签(如"猫")
- 输出:该类别的图像
4.2 图像编辑¶
图像修复(Inpainting): - 填充图像中的缺失区域 - 保持周围内容的一致性
图像超分辨率: - 从低分辨率图像生成高分辨率版本
风格迁移: - 将一张图像的风格应用到另一张图像
4.3 其他应用¶
- 音频生成:音乐、语音合成
- 视频生成:生成连续的视频帧
- 3D生成:生成3D模型
- 分子生成:药物发现
- 数据增强:为下游任务生成训练数据
5. 扩散模型的发展历史¶
5.1 时间线¶
2015: 扩散概率模型首次提出(Sohl-Dickstein et al.)
└── 理论框架,但效果不佳
2020: DDPM(Denoising Diffusion Probabilistic Models)
└── 突破!生成质量接近GAN
└── Ho et al., "Denoising Diffusion Probabilistic Models"
2020: DDIM(Denoising Diffusion Implicit Models)
└── 加速采样,10倍提速
2021: Classifier Guidance / Classifier-Free Guidance
└── 更好的条件控制
2022: Latent Diffusion Models (LDM)
└── 在潜空间进行扩散,效率大幅提升
└── Stable Diffusion基于此
2022+: 应用爆发
├── DALL-E 2 (OpenAI)
├── Stable Diffusion (Stability AI)
├── Midjourney
└── Imagen (Google)
5.2 关键突破点¶
- DDPM (2020)
- 证明了扩散模型可以达到GAN级别的生成质量
- 简化了训练目标
-
开启了扩散模型的研究热潮
-
LDM / Stable Diffusion (2022)
- 在压缩的潜空间进行扩散
- 大幅降低计算成本
- 使扩散模型实用化
6. 学习路径预览¶
6.1 本教程的结构¶
Phase 1: 数学基础(Week 1-2)
├── 概率论基础
├── 随机过程与马尔可夫链
├── 变分推断基础
└── 得分匹配与能量模型
Phase 2: 核心原理(Week 2-3)
├── 扩散模型概述 ← 你现在在这里
├── 前向扩散过程
├── 反向去噪过程
├── 训练目标推导
├── 采样算法详解
└── 与VAE和GAN的关系
Phase 3: 动手实现(Week 3-4)
├── 环境搭建与数据准备
├── UNet架构详解
├── 时间步嵌入
├── 完整DDPM实现
├── 训练流程与技巧
└── 采样与图像生成
Phase 4: 进阶应用(Week 5)
├── DDIM加速采样
├── 条件生成与引导
├── 潜空间扩散模型LDM
├── 稳定扩散Stable Diffusion
└── 其他变体介绍
Phase 5: 实战项目(Week 6)
├── 项目1: 手写数字生成
├── 项目2: 自定义图像生成
└── 项目3: 文本到图像生成
6.2 学习建议¶
初学者路径: 1. 先看本章建立整体概念 2. 学习数学基础(重点理解马尔可夫链) 3. 深入核心原理(前向/反向过程) 4. 动手实现DDPM 5. 探索进阶内容
快速上手路径: 1. 本章(建立概念) 2. 核心原理中的前向/反向过程 3. 直接跳到从零实现 4. 回头补数学
7. 本章总结¶
核心要点¶
- 扩散模型 = 前向加噪 + 反向去噪
- 前向:数据 → 噪声(固定过程)
-
反向:噪声 → 数据(学习过程)
-
相比GAN/VAE的优势
- 训练更稳定
- 生成质量更高
-
数学上更可解释
-
主要挑战
- 采样速度慢(多步迭代)
-
训练计算量大
-
应用场景广泛
- 图像生成、编辑
- 音频、视频生成
- 科学计算(分子生成)
关键术语¶
| 术语 | 含义 |
|---|---|
| Forward Process | 前向过程,添加噪声 |
| Reverse Process | 反向过程,去噪恢复 |
| Noise Schedule | 噪声调度策略,控制加噪速度 |
| Timestep | 时间步,扩散过程的步骤 |
| U-Net | 常用的噪声预测网络架构 |
📝 自测问题¶
基础问题¶
- 核心概念
- 用自己的话解释扩散模型的核心思想
- 前向过程和反向过程分别做什么?
-
为什么扩散模型训练稳定,但采样慢?
-
对比理解
- 扩散模型和GAN的主要区别是什么?
-
扩散模型和VAE有什么相似之处?
-
应用场景
- 列举3个扩散模型的应用场景
- 为什么扩散模型适合做图像编辑?
思考题¶
- 扩散模型的"扩散"和物理中的扩散有什么联系?
- 如果反向过程也用固定的公式(不学习),会怎样?
- 为什么扩散模型需要多步采样,而不能一步生成?
预习问题¶
- 你认为前向过程为什么使用高斯噪声?
- 神经网络在扩散模型中起什么作用?
- 时间步信息为什么重要?
🔗 下一步¶
现在你已经建立了扩散模型的整体概念,接下来我们将深入前向扩散过程,理解数据是如何逐步变成噪声的。
→ 下一步:02-前向扩散过程.md
📚 推荐资源¶
视频(先看这些建立直觉)¶
- Diffusion Models Explained (AI Explained)
- 15分钟,直观解释扩散模型
-
适合建立整体概念
-
How Stable Diffusion Works (AssemblyAI)
- 深入解释Stable Diffusion原理
- 有动画演示
文章¶
- The Illustrated Stable Diffusion
- 图文并茂,适合视觉学习者
-
从基础到Stable Diffusion
-
What are Diffusion Models? (Lilian Weng)
- 全面深入的博客文章
- 适合进阶阅读
论文¶
- DDPM (2020) - 必读
- "Denoising Diffusion Probabilistic Models"
- 扩散模型的奠基之作
恭喜!你已经完成了扩散模型的入门。准备好深入原理了吗? 🚀