第 3 章材料设计理由¶
这份文档回答:为什么第 3 章选这些内容?学完能做什么?不学/不做会缺什么?
也可以作为你提出新需求/修改课程的依据。
1. 本章定位¶
第 3 章不是“训练 SD 的工程课”,而是:
把 Stable Diffusion 从 tokenizer 到训练配方讲成一张完整的系统图。
因此材料遵循四条原则:
- 架构必须能画:VAE → latent → UNet → VAE;
- 公式必须能写:VAE ELBO、VQ 损失、Attention;
- 训练必须能复述:两阶段、冻结、CFG dropout、Offset Noise;
- 不做代码实现:不在 VAE/UNet/训练脚本上耗时间。
2. 材料地图¶
| 材料 | 为什么选 | 学完能做什么 | 不做什么 |
|---|---|---|---|
| 3.1 AE/VAE/VQ | A2/A3 的核心,SD 的 tokenizer | 比较三者,写 ELBO/VQ 损失 | 不实现 VAE/VQ |
| 3.2 LDM/SD | A5 的核心 | 画数据流,解释为什么快 | 不写 UNet |
| 3.3 Attention | A8/A16 的核心 | 写公式,解释文本注入 | 不实现 attention |
| 3.4 SD 训练 | A6/D7 的核心 | 复述两阶段,解释 Offset Noise | 不训练 SD |
| 05 面试题库 | 知识→表达 | 90 秒回答 7 道核心题 | 不覆盖所有题 |
| 06 练习 | 纸面检查 | 手算压缩率/形状,写公式 | 不做编程题 |
| 07 讲师手册 | 可授课 | 4 节课节奏/板书 | 不是学生必读 |
| 08 设计理由 | 解释取舍 | 判断增删/加深 | 不是知识点讲义 |
3. 每份材料的详细理由¶
3.1 为什么先讲 AE/VAE/VQ-VAE(3.1)¶
选择理由:
- A2 是 SD 架构的前置题;
- 不理解 VAE,就讲不清 latent diffusion;
- VQ-VAE/VQGAN 是 A2 的高频追问;
- 重参数化(A3)在 VAE 里最直观。
学到什么:
- AE 的确定性隐空间;
- VAE 的 ELBO/重参数/模糊;
- VQ-VAE 的 codebook/三项损失/straight-through;
- VQGAN 的 GAN/perceptual;
- SD 为什么用连续 VAE。
能处理什么:
- A2、A3;
- “SD 的 VAE 是不是 VQ-VAE”;
- “VAE 为什么模糊”;
- “VQ-VAE 怎么生成”。
为什么不做:
- 不实现 VAE/VQ;
- 不训练 codebook;
- 不展开所有变分推导。
取舍:用“结构 + 损失 + 对比表”替代代码实验。
3.2 为什么讲 LDM/SD(3.2)¶
选择理由:
- A5 是 SD 系统题的核心;
- 很多人只会说“SD 是 latent diffusion”,但画不出数据流;
- 计算量数字能直接支撑“为什么快”。
学到什么:
- 像素扩散 vs latent diffusion;
- SD 数据流;
- VAE/UNet/CLIP/Cross-Attn/CFG 分工;
- 48 倍压缩;
- 瓶颈。
能处理什么:
- A5;
- “为什么不用像素扩散”;
- “SD 为什么快”;
- “SD 的瓶颈在哪”。
为什么不做:
- 不写 UNet;
- 不跑模型;
- 不展开训练细节(3.4 讲)。
取舍:先系统图,再组件,再瓶颈。
3.3 为什么讲 Attention(3.3)¶
选择理由:
- A8/A16 是高频题;
- 文本如何进入图像,是 SD 的核心;
- attention 形状/复杂度是常见追问;
- MMDiT 是 SD3 的铺垫。
学到什么:
- Self/Cross 公式;
- Q/K/V 来源;
- 形状/复杂度;
- SD 中的位置;
- attention map;
- MMDiT。
能处理什么:
- A8/A16;
- “Q 从哪来”;
- “为什么放低分辨率”;
- “SD3 为什么改 MMDiT”。
为什么不做:
- 不实现 attention;
- 不做 attention 可视化代码;
- 不展开多头实现细节。
取舍:公式 + 形状 + 作用,足够面试。
3.4 为什么讲训练与 Offset Noise(3.4)¶
选择理由:
- A6 是 SD 训练的系统题;
- D7 是亮度问题的代表;
- 很多人把 Offset Noise 当“调亮技巧”,讲不清低频逻辑;
- zero terminal SNR/v-pred 容易与 Offset Noise 混淆。
学到什么:
- 两阶段训练;
- 冻结 VAE/文本编码器;
- CFG dropout/EMA/bucketing;
- 预测目标;
- Offset Noise 的公式、动机、代价;
- 与 zero terminal SNR/v-pred 的区别。
能处理什么:
- A6、D7;
- “为什么要分两阶段”;
- “Offset Noise 为什么有效”;
- “它和 zero terminal SNR 一样吗”。
为什么不做:
- 不训练 VAE/UNet;
- 不跑微调;
- 不做亮度实验。
取舍:训练流程图 + trick 动机 + 亮度直觉。
4. 为什么没有代码¶
第 3 章最容易滑向“写 VAE/UNet/训练脚本”。本课程刻意不做,原因:
- 面试考的是架构和训练逻辑,不是复现;
- 代码会占用大量时间,但不直接提升表达;
- 跑通不等于理解:可以调库,但画不出数据流;
- 本章产出是架构图、公式、训练流程,不是 repo。
如果以后需要代码,建议作为“可选实验”,不进入主线。
5. 学什么 → 能处理什么¶
| 学完 | 能处理的问题 | 能做的动作 |
|---|---|---|
| 3.1 | A2/A3、SD VAE | 写 ELBO/VQ 损失,比较三者 |
| 3.2 | A5、SD 架构 | 画数据流,算压缩率 |
| 3.3 | A8/A16、文本注入 | 写公式,算形状,解释 MMDiT |
| 3.4 | A6/D7、训练/亮度 | 画两阶段,解释 Offset Noise |
| 05 | 面试追问 | 90 秒回答 |
| 06 | 自我检查 | 手算、推导、错题归因 |
6. 本章不覆盖什么¶
- 不覆盖 VAE 的完整变分推导;
- 不覆盖 UNet 每个模块;
- 不覆盖 SDXL/SD3 的完整演进(第 5 章);
- 不覆盖微调/LoRA/ControlNet(第 4 章);
- 不覆盖训练工程/分布式。
这些不是不重要,而是不属于第 3 章的面试主线。
7. 你可以怎么改¶
7.1 加深数学¶
- 加 VAE 的完整 ELBO 推导;
- 加 VQ-VAE 的梯度推导;
- 加 attention 的矩阵分解;
- 加 Offset Noise 的频率分析。
7.2 增加代码(可选)¶
- 给 VAE/attention 的 20 行伪代码;
- 给“代码阅读题”;
- 不要求运行。
7.3 增加面试训练¶
- 加 30 题题库;
- 加英文版;
- 加“画图 + 追问”模拟;
- 加 SDXL/SD3 对比。
7.4 调整比例¶
- 少讲 VQ,多讲 VAE/SD;
- 少讲训练,多讲 attention;
- 增加 SDXL/SD3;
- 增加 Offset Noise 实验分析(纸面)。
建议:每加一块内容,就删一块低优先级内容,保持 90 分钟。
8. 怎么判断学会了¶
L1 能复述¶
能讲 3 分钟“SD 是什么”。
L2 能画/写¶
能画 SD 数据流,写 VAE ELBO/Attention 公式。
L3 能比较¶
能比较 AE/VAE/VQ、Self/Cross、SD1.5/XL/3。
L4 能应对追问¶
能回答“为什么用连续 VAE”“为什么 cross-attn 放低分辨率”“Offset Noise 为什么有效”。
本章目标是 L2–L3,面试冲刺是 L4。
9. 最后一句话¶
第 3 章的价值,不是让你会训练 SD,而是让你能在白板上画出 SD,并解释每个模块为什么存在。