指南
基于 DDIM(Song 2020)/LDM(Stable Diffusion, Rombach 2022)/CFG(Ho & Salimans 2022)/LCM 论文 + Lilian Weng 博客编写
速查
- DDIM 核心:非马尔可夫确定性采样,η=0 时完全确定,可用 20-50 步达到 DDPM 上千步的质量
- DDIM 关键:训练好的 DDPM 模型无需重训,直接换采样器即加速,且支持隐空间语义插值
- LDM(Stable Diffusion)核心:扩散不在像素空间而在 VAE 潜空间进行,算力降几十倍
- LDM 两阶段:感知压缩(VAE 编码器/解码器,把图像压成潜向量)+ 潜在扩散(U-Net 在潜空间去噪)
- CFG 公式:
ε̃ = (1+w)·ε_θ(x_t,t|c) - w·ε_θ(x_t,t|∅),w 是引导强度,联合训练条件与无条件模型 - CFG 训练:训练时以一定概率(如 10%)丢弃条件 c(置 ∅),同一网络同时学条件和无条件
- CFG 效果:w 增大→更贴合条件、质量更高但多样性下降(类似 GAN 截断技巧的质量-多样性权衡)
- 分数模型等价:
∇_x log p(x_t) ≈ -ε_θ(x_t,t)/√(1-ᾱ_t),DDPM 预测噪声即估计分数 - 朗之万动力学:
x_t = x_{t-1} + (δ/2)·∇log p(x_{t-1}) + √δ·ε,用分数梯度迭代采样 - 连续时间 SDE:扩散可写成随机微分方程
dx = f(x,t)dt + g(t)dw,DDPM/DDIM/分数模型统一其中 - LCM 核心:把多步扩散蒸馏成 1-4 步的一致性模型,结合 CFG 实现极速生成
- 采样加速:DDIM(少步确定性)、DPM-Solver(高阶 ODE 求解)、LCM(蒸馏)是三大方向
采样加速:DDIM
标准 DDPM 采样需 T=1000 步迭代,慢得难以实用。DDIM(Denoising Diffusion Implicit Models,Song et al. 2020) 给出了关键加速:
DDIM 思路:保持前向边缘分布 q(x_t|x_0) 不变,但定义一个【非马尔可夫】的前向过程
→ 推导出的反向采样步数可大幅减少,且模型无需重训(用训好的 DDPM 直接换采样器)
引入随机性控制参数 η ≥ 0:
η = 0 → 完全确定性(给定初始噪声,输出固定)—— 这是 DDIM 常用模式
η = 1 → 退化为标准 DDPM(随机性最大)
DDIM 采样:从 x_T 出发,用 η=0 的确定性更新,跳跃式取子序列 {t_1 < t_2 < ... < t_T}
20-50 步即可达到 DDPM 1000 步的质量DDIM 的两大收益:
- 加速:采样步数从上千降到几十,速度提升 20-50 倍
- 确定性插值:η=0 时给定初始噪声 x_T 输出固定,于是可以在隐空间做「语义插值」——两个噪声 x_T^(1)、x_T^(2) 线性插值,生成的两张图之间平滑过渡(DDPM 因随机性做不到)
DDIM 的「训练好的模型直接换采样器」特性极重要——所有加速采样方法(DPM-Solver、PNDM 等)都基于这一思路:模型不变,改采样器。
潜空间扩散:Stable Diffusion(LDM)
Stable Diffusion / Latent Diffusion Model(Rombach et al. 2022) 解决了扩散模型的算力瓶颈——把扩散从像素空间搬到 VAE 的潜空间:
像素空间扩散的问题:
一张 512×512×3 图像有 ~78 万维,U-Net 每步都要处理这么大的张量,T 步算力爆炸
LDM 方案(两阶段):
阶段 1(感知压缩):训练一个自编码器(VAE 风格)
编码器 E:图像 x → 潜向量 z = E(x)(如 64×64×4,压缩 ~48 倍)
解码器 D:潜向量 z → 图像 x̂ = D(z)(重建)
这一步固定后不再训练
阶段 2(潜在扩散):在潜空间跑扩散
前向加噪作用于 z 而非 x
U-Net ε_θ(z_t, t) 在 64×64×4 的潜空间去噪(而非 512×512×3)
采样得到 z_0 后,用解码器 D 还原成图像
效果:算力消耗降低几十倍,让扩散能在消费级 GPU(如 8GB 显存)上运行为什么潜空间可行:图像的感知信息(人眼能看到的结构)远低于像素冗余,VAE 编码器把图像压到低维潜空间而几乎不丢感知信息。在潜空间做扩散等于「在压缩表示上生成」,再解码还原。
条件机制:交叉注意力
LDM 如何接受文本条件?通过在 U-Net 中插入交叉注意力层:
文本 prompt → CLIP 文本编码器 → token 序列特征 τ (如 77×768)
U-Net 每个分辨率层加入交叉注意力:
Q 来自潜特征 z_t,K/V 来自文本特征 τ
CrossAttention(Q, K, V) = softmax(Q·K^T/√d) · V
这样 U-Net 在去噪时能「看到」文本条件「cross-attention turns the model into ... a flexible generator for general conditioning inputs such as text or bounding boxes」——LDM 论文。交叉注意力让扩散模型能接受任意条件(文本、布局、掩码、参考图)。
Classifier-Free Guidance(CFG)
CFG(Ho & Salimans 2022) 是现代文生图的标配,用单一网络同时实现条件与无条件生成,并在推理时外插放大条件信号:
训练:对条件扩散模型 ε_θ(x_t, t | c),训练时以一定概率(如 10%)把条件 c 替换为空 ∅
→ 同一个网络既学会 ε_θ(x_t, t | c)(条件噪声预测),又学会 ε_θ(x_t, t | ∅)(无条件噪声预测)
推理(引导采样):
ε̃_θ = (1 + w) · ε_θ(x_t, t | c) - w · ε_θ(x_t, t | ∅)
↑↑↑ 条件项放大 ↑↑↑ 减去无条件项
w:引导强度(guidance scale),通常 1-15
w=0 → 纯条件模型(ε̃ = ε_θ(·|c))
w=1 → 标准条件采样
w>1 → 放大条件影响(实际常用 w=7.5)效果:w 越大,生成越贴合条件(如文本描述更精确)、视觉质量越高,但多样性下降、可能出现过饱和。这本质是把「条件方向」沿「条件 - 无条件」向量外推,类似 GAN 截断技巧,直观体现质量-多样性权衡。
CFG 优势:无需训练额外的分类器(对比 Classifier Guidance 需要一个预训练分类器算梯度),只需一个网络、一次前向算两次(带条件和不带条件),简单高效,成为 Stable Diffusion 等的默认配置。
与分数模型、朗之万动力学统一
扩散模型并非孤立,它与**基于分数的生成模型(score-based generative models)和朗之万动力学(Langevin dynamics)**数学等价:
分数函数:s(x) = ∇_x log p(x) (对数概率密度的梯度)
朗之万动力学采样(用分数梯度迭代):
x_t = x_{t-1} + (δ/2) · ∇_x log p(x_{t-1}) + √δ · ε , ε~N(0,I)
→ 只要有分数函数就能从分布采样
DDPM 预测噪声 ε_θ 与分数的关系(Lilian Weng 博客推导):
s_θ(x_t, t) ≈ ∇_{x_t} log q(x_t) = - ε_θ(x_t, t) / √(1 - ᾱ_t)
即:预测噪声 ε_θ 等价于估计扰动分布的分数(差一个缩放因子)统一视角:Song et al. 2021(Score-Based Generative Modeling through SDEs)把 DDPM、分数模型、朗之万动力学统一到一个连续时间随机微分方程(SDE)框架:
扩散前向写成 SDE:dx = f(x,t)dt + g(t)dw (w 是布朗运动)
反向生成对应反向 SDE(需分数函数)
不同离散化 → 不同模型(DDPM/分数模型/概率流 ODE)这个统一框架的意义:让 DDIM、概率流 ODE、各种加速采样器都能在同一理论下推导,是现代扩散模型研究的数学基石。
Latent Consistency Models(LCM)
LCM(Luo et al. 2023) 把扩散蒸馏成几步生成的一致性模型,进一步逼近 GAN 的速度:
核心思想:训练一个「一致性函数」f_θ(z_t, t) → z_0
要求:沿同一条扩散轨迹(即从同一 z_0 加噪得到的不同 z_t),f_θ 输出一致
即 f_θ(z_t, t) = f_θ(z_{t'}, t') (对同一轨迹的任意两点)
Latent Consistency Models(LCM)= 在 LDM 潜空间上做一致性蒸馏
用 Stable Diffusion 作教师,蒸馏出 1-4 步即可生成的学生
结合 CFG,实现 1-4 步高质量文生图(vs 标准 SD 的 20-50 步)意义:LCM 让扩散模型在「质量-速度」权衡上逼近 GAN,同时保留扩散的训练稳定性与可控性,是 2023 年扩散加速的里程碑。后续 LCM-LoRA 等进一步让加速可插拔复用。
反模式(生产坑)
- 像素空间训大图扩散:512×512 像素扩散算力爆炸,应用 LDM 在潜空间做,显存占用降一个数量级
- 采样不用加速器:直接跑 DDPM 1000 步慢得不可用,生产必须用 DDIM/DPM-Solver/LCM 等
- CFG 引导强度设错:w=0 生成与条件无关,w 过大(如 30)图像过饱和、怪异;文生图默认 7-9
- 方差调度选错:β_t 不递增或 ᾱ_T 不趋于 0,导致 x_T 不是纯高斯,采样失败
- 混淆预测目标:网络应预测噪声 ε(DDPM)而非直接预测 x_0 或均值,参数化不同效果差异大
- 忽视时间嵌入:U-Net 不注入时间步 t,网络无法区分不同去噪阶段,质量崩塌
下一步
- 参考:核心公式表 + 变体对比 + 经典论文资源