摘要:前面七篇文章讨论的都是"判别模型"——给定输入,判断它是什么。生成模型做的是相反的事:给定"是什么",创造出对应的数据。从 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 的思想依然是重要的基础,它们为扩散模型的诞生铺平了道路。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐