3.4 SD 训练与 Offset Noise¶
所属章节:第 3 章 Latent Diffusion 与 Stable Diffusion
课时:90 分钟
前置:3.1–3.3
对应面试题:A6、D7
一句话目标:学完能复述 SD 两阶段训练,解释每个训练 trick 的作用,并说清 Offset Noise 为什么能改善极暗/极亮图像。
1. 学习目标¶
学完这一节,你应该能够:
- 复述 SD 的两阶段训练;
- 解释 为什么冻结 VAE 和文本编码器;
- 说明 CFG dropout、EMA、bucketing 的作用;
- 区分 \(\epsilon\)/\(v\)/flow 三种预测目标;
- 解释 Offset Noise 的动机、公式和代价;
- 区分 Offset Noise、Zero Terminal SNR、\(v\)-prediction;
- 用 2 分钟回答 A6,用 90 秒回答 D7。
2. 两阶段训练总览¶
阶段 1:训练 VAE(图像 ↔ latent)
↓
阶段 2:冻结 VAE,训练 Latent Diffusion UNet
↓
文本编码器通常也冻结
2.1 阶段 1:VAE¶
- 编码器 \(E\):图像 → 4 通道 latent;
- 解码器 \(D\):latent → 图像;
- 损失:
- 重建损失(L1/L2);
- perceptual loss(LPIPS);
- adversarial loss(patch discriminator)。
- 目标:8 倍下采样,同时保留细节;
- 训练好后冻结。
2.2 阶段 2:Latent Diffusion¶
- 图像 \(x_0\) → VAE 编码 \(z_0\);
- 采样 \(t\)、噪声 \(\epsilon\);
- \(z_t=\sqrt{\bar\alpha_t}z_0+\sqrt{1-\bar\alpha_t}\epsilon\);
- 文本编码 \(c\);
- UNet 预测 \(\epsilon_\theta(z_t,t,c)\);
- MSE 损失,反传更新 UNet。
目标:
3. 关键训练 trick¶
3.1 冻结 VAE¶
- VAE 已能压缩/解码;
- 联合训练不稳定、计算量大;
- 冻结后扩散只学去噪;
- 代价:VAE 重建质量成为上限。
3.2 冻结文本编码器¶
- CLIP 已经学好语义;
- 冻结降低训练成本;
- 只训练 cross-attention 投影和 UNet;
- 代价:文本编码器的 77 token/组合性限制会传递。
3.3 CFG dropout¶
- 以约 10% 概率把文本置空;
- 让同一网络同时具备条件和无条件能力;
- 推理时才能做 CFG。
3.4 EMA¶
- 维护模型权重的滑动平均;
- 采样时用 EMA 权重;
- 提升稳定性/质量。
3.5 分辨率分桶¶
- 多宽高比训练;
- 避免统一 resize 造成裁剪/变形;
- 每个 batch 内按分辨率分桶;
- 提升多比例生成质量。
3.6 数据过滤¶
- 分辨率;
- aesthetic 分数;
- NSFW;
- 水印/重复;
- caption 质量。
3.7 混合精度/梯度检查点¶
- 降显存;
- 提速;
- 大模型训练必备。
4. 预测目标:\(\epsilon\) / \(v\) / flow¶
4.1 \(\epsilon\)-prediction¶
网络预测噪声:
- 最常用;
- 目标尺度稳定;
- SD1.x/XL 常见。
4.2 \(v\)-prediction¶
- 高低噪声两端更平衡;
- SD2.1 768-v 等使用;
- 可与 zero terminal SNR 配合。
4.3 Flow / velocity¶
SD3 使用 Rectified Flow:
- 预测速度;
- Euler/Heun 采样;
- 见第 5 章。
具体版本以官方配置为准,面试时说“SD1.x/XL 常用 ε,SD2 有 v 变体,SD3 用 flow”即可。
5. Offset Noise¶
5.1 现象¶
SD 容易生成“中间亮度”的图:
- 极暗/极亮场景不稳定;
- 纯黑/纯白背景容易灰;
- prompt 写“very dark”不一定有效。
5.2 原因:低频噪声不足¶
标准前向:
标准高斯噪声每个像素独立、均值为 0,整张图的平均噪声接近 0。因此训练时很少出现“整张 latent 有明显正/负偏移”的样本。
但生成极暗图需要 latent 有明显负均值。模型没怎么见过这种全局偏移,就容易回归到数据集的平均亮度。
5.3 做法¶
给噪声加一个每通道共享、空间不变的偏移:
其中 \(\eta\) 在每个通道内所有空间位置相同,\(\sigma_{\mathrm{offset}}\) 常取 0.1 左右。
训练时:
推理时仍用标准高斯噪声,不需要额外加 offset。
5.4 效果与代价¶
改善:
- 极暗/极亮;
- 强对比;
- 纯色背景;
- 全局亮度控制。
代价:
- 可能影响部分构图/多样性;
- 属于微调技巧;
- 不是原始 SD 的必需组件。
5.5 和 Zero Terminal SNR / \(v\)-prediction 的区别¶
| 方法 | 解决什么 |
|---|---|
| Offset Noise | 低频亮度偏移不足 |
| Zero Terminal SNR | \(t=T\) 端点训练/推理不一致 |
| \(v\)-prediction | 高低噪声端预测尺度不平衡 |
三者可以组合,但机制不同。
6. 90 秒回答:Offset Noise 为什么有用¶
面试官问:训练 SD 时为什么要用 Offset Noise?
参考回答:
“标准高斯噪声每个像素独立、均值为 0,整张图的低频/平均分量很小。SD 训练时很少见到整体偏亮或偏暗的 latent,所以模型倾向于生成中间亮度,极暗/极亮不稳定。Offset Noise 在噪声上加一个每通道共享、空间不变的偏移,让训练样本出现全局亮度变化,模型就学会去噪任意直流偏移。推理时仍用标准噪声。它改善亮度和对比度,但可能影响多样性,是微调技巧,不是扩散理论必需。”
7. 2 分钟回答:SD 怎么训练¶
面试官问:Stable Diffusion 是怎么训练的?
参考回答:
“分两阶段。第一阶段训练 VAE:编码器把图像压到 8 倍下采样、4 通道 latent,解码器重建,损失是重建 + perceptual + adversarial;训练好后冻结。第二阶段在 latent 上训练扩散 UNet:图像编码成 \(z_0\),加噪得到 \(z_t\),CLIP 编码文本,UNet 预测噪声,用 MSE 训练。文本编码器通常冻结,训练时以约 10% 概率丢弃文本条件,支持 CFG;还用 EMA、混合精度、分辨率分桶和数据过滤。推理时从噪声开始,用 UNet 逐步去噪,再 VAE 解码。”
8. 常见误区¶
- “SD 端到端训练 VAE + UNet”:两阶段,VAE 冻结。
- “文本编码器也全量训练”:通常冻结。
- “Offset Noise 是推理技巧”:训练时用,推理不用。
- “Offset Noise 和 zero terminal SNR 一样”:机制不同。
- “CFG dropout 是为了省算力”:是为了训练无条件分支。
- “VAE 越大越好”:重建质量和 latent 维度要平衡。
9. 课堂练习¶
答案见 06 章节练习与答案。
- 画两阶段训练流程图。
- 写出 LDM 训练损失。
- 解释 CFG dropout。
- 解释 Offset Noise 的低频逻辑。
- 区分 Offset Noise / zero terminal SNR / \(v\)-pred。
- 用 90 秒回答 D7。
10. 自测清单¶
- [ ] 能复述两阶段训练;
- [ ] 能解释冻结 VAE/文本编码器;
- [ ] 能解释 CFG dropout/EMA/bucketing;
- [ ] 能区分预测目标;
- [ ] 能解释 Offset Noise;
- [ ] 能 2 分钟回答 A6;
- [ ] 能 90 秒回答 D7。
11. 本节材料为什么这样设计¶
- 两阶段先讲清:A6 的主线。
- trick 逐项解释:面试常追问“为什么”。
- Offset Noise 单列:D7 的核心。
- 三种亮度/端点方法对比:避免混淆。
- 不写代码:本节是训练流程和动机。
详细设计理由见 08 材料设计理由。