Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 4 讲导览 · 深度生成建模

这一讲要解决的真实问题

前三讲的模型都在回答同一个问题:给定 x\boldsymbol x,预测 yy。分类、回归、序列标注、目标检测,学的都是条件分布 p(y∣x)p(y\mid\boldsymbol x)。这一讲把方向掉转 180°——只给数据,不给标签,让模型学数据自身的分布 p(x)p(\boldsymbol x),并且能从中采样出训练集里没有、却又像真的图像、音频、动作序列与离散符号。

这件事为什么难?因为「像不像」没有一个像交叉熵那样现成的、逐样本可算的损失。三类做法由此分岔:显式似然路线(自回归、流、VAE、扩散)写下一个目标函数(或它的下界)去最大化;隐式路线(GAN)不写似然,用「能否骗过判别器」当信号;得分—能量路线(score-based / EBM)只学密度函数的梯度或相对高度。本讲按「密度能不能算 → 采样能不能快 → 训练稳不稳」三根轴,把这条谱系走一遍。

第二件难事是代价。生成建模里没有免费午餐:能量化的取舍至少有四个轴——似然、样本质量与多样性、训练稳定性、采样代价。VAE 一次前向出样本但偏糊;GAN 锐利却脆弱且会模式坍塌;扩散稳定、质量高、可控,但要迭代几十到上千步;自回归似然完备可算,却必须一个一个 token 串行生成。这一讲的每一节都在回答「某一根轴上你放弃了什么、换来了什么」。

第三件难事是评价。FID / IS 这类代理指标有明确的方法论缺陷(见 4.1),但工业界又离不开它们。本教程的处理方式是:把指标的定义、它真正度量的东西、以及它无法度量的东西分别写清楚,并给出「人类偏好评估」的位置。

八节一览

节核心问题关键结论典型陷阱
4.1 生成建模要做什么生成模型的定义、分类学与评价困境是什么?生成 = 密度(或相对分数)+ 采样;谱系分三支:显式似然(AR / 流 / VAE / 扩散)、隐式(GAN)、得分—能量把「似然高」当成「样本好」——两者在多模态数据上系统性错位
4.2 自编码器:压缩,不是生成能重建,为什么不能当生成模型?AE 学的是「数据窄带上的编码—解码表」,潜空间无先验、团间是空洞,随机采的 zz 落在低密度区用「重建损失很低」当生成能力强弱的证据
4.3 变分自编码器:把潜空间变成可采样的空间怎样让潜空间「可采样」?三件套缺一不可:先验 p(z)=N(0,I)p(z)=\mathcal N(0,I) 定采样起点、ELBO 定目标、重参数化让采样可导;KL 有闭式采样时用后验而不是先验取 zz(那是在做重建);丢掉 KL 项把 VAE 退化回 AE
4.4 生成对抗网络:用博弈换锐利无似然的生成靠什么信号?最优判别器 D⋆=pdata/(pdata+pg)D^\star=p_{\text{data}}/(p_{\text{data}}+p_g) 把博弈化成最小化 JS 散度;支撑不重叠时 JS 是常数→梯度消失以为 GAN 训不好都是代码 bug;把模式坍塌当成调参问题
4.5 扩散模型:把生成拆成多步去噪怎样用「回归」替代「博弈」,换来稳定与质量?前向闭式 xt=αˉtx0+1−αˉtεx_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon;训练就是预测所加噪声;DDIM 提供确定性少步采样;CFG 用两个条件分支的差放大引导训练与采样的噪声调度 / 归一化范围不一致,导致采样直接崩坏
4.6 潜空间扩散与整流流像素空间扩散贵在哪里?直线搬运为什么更省步数?LDM 把扩散搬到 VAE 潜空间(两阶段训练);DiT 用 Transformer + adaLN-Zero 替换 U-Net;整流流回归直线速度场,配合重流化把轨迹拉直;一致性模型学「任意时刻 → 原图」的一步映射以为「少步」等于「一步」;忽略潜空间编码器本身带来的重建误差上限
4.7 离散与自回归生成:VQ 家族与视觉自回归连续潜空间之外,离散 token 路线怎么工作?VQ-VAE 用量化和直通估计量拿到离散代码;FSQ 用标量量化绕开代码本学习;VAR 把光栅扫描换成 next-scale prediction;掩码扩散语言模型是文本上的离散去噪把代码本利用率低当成「容量不够」;以为自回归只能光栅扫描
4.8 应用谱系与取舍面对真实任务,怎么选、怎么改、怎么标?四轴取舍表 + 决策表;定制与编辑(ControlNet / LoRA / inpainting)是「条件注入」问题;水印与溯源是部署的必要件拿单一 FID 数字做全量对比;忽略数据授权与溯源要求

本讲地图

                [4.1 生成建模要做什么]
        定义 / 三支谱系 / 采样与似然 / 评价困境
                          │
        ┌─────────────────┼─────────────────┐
        ▼                 ▼                 ▼
  [4.2 自编码器]     [4.4 GAN]        (离散路线留到 4.7)
   压缩 ≠ 生成       博弈换锐利
        │                 │                 │
        │ 补上场        │ 补上距离
        ▼                 ▼                 │
  [4.3 VAE] ◄──── 潜空间可采样 ────► [4.6 LDM 的潜空间]
   ELBO / 重参数化 / KL 闭式 / 后验坍塌      │
        │                                   │
        │ 把「一次生成」拆成多步               │
        ▼                                   ▼
  [4.5 扩散:前向闭式 / 简化目标 / DDIM / CFG] ──► [4.6 潜空间扩散 · DiT · 一致性 · 整流流]
                                              │
                                              ▼
                            [4.7 离散与自回归:VQ → FSQ · VAR · 掩码扩散]
                                              │
                                              ▼
                            [4.8 应用谱系与取舍:四轴对照 · 定制编辑 · 溯源]

  依赖关系:4.2 → 4.3(AE 的缺口正是 VAE 要补的那一块)
            4.3 → 4.6(LDM 的第一阶段就是一个 VAE 编码器,其重建误差是上层扩散的天花板)
            4.4 与 4.5 平行(两条不同的信号来源:博弈 vs 回归),在 4.6 的对抗蒸馏处合流
            4.5 → 4.6 → 4.7(从像素扩散到潜空间扩散,再到离散潜码与自回归)
            4.1–4.7 → 4.8(取舍与落地)

四类骨架的取舍速查(本讲的「一张总表」)

这张表是本讲唯一一个值得背下来的东西。八节内容都可以从它出发推导:每一节是在某一根轴上做取舍。

模型显式似然样本质量训练稳定性采样代价可控性潜空间结构
AE(4.2)无—(不能生成)高(纯回归)——无概率结构(不可采样)
VAE(4.3)有下界(ELBO)偏模糊 / 平滑高(重建 + KL 的回归)低(一次前向)中(条件 VAE / 潜空间编辑)由 KL 拉成连续、可插值的空间
GAN(4.4)无(只有相对判别)锐利低(鞍点博弈)低(一次前向)中(条件注入容易)隐式,无密度
扩散(4.5)有(可写出变分下界)高且多样高(逐步去噪回归)高(TT 次前向)高(CFG / ControlNet / inpainting)时间步本身充当分层潜变量
潜空间扩散(4.6)有(同上)高(有解码器上限)高中(步数 × 小分辨率)高两层:VAE 潜空间 + 时间步
流匹配 / 整流流(4.6)有(连续时间视角)高高低~中(路径直 → 少步)高连续时间轨迹
离散 AR / VQ 家族(4.7)可精确算(连乘)中~高高高(逐 token 串行)中有限码本(离散)

四个轴就是四句话:似然决定「能不能比较谁拟合得更好」;质量与多样性决定「产出能不能用」;稳定性决定「训练要花多少人天」;采样代价决定「能不能做成实时产品」。没有一根轴可以同时最优——这正是本讲要反复强调的工程现实。

本讲新增的概念(相对旧版讲义)

组概念首次出现
框架生成模型的三支分类学、采样与似然的关系、FID / IS 的局限与人类偏好评估4.1
基础瓶颈与信息压缩、正则化自编码器作为过渡、潜空间空洞的判据4.2
似然ELBO 的两种推导、重参数化的梯度流、KL 闭式、后验坍塌与 β-VAE、条件 VAE4.3
对抗最优判别器与 JS 散度、非饱和损失、WGAN 的 Kantorovich–Rubinstein 对偶、WGAN-GP、TTUR / 谱归一化 / EMA4.4
扩散前向闭式的归纳证明、变分下界到简化损失的降权结论、DDIM 确定性采样、CFG 公式与引导尺度4.5
拓展LDM 两阶段训练与算力账、DiT 的 adaLN-Zero、一致性模型与 LCM、整流流的速度场与重流化、少步采样对照表4.6
拓展VQ-VAE 量化 / 直通估计 / commitment loss、VQGAN 的对抗+感知损失、FSQ 标量量化、VAR 的 next-scale prediction、掩码扩散语言模型4.7
落地编辑与定制(ControlNet / LoRA / inpainting)、水印与溯源、五维选型决策表4.8

与实验和项目的关系

  • Lab 1 · 深度学习入门与音乐生成 的第二部分用字符级 RNN 续写旋律,那是自回归生成的入门版本,对应 4.7 讲的「序列逐 token 生成」这条平行路线;把同一份代码的「温度」旋钮与 4.5 的 CFG 引导尺度对照着看,会发现两者都在做同一件事:调整「贴合训练分布」与「多样性」的权重(本教程的类比,不是术语等价)。
  • Lab 2 · 人脸检测系统 的对抗样本部分与 4.4 同源:都是「梯度能被反向利用」,只是目的相反(一个要骗过判别器,一个要骗过分类器)。
  • Lab 3 · 微调一个大语言模型 处理的是离散 token 上的生成;其中 LoRA 的思想在 4.8 的定制一节里以「图像生成的 LoRA」再次出现。
  • 期末项目:生成建模方向的可选题目包括——在小型数据集上复现 VAE 与 DDIM 并对比 FID、把扩散策略用到自己的控制任务、给一个生成模型加可控条件。选题时先读 4.8 的决策表,把「质量 / 速度 / 多样性 / 可控性 / 训练成本」写成明确指标,再动手。
怎么用这一讲

第一遍(约 4–5 小时,建立地图):按 4.1 → 4.2 → 4.3 → 4.4 → 4.5 顺序读,跳过所有 proof 折叠框。目标是能在白纸上画出三支谱系的分岔点,并说出每个模型「在哪轴上妥协」。4.6、4.7 是拓展节,第一遍可以只读动机段与结论表。

必读、不许跳的框:

  • 每个 def 之后的 intuition(生成建模的手感几乎全在这里);
  • 4.3 的 ELBO 推导与重参数化(本讲唯一的「必须会推」的地方);
  • 4.4 的最优判别器与 JS 散度(理解 GAN 病根的唯一入口);
  • 4.5 的前向闭式与简化目标(后面所有扩散变体都建立在它上面);
  • 4.8 的四轴对照表与决策表(考前、面试前、选型前各看一次)。

二刷(约 5–6 小时,补齐中间步骤):逐行读 proof——4.3 的两种 ELBO 推导与 KL 闭式、4.4 的 JS 散度代回与 WGAN 对偶、4.5 的前向闭式归纳与变分下界降权、4.6 的整流流直线性论证。读完后合上书,从零把 ELBO 推一遍、把扩散的简化损失推一遍。

动手:依次跑 4.3 的 VAE 训练循环、4.5 的极简扩散采样、4.6 的整流流速度场回归。三份代码结构高度相似(都是「构造一批数据 → 定义损失 → 反向传播」),把三者的损失函数并排贴出来,你会看清本讲的主线。

自检路径:每节的「即时自测」→ 本讲习题集(A/B/C/D 四组)→ 闭卷回忆卡(当天 / 隔天 / 第 3 天 / 第 7 天)→ 综合自测卷(闭卷计时,100 分制)。

时间预算参考:只求建立谱系直觉,读 4.1 与 4.8 两节的表格(约 40 分钟);要能自己写出 VAE 与扩散的最小实现,走完上面全部两遍并做完三份代码(约 12–15 小时)。

下一讲引子

本讲把「预测」换成了「采样」,但用的仍是第 1 讲那套「结构 + 损失 + 梯度下降」的范式:只把交叉熵 / MSE 换成 ELBO、对抗目标与去噪 MSE。下一讲要换掉的地方更彻底——没有标签,也没有「正确答案」,只有「做了动作之后环境给的奖励」。强化学习要回答的是「在不知道正确做法的情况下,如何从试错中改进策略」,而本讲的生成模型会在那里以另一种身份再次出现:当策略需要表达多模态动作分布时,人们直接用扩散模型来当策略(diffusion policy)。

三句话带走

  1. 生成建模的目标是学会 p(x)p(\boldsymbol x) 并能从中采样,与判别模型「学 p(y∣x)p(y\mid\boldsymbol x)」是两条不同的路;「能重建」远不等于「能采样」——这条界线贯穿全讲(4.2 给出它最锋利的版本)。
  2. 四类骨架各有一招:AE 只有重建、没有分布;VAE 用 ELBO == 重建 −- KL 把潜空间变成可采样的连续空间(靠重参数化才使采样可导);GAN 用对抗博弈逼出锐利样本,代价是脆弱与模式坍塌;扩散把生成拆成多步去噪回归,稳、质量高、可控,代价是采样慢——而 4.6 的整套工程就是围绕这一个代价展开的。
  3. 取舍就看四个轴:似然(VAE / 扩散 / 流有,GAN 没有)· 质量与多样性(GAN / 扩散锐利,VAE 偏糊)· 稳定性(VAE / 扩散 / 流稳,GAN 脆)· 采样代价(VAE / GAN 一次前向,扩散 TT 步,离散 AR 串行)。4.7 补上第五条判断:离散表示把生成变成分类,因此天生能表达多模态;连续回归天生产生平均化。

与后续的连接

本讲把「预测」换成了「采样」,但用的仍是第 1 讲那套「结构 + 损失 + 梯度下降」的范式,只是损失从交叉熵 / MSE 换成了 ELBO、对抗目标、去噪 MSE 或速度回归。往后看:

  • 第 2 讲的序列建模与注意力,其实就是自回归生成模型的另一条路线(把 p(x)p(\boldsymbol x) 拆成条件概率连乘),与扩散的「一次生成整个样本」互补;4.6 的 DiT 直接把 Transformer 当生成主干,两讲在这里会合。
  • 第 5 讲强化学习里,本讲的生成模型可以直接当策略(扩散策略 / 流匹配策略)。4.8 的选型表里有一条专门讲这个场景,以及它为什么天然适合多模态动作分布。
  • 第 6 讲的离散扩散语言模型与 4.7 是同一套机制在文本上的应用;第 9 讲的 LoRA / QLoRA 与 4.8.2 的图像 LoRA 共用同一个低秩增量的思想。
  • Lab 1 的音乐生成是自回归生成的入门实践,Lab 3 微调大语言模型则是把本讲的生成思想用到文本模态上。

编号与引用约定

本讲的盒子与锚点遵循全书规范:定义 / 定理族编号形如 4.X.Y(讲.节.序号),锚点为 {#def-4.X.Y}、{#thm-4.X.Y},页内小节用 ### 4.X.Y 标题 {#sec-4.X.Y}。正文里引用同页盒子用 形如 定义 4.5.1 的引用记号,引用同页小节用 [4.X.Y](#sec-4.X.Y),跨页引用用相对路径(如 [4.5.5](sec45.md))。凡是标「需核实」的编号,请以论文官方页面或会议版本为准——本讲涉及的部分开源项目与官方技术报告(如 FLUX 的模型卡、Sora 的官方技术报告)没有正式论文与 arXiv 编号,引用时请指向官方材料;另有少数编号在本教程中未逐字核对,已就地标注。