卷4 · 生成模型
4.3 采样器与 Classifier-Free Guidance
展开本章目录与同卷章节
1. 采样的另一面:解一条反向轨迹2. 采样器动物园(按思想分类)DDIM 手写(作业核心,~20 行)3. CFG:无分类器引导(文生图的特效药)4. 自测题5. 动手作业案例 · 手算:DDIM 一步跳采样6. 延伸资源同卷章节4.1 生成模型地图:五大家族一张图4.2 DDPM 原理与从零实现4.3 采样器与 Classifier-Free Guidance4.4 Latent Diffusion 与 Stable Diffusion:生成模型工程学4.5 DiT 与 Flow Matching:生成模型的现代化4.6 可控生成:ControlNet、IP-Adapter 与风格 LoRA4.7 视频生成:Sora 范式与开源阵营4.8 统一模型之争:Chameleon、Transfusion、Janus4.9 前沿瞭望:扩散语言模型本章目标:搞清”同样的模型,为什么有人 20 步出图有人 1000 步”,以及 CFG 这个”特效药”为什么是文生图质量的一半功劳。学完标准:能给采样器分类并按场景选用,能手写 DDIM,能推导 CFG 并说清 guidance scale 的 trade-off。
1. 采样的另一面:解一条反向轨迹
4.2 的采样循环( ancestral/DDPM 采样)是马尔可夫链逐步走,1000 步、带随机性。后续研究的洞察:加噪-去噪过程其实对应一条连续时间的概率流 ODE/SDE——采样就是在解这条方程。一旦看成 ODE,两件事立刻打开:① 数值分析百年的 ODE 求解器随便用(步长可以很大);② 轨迹可以确定性(同一噪声同一图)。“采样慢”从物理约束变成了数值方法问题——这就是 4.1 说的”蒸馏与流把迭代变快”的理论入口。
2. 采样器动物园(按思想分类)
| 类别 | 代表 | 步数 | 特点 |
|---|---|---|---|
| 祖先采样(SDE) | DDPM | 1000 | 每步加噪,随机、多样 |
| 去噪扩散隐式模型 | DDIM | 20–50 | 去掉过程噪声假设,可跳步、确定性 |
| 高阶 ODE 求解器 | DPM-Solver++、UniPC | 10–25 | 利用轨迹曲率,指数积分,工业默认 |
| 一致性/蒸馏 | LCM、Turbo 系 | 1–4 | 蒸馏轨迹(把多步压成少步),质量略降 |
选用心法:要多样性/探索 → DDPM/DDIM-ancestral;要快而稳 → DPM-Solver++ 20 步;要实时 → 蒸馏系。diffusers 里就是 scheduler 一个参数的差别——同一权重配不同调度器是合法操作(这提醒你:模型和采样在数学上是解耦的两层)。
DDIM 手写(作业核心,~20 行)
DDIM 更新式:
读法:先用模型隐式猜出原图 ,再直接跳到目标时刻的加噪版本——跳多少步随你(子序列采样)。在 4.2 的 MNIST 模型上实现它,500 步 → 20 步对比。
3. CFG:无分类器引导(文生图的特效药)
问题:怎么让模型听话?经典方案是训练一个分类器给梯度引导(classifier guidance)——要额外训分类器、且在扩散的噪声图上做分类很别扭。CFG(Ho & Salimans, 2022)把它整个扔掉:
训练:条件生成时以约 10% 概率把条件丢弃(置空)——同一个网络同时学会 和 。
采样:把”有条件方向”减去”无条件方向”,再放大 s 倍:
直觉: 是”条件带来的修正方向”,s 是对它的放大器。s=1 退回普通条件生成;s=5~8(SD 常用 7)图更贴 prompt、对比更强;s 过大 → 过饱和、僵硬、“塑料感”(分布被推到训练数据之外)。CFG 是”训练时埋伏笔、推理时调旋钮”的设计典范——这种”一次训练、推理可控”的思路在 RL 的 KL 系数(2.7)、美学引导(8.2)里反复出现。
工程衍生:负 prompt 就是把 换成”你不想出现的东西”(模糊、多指、水印);CFG 蒸馏(guidance distillation)把 s>1 的效果直接蒸进模型,省掉每步的两次前向(Turbo/LCM 的组件之一)。
4. 自测题
- 把采样看成 ODE 带来哪两个立即收益?(大步长求解器;确定性轨迹)
- DDIM 跳步的数学勇气在哪?(放弃马尔可夫假设——只要求端点分布一致,中间路径自由)
- CFG 训练时丢弃条件的目的是什么?(同一网络内同时学到条件与无条件两个模型)
- guidance scale 的物理直觉与过量的症状?(条件修正方向的放大器;过饱和/塑料感)
- 负 prompt 在公式里对应哪一项?(把 ε_∅ 替换为负条件嵌入——同一公式的工程化用法)
- 为什么说”模型与采样器解耦”?(同一权重可配任意 scheduler——训练学的是 score/速度场,采样是数值积分方式的选择)
5. 动手作业
- 在 4.2 的 MNIST 模型上实现 DDIM(跳步 500→20/50/100 三档),同一起点噪声对比确定性输出;
- 接
diffusers跑 SD1.5,固定 seed 扫 guidance_scale = 1/3/7/15 四档,用 8.1 的语言写”过量症状”观察笔记; - 实现负 prompt(SD 管线
negative_prompt参数),构造一组”负向救图”的对照案例; - 挑战:读一致性模型(LCM)论文 §1,用三句话讲清”蒸馏轨迹”和”蒸馏 CFG”分别压缩了什么成本。
案例 · 手算:DDIM 一步跳采样
案例:从 t 到 t−1 只用三行算术
设当前 ,模型预测 ;schedule 给 (),目标时刻 ()。
- 隐式预测原图:
- 直接跳到目标时刻:
注意 DDIM 这步没有加随机噪声(确定性轨迹)——同一 x_t 永远到同一 x_{t−1}。跳步的本质就藏在第 1 行:先”猜出”原图,再把它按目标时刻重新加噪——中间的马尔可夫链被整个跳过了。4.2 作业里你会在自己的 MNIST 模型上验证:500 步的链,20 步跳完质量只掉一点点。
6. 延伸资源
- DDIM 论文 / CFG 论文(Classifier-Free Diffusion Guidance)——各十分钟读完
- DPM-Solver 论文 §1——ODE 视角的科普级开头
- diffusers 文档 Schedulers 页——把动物园点一遍名
