3.2 LDM 与 SD 核心优化¶
所属章节:第 3 章 Latent Diffusion 与 Stable Diffusion
课时:90 分钟
前置:3.1 VAE/VQ-VAE
对应面试题:A5
一句话目标:学完能画出 SD 数据流,解释 Latent Diffusion 为什么快,并说清 VAE/UNet/CLIP/Cross-Attn/CFG 的分工。
1. 学习目标¶
学完本节,你应该能够:
- 解释 Latent Diffusion 与像素扩散的区别;
- 画出 SD 的完整数据流;
- 说明 VAE、UNet、文本编码器、Cross-Attention 各自负责什么;
- 计算 latent 压缩带来的计算量下降;
- 解释 SD 的核心优化与瓶颈;
- 用 90 秒回答 A5,并接住“为什么不用像素扩散”的追问。
2. 从像素扩散到 Latent Diffusion¶
像素扩散:
网络直接在 \(x\in\mathbb R^{H\times W\times3}\) 上去噪。
Latent Diffusion:
在 latent 上扩散:
网络预测 \(\epsilon_\theta(z_t,t,c)\),最后:
关键区别:
- 扩散发生在低维 latent;
- VAE 只编码/解码一次;
- 文本条件通过 cross-attention 注入 UNet。
3. SD 的完整数据流¶
文本 prompt
│
▼
CLIP Text Encoder
│ token embeddings
▼
Cross-Attention(注入 UNet)
▲
│
噪声 z_T ──> UNet 去噪 ──> z_0 ──> VAE Decoder ──> 图像
更细一点:
- 文本 → tokenizer → CLIP → 文本 token 特征;
- 图像(训练时)→ VAE Encoder → latent \(z_0\);
- 采样噪声 \(\epsilon\),得到 \(z_t\);
- UNet 输入 \(z_t\)、时间步 \(t\)、文本条件 \(c\);
- UNet 内 self-attention 建模图像内部关系,cross-attention 注入文本;
- 预测噪声,逐步去噪到 \(z_0\);
- VAE Decoder 解码成图像。
4. 四个核心组件¶
4.1 VAE¶
- 图像 ↔ latent;
- 8 倍下采样,4 通道;
- 训练:重建 + perceptual + adversarial;
- 冻结后用于扩散训练;
- 是生成质量的“上限”之一。
4.2 UNet¶
- 去噪主干;
- 编码器—解码器 + skip connection;
- 残差块、self-attention、cross-attention;
- 时间步通过 embedding 注入。
4.3 文本编码器¶
- SD1.x/2.x 用 CLIP;
- SDXL 用 CLIP-L + OpenCLIP bigG;
- SD3 加 T5;
- 通常冻结,只训练 cross-attention 投影和 UNet。
4.4 Cross-Attention¶
- 图像特征做 Query;
- 文本 token 做 Key/Value;
- 把文本信息注入每个空间位置;
- 是 SD 条件生成的核心。
4.5 CFG¶
- 训练时条件 dropout;
- 推理时条件和无条件组合;
- 提升 prompt 跟随;
- 成本约翻倍。
5. 为什么 Latent Diffusion 快¶
5.1 计算量对比¶
512×512×3:
64×64×4:
倍率:
5.2 注意力成本¶
Self-attention 复杂度与 token 数的平方相关:
latent 的 \(N\) 从 \(512^2\) 降到 \(64^2\),注意力成本大幅下降。
5.3 VAE 只跑一次¶
- 编码一次;
- 扩散多步都在 latent;
- 解码一次;
- 相比每步都在像素空间跑 UNet,省很多。
6. SD 的核心优化到底是什么¶
如果只选一个:
Latent Diffusion:把扩散搬到 VAE 潜空间。
围绕它的四个关键设计:
- VAE 压缩:降低空间维度;
- Cross-Attention:文本条件注入;
- CFG:增强 prompt 跟随;
- UNet/数据/训练配方:质量与可扩展性。
面试时不要只说“SD 用了 latent”,要能解释:
- latent 多大;
- 为什么快;
- VAE 为什么是瓶颈;
- 文本怎么进去。
7. 瓶颈在哪里¶
- VAE 重建质量:VAE 糊,最终图也糊;
- 文本编码器上限:CLIP 77 token、组合性弱;
- Cross-Attention 分辨率/层数:条件注入不够细;
- 采样步数/CFG:速度与质量权衡;
- 显存带宽:高分辨率/大模型;
- 数据质量:caption、分辨率、审美过滤。
8. 版本差异(预告)¶
| 版本 | 主要变化 |
|---|---|
| SD 1.x | CLIP-L,512,UNet,4ch VAE |
| SD 2.x | OpenCLIP-H,512/768,ε/v |
| SDXL | 双文本编码器,1024,micro-conditioning,refiner |
| SD3 | MMDiT,Rectified Flow,T5,16ch VAE |
本节先把 SD1.x 的架构讲清,后面再展开演进。
9. 90 秒回答:SD 的核心优化¶
面试官问:Stable Diffusion 的核心优化是什么?
参考回答:
“核心是 Latent Diffusion:先用 VAE 把图像压到 8 倍下采样、4 通道的 latent,扩散在 latent 上做,而不是像素空间。512×512×3 变成 64×64×4,空间元素少约 48 倍,注意力和卷积成本大幅下降。然后 UNet 去噪,文本通过 CLIP + cross-attention 注入,推理用 CFG 增强 prompt 跟随。VAE 只编码/解码一次,所以整体比像素扩散快很多。代价是 VAE 重建质量会成为上限,文本编码器也有 77 token 等限制。”
10. 追问与回答¶
追问 1:为什么不用像素扩散?¶
计算量太大,高分辨率下注意力/卷积成本高;latent 压缩后可以在有限算力下训练大模型。
追问 2:VAE 会不会损失细节?¶
会,VAE 是瓶颈;所以 SD 的 VAE 用 perceptual + adversarial 训练,SD3 还用 16 通道 VAE 改善重建。
追问 3:文本编码器为什么要冻结?¶
降低训练成本、保持语义能力;只训练 cross-attention 和 UNet 就够。
追问 4:CFG 是必须的吗?¶
不是,但它是提升 prompt 跟随的主流方法;代价是两次前向和可能的过饱和。
11. 常见误区¶
- “SD 在像素空间扩散”:它在 VAE latent 上扩散。
- “latent 越小越好”:太小会丢细节,VAE 重建是瓶颈。
- “VAE 负责生成”:生成由扩散完成,VAE 负责压缩/解码。
- “文本编码器也全量训练”:通常冻结。
- “SD 的核心只是 UNet 更大”:核心是 latent diffusion + 条件注入。
12. 课堂练习¶
答案见 06 章节练习与答案。
- 画 SD 数据流。
- 计算 512/768/1024 的 latent 尺寸(8 倍下采样)。
- 解释为什么 latent diffusion 快。
- 说出 VAE/UNet/CLIP/Cross-Attn 的分工。
- 用 90 秒回答 A5。
13. 自测清单¶
- [ ] 能画 SD 数据流;
- [ ] 能解释 latent diffusion;
- [ ] 能算压缩倍率;
- [ ] 能说出四个核心组件;
- [ ] 能指出至少两个瓶颈;
- [ ] 能 90 秒回答 A5。
14. 本节材料为什么这样设计¶
- 先数据流再组件:先有全局图,再拆模块。
- 计算量数字:让“为什么快”可验证。
- 瓶颈单列:面试常追问“SD 的局限”。
- 不写代码:本节是架构和取舍。
详细设计理由见 08 材料设计理由。