本节摘要:每一个图像模型、文本模型、视频模型、3D 模型,都落进五个桶里。挑错桶,你会跟数学较劲几周;挑对桶,过去十二年这个领域的全部进展就能干净利落地在你脑子里叠成一摞。本节是整个生成式 AI 章的「地图」:它给出五大家族的判别标准(建模的对象、密度是否显式、采样是否迭代、条件注入方式、评估指标),并把 2013 至 2026 的关键里程碑排成一条时间线。读完本节,你拿到任何一篇新论文,都能用五个问题在五分钟内把它归到正确的桶里,并说出它相对于其他家族的取舍。
对应原课程:Phase 08 · Lesson 01 ·
generative-models-taxonomy-history(原英文phases/08-generative-ai/01-generative-models-taxonomy-history/docs/en.md)。
阅读完本节,你应当能够:
p_data(x) 采样出像真实样本的新样本。一个生成模型只做一件事:给定从某个未知分布 p_data(x) 抽出的训练样本,输出看起来像从同一分布里来的新样本。人脸、句子、MIDI 文件、蛋白质结构——只要你眯起眼睛,全是同一个问题。
麻烦在于 p_data 活在一个数百万维的空间里(一张 512×512 的 RGB 图像约 786k 维),而样本只挤在这个空间里一层薄薄的流形(manifold)上,你手头也许只有一千万个例子。暴力地把整个空间密度估出来,毫无希望。所以每个生成模型都是一种妥协:用一个稍微没那么难的问题,换掉那个无解的问题。
过去十二年,有五大家族活了下来。知道每家做的是什么妥协,你就能理解它为什么在某些任务上赢、在另一些任务上崩盘。
1. 显式密度·可处理(Explicit density, tractable)。 把 log p(x) 写成一个真正能算的求和。自回归模型(PixelCNN、WaveNet、GPT)把联合概率因式分解为 p(x) = ∏ p(x_i | x_<i);归一化流(RealNVP、Glow)把 p(x) 构造成一个简单基础分布的可逆变换。优点:精确似然,训练损失干净。代价:自回归推理是序列化的(长序列很慢),流要求可逆架构(结构受限)。
2. 显式密度·近似(Explicit density, approximate)。 把 log p(x) 从下方用证据下界(ELBO)包住,优化这个下界。VAE(Kingma 2013)用「编码器-解码器」配一个变分后验;扩散模型(DDPM,Ho 2020)训练一个去噪器,它隐式地优化了一个加权的 ELBO。在 2026 年,扩散仍是图像、视频、3D 的主导骨干。
3. 隐式密度(Implicit density)。 彻底跳过密度,学一个能产样本的生成器 G(z) 和一个能分辨真假的判别器 D(x)。GAN(Goodfellow 2014)。推理极快(一次前向),但训练以不稳定的恶名著称。哪怕到了 2026,StyleGAN 1/2/3 在固定领域照片级真实度(人脸、卧室)上仍是业界标杆。
4. 基于分数·连续时间(Score-based / continuous-time)。 直接学对数密度的梯度 ∇_x log p(x)(称为「分数」)。Song & Ermon(2019)证明分数匹配能把扩散推广到 SDE。流匹配(Flow Matching,Lipman 2023)是 2024—2026 的当红炸子鸡:无仿真训练、更直的路径、比 DDPM 快 4~10 倍采样。Stable Diffusion 3、Flux、AudioCraft 2 全都用了流匹配。
5. 在离散码上的 token 自回归(Token-based autoregressive over discrete codes)。 用 VQ-VAE 或残差量化器把高维数据压成一小串离散 token,再用 Transformer 建模这个 token 序列。Parti、MuseNet、AudioLM、VALL-E、Sora 的 patch tokenizer 都属于这一家。它本质上是「桶 1」外加一个学出来的分词器。
💡 这五家的区别,归根结底是对
p(x)态度不同:能不能算出来?(显式 vs 隐式)要不要绕道?(直接学密度 / 学分数 / 学采样器)采样是几步?(一步 / 迭代 / 序列)把这三问放到任何模型上,你都能立刻看出它的家族归属。
| 年份 | 模型 | 为何重要 |
|---|---|---|
| 2013 | VAE(Kingma) | 第一个有可用训练损失的深度生成模型。 |
| 2014 | GAN(Goodfellow) | 隐式密度、无似然,样本惊人地清晰。 |
| 2015 | DRAW、PixelCNN | 序列化图像生成。 |
| 2017 | Glow、RealNVP | 可逆流,带深度的精确似然。 |
| 2017 | Progressive GAN | 第一批百万像素人脸。 |
| 2019 | StyleGAN / StyleGAN2 | 该领域的照片级人脸至今仍难超越。 |
| 2020 | DDPM(Ho) | 扩散变得可用。 |
| 2021 | CLIP、DALL-E 1、VQGAN | 文生图走向主流。 |
| 2022 | Imagen、Stable Diffusion 1、DALL-E 2 | 潜在扩散 + 文本条件 = 民主化。 |
| 2022 | ControlNet、LoRA | 对预训练扩散的精细控制。 |
| 2023 | SDXL、Midjourney v5、流匹配 | 规模化 + 更好的训练动力学。 |
| 2024 | Sora、Stable Diffusion 3、Flux.1 | 视频扩散,流匹配胜出。 |
| 2025 | Veo 2、Kling 1.5、Runway Gen-3、Nano Banana | 生产级视频。 |
| 2026 | 一致性 + 整流流(Rectified Flow) | 从扩散骨干一步采样。 |
当一篇新的生成模型论文落地,在读方法之前,先回答这五个问题:
log p(x)?你会在本章每一节都重新回答这五问。到本章末尾,这五问会成为你的条件反射。
本节代码不是大模型,而是一个轻量可视化:用三种玩具方法(核密度估计 KDE、离散直方图、最近样本「类 GAN」生成器),在一维混合高斯的小样本上拟合分布。你能在一张屏幕上看明白显式密度与隐式密度的本质区别——这是一个你能印在一张纸上的问题。
运行 code/main.py,它从双峰高斯混合中抽出 2000 个样本,然后打印:
explicit density (histogram): p(x in [-0.5, 0.5]) ≈ 0.38 approximate density (KDE): p(x in [-0.5, 0.5]) ≈ 0.41 implicit (nearest-sample gen): 20 new samples printed, no p(x)
关键观察:前两种方法允许你问「这一点有多可能?」,第三种不能。 这就是显式 vs 隐式密度的区别——它将在本章每一节都反复出现。
伪代码骨架(对应 code/main.py):
# 1. 抽样:从未知的双峰混合高斯 samples = sample_mixture_of_gaussians(n=2000) # 真实的 p_data(x) # 2. 显式密度·离散直方图:把 [a,b] 切成 200 格,统计频次 hist = histogram(samples, bins=200, range=(-4, 4)) p_explicit = hist / hist.sum() # 归一化为概率 # -> 你可以问:p(x ∈ [-0.5, 0.5]) = ? # 3. 显式密度·近似(KDE):每个样本放一个小高斯核,求和 def kde_density(x, samples, bandwidth=0.2): return mean(exp(-0.5*((x - samples)/bandwidth)**2)) / (bandwidth*sqrt(2*pi)) # -> 平滑版 p(x),同样可问任意点的概率 # 4. 隐式密度·类 GAN 生成器:不学密度,只学「从噪声 z 映到一个新样本」 def implicit_generator(z): # 找训练集中「最近」的样本,加一点抖动当新样本返回 nearest = samples[argmin(abs(samples - z))] return nearest + noise_scale * randn() new_samples = [implicit_generator(randn()) for _ in range(20)] # -> 你能产新样本,但无法回答「这个点概率多少」
💡 设计要点:这套玩具实验的意义,不在于它准不准,而在于让你亲眼看到「能给任意点打分」与「只能生成新样本」这两件事,在工程实现上是多么不同。VAE/GAN/扩散都站在这一区别的某一侧,本节后半章会反复印证。
| 任务 | 最优家族 | 为什么 |
|---|---|---|
| 照片级人脸、窄领域 | StyleGAN 2/3 | 仍是最锐利、推理最快。 |
| 通用文生图 | 潜在扩散 + 流匹配 | SD3、Flux.1、DALL-E 3。 |
| 快速文生图 | 整流流 + 蒸馏 | SDXL-Turbo、SD3-Turbo、LCM。 |
| 文生视频 | 扩散 Transformer + 流匹配 | Sora、Veo 2、Kling。 |
| 语音 + 音乐 | token 自回归(AudioLM、VALL-E、MusicGen)或流匹配(AudioCraft 2) | 离散 token 便宜地扩展规模。 |
| 3D 场景 | 高斯泼溅(Gaussian Splatting)拟合 + 扩散先验 | 3D-GS 用于重建,扩散用于新视角。 |
| 密度估计(不采样) | 流 | 唯一有精确 log p(x) 的家族。 |
| 仿真 / 物理 | 流匹配、分数 SDE | 直线路径,平滑向量场。 |
每家族对应一条不同的推理服务器成本曲线。生产推理文献把 LLM 推理拆成 prefill + decode;同样的拆解在此依然适用:
步数 × 单步成本,单步成本是一个在全潜变量分辨率上跑的 Transformer 或 U-Net 前向。可调的旋钮是步数(DDIM / DPM-Solver / 蒸馏)、批大小、精度(bf16 / fp8 / int4)。⚠️ 当你在论文摘要里看到「比扩散快 X 倍」,请把它翻译成「更少的步数 × 同样的单步成本」或「同样的步数 × 更便宜的单步成本」。其余一切都是营销。
本节产出一个决策技能文件(位于原课程 outputs/skill-model-chooser.md)。
skill-model-chooser.md:一个决策框架。给定任务描述,它输出:(1) 应该用哪一家;(2) 三个开源 + 三个托管方案的排序清单;(3) 你应当警惕的失败模式;(4) 算力 / 时间预算。把这一技能当作整个生成式 AI 章的导航仪:你后面读到 VAE、GAN、扩散等任何一节时,都可以回头比对这张地图,确认自己现在站在哪个位置。
简单。 对以下五个产品,识别它的家族与骨干:ChatGPT 图像、Midjourney v7、Sora、Runway Gen-3、ElevenLabs。证据应来自公开技术报告。
中等。 你明天要读的论文声称「比扩散快 100 倍采样」。写下三个问题,用来检查这个加速在加入条件控制、并提升到高分辨率后是否依然成立。
困难。 选一个你关心的领域(如蛋白质结构、CAD、分子、轨迹)。对该领域当前的 SOTA 模型,回答五问分诊法,并草拟一个更好的模型会改变什么。
p_data(x) 采样出像真样本的新样本;数据活在低维流形上,直接估密度无望。步数 × 单步成本)、GAN(一次前向)。「比扩散快 X 倍」必须翻译成「步数↓」或「单步成本↓」。下一节,我们进入桶 2 的代表——自编码器与变分自编码器(VAE):看一个简单的「压缩-还原」如何被改造成一个可学习概率分布的生成模型,以及为什么 ELBO 是整个近似密度家族的通用训练目标。