云镜收藏

稍后阅读

清单保存在当前浏览器,方便下次回来继续阅读。

清单还是空的

在笔记卡片或正文页点击“加入稍后阅读”即可收藏。

卷4 · 生成模型

4.3 采样器与 Classifier-Free Guidance

约 6 分钟阅读
全书目录

展开本章目录与同卷章节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)DDPM1000每步加噪,随机、多样
去噪扩散隐式模型DDIM20–50去掉过程噪声假设,可跳步、确定性
高阶 ODE 求解器DPM-Solver++、UniPC10–25利用轨迹曲率,指数积分,工业默认
一致性/蒸馏LCM、Turbo 系1–4蒸馏轨迹(把多步压成少步),质量略降

选用心法:要多样性/探索 → DDPM/DDIM-ancestral;要快而稳 → DPM-Solver++ 20 步;要实时 → 蒸馏系。diffusers 里就是 scheduler 一个参数的差别——同一权重配不同调度器是合法操作(这提醒你:模型和采样在数学上是解耦的两层)。

DDIM 手写(作业核心,~20 行)

DDIM 更新式:xt−1=αˉt−1 xt−1−αˉt ϵθαˉt⏟x^0(隐式预测的原图)+1−αˉt−1 ϵθx_{t-1} = \sqrt{\bar\alpha_{t-1}}\,\underbrace{\frac{x_t - \sqrt{1-\bar\alpha_t}\,\epsilon_\theta}{\sqrt{\bar\alpha_t}}}_{\hat{x}_0(\text{隐式预测的原图})} + \sqrt{1-\bar\alpha_{t-1}}\,\epsilon_\theta

读法:先用模型隐式猜出原图 x^0\hat x_0,再直接跳到目标时刻的加噪版本——跳多少步随你(子序列采样)。在 4.2 的 MNIST 模型上实现它,500 步 → 20 步对比。

3. CFG:无分类器引导(文生图的特效药)

问题:怎么让模型听话?经典方案是训练一个分类器给梯度引导(classifier guidance)——要额外训分类器、且在扩散的噪声图上做分类很别扭。CFG(Ho & Salimans, 2022)把它整个扔掉:

训练:条件生成时以约 10% 概率把条件丢弃(置空)——同一个网络同时学会 p(x∣c)p(x|c) 和 p(x)p(x)。

采样:把”有条件方向”减去”无条件方向”,再放大 s 倍:

ϵ~=ϵθ(xt,∅)+s⋅(ϵθ(xt,c)−ϵθ(xt,∅))\tilde\epsilon = \epsilon_\theta(x_t, \varnothing) + s \cdot \big(\epsilon_\theta(x_t, c) - \epsilon_\theta(x_t, \varnothing)\big)

直觉:ϵc−ϵ∅\epsilon_c - \epsilon_\varnothing 是”条件带来的修正方向”,s 是对它的放大器。s=1 退回普通条件生成;s=5~8(SD 常用 7)图更贴 prompt、对比更强;s 过大 → 过饱和、僵硬、“塑料感”(分布被推到训练数据之外)。CFG 是”训练时埋伏笔、推理时调旋钮”的设计典范——这种”一次训练、推理可控”的思路在 RL 的 KL 系数(2.7)、美学引导(8.2)里反复出现。

工程衍生:负 prompt 就是把 ∅\varnothing 换成”你不想出现的东西”(模糊、多指、水印);CFG 蒸馏(guidance distillation)把 s>1 的效果直接蒸进模型,省掉每步的两次前向(Turbo/LCM 的组件之一)。

4. 自测题

  1. 把采样看成 ODE 带来哪两个立即收益?(大步长求解器;确定性轨迹)
  2. DDIM 跳步的数学勇气在哪?(放弃马尔可夫假设——只要求端点分布一致,中间路径自由)
  3. CFG 训练时丢弃条件的目的是什么?(同一网络内同时学到条件与无条件两个模型)
  4. guidance scale 的物理直觉与过量的症状?(条件修正方向的放大器;过饱和/塑料感)
  5. 负 prompt 在公式里对应哪一项?(把 ε_∅ 替换为负条件嵌入——同一公式的工程化用法)
  6. 为什么说”模型与采样器解耦”?(同一权重可配任意 scheduler——训练学的是 score/速度场,采样是数值积分方式的选择)

5. 动手作业

  1. 在 4.2 的 MNIST 模型上实现 DDIM(跳步 500→20/50/100 三档),同一起点噪声对比确定性输出;
  2. 接 diffusers 跑 SD1.5,固定 seed 扫 guidance_scale = 1/3/7/15 四档,用 8.1 的语言写”过量症状”观察笔记;
  3. 实现负 prompt(SD 管线 negative_prompt 参数),构造一组”负向救图”的对照案例;
  4. 挑战:读一致性模型(LCM)论文 §1,用三句话讲清”蒸馏轨迹”和”蒸馏 CFG”分别压缩了什么成本。

案例 · 手算:DDIM 一步跳采样

案例:从 t 到 t−1 只用三行算术

设当前 xt=1.0x_t = 1.0,模型预测 ϵθ=0.6\epsilon_\theta = 0.6;schedule 给 αˉt=0.36\bar\alpha_t = 0.36( =0.6\sqrt{\ }=0.6),目标时刻 αˉt−1=0.81\bar\alpha_{t-1} = 0.81( =0.9\sqrt{\ }=0.9)。

  1. 隐式预测原图:x^0=xt−1−αˉt ϵθαˉt=1.0−0.8×0.60.6=0.867\hat{x}_0 = \dfrac{x_t - \sqrt{1-\bar\alpha_t}\,\epsilon_\theta}{\sqrt{\bar\alpha_t}} = \dfrac{1.0 - 0.8\times0.6}{0.6} = 0.867
  2. 直接跳到目标时刻:xt−1=0.81×0.867+0.19×0.6=0.780+0.262=1.042x_{t-1} = \sqrt{0.81}\times0.867 + \sqrt{0.19}\times0.6 = 0.780 + 0.262 = 1.042

注意 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 页——把动物园点一遍名