第 3 章讲师手册
用途:把第 3 章 4 节课讲顺,控制节奏,知道哪里停、哪里追问。
原则:讲架构、公式和训练流程,不做代码实现;用图和白板驱动。
1. 授课对象与前置
对象:
- 已学完 DDPM/采样/CFG;
- 知道 latent diffusion 的大致概念;
- 准备面试,需要把 SD 讲成系统。
前置:
- 第 1–2 章;
- 会写 VAE ELBO;
- 知道 attention 的基本公式(不熟也没关系,本节会讲)。
不需要:
2. 四节课总览
| 课次 |
主题 |
核心产出 |
对应材料 |
| 第 1 课 |
AE/VAE/VQ-VAE |
三者对比表 + 损失 |
3.1 |
| 第 2 课 |
LDM 与 SD |
SD 数据流图 |
3.2 |
| 第 3 课 |
Attention |
attention 公式 + 形状 |
3.3 |
| 第 4 课 |
SD 训练 + Offset Noise |
两阶段训练图 + 亮度解释 |
3.4 |
3. 第 1 课:AE/VAE/VQ-VAE
3.1 时间安排(90 分钟)
| 时间 |
环节 |
内容 |
| 0–5 |
开场 |
tokenizer 在 SD 中的位置 |
| 5–25 |
AE/VAE |
重建、ELBO、重参数 |
| 25–45 |
VQ-VAE |
codebook、三项损失、straight-through |
| 45–60 |
对比 |
连续 vs 离散、SD 的选择 |
| 60–75 |
白板 |
写 ELBO/VQ 损失 |
| 75–85 |
面试 |
90 秒 A2 |
| 85–90 |
小结 |
作业 |
3.2 板书布局
左侧:AE → VAE → VQ-VAE 演进
中间:VAE ELBO + 重参数
右侧:VQ 三项损失 + straight-through
底部:SD 为什么用连续 VAE
3.3 关键提问
- AE 为什么不能采样?
- VAE 为什么模糊?
- VQ-VAE 的 codebook 怎么更新?
- straight-through 和重参数化有什么区别?
- SD 为什么不用 VQ-VAE?
3.4 常见卡点
| 卡点 |
处理 |
| 分不清 AE/VAE |
用“有无先验”区分 |
| VQ 三项损失记不住 |
用“重建/codebook/commit”三个词 |
| 重参数化理解不了 |
先讲 \(z=\mu+\sigma\epsilon\) |
| SD 的 VAE 混淆 |
强调连续、4 通道、8 倍 |
4. 第 2 课:LDM 与 SD
4.1 时间安排(90 分钟)
| 时间 |
环节 |
内容 |
| 0–5 |
回忆 |
VAE 压缩 |
| 5–25 |
LDM |
像素 vs latent、数据流 |
| 25–45 |
组件 |
VAE/UNet/CLIP/Cross-Attn/CFG |
| 45–60 |
计算 |
48 倍压缩、latent 尺寸 |
| 60–75 |
白板 |
画 SD 数据流 |
| 75–85 |
面试 |
90 秒 A5 |
| 85–90 |
小结 |
作业 |
4.2 板书布局
左侧:图像 → VAE → latent → UNet → VAE → 图像
中间:文本 → CLIP → Cross-Attn
右侧:512→64 的计算
底部:瓶颈(VAE/文本/采样)
4.3 关键提问
- 为什么在 latent 上扩散?
- VAE 只跑几次?
- 文本怎么进去?
- CFG 在哪里?
- SD 的瓶颈是什么?
4.4 常见卡点
| 卡点 |
处理 |
| 说 SD 在像素扩散 |
画 latent 尺寸 |
| 只会说“用了 VAE” |
讲 VAE 只编码/解码一次 |
| 忽略 cross-attn |
画文本→K/V |
| 不知道瓶颈 |
列 VAE/文本/采样 |
5. 第 3 课:Self/Cross Attention
5.1 时间安排(90 分钟)
| 时间 |
环节 |
内容 |
| 0–5 |
回忆 |
SD 数据流 |
| 5–25 |
Self-Attn |
QKV、公式、复杂度 |
| 25–45 |
Cross-Attn |
Q 图像、K/V 文本、形状 |
| 45–60 |
位置/作用 |
UNet 中的位置、attention map |
| 60–75 |
白板 |
写公式 + 算形状 |
| 75–85 |
面试 |
90 秒 A8/A16 |
| 85–90 |
小结 |
作业 |
5.2 板书布局
左侧:Self-Attn 公式(QKV 同源)
中间:Cross-Attn 公式(Q 图像,KV 文本)
右侧:形状 N×L、复杂度
底部:MMDiT = 联合 attention
5.3 关键提问
- Q/K/V 分别来自哪里?
- 为什么 cross-attn 放低分辨率?
- attention map 怎么解释?
- 77 token 有什么影响?
- MMDiT 和 cross-attn 的区别?
5.4 常见卡点
| 卡点 |
处理 |
| Q/K/V 来源说反 |
用颜色标注图像/文本 |
| 不会算形状 |
先写 N、L、d |
| 把 attention 当解释 |
强调相关性 |
| 以为 MMDiT 只是更大 |
讲联合双向 |
6. 第 4 课:SD 训练 + Offset Noise
6.1 时间安排(90 分钟)
| 时间 |
环节 |
内容 |
| 0–5 |
回忆 |
SD 架构 |
| 5–25 |
两阶段 |
VAE 训练 + LDM 训练 |
| 25–45 |
trick |
CFG dropout/EMA/bucketing/数据 |
| 45–60 |
预测目标 |
ε/v/flow |
| 60–75 |
Offset Noise |
动机、公式、代价 |
| 75–85 |
面试 |
90 秒 D7 / 2 分钟 A6 |
| 85–90 |
小结 |
作业 |
6.2 板书布局
左侧:阶段 1 VAE(重建+perceptual+GAN)
中间:阶段 2 LDM(z0 → zt → εθ)
右侧:Offset Noise 低频偏移
底部:ε / v / flow 对比
6.3 关键提问
- 为什么分两阶段?
- 为什么冻结 VAE/文本编码器?
- CFG dropout 的作用?
- Offset Noise 为什么是低频?
- 它和 zero terminal SNR 的区别?
6.4 常见卡点
| 卡点 |
处理 |
| 说端到端训练 |
画两阶段 |
| 把 Offset Noise 当推理 |
强调训练时 |
| 混淆亮度/端点问题 |
用三者对比表 |
| 不知道预测目标 |
讲 ε/v/flow |
7. 教学节奏控制
基础弱
- 先画图,再上公式;
- VQ-VAE 只讲三项损失和 straight-through;
- attention 只讲 Q/K/V 来源;
- Offset Noise 用“平均亮度”直觉。
基础好
- 加问 VAE posterior collapse;
- 加问 codebook collapse;
- 加问 attention 复杂度/显存;
- 加问 SDXL/SD3 的 VAE 变化。
时间不够
优先级:
- SD 数据流;
- Cross-Attention;
- 两阶段训练;
- Offset Noise;
- VQ-VAE 细节。
8. 课堂禁忌
- ❌ 不要现场写 UNet/VAE;
- ❌ 不要跑训练;
- ❌ 不要堆架构细节;
- ❌ 不要只讲公式,不画数据流;
- ❌ 不要把 Offset Noise 说成推理技巧。
9. 课前检查清单
- [ ] SD 数据流图已准备;
- [ ] VAE/VQ 公式已练;
- [ ] Attention 形状例子已算;
- [ ] 两阶段训练图已画;
- [ ] Offset Noise 对比表已准备;
- [ ] 90 秒答案已练。
10. 相关材料