常见扩散模型、快速采样与潜空间生成#
学习目标与记号#
推导 DDIM 更新并解释随机性参数,区分扩散模型、参数化、采样器和网络骨干;
理解潜空间扩散的编码—扩散—解码流程及其效率与重构代价;
比较 DDPM、NCSN/Score-SDE、DDIM、LDM、U-Net 与 DiT,并建立可靠评价流程;
本节沿用统一记号:普通小写字母表示标量,粗体小写字母表示向量,粗体大写字母表示矩阵或高阶张量;时间步写作下标 \(t\),网络层编号写作上标 \([l]\),转置写作 \(\trans\)。用 \(m\) 表示一个批量中的图片数,用 \(d_C^{[l]}\)、\(d_H^{[l]}\) 和 \(d_W^{[l]}\) 分别表示第 \(l\) 层特征图的通道数、高和宽。\(\bx_0\) 表示干净数据,\(\bx_t\) 表示第 \(t\) 个噪声等级的随机变量。从 \(\bx_{t-1}\) 得到 \(\bx_t\) 时单独加入的噪声记作 \(\bepsilon_t\);解析式中直接由 \(\bx_0\) 构造 \(\bx_t\) 的累计噪声记作 \(\tilde{\bepsilon}_t\)。后者是前 \(t\) 步单步噪声按相应系数合并并标准化后得到的等价标准高斯变量,并不是简单求和。正文与练习中的程序都应同时检查数值结果和数组维度。本节练习的参考答案见 常见扩散模型与实践答案。
本节比较建立在 DDPM 采样、扩散 SDE 与 条件引导 之上;不同方法分别改变采样路径、表示空间、网络骨干或条件机制。
“扩散模型”一词在实践中常同时指前向过程、训练目标、网络架构和采样算法。为了正确比较方法,应先分清四个层次:DDPM、Score-SDE 等定义概率过程和训练目标;\(\tilde{\bepsilon}_t\)、\(\bx_0\)、\(\bv\) 是输出参数化所对应的目标;U-Net、DiT 是网络骨干;DDIM、数值 ODE/SDE 求解器和蒸馏方法负责采样效率。
DDIM:非马尔可夫采样视角#
去噪扩散隐式模型(denoising diffusion implicit model,DDIM) 1Song、Meng 与 Ermon(2021),Denoising Diffusion Implicit Models。 构造与 DDPM 具有相同训练边缘 \(q(\bx_t\mid\bx_0)\) 的非马尔可夫过程,因此通常可以直接使用训练好的 DDPM 噪声预测网络。给定当前 \(\bx_t\),先计算
式中的 \(\bepsilon_{\btheta}(\bx_t,t)\) 是网络对累计噪声 \(\tilde{\bepsilon}_t\) 的估计,不是单步噪声 \(\bepsilon_t\)。
若下一采样时刻为 \(s<t\),定义
则更新可写为
标准实现通常取 \(\eta\in[0,1]\)。当 \(\eta=0\) 时,给定当前状态的更新是确定性的:同一初始噪声和条件产生同一轨迹;取适当非零值可恢复随机性。DDIM 可以跳过训练时定义的许多时间步,但过少的步数会增加离散误差。所选时间子序列、参数化和预测修正必须相容。
潜空间扩散模型#
像素空间扩散在高分辨率图像上计算昂贵。潜空间扩散模型(latent diffusion model,LDM) 2Rombach 等(2022),High-Resolution Image Synthesis with Latent Diffusion Models。 先训练编码器 \(E\) 与解码器 \(D\),把图像压缩为较小的潜变量
然后在 \(\bz\) 空间执行扩散。若空间分辨率缩小 \(f\) 倍,潜变量位置数约缩小 \(f^2\) 倍,从而显著减少卷积或注意力成本。条件通常通过交叉注意力进入潜空间去噪网络。
潜空间并不天然服从标准高斯,也不保证每个方向尺度相同。实现需要记录潜变量缩放因子,并确保训练扩散模型、采样和解码使用同一尺度。压缩提高效率,却引入重构上限:编码器丢失的细节无法由后续扩散可靠恢复,解码器也可能产生自己的伪影。
下面的动画展示图像先由编码器压缩到潜空间、在潜变量中完成扩散与去噪,再由解码器还原到图像空间的完整过程。
U-Net、DiT 与常见改进#
U-Net 利用多尺度卷积、残差块和跳跃连接,是图像 DDPM 与 LDM 的经典骨干。局部卷积有利于空间细节,多尺度路径扩大感受野,自注意力或交叉注意力负责全局和条件交互。
Diffusion Transformer(DiT) 3Peebles 与 Xie(2023),Scalable Diffusion Models with Transformers。 把图像或潜变量分块并表示为图像块词元,使用 Transformer 块建模,并通过自适应归一化等方式注入时间与条件。DiT 是网络骨干,不是一种新的前向扩散定律;它仍可配合 DDPM 类训练目标和多种采样器。
改进型 DDPM 会调整各时间步的加噪强度、方差学习、损失权重和网络规模;EDM 等实践框架重新组织噪声参数化、预条件和采样器;一致性模型或蒸馏方法尝试把多步生成压缩为少步甚至一步。它们的训练成本、是否需要教师模型和最终质量不同,不能只用“采样步数更少”评价。
方法层次对照#
图 45 DDIM 改变采样轨迹,LDM 改变扩散所在空间,U-Net 与 DiT 则是常见的噪声预测网络骨干#
名称 |
主要层次 |
核心思想 |
使用时应注意 |
|---|---|---|---|
DDPM |
离散概率过程与训练 |
固定高斯前向链、学习随机反向链 |
原始采样步数多,需明确方差与参数化 |
NCSN / Score-SDE |
分数学习与连续动力学 |
多噪声尺度分数、反向 SDE/ODE |
分数尺度、时间方向和求解器必须一致 |
DDIM |
采样过程 |
共享训练边缘,可确定性少步采样 |
时间子序列过稀会增加离散误差 |
LDM |
表示空间 |
在压缩潜空间而非像素空间扩散 |
受自编码器重构质量与潜变量尺度限制 |
U-Net / DiT |
网络骨干 |
多尺度卷积或图像块 Transformer |
不能把骨干名称当作完整生成算法 |
采样器实现骨架#
下面的 ddim_step 实现一次 DDIM 反向更新,可从当前时刻 \(t\) 跳到更接近干净样本的时刻 \(s\)。主要输入是当前带噪样本 xt、与它同形的累计噪声预测 eps_pred、两个时刻的累积系数 alpha_bar_t 和 alpha_bar_s、随机性系数 eta 以及 NumPy 随机数生成器 rng。返回值与 xt 同形,表示时刻 \(s\) 的样本;反向时间顺序要求 \(0<\bar\alpha_t\leq\bar\alpha_s\leq1\)。
import numpy as np
def ddim_step(xt, eps_pred, alpha_bar_t, alpha_bar_s, eta, rng):
xt = np.asarray(xt)
eps_pred = np.asarray(eps_pred)
if xt.shape != eps_pred.shape:
raise ValueError("噪声预测必须与 xt 同形")
if not (0 < alpha_bar_t < 1 and alpha_bar_t <= alpha_bar_s <= 1):
raise ValueError("反向采样要求 0 < alpha_bar_t < 1 且 alpha_bar_t <= alpha_bar_s <= 1")
if not np.isfinite(eta) or not (0 <= eta <= 1):
raise ValueError("本实现要求 eta 位于 [0, 1]")
x0_hat = (xt - np.sqrt(1 - alpha_bar_t) * eps_pred) / np.sqrt(alpha_bar_t)
sigma = eta * np.sqrt((1 - alpha_bar_s) / (1 - alpha_bar_t))
sigma *= np.sqrt(1 - alpha_bar_t / alpha_bar_s)
direction_var = 1 - alpha_bar_s - sigma**2
if direction_var < -1e-12:
raise ValueError("确定性方向的方差为负,请检查时间顺序与 eta")
direction_var = max(direction_var, 0.0)
noise = 0.0 if eta == 0 else rng.normal(size=xt.shape)
return (np.sqrt(alpha_bar_s) * x0_hat
+ np.sqrt(direction_var) * eps_pred
+ sigma * noise)
程序首先由 xt 和累计噪声预测 eps_pred 估计干净样本 x0_hat,再按 eta 计算本次跳步的随机噪声尺度 sigma。返回值由估计的干净成分、指向当前预测累计噪声的确定性成分和可选随机成分组成。eta=0 时不采样新噪声,给定相同输入会得到相同输出;eta>0 时输出还取决于 rng 的状态。direction_var 按理论应非负,小幅负值按浮点误差截为 0,明显负值则通常意味着时间顺序或系数错误。
这只是单步采样骨架,不包含噪声预测网络、完整时间表或连续迭代循环,也没有对 x0_hat 做裁剪或动态阈值处理。代码将 eta 限制在 [0, 1],因而是一个有意简化的教学实现。对 alpha_bar_t 的严格上界检查是必要的:若它等于 1,sigma 公式会除以 0;干净端点可作为 alpha_bar_s=1 的目标时刻。
评价、记忆与可复现性#
FID 比较特征空间中的高斯近似统计,对样本量、特征提取器和预处理敏感;KID 是核距离估计;precision/recall 类指标尝试分别描述质量与覆盖。文本到图像还要评价条件一致性和人工偏好,但单一对齐分数可能奖励表面相关而忽略构图与真实性。
可靠报告应给出样本数量、真实数据子集、特征网络版本、图像预处理、采样器、NFE、引导强度和随机种子。还应通过训练集近邻、重复率和成员推断等诊断检查记忆风险。展示图必须说明是否筛选;只展示最好样本不能替代分布级评价。
核心推导与实现核验#
核心关系
推导路径。 先由 \(\bx_t\) 和噪声预测恢复 \(\widehat{\bx}_0\),再把时刻 \(s\) 的总方差拆成沿预测噪声方向的确定性部分与方差 \(\sigma_{t\to s}^2\) 的随机部分。\(\eta\) 控制随机项,所选 \(s\) 可以跨越多个训练时间步。
关键条件
根号内非负需要合法的反向时间顺序和 \(\sigma_{t\to s}\) 范围。\(\eta=0\) 时给定 \(\bx_t\) 的更新确定;这不代表生成分布没有随机性,因为最初的 \(\bx_T\) 仍随机。LDM 的速度收益还依赖实际潜变量尺寸和骨干复杂度。
数据规模
DDIM 中的 \(\bx_t\)、预测的干净样本 \(\widehat{\bx}_0\)、网络预测的噪声 \(\bepsilon_{\btheta}(\bx_t,t)\) 和新采样的随机量 \(\bz\) 必须一样大。潜空间扩散把 \(m\times d_C^{[l]}\times d_H^{[l]}\times d_W^{[l]}\) 的图像压缩为较小的 \(m\times d_{C_z}^{[l]}\times(d_H^{[l]}/f)\times(d_W^{[l]}/f)\),生成结束后再恢复原图大小;DiT 则把空间区域整理为 \(N\) 个图像块,输出时重新拼回图像。
常见误区
不要把 DDIM 称为训练网络骨干,也不要把 DiT 当作独立的噪声过程。潜变量缩放、VAE 版本、时间子序列和采样器配置必须与模型匹配。
动手检查
检查 \(\eta=0\) 时相同 \(\bx_T\) 严格可复现;DDIM 使用完整相邻时间表时与设定公式一致。对 LDM 先单独测量自编码器重构误差,再评价扩散采样,避免把两类误差混为一谈。
数值稳定性与规模
少步采样对时间表和预测误差敏感;计算根号前应检查理论约束,而不是长期依赖 max 裁剪来隐藏错误。潜变量和条件嵌入应采用与训练阶段相同的精度与归一化方式。
本节小结#
DDIM 复用扩散网络并改变反向轨迹,可在较少时间步下进行确定性或随机采样。
LDM 在压缩潜空间执行扩散以降低成本,但样本质量受到自编码器重构和潜变量尺度限制。
DDPM/Score-SDE 是过程,DDIM 是采样器,U-Net/DiT 是骨干;公平评价还要同时报告 NFE、条件一致性、多样性与记忆风险。
综合练习#
前四题用于推导、证明和具体计算,第 5--7 题用于编程实现与核验,第 8--10 题要求在其他条件相同的情况下,只改变一个需要研究的因素进行比较,并根据实验结果分析该因素可能带来的影响。程序题应固定随机种子、写出维度断言并报告运行环境;比较题还应固定数据划分、随机种子集合和训练预算。全部参考答案见 常见扩散模型与实践答案。
DDIM 确定性。 从 DDIM 更新式说明当 \(\eta=0\) 时 \(\sigma_{t\to s}=0\),从而给定 \(\bx_t\)、时间表和网络预测后 \(\bx_s\) 唯一确定;解释为什么整个生成过程仍因初始 \(\bx_T\) 而具有随机性。
DDIM 单步计算。 在一维情形取 \(\bar\alpha_t=0.25\)、\(\bar\alpha_s=0.64\)、\(x_t=1\)、噪声预测 \(\epsilon_{\btheta}=0.2\)、\(\eta=0\)。计算 \(\widehat x_0\) 和 \(x_s\)。
潜空间压缩计算。 像素图像张量为 \(m\times3\times256\times256\),自编码器产生 \(m\times4\times32\times32\) 潜变量。计算单样本元素数及其比值,说明该比值如何影响扩散网络的激活内存与计算量,以及为什么不能把它直接当作端到端加速比。
DiT 图像块计算。 对 \(32\times32\) 潜变量特征图,图像块边长分别取 2 和 4。计算两种设置的词元数以及每个注意力头的注意力矩阵元素数,说明图像块增大如何改变二次注意力成本和空间细节。
DDIM 采样器实现。 实现任意递减时间子序列的 DDIM 采样器,支持 \(\eta\in[0,1]\),检查所有根号内非负、记录每一步时间对和 NFE,并允许传入固定初始噪声。
确定性与极限核验。 验证 \(\eta=0\) 且初始噪声相同时重复生成逐元素一致;对相邻完整时间表核对每步公式;逐渐减少步数并记录误差。对潜空间模型另外核对编码—解码维度和自编码器重构误差。
测试设计。 至少测试:反向时间严格递减、\(\eta\) 越界报错、根号参数不合法时失败、网络输出与状态同形、NFE 等于时间跳数、相同初始噪声可复现、不同初始噪声产生不同样本,以及潜变量缩放在训练与生成阶段一致。
DDPM 与 DDIM 比较。 使用同一个噪声预测检查点,比较完整 DDPM、相同步数 DDIM 和少步 DDIM。固定初始噪声集合、随机种子集合、数据预处理和评价样本数;报告生成质量与多样性、共享训练时间、固定样本数生成时间、NFE、参数量及生成峰值内存。
像素与潜空间扩散比较。 在同一数据上比较像素空间扩散与潜空间扩散,并单独报告自编码器重构上限。固定数据划分、随机种子集合、训练预算和采样 NFE;报告生成质量、重构误差、训练与生成时间、NFE、扩散网络及自编码器参数量和峰值内存。
U-Net 与 DiT 比较。 在同一扩散过程与采样器下比较参数量尽量匹配的 U-Net 和 DiT 骨干。固定数据划分、随机种子集合、训练预算、输入空间和 NFE;报告生成质量与覆盖、训练时间、固定样本数生成时间、NFE、参数量、乘加量及峰值内存。