生成模型入门:从 VAE 到扩散模型
摘要:前面七篇文章讨论的都是"判别模型"——给定输入,判断它是什么。生成模型做的是相反的事:给定"是什么",创造出对应的数据。从 DALL·E 画图到 Sora 生成视频,从 Midjourney 的艺术创作到 Stable Diffusion 的普及,生成模型是 2024-2026 年 AI 最引人注目的突破。这篇文章讲清楚三类主流生成模型(VAE、GAN、扩散模型)的核心思想。
一、什么是生成模型?
判别 vs 生成
先明确一个根本区别:
| 判别模型(Discriminative) | 生成模型(Generative) | |
|---|---|---|
| 任务 | 给定输入 x,判断类别 y | 给定类别 y,生成数据 x |
| 学习目标 | P(y|x) —— 边界划分 | P(x) 或 P(x|y) —— 数据分布 |
| 例子 | 这张图里是猫还是狗? | 画一只猫 |
| 典型应用 | 分类、检测、分割 | 图像生成、文本生成、语音合成 |
用学生来类比:
判别模型就像学生做选择题——看到题目(x),选出正确答案(y)。
生成模型就像学生写作文——给定主题(y),创造出一篇文章(x)。
生成模型要解决的核心问题
生成模型要回答一个根本性的问题:如何让机器学会"创造"?
这比"识别"难得多。识别只需要找到分类边界,而生成需要理解数据的完整分布——知道什么样的猫是"合理的猫"、什么样的句子是"通顺的句子"。
数据空间中"合理"的区域只占极小一部分:
合理猫图像的分布 所有可能的像素组合
┌──────────┐ ┌────────────────────┐
│ ╱╲ │ │ │
│ ╱ ╲ │ │ 只占整个 │
│ ╱ 猫 ╲ │ │ 空间的 0.000...% │
│ ╱ ╲ │ │ │
└──────────┘ └────────────────────┘
生成模型的任务就是学习这个"合理区域"的分布,然后从中采样新的样本。
二、VAE:变分自编码器
自编码器(Autoencoder)的基础
VAE 的前身是自编码器——一个"压缩→还原"的网络架构。
瓶颈(压缩后的编码)
┌───┐
输入 x ──→ 编码器 ──→ │ z │ ──→ 解码器 ──→ 重建 x'
(压缩) └───┘ (解压缩)
目标:让 x' 尽可能接近 x
自编码器学会了把高维数据(如图像)压缩成低维的"编码向量" z,再从中还原。这个过程迫使 z 捕捉数据最本质的特征。
但自编码器有一个致命问题:它不能生成新数据。因为它只是"记住"了训练数据中每个样本的编码,编码空间是零散的点,不是连续的分布——你无法从任意位置采样。
VAE 的核心创新:从"点"到"分布"
VAE(Variational Autoencoder,变分自编码器)在 2013 年由 Kingma 和 Welling 提出,关键改进是:
自编码器:编码器输出一个确定的点 z
VAE:编码器输出一个概率分布(均值和方差),然后从分布中采样 z
自编码器的编码空间: VAE 的编码空间:
z₁ z₂ z₃ N(μ₁,σ₁) N(μ₂,σ₂) N(μ₃,σ₃)
● ● ● ╱╲ ╱╲ ╱╲
(离散的点,中间没有意义) ╱ ╲ ╱ ╲ ╱ ╲
(连续的分布,可以插值!)
为什么分布比点好?
自编码器:在 z₁ 和 z₂ 之间取个中间值
→ 解码器大概率输出"四不像"
VAE:z₁ 和 z₂ 的分布是连续的、有重叠的
→ 在它们之间采样,解码器也能生成合理的图像
→ 可以实现"插值":男人 → 女人,人脸 A → 人脸 B
VAE 的损失函数
VAE 的损失函数由两项组成:
L = L_reconstruction + β × L_KL
1. L_reconstruction(重建损失):让生成的 x' 像原图 x
图像 → 均方误差或二值交叉熵
2. L_KL(KL 散度):让编码分布接近标准正态分布 N(0,1)
让编码空间规整、连续、可采样
两项的平衡:
如果只看重建损失 → 编码器会作弊:输出 σ=0(退化成自编码器)
如果只看 KL 散度 → 所有编码都变成 N(0,1),失去了区分不同样本的能力
两者的平衡,强迫 VAE 学会"规整且有意义的编码空间"。
VAE 的优缺点
| 优点 | 缺点 |
|---|---|
| 训练稳定,容易收敛 | 生成的图像偏模糊(不像 GAN 那样锐利) |
| 有显式的概率建模,可解释性强 | 对高分辨率图像效果不如扩散模型 |
| 编码空间有语义意义,支持插值 | — |
三、GAN:生成对抗网络
核心思想:造假者与鉴定者
2014 年,Ian Goodfellow 提出了 GAN(Generative Adversarial Network,生成对抗网络)。它的灵感来自一个幽默的场景:
生成器(Generator)就像伪造钞票的造假者
判别器(Discriminator)就像检测假钞的警察造假者不断改进工艺,试图骗过警察
警察不断提高鉴别能力,试图识破假钞
两人互相竞争、共同进步——直到造假者造出足以乱真的假钞
对抗训练的过程
随机噪声 z
│
▼
┌────────────────┐
│ 生成器 G │ ← 目标是骗过判别器
└───────┬────────┘
│
生成图片 G(z)
│
▼
┌────────────────┐ ┌──────────┐
│ 判别器 D │───→│ 真/假判断 │
└────────────────┘ └──────────┘
↑
真实图片 x
目标函数(零和博弈):
min_G max_D [ log D(x) + log(1 - D(G(z))) ]
判别器 D:想让 D(真实)→1,D(生成)→0 张大力
生成器 G:想让 D(生成)→1 张大 力
训练循环
# 伪代码——GAN 的训练循环
for epoch in range(num_epochs):
for real_images in dataloader:
# ─── 第一步:训练判别器 ───
# 用真实图片训练 D
real_output = D(real_images)
loss_real = BCE(real_output, target=1)
# 用假图片训练 D
fake_images = G(random_noise)
fake_output = D(fake_images.detach()) # 不更新 G
loss_fake = BCE(fake_output, target=0)
loss_D = (loss_real + loss_fake) / 2
loss_D.backward()
optimizer_D.step()
# ─── 第二步:训练生成器 ───
fake_images = G(random_noise) # 重新生成
fake_output = D(fake_images) # 这次让梯度传到 G
loss_G = BCE(fake_output, target=1) # 试图骗过 D
loss_G.backward()
optimizer_G.step()
GAN 的演进
| 模型 | 年份 | 关键改进 |
|---|---|---|
| GAN | 2014 | 原始对抗训练 |
| DCGAN | 2015 | 用 CNN 替换全连接层,训练更稳定 |
| cGAN | 2014 | 条件生成:指定类别生成(如"画一只猫") |
| WGAN | 2017 | 用 Wasserstein 距离替代 JS 散度,缓解训练不稳定 |
| StyleGAN | 2019 | 风格控制,生成人脸效果惊艳 |
| BigGAN | 2019 | 大规模训练,高质量 ImageNet 生成 |
GAN 的优缺点
| 优点 | 缺点 |
|---|---|
| 生成的图像非常清晰锐利 | ⚠️ 训练极不稳定——G 和 D 必须保持微妙平衡 |
| 在 2014-2022 年间是图像生成 SOTA | 容易模式坍塌(生成器只学会画一种东西) |
| StyleGAN 在人脸生成上效果顶尖 | 没有显式的概率建模,难以解释 |
模式坍塌(Mode Collapse)
GAN 最著名的训练问题:
正常的生成器:能生成 10 类不同的图像 ● ○ ▲ ◆ ...
模式坍塌的生成器:只会生成 1 类 ●●●●●●●...
问题出在:如果生成器发现某种"骗术"对判别器特别有效
它会一直用这招,不再探索其他模式
就像造假者发现:只要做 100 元假钞,警察就认不出来
于是他再也不做 50 元、20 元的假钞了
四、扩散模型:2020s 的王者
核心思想:学会"去噪"
扩散模型(Diffusion Model)的思想来自热力学——如果你把一张图片逐步加噪直到完全变成随机噪声,那么反过来,学会"去噪"就能从随机噪声中恢复出图像。
这个过程分为两个阶段:
前向过程:逐步加噪
原始图像 → 稍微加噪 → 加更多噪 → ... → 纯噪声
x₀ x₁ x₂ x_T
每步只加一点点噪声:
x_t = √(1-β_t) × x_{t-1} + √(β_t) × ε
其中 ε 是高斯噪声,β_t 是预先定义好的噪声计划
前向过程是固定的(不需要学习)——它只是把图像一步步变成噪声。
反向过程:逐步去噪(模型要学的东西)
纯噪声 → 去掉一点 → 再去掉一点 → ... → 生成图像
x_T x_{T-1} x_{T-2} x₀
模型学习预测"当前图像中的噪声是什么":
ε_θ(x_t, t) ≈ 加在 x₀ 上的真实噪声
然后去噪:
x_{t-1} = 从 x_t 中减去预测的噪声
关键 insight:模型不是在"一步生成图像",而是在上千步去噪过程中逐步构建。这个过程比 GAN 的一步生成更稳定,但速度更慢。
DDPM(Denoising Diffusion Probabilistic Models)
2020 年,Ho 等人提出了 DDPM——让扩散模型变得实用的关键工作。
DDPM 的训练极其简单:
1. 从训练集中取一张图像 x₀
2. 随机选择时间步 t(如 t=57)
3. 生成随机噪声 ε
4. 计算加噪后的图像 x_t = √(ᾱ_t) × x₀ + √(1-ᾱ_t) × ε
5. 训练模型预测噪声:min ||ε_θ(x_t, t) - ε||²
—— 就是一个简单的均方误差损失!
扩散模型 vs GAN
| 对比维度 | GAN | 扩散模型 |
|---|---|---|
| 训练稳定性 | ❌ 极不稳定,需要精细调参 | ✅ 极其稳定,简单的 MSE 损失 |
| 图像质量 | ✅ 早期 SOTA | ✅ 2022 年后全面超越 GAN |
| 生成速度 | ✅ 一次前向即可 | ❌ 需要 50-1000 步迭代(慢) |
| 多样性 | ⚠️ 容易模式坍塌 | ✅ 天然多样性好 |
| 概率建模 | ❌ 无显式概率 | ✅ 有严格的数学基础 |
加速:从 1000 步到几步
扩散模型的主要缺点是慢。为了解决这个问题,研究者提出了多种加速方法:
| 方法 | 核心思路 | 加速比 |
|---|---|---|
| DDIM | 用确定性采样替代随机采样 | 10-50× |
| DPM-Solver | 用微分方程求解器高效采样 | 10-50× |
| LCM(潜在一致性模型) | 训练模型一步预测最终结果 | 100× |
到 2026 年,扩散模型已经可以在 1-4 步内生成高质量图像,速度不再是主要瓶颈。
潜在扩散模型(LDM / Stable Diffusion)
2022 年,Rombach 等人提出了潜在扩散模型(LDM)——Stable Diffusion 就是它的实现。
核心改进:不在像素空间做扩散,而是在压缩后的潜在空间做扩散。
像素空间(高维) 潜在空间(低维)
512×512×3 64×64×4
= 786,432 维 = 16,384 维
↓ VAE 编码
扩散在这个空间进行 ←────┘
↑ VAE 解码
生成高质量图像
好处:
1. 计算量减少 40 倍以上
→ 普通消费级 GPU 也能跑
2. 可以结合文本条件(Text-to-Image)
→ 通过 Cross-Attention 把文本嵌入注入到扩散过程
→ 这就是"画一只穿宇航服的柴犬"的实现方式
五、三类生成模型对比
| 模型 | 核心思想 | 训练难度 | 图像质量 | 速度 | 2026 年地位 |
|---|---|---|---|---|---|
| VAE | 编码为分布+解码重建 | 低 | 中等(偏模糊) | 快 | 常作为其他模型的组件 |
| GAN | 生成器与判别器对抗 | 高 | 高(锐利) | 最快 | 部分场景仍在使用 |
| 扩散模型 | 逐步去噪 | 低 | 最高 | 慢(已大幅改善) | 主流,事实标准 |
2026 年的生态地位
图像生成: 扩散模型(Stable Diffusion / DALL·E / Midjourney)→ 绝对统治
视频生成: 扩散模型(Sora / Genie / VideoPoet) → 绝对统治
音频生成: 扩散模型 + 自回归模型 → 共同主导
3D 生成: 扩散模型(Point-E / Shap-E) → 快速崛起
分子生成: 扩散模型 + VAE → 主流之一
六、三者的内在联系
有趣的是,这三类模型虽然在表面上完全不同,但它们在数学上有深刻的联系:
VAE: 学习从"噪声分布"到"数据分布"的映射(通过编码-解码)
GAN: 两个网络博弈,隐式学习数据分布
扩散模型:从噪声到数据的多步转换(本质上是 VAE 的一种推广)
研究者发现:扩散模型 ≈ 多层 VAE,每一步是一个 VAE 的一步
GAN 可以看作是"单步"的扩散模型
这种联系在 2022-2026 年间催生了许多混合方法:
- 扩散 GAN:用 GAN 的对抗损失训练扩散模型的单步生成
- Score-based VAE:把 VAE 和扩散模型的分数匹配结合
七、总结
| 模型 | 一句话理解 |
|---|---|
| 自编码器 | 把大象塞进冰箱(压缩),再拿出来(还原) |
| VAE | 不再塞成一个点,而是塞成一个"范围"——让冰箱之间连续可插值 |
| GAN | 造假者和警察互相PK,直到假钞以假乱真 |
| 扩散模型 | 学会给照片"去噪"——从一堆雪花点中逐步复原出清晰图像 |
三者的核心思想在同一句话中:
生成模型的目标就是学习数据的分布,然后从中采样。
- VAE 显式地建模分布(编码器→分布参数→解码器)
- GAN 隐式地逼近分布(通过对抗,让生成分布接近真实分布)
- 扩散模型通过逐步去噪来采样(从噪声分布→数据分布)
从 2026 年回头看,扩散模型已经成为生成模型的主流范式——它在训练稳定性、生成质量、多样性上都优于 VAE 和 GAN。但 VAE 和 GAN 的思想依然是重要的基础,它们为扩散模型的诞生铺平了道路。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)