这一章不教新东西,只把上一章《视觉 tokenizer》留下的「离散 → 自回归」这一格,连同前面七章摆到同一张桌子上比。
VAE、GAN、扩散、
先想两个任务:一个要求 1 秒内出图(手机相册的实时滤镜), 一个不计时间、只要出版级画质。同样是「生成一张图」,该选的路线完全不同—— 因为最优路线不是固定的,它是算力预算的函数。下面先摆出五条路线各自的一句话。
| 路线 | 核心一句话 | 它换来了什么 | 它付出了什么 |
|---|---|---|---|
| VAE | 压缩到一个连续的 |
训练极稳、采样一步、潜空间可插值 | 输出天生模糊(MSE 的最优解就是均值) |
| GAN | 造假者 vs 鉴定师,用网络当损失函数 | 一步出图、图像锐利 | 训练极不稳定,模式坍塌是结构性的 |
| 扩散 DDPM | 把生成拆成一千次「去噪」 | 训练极稳、质量与多样性都顶尖 | 采样慢(要迭代很多步) |
| 直接学一条从噪声到数据的直线 | 又快又好、训练目标和扩散一样简单 | 较新,生态和工具链还在补 | |
| 自回归 AR | 把一切变成 |
目标极简、天然统一 |
串行生成,图像 token 太多 → 慢 |
注意 「它付出了什么」那一列——每一条路线的缺点,都不是「工程没做好」,
而是它选择的那个核心机制的必然代价(下一节逐条展开)。
所以选路线,本质上是选「你愿意接受哪个代价」。
选两条路线叠在一起看,差异会非常直观。下面的评分是基于公开文献与社区共识的主观打分 (每条 0~10 分,越高越好),不是跑了某套基准测试(统一题目加统一打分)的结果—— 它的作用是帮你建立直觉,不是替你下结论。「可控性」看能不能指定生成什么, 「理论简洁度」看好不好用一句话说清。
互动 · 六维雷达对比
面积越大不代表越好——六个维度不是同等重要的。先确定你最在意哪个轴 (要实时就看「采样速度」),再看哪条路线在这轴上最长,然后接受它在别的轴上的短板。 没有一条路线在六个轴上都长。
| 路线 | 死穴 | 为什么修不了 / 怎么绕 |
|---|---|---|
| VAE | 图像永远模糊 | 重建损失(MSE)的最优解是条件均值。当模型不确定细节时,输出均值就是统计上的最优策略—— 而均值就是糊的。这不是训练不够,是数学上的必然。 绕法:换感知损失(比两张图在一个预训练网络眼里像不像,而不是逐像素比)或对抗损失。 |
| GAN | 模式坍塌 + 训练不稳 | 目标函数的均衡点是鞍点、不是极小值(p_G 是生成器造出的分布,p_data 是真数据分布, D 是判别器;理论上前两者重合、D = 1/2 时双方谁单方面改变策略都不划算)—— 两边永远在互相追逐,同时用梯度下降只会绕着它打转,收敛不到。 而且「只造一个逼真的样本」在生成器看来就是最优解。 主流做法是改目标函数(WGAN 等);BigGAN 靠调参加架构找到了稳定区,但代价很高。 今天它还留在必须一步出图的场景里:实时预览、超分(把小图放大成清晰大图)。 |
| 扩散 | 采样慢 | 质量来自「反复微调」,步数少了就必然走偏。但这条是可修的——
把路径修直( |
| 路径拉直本身有极限 | 学出来的速度场不是直的(分布形状本身就复杂),所以仍然需要几步迭代。 它的优势是「几步」而不是「零步」 | |
| 自回归 | 串行 + token 太多 | 一张 512×512 图要 1024 个 token(16×16 一块);换成 1024×1024 就是 4096 个, 2048×2048 要 16384 个。而自回归必须一个一个生成。 把 2D 排成 1D 序列丢掉了二维邻接结构,模型得自己把它学回来。 |
注意「可修性」这一栏的差别:
扩散的慢是可修的(换路径、蒸馏),所以它赢了;
GAN 的不稳是不太可修的(目标函数性质决定的),所以它让出了主舞台;
VAE 的糊是数学必然,所以它转型去当「潜空间压缩器」而不是生成器。
一条路线的命运,很大程度上取决于「它的缺点是工程问题还是数学问题」。
互动 · 质量天花板:再多预算也换不来
每条路线的天花板(第 4 节的曲线会用到):
扩散 /
前面三节翻来覆去只说了一句话:扩散的路径弯,所以要几十步;
互动 · 从噪声走到图像:路径弯不弯,决定要走几步
公式卡 · 每一步只做一件事
图解 · 五条路线的采样路径并排看:一个点就是一步
互动 · 误差随步数掉下去:弯路是 1/N,直路是 0
横轴是步数 N,纵轴是终点误差:折线走到终点时离真正终点差多少。直路是一条压在 0 上的线—— 折线逼近一条直路径不会出错;弯路必须靠 N 把它压下去,所以扩散要多花十倍预算。 这里的 0 说的是路径误差,不等于画质已经满分——画质看第 4 节。
图解 · 把终点误差拆开:哪一步漏得最多
同一个终点误差,拆到每一步上是不均匀的:路径拐得急的地方每步漏得多, 平坦的地方几乎不漏。柱子加起来正好是终点误差(上面那个「差 0.xxx」), 拖 k 或 N 看它们怎么长起来。
「哪条路线最好」这个问题问错了。正确的问题是: 在你能付出的计算量下,哪条路线能达到的最高质量是多少? 下面把五条路线的「质量随计算量增长」的曲线放在一起—— 曲线是当场求值的,但形状是按每条路线的特点搭出来的模型,不是实测数据, 具体分数别当成基准测试来引用。横轴只数生成一张图时的前向次数:一次前向的成本各路线并不相同, 本页简化成都算 1 次;GAN 生成只要 1 次,它在曲线里随预算变好是本页的简化(把多给的预算当成更好的模型), 不是 GAN 采样要多走几步。这套 0~10 也和雷达图那套不是同一把尺子。
鼠标停在公式里的 N 上——下面那个唯一的「计算预算」滑块会亮。它就是 N。
人话版:扩散要很多步才收敛;
这里的扩散曲线指未蒸馏的 DDPM;蒸馏后的 1~4 步模型 (LCM、SDXL-Turbo 等)见「一致性模型与蒸馏」那一章。式子里的 e 是自然常数(≈2.718)。
互动 · 拖动预算,看冠军换人
把滑块从头拖到尾:没有一条路线在整段路上都领先——预算小是 VAE / GAN,
十几步后是
上面五条曲线是按每条路线讲过的原理写出来的定性模型,形状可信,具体数值不是基准测试。
互动 · 加显卡救不了串行:两种路线的出图时间
纵轴是出这一张图要等多久(秒,对数刻度)。扩散的每一步都能摊到多张卡上, 所以加卡真的更快;自回归的每一步依赖上一步的输出,单条序列的延时是串行的——多给显卡也一步都省不掉。 串行是「1024 个 token 必须一个个生成」的代价;第 3 节那句「丢掉二维邻接结构」说的是它的 7 分天花板,是另一件事。
回答四个问题,本章给出推荐,并把每一分的来源列出来—— 你能看到它是怎么想的,而不是只拿一个结论。
互动 · 五条路线的打分与推荐
| 领域 | 数据 | 现在谁在用 | 为什么 |
|---|---|---|---|
| 图像 | 连续 | 扩散 / |
质量与多样性都最好,而且训练稳定。SD3、FLUX 用的是 |
| 视频 | 连续 | 扩散(潜空间) | Sora、可灵、Veo 都是潜空间扩散/ |
| 文本 | 离散 | 自回归,一家独大 | 文本天生离散、序列短、需要长程依赖。扩散语言模型有进展但还没翻盘 |
| 音频 / 语音 | 连续 | 两条路都在用 | 语音合成用自回归(token 化后)或 |
| 3D / 场景 | 连续 | 扩散 + 神经辐射场 | 神经辐射场(NeRF:用一个网络记住场景里每个位置的颜色和密度);3D 数据少、表示不统一,扩散天然适合重建它 |
| 分子 / 蛋白质 | 连续坐标 | 扩散 | AlphaFold3(预测蛋白质三维结构的模型)之后的生成式结构预测基本都用扩散。这是扩散优势最明显的领域之一 |
「连续的 → 扩散/
这条规律几乎能解释上面所有格子:图像和视频是连续量,文本是离散量——数据的性质决定了范式的选择。
| 融合方向 | 怎么做 | 想解决什么 |
|---|---|---|
| 潜空间扩散 + 连续 latent | VAE 压缩 → 扩散在潜空间里生成 | 让 VAE 的「压缩」和扩散的「生成」各干各擅长的事。 Stable Diffusion 的架构就是这个 |
| 自回归 + 扩散 Transfusion |
同一个 Transformer 里,文本用自回归目标、图像用扩散目标 | 让一个模型既能「顺着写」又能「整体画」 |
| 自回归 + 扩散 MAR |
图像 token 仍然自回归地生成,但每个 token 的分布用扩散头(一个小的去噪网络)来建模 | 去掉离散分词的量化损失,连续空间也能自回归生成 |
| 离散扩散语言模型 LLaDA 等 |
把扩散搬到离散 token 上,并行地「去噪」文本 | 打破自回归的串行限制,让文本也能并行生成。 代价是失去了 KV cache(把算过的中间结果存下来,省掉重复计算)这个巨大的推理优化 |
| 对抗损失重新被用上 | 在扩散/ |
把 GAN 锐利的优点嫁接进来。 SDXL-Turbo、许多少步模型都在用 |
| 统一 token 空间 Chameleon / Emu3 |
用视觉 tokenizer 把图像变离散,和文本 token 排进同一个序列 | 真正意义上的「一个模型什么都能生成」 |
这五条路线过去像五个各自造车的团队,现在变成了互相拆零件用:
扩散把 VAE 当压缩器、把 GAN 的判别器当质量裁判;自回归把视觉 tokenizer 当翻译器、把扩散当并行渲染器。
「哪条路线赢」正在变成一个过时的问题——现在是「哪种组合适合这个任务」。
互动 · 蒸馏=把弯路掰直:同一条曲线换了个指数
第 4 节那两条曲线的指数是 80 和 8。蒸馏做的事,就是把扩散的 80 换成 1.5 —— 也就是把那条弯路径直接掰直,于是 1~4 步就能出图(LCM、SDXL-Turbo 就是这么来的)。 路径弯不弯,不是一个比喻,它是曲线里唯一那个数。
| 路线 | 代表模型 | 年份 | 规模量级 | 标志性突破 |
|---|---|---|---|---|
| 自回归 | DALL·E 1 | 2021 | 120 亿 | 证明图像可以当语言生成 |
| Parti | 2022 | 200 亿 | 把这条路推到极致规模 | |
| Chameleon / Emu3 | 2024 | 70 亿 ~ | 文本与图像共用同一个 Transformer | |
| 潜空间压缩器 (不是生成范式, 是给各条路线供货的零件) |
VQ-VAE-2(离散) | 2019 | 几千万 ( |
层级码本,生成 1024×1024 人脸 |
| Stable Diffusion 的 VAE(连续) | 2022 | 约 8000 万 | 成为「潜空间压缩器」这个角色的事实标准 | |
| GAN | StyleGAN2 | 2019 | 约 3000 万 | 人脸生成巅峰,潜空间高度解耦 |
| BigGAN | 2018 | 1 亿 ~ | ImageNet 128×128 的质量巅峰 | |
| 扩散 | DDPM | 2020 | 几千万 | 把「去噪」变成生成范式 |
| SDXL | 2023 | 26 亿 UNet | 开源图像生成的事实基线 | |
| Sora / Veo 类视频模型 | 2024 | 未公开 | 把扩散推到时空联合建模 | |
| Rectified Flow | 2022 | — | 提出「把路径修直」这个思路 | |
| SD3 | 2024 | 80 亿 | MMDiT + 整流流,开源质量新高 | |
| FLUX.1 | 2024 | 120 亿 | 把 |
这一格的「几千万」只算 VQ-VAE-2 的
| 章 | 一句话带走 |
|---|---|
| 用窄瓶颈逼网络学会「什么重要」。线性版就是 PCA | |
| VAE | 给潜空间加「必须像正态分布」的约束,把孤岛连成地图 |
| GAN | 用学出来的网络当损失函数 |
| 扩散 | 把生成拆成一千次去噪;训练目标只是「猜加了多少噪声」 |
| 潜空间扩散 / DiT | VAE 当压缩器、Transformer 当去噪器 |
| 不去把弯路走快,而是把路修直 | |
| 一致性模型 | 逼模型在整条轨迹上输出同一个终点,一步到位 |
| 视觉 tokenizer | 把图变成离散 token,图像就有了一门语言 |
整个阶段 4 反复出现同一个模式:每一个新方法,都是在修上一个方法的某个具体代价。
VAE 修
GAN 修 VAE「模糊」→ 付出了不稳定的代价;
扩散修 GAN「不稳定」→ 付出了慢的代价;
生成模型的十年,就是一条不断「拿新代价换旧代价」的链子。
看懂这条链子,比记住任何一个模型的名字都有用。
五条路线摆到一起,才看得清它们是怎么互相接力的。
回到第 4 节那个「拖动预算,看冠军换人」:把滑块从 1 拖到 1024。
预算小是 VAE / GAN,十几步是
那个冠军换人的瞬间你看到的就是「没有免费午餐」: 变的不是路线,是你:同一个模型集合,换一个预算就换一个赢家。 没想指着某个东西说这句话?回到图上再拖一次。
这一章作为一个「总表」,几条暗线都能答得很具体。
| 暗线 | 这一章的回答 |
|---|---|
| A 信息流动 | 五种「从噪声到数据」的路径:VAE 一次解码;GAN 一次前向;
扩散上千次同样的前向; |
| B 什么被牺牲了 | 第 3 节那张死穴表就是答案:VAE 牺牲细节、GAN 牺牲稳定、扩散牺牲速度、
|
| C 参数账本 | 第 8 节的真实量级:StyleGAN2 约 3000 万 → SD 的 VAE 约 8000 万 →
SDXL UNet 26 亿 → SD3 80 亿 → FLUX.1 120 亿 → DALL·E 1 120 亿 → Parti 200 亿。 画质最好的模型并不是参数最多的:StyleGAN2 三千万参数做人脸,质量至今仍被引用。 |
| D 跑在什么上 | 推理时最贵的是那一串采样步。
每一步都要把整套权重从显存(显卡上存数据的内存)里读一遍,
而每步算的乘加(一次乘法加一次加法)很少,
所以瓶颈是「搬数据」而不是「算数」。
少步蒸馏(LCM / Turbo / 一致性模型)能明显提速,就是因为它直接砍掉了这些重复的搬运。 自回归反过来:算得不多,但必须一个一个串行等。 完整的账见 《硬件与算力账本》 |
| E 它假设了什么 | 每条路线都是一句关于「数据是什么形状」的假设:
VAE 假设潜空间近似高斯;GAN 假设存在一个能判别真假的函数;
扩散假设反向过程是高斯链; |
| F 违背了哪个直觉 | “把原理搞对就能修好”是错的。直觉会把路线的短板当成工程问题—— 多调参就好;但扩散慢可以换路径,GAN 不稳和 VAE 糊都动不了机制本身。 缺点是工程问题还是数学问题,直接决定一条路线的生死。这个才是真正的反直觉。 |
它接住了前八章: 自编码器、VAE、GAN、 扩散、潜空间扩散、流匹配、 一致性模型、视觉 tokenizer—— 八章各自讲一个方案,这一章是它们第一次互相说话。
它给下一章留了什么:阶段 4 还没收尾—— 下一章(《一套机制,四种模态》)把同一套零件换到别的模态上; 「用有限算力换最大效果」要等更后面的《缩放定律》才搬到语言模型上。
五条路线没有全面赢家,每条路线的缺点都是它核心机制的代价:
VAE 糊、GAN 不稳、扩散慢、
这十年就是一条「拿新代价换旧代价」的链子,每一代都在修上一代的代价。
所以选路线要带上两件事:数据是连续还是离散、你的算力预算有多少——
连续数据走扩散/流匹配,离散数据走自回归;而这条界线正被互相拆零件的融合抹掉。
上面讲的都是「够用」的版本。想往下挖,这里有三个入口—— 它们不是必修内容,是给想再往前走一步的读者准备的。