跳转至

01 - 扩散模型概述

⚠️ 时效性说明:本章涉及前沿模型/价格/榜单等信息,可能随版本快速变化;请以论文原文、官方发布页和 API 文档为准。

学习时间: 2小时 重要性: ⭐⭐⭐⭐⭐ 建立整体框架,理解核心思想


🎯 学习目标

完成本章后,你将能够: - 理解扩散模型的核心思想(前向加噪 + 反向去噪) - 区分扩散模型与其他生成模型(GAN、VAE) - 了解扩散模型的主要应用场景 - 建立学习扩散模型的整体框架


1. 什么是扩散模型?

1.1 一句话定义

扩散模型是一类通过学习"去噪过程"来生成数据的生成模型。

1.2 核心思想(类比理解)

想象你在看一幅画逐渐被墨水覆盖的过程:

Text Only
原始画作 ──→ 加一点墨水 ──→ 再加一点 ──→ ... ──→ 完全模糊
   ↑                                              ↓
  清晰                                          纯噪声
   │                                              │
   └──────── 学习反向过程:从纯噪声恢复画作 ────────┘

扩散模型学习的就是这个"反向过程": - 前向过程(Forward Process):给图像逐步添加噪声,直到变成纯噪声 - 反向过程(Reverse Process):学习如何从噪声中恢复图像

1.3 为什么叫"扩散"?

这个名字来自物理学中的扩散现象: - 一滴墨水在水中会逐渐扩散,最终均匀分布 - 类似地,图像中的信息会逐渐"扩散"成噪声


2. 扩散模型 vs 其他生成模型

2.1 生成模型家族

Text Only
生成模型
├── 显式密度模型
│   ├── 自回归模型(PixelCNN、GPT)
│   └── 流模型(Normalizing Flows)
├── 隐式密度模型
│   ├── GAN(生成对抗网络)
│   ├── VAE(变分自编码器)
│   └── 扩散模型(Diffusion Models)← 我们在这里
└── 能量模型
    └── 基于能量的模型(EBM)

2.2 对比:GAN vs VAE vs Diffusion

特性 GAN VAE 扩散模型
训练稳定性 较难(模式崩溃) 较易 稳定
生成质量 中等 很高
多样性 可能不足 较好 很好
训练速度
采样速度 快(一次前向) 快(一次前向) 慢(多步迭代)
可解释性 中等 较高
数学基础 博弈论 变分推断 随机过程

2.3 扩散模型的优势

  1. 训练稳定
  2. 没有GAN中的模式崩溃问题
  3. 不需要对抗训练

  4. 生成质量高

  5. 可以生成非常逼真的图像
  6. 覆盖数据分布的多样性更好

  7. 数学上可解释

  8. 基于明确的概率模型
  9. 可以计算似然

  10. 灵活性

  11. 容易进行条件生成
  12. 支持图像编辑、修复等任务

2.4 扩散模型的劣势

  1. 采样速度慢
  2. 需要多步迭代(通常50-1000步)
  3. 相比GAN/VAE的一次前向传播慢很多

  4. 训练计算量大

  5. 需要大量计算资源
  6. 训练时间长

3. 扩散模型的核心组件

3.1 前向过程(Forward Process)

目标:将数据 \(x_0\) 逐步转化为纯噪声 \(x_T\)

过程

Text Only
x_0 → x_1 → x_2 → ... → x_T
 │     │     │          │
data  noisy noisy      pure noise

关键特性: - 马尔可夫链:\(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\)

过程

Text Only
x_T → x_{T-1} → ... → x_1 → x_0
 │       │            │     │
noise  less noisy     ...   data

关键特性: - 也是马尔可夫链 - 用神经网络学习去噪 - 如果前向步数足够多,反向也是高斯

数学表达: $\(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 整体流程图

Text Only
训练阶段:
┌─────────────────────────────────────────────────────────────┐
│  数据 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 时间线

Text Only
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 关键突破点

  1. DDPM (2020)
  2. 证明了扩散模型可以达到GAN级别的生成质量
  3. 简化了训练目标
  4. 开启了扩散模型的研究热潮

  5. LDM / Stable Diffusion (2022)

  6. 在压缩的潜空间进行扩散
  7. 大幅降低计算成本
  8. 使扩散模型实用化

6. 学习路径预览

6.1 本教程的结构

Text Only
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. 本章总结

核心要点

  1. 扩散模型 = 前向加噪 + 反向去噪
  2. 前向:数据 → 噪声(固定过程)
  3. 反向:噪声 → 数据(学习过程)

  4. 相比GAN/VAE的优势

  5. 训练更稳定
  6. 生成质量更高
  7. 数学上更可解释

  8. 主要挑战

  9. 采样速度慢(多步迭代)
  10. 训练计算量大

  11. 应用场景广泛

  12. 图像生成、编辑
  13. 音频、视频生成
  14. 科学计算(分子生成)

关键术语

术语 含义
Forward Process 前向过程,添加噪声
Reverse Process 反向过程,去噪恢复
Noise Schedule 噪声调度策略,控制加噪速度
Timestep 时间步,扩散过程的步骤
U-Net 常用的噪声预测网络架构

📝 自测问题

基础问题

  1. 核心概念
  2. 用自己的话解释扩散模型的核心思想
  3. 前向过程和反向过程分别做什么?
  4. 为什么扩散模型训练稳定,但采样慢?

  5. 对比理解

  6. 扩散模型和GAN的主要区别是什么?
  7. 扩散模型和VAE有什么相似之处?

  8. 应用场景

  9. 列举3个扩散模型的应用场景
  10. 为什么扩散模型适合做图像编辑?

思考题

  1. 扩散模型的"扩散"和物理中的扩散有什么联系?
  2. 如果反向过程也用固定的公式(不学习),会怎样?
  3. 为什么扩散模型需要多步采样,而不能一步生成?

预习问题

  1. 你认为前向过程为什么使用高斯噪声?
  2. 神经网络在扩散模型中起什么作用?
  3. 时间步信息为什么重要?

🔗 下一步

现在你已经建立了扩散模型的整体概念,接下来我们将深入前向扩散过程,理解数据是如何逐步变成噪声的。

→ 下一步:02-前向扩散过程.md


📚 推荐资源

视频(先看这些建立直觉)

  1. Diffusion Models Explained (AI Explained)
  2. 15分钟,直观解释扩散模型
  3. 适合建立整体概念

  4. How Stable Diffusion Works (AssemblyAI)

  5. 深入解释Stable Diffusion原理
  6. 有动画演示

文章

  1. The Illustrated Stable Diffusion
  2. 图文并茂,适合视觉学习者
  3. 从基础到Stable Diffusion

  4. What are Diffusion Models? (Lilian Weng)

  5. 全面深入的博客文章
  6. 适合进阶阅读

论文

  1. DDPM (2020) - 必读
  2. "Denoising Diffusion Probabilistic Models"
  3. 扩散模型的奠基之作

恭喜!你已经完成了扩散模型的入门。准备好深入原理了吗? 🚀