008 《扩散模型在图像和视觉领域的应用:从原理到实践》
🌟🌟🌟本文由Gemini 2.5 Flash Preview 04-17生成,用来辅助学习。🌟🌟🌟
书籍大纲
▮▮ 1. 引言:生成模型的演进与扩散模型的兴起
▮▮▮▮ 1.1 生成模型的历史回顾
▮▮▮▮▮▮ 1.1.1 GANs (生成对抗网络)
▮▮▮▮▮▮ 1.1.2 VAEs (变分自编码器)
▮▮▮▮▮▮ 1.1.3 其他生成模型
▮▮▮▮ 1.2 扩散模型的基本思想
▮▮▮▮▮▮ 1.2.1 正向过程:逐步加噪
▮▮▮▮▮▮ 1.2.2 逆向过程:逐步去噪生成
▮▮▮▮ 1.3 扩散模型的主要优势与特点
▮▮▮▮ 1.4 本书结构与阅读指南
▮▮ 2. 概率与随机过程基础
▮▮▮▮ 2.1 概率分布与密度函数
▮▮▮▮ 2.2 随机变量与随机过程
▮▮▮▮ 2.3 马尔可夫链 (Markov Chain)
▮▮▮▮ 2.4 随机微分方程 (Stochastic Differential Equation, SDE)
▮▮▮▮ 2.5 变分推断基础
▮▮ 3. 去噪扩散概率模型 (DDPM)
▮▮▮▮ 3.1 正向扩散过程 (Forward Diffusion Process)
▮▮▮▮▮▮ 3.1.1 高斯噪声与方差调度 (Variance Schedule)
▮▮▮▮▮▮ 3.1.2 任意时间步的采样 (Sampling at Arbitrary Timesteps)
▮▮▮▮ 3.2 逆向过程的学习目标 (Learning Objective of Reverse Process)
▮▮▮▮▮▮ 3.2.1 基于变分下界 (VLB) 的损失
▮▮▮▮▮▮ 3.2.2 简化的训练目标 (Simplified Training Objective)
▮▮▮▮ 3.3 模型架构 (Model Architecture)
▮▮▮▮▮▮ 3.3.1 带时间步嵌入的U-Net
▮▮▮▮▮▮ 3.3.2 注意力机制 (Attention Mechanism)
▮▮▮▮ 3.4 训练过程
▮▮ 4. 分数匹配与随机微分方程视角
▮▮▮▮ 4.1 分数函数 (Score Function)
▮▮▮▮ 4.2 分数匹配 (Score Matching)
▮▮▮▮ 4.3 基于分数的生成模型 (Score-based Generative Models)
▮▮▮▮ 4.4 扩散模型作为基于分数的模型
▮▮▮▮ 4.5 扩散SDEs与逆向SDEs
▮▮▮▮▮▮ 4.5.1 VP SDE (Variance Preserving SDE)
▮▮▮▮▮▮ 4.5.2 VE SDE (Variance Exploding SDE)
▮▮▮▮▮▮ 4.5.3 逆向SDEs与ODE (Ordinary Differential Equation)
▮▮ 5. 采样策略与加速
▮▮▮▮ 5.1 逆向SDE/ODE求解器 (Reverse SDE/ODE Solvers)
▮▮▮▮ 5.2 DDIM (Denoising Diffusion Implicit Models)
▮▮▮▮ 5.3 快速采样方法 (Fast Sampling Methods)
▮▮▮▮ 5.4 祖先采样 (Ancestral Sampling)
▮▮ 6. 条件扩散模型
▮▮▮▮ 6.1 条件生成的基本原理
▮▮▮▮ 6.2 分类器引导 (Classifier Guidance)
▮▮▮▮ 6.3 无分类器引导 (Classifier-Free Guidance, CFG)
▮▮▮▮ 6.4 文本到图像生成 (Text-to-Image Generation)
▮▮▮▮▮▮ 6.4.1 文本编码器 (Text Encoders)
▮▮▮▮▮▮ 6.4.2 交叉注意力 (Cross-Attention)
▮▮▮▮▮▮ 6.4.3 代表性模型 (Representative Models)
▮▮▮▮ 6.5 其他条件生成任务
▮▮ 7. 高级架构与技术
▮▮▮▮ 7.1 潜在扩散模型 (Latent Diffusion Models, LDM)
▮▮▮▮▮▮ 7.1.1 感知压缩 (Perceptual Compression)
▮▮▮▮▮▮ 7.1.2 潜在空间扩散 (Diffusion in Latent Space)
▮▮▮▮ 7.2 一致性模型 (Consistency Models)
▮▮▮▮ 7.3 流匹配 (Flow Matching)
▮▮▮▮ 7.4 扩散Transformer (Diffusion Transformers, DiT)
▮▮▮▮ 7.5 多模态扩散模型
▮▮ 8. 图像应用
▮▮▮▮ 8.1 高质量图像生成 (High-Quality Image Generation)
▮▮▮▮ 8.2 图像编辑 (Image Editing)
▮▮▮▮▮▮ 8.2.1 Inpainting (图像修复)
▮▮▮▮▮▮ 8.2.2 Outpainting (图像外绘)
▮▮▮▮▮▮ 8.2.3 语义编辑 (Semantic Editing)
▮▮▮▮▮▮ 8.2.4 风格迁移 (Style Transfer)
▮▮▮▮ 8.3 超分辨率 (Super-Resolution)
▮▮▮▮ 8.4 医学影像应用 (Medical Imaging Applications)
▮▮▮▮ 8.5 图像压缩与去噪
▮▮ 9. 视觉应用
▮▮▮▮ 9.1 视频生成 (Video Generation)
▮▮▮▮ 9.2 3D形状生成 (3D Shape Generation)
▮▮▮▮ 9.3 视觉-语言模型 (Vision-Language Models)
▮▮▮▮ 9.4 其他视觉任务
▮▮ 10. 评估与度量
▮▮▮▮ 10.1 常用生成评估指标
▮▮▮▮ 10.2 感知度量
▮▮▮▮ 10.3 多样性度量
▮▮▮▮ 10.4 人工评估 (Human Evaluation)
▮▮▮▮ 10.5 条件生成评估
▮▮ 11. 局限性、挑战与未来方向
▮▮▮▮ 11.1 计算成本与采样速度
▮▮▮▮ 11.2 模式覆盖与长尾分布
▮▮▮▮ 11.3 可控性与编辑精度
▮▮▮▮ 11.4 伦理考虑与潜在风险
▮▮▮▮ 11.5 与其他领域的结合
▮▮▮▮ 11.6 理论深化与模型创新
▮▮ 附录A: 常用数学符号与公式
▮▮ 附录B: 神经网络基础回顾
▮▮ 附录C: 实现细节与主流框架
▮▮ 附录D: 常用数据集介绍
▮▮ 附录E: 术语表 (Glossary)
▮▮ 附录F: 参考文献 (References)
1. 引言:生成模型的演进与扩散模型的兴起
欢迎来到《扩散模型在图像和视觉领域的应用:从原理到实践》这本书。生成模型(Generative Models)是机器学习领域一个迷人且充满活力的分支,其核心目标是学习数据的真实分布,并从中生成新的、逼真且多样化的样本。近年来,扩散模型(Diffusion Models)作为一类新兴的生成模型,在图像生成、视频合成等领域取得了令人瞩目的成果,甚至在许多任务上超越了此前的最先进技术。本书旨在系统地介绍扩散模型的理论基础、核心算法、高级技术及其在图像和视觉领域的广泛应用,帮助读者从零开始,逐步深入理解并掌握这一强大工具。
1.1 生成模型的历史回顾
在扩散模型登上舞台之前,生成模型已经经历了漫长的发展历程。从早期的统计模型到后来的深度学习模型,研究者们不断探索更加高效和强大的方法来捕捉复杂数据的内在分布。理解这些经典生成模型的思想和局限性,有助于我们更好地认识扩散模型的优势和创新之处。
1.1.1 GANs (生成对抗网络)
生成对抗网络(Generative Adversarial Networks, GANs)由 Ian Goodfellow 等人于 2014 年提出,迅速成为生成模型领域的研究热点。GANs 的核心思想是引入一个对抗过程来训练生成器(Generator)和判别器(Discriminator)这两个神经网络。
① 工作机制:
▮▮▮▮ⓑ 生成器 G 试图从随机噪声 \( z \) 中生成假样本 \( G(z) \),其目标是让这些假样本看起来尽可能真实,能够欺骗判别器。
▮▮▮▮ⓒ 判别器 D 试图区分输入样本是来自真实数据分布 \( p_{data}(x) \) 还是生成器生成的假样本 \( G(z) \)。
▮▮▮▮ⓓ 训练过程是一个零和博弈(Zero-sum Game),生成器试图最大化判别器犯错的概率,而判别器试图最小化犯错的概率。数学上,这对应于最小化一个价值函数(Value Function)\( V(D, G) \) 的最大最小值问题(Minimax Problem):
\[ \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)} [\log D(x)] + \mathbb{E}_{z \sim p_z(z)} [\log(1 - D(G(z)))] \]
② 贡献与优势:
▮▮▮▮⚝ 生成质量高: GANs 尤其在图像生成方面取得了突破性的进展,能够生成视觉上非常逼真的图像。
▮▮▮▮⚝ 框架灵活: 对抗训练的思想可以应用于各种数据类型和网络结构。
③ 挑战与局限性:
▮▮▮▮⚝ 训练不稳定: 对抗训练是一个动态平衡过程,容易出现模式坍塌(Mode Collapse)——生成器只生成部分样本类型而忽略其他类型,导致生成样本缺乏多样性;或者训练难以收敛。
▮▮▮▮⚝ 理论分析困难: 训练的收敛性和稳定性缺乏严格的理论保证。
▮▮▮▮⚝ 评估复杂: 难以客观地衡量生成模型的性能,常用的评估指标(如 Inception Score, IS; Fréchet Inception Distance, FID)也存在一些局限性。
尽管存在挑战,GANs 极大地推动了生成模型的发展,为后续模型的探索奠定了重要基础。
1.1.2 VAEs (变分自编码器)
变分自编码器(Variational Autoencoders, VAEs)是另一种重要的深度生成模型,由 Kingma 和 Welling 于 2013 年提出。VAEs 基于概率图模型和变分推断(Variational Inference)的思想。
① 工作机制:
▮▮▮▮ⓑ VAEs 包含一个编码器(Encoder)和一个解码器(Decoder)。
▮▮▮▮ⓒ 编码器 \( q_\phi(z|x) \) 将输入数据 \( x \) 编码成一个潜在空间(Latent Space)中的概率分布(通常是高斯分布)而不是一个确定的点。\( z \) 是潜在变量。
▮▮▮▮ⓓ 解码器 \( p_\theta(x|z) \) 从潜在空间采样一个潜在变量 \( z \),并将其解码生成重构数据 \( x' \)。
▮▮▮▮ⓔ VAEs 的训练目标是最大化数据的对数似然(Log-likelihood)\( \log p_\theta(x) \)。由于 \( p_\theta(x) \) 难以直接计算,VAEs 转而最大化一个易于计算的变分下界(Variational Lower Bound, VLB),也称为 ELBO (Evidence Lower Bound)。ELBO 可以分解为两部分:
\[ \mathcal{L}(\theta, \phi; x) = \mathbb{E}_{q_\phi(z|x)} [\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z)) \]
第一项是重构项(Reconstruction Term),鼓励解码器能够从潜在变量中重构原始数据;第二项是 KL 散度(KL Divergence),衡量编码器输出的潜在分布 \( q_\phi(z|x) \) 与先验分布 \( p(z) \)(通常设为标准高斯分布)之间的距离,起到正则化作用,使潜在空间具有良好的结构。
② 贡献与优势:
▮▮▮▮⚝ 训练稳定: 基于最大化 ELBO 的训练过程比 GANs 更稳定。
▮▮▮▮⚝ 概率解释清晰: 提供了数据生成过程的概率模型解释。
▮▮▮▮⚝ 潜在空间结构好: 由于 KL 散度的约束,潜在空间通常具有更好的连续性和可插值性,便于进行潜在空间操作(如图像插值、属性修改)。
③ 挑战与局限性:
▮▮▮▮⚝ 生成样本可能模糊: 重构项通常使用像素级别的损失(如均方误差),这可能导致生成的图像细节不够锐利。
▮▮▮▮⚝ 潜在空间容量有限: 使用固定的先验分布可能限制模型捕捉复杂数据分布的能力。
1.1.3 其他生成模型
除了 GANs 和 VAEs,还有一些其他的生成模型在不同时期或特定任务中发挥了重要作用:
① 流模型 (Flow-based Models):
▮▮▮▮⚝ 这类模型通过一系列可逆(Invertible)的变换将简单的基础分布(如高斯分布)映射到复杂的数据分布。
▮▮▮▮⚝ 优势在于可以精确计算数据的对数似然,且采样和推理(计算给定数据的潜在表示)都很高效。
▮▮▮▮⚝ 挑战在于构建足够复杂但仍可逆的变换流通常需要较大的模型参数。
② 自回归模型 (Autoregressive Models):
▮▮▮▮⚝ 这类模型通过链式法则分解数据分布为一系列条件概率的乘积,然后顺序生成数据的每一个元素,例如按照像素顺序生成图像。
▮▮▮▮⚝ 优势在于可以精确建模分布并计算对数似然。
▮▮▮▮⚝ 挑战在于生成过程是顺序的,效率较低,且难以捕捉全局结构。PixelRNN、PixelCNN 是这类模型的代表。
这些模型在推动生成技术发展的同时,也各自面临着训练难度、生成质量、采样效率或理论复杂性等方面的挑战。这为扩散模型的出现提供了契机。
1.2 扩散模型的基本思想
扩散模型(Diffusion Models),特别是去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM),其核心思想受到非平衡热力学(Non-equilibrium Thermodynamics)的启发。它模拟了一个逐步将数据转化为噪声(正向扩散过程)以及一个逐步从噪声恢复数据的逆向过程。
1.2.1 正向过程:逐步加噪
正向扩散过程(Forward Diffusion Process)是一个固定的、预设好的马尔可夫链(Markov Chain)。它在 \( T \) 个时间步(Timesteps)内,逐步向原始数据 \( x_0 \sim q(x_0) \) 添加高斯噪声,直到数据完全变成一个标准高斯噪声 \( x_T \)。
① 数学描述:
▮▮▮▮ⓑ 从真实数据 \( x_0 \) 开始。
▮▮▮▮ⓒ 在每个时间步 \( t \in \{1, \dots, T\} \),根据上一个时间步 \( x_{t-1} \) 添加少量高斯噪声得到 \( x_t \)。这个过程由一个条件概率 \( q(x_t|x_{t-1}) \) 定义。
▮▮▮▮ⓓ 通常,\( q(x_t|x_{t-1}) \) 被定义为一个高斯分布:
\[ q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I}) \]
其中 \( \beta_t \) 是一个预设的方差调度(Variance Schedule),它随着时间步 \( t \) 逐渐增大(例如从 0.0001 到 0.02),确保最终 \( x_T \) 近似于标准高斯分布。\( \sqrt{1 - \beta_t} \) 是为了保持数据的尺度。
▮▮▮▮ⓓ 通过马尔可夫链的性质,我们可以直接采样任意时间步 \( t \) 的加噪数据 \( x_t \) 从 \( x_0 \) 开始,而无需逐步迭代:
设 \( \alpha_t = 1 - \beta_t \) 和 \( \bar{\alpha}_t = \prod_{s=1}^t \alpha_s \)。则 \( x_t \) 可以直接由 \( x_0 \) 表示为:
\[ q(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) \mathbf{I}) \]
这是因为 \( x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} \),其中 \( \epsilon_{t-1} \sim \mathcal{N}(0, \mathbf{I}) \)。将这个式子迭代展开,最终可以得到 \( x_t \) 是 \( x_0 \) 和一系列高斯噪声的线性组合,而高斯分布的线性组合仍然是高斯分布。其均值是 \( \sqrt{\bar{\alpha}_t} x_0 \),方差是 \( (1 - \bar{\alpha}_t) \mathbf{I} \)。
② 直观理解: 可以想象将一张清晰的图片反复浸入越来越浑浊的水中,直到完全模糊,只剩下随机的像素点(噪声)。正向过程是可控且易于实现的,因为它只涉及简单的加法和乘法运算。
1.2.2 逆向过程:逐步去噪生成
逆向过程(Reverse Process)是正向过程的逆转,它是一个从纯噪声 \( x_T \sim \mathcal{N}(0, \mathbf{I}) \) 开始,逐步去除噪声,最终恢复出原始数据 \( x_0 \) 的过程。这个过程的每一步 \( p(x_{t-1}|x_t) \) 都是一个条件概率分布。
① 数学描述:
▮▮▮▮ⓑ 从标准高斯噪声 \( x_T \) 开始。
▮▮▮▮ⓒ 在每个时间步 \( t \in \{T, \dots, 1\} \),根据 \( x_t \) 预测如何去除噪声,得到 \( x_{t-1} \)。这个过程由 \( p_\theta(x_{t-1}|x_t) \) 定义。
▮▮▮▮ⓓ 理论上,如果 \( \beta_t \) 足够小,逆向过程 \( q(x_{t-1}|x_t) \) 也是一个高斯分布。然而,计算 \( q(x_{t-1}|x_t) \) 需要知道数据的真实分布 \( q(x_0) \),这正是我们想要学习的。
▮▮▮▮ⓔ 因此,我们训练一个神经网络(参数为 \( \theta \))来近似这个真实的逆向分布 \( p_\theta(x_{t-1}|x_t) \)。根据贝叶斯定理和正向过程的性质,真实的逆向分布 \( q(x_{t-1}|x_t, x_0) \) 也是一个高斯分布。而 \( q(x_{t-1}|x_t) \) 可以通过对 \( x_0 \) 边缘化得到,虽然复杂但形式已知(仍然是高斯)。关键在于,其均值和方差依赖于 \( q(x_t|x_0) \) 和 \( q(x_{t-1}|x_0) \) 等项,最终可以证明其均值与 \( \nabla_{x_t} \log q(x_t|x_0) \) 相关。
▮▮▮▮ⓕ 重要的是,我们可以通过训练一个模型来预测在时间步 \( t \) 添加到 \( x_0 \) 上的噪声 \( \epsilon \)(因为 \( x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon \)),从而间接地估计 \( q(x_{t-1}|x_t) \) 的均值。DDPM 的核心思想是训练一个噪声预测模型 \( \epsilon_\theta(x_t, t) \) 来预测添加到 \( x_0 \) 上的噪声 \( \epsilon \)。
▮▮▮▮ⓖ 训练目标通常是最小化预测噪声 \( \epsilon_\theta(x_t, t) \) 与实际噪声 \( \epsilon \) 之间的均方误差:
\[ \mathcal{L}_{simple}(\theta) = \mathbb{E}_{t \sim U(1, T), x_0 \sim q(x_0), \epsilon \sim \mathcal{N}(0, \mathbf{I})} \left[ \| \epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, t) \|^2 \right] \]
这个简化的损失函数被证明等价于最大化变分下界(ELBO)的一个加权版本。
② 直观理解: 可以想象从完全浑浊的水中,通过一系列精细的去噪操作,逐步恢复出清晰的图片。逆向过程是需要学习的,因为我们不知道如何直接从噪声变回数据。
扩散模型就是学习这个逆向的去噪过程。一旦模型 \( p_\theta(x_{t-1}|x_t) \) 训练好,我们就可以从随机噪声 \( x_T \) 开始,一步步通过采样 \( x_{t-1} \sim p_\theta(x_{t-1}|x_t) \) 进行迭代,最终得到一个生成样本 \( x_0 \)。
1.3 扩散模型的主要优势与特点
与 GANs、VAEs 等其他生成模型相比,扩散模型展现出了许多独特的优势和特点:
① 生成质量高: 💯 在图像等复杂数据生成任务上,扩散模型能够生成细节丰富、视觉效果惊人的高保真样本, часто超过了此前的 GANs 模型。
② 训练稳定: ⚖️ 基于最大化变分下界或预测噪声的训练目标通常比 GANs 的对抗训练更加稳定,不容易出现模式坍塌,更容易收敛。
③ 原理清晰: 💡 基于概率建模(特别是马尔可夫链和高斯噪声)以及与变分推断和分数匹配(Score Matching)的深刻联系,扩散模型具有坚实的理论基础。
④ 易于扩展: 🔌 扩散模型的架构(通常是 U-Net 加时间步嵌入)相对标准化,便于修改和扩展以适应不同的任务和条件生成需求(如文本到图像)。
⑤ 灵活性: ✨ 逆向过程的每一步都可以视为一个去噪任务,这使得扩散模型天然适用于许多图像处理任务,如去噪、修复、超分辨率等,而无需重新训练。
⑥ 多样性: 🌈 由于其逐步加噪/去噪的性质和对数据分布的良好建模,扩散模型在生成多样化样本方面表现出色,能有效避免模式坍塌问题。
这些优势使得扩散模型迅速成为生成模型领域的研究热点,并在实际应用中展现出巨大的潜力。
1.4 本书结构与阅读指南
本书旨在为不同背景的读者提供一个全面、深入理解扩散模型及其应用的路线图。全书共分为 11 个章节和 6 个附录,内容安排如下:
① 第 1 章:引言(当前章节)简要回顾生成模型历史,介绍扩散模型基本思想和优势,并提供阅读指南。
② 第 2 章:概率与随机过程基础 📚 为理解扩散模型的数学原理,本章回顾必要的概率论、马尔可夫链和随机微分方程基础知识。
③ 第 3 章:去噪扩散概率模型 (DDPM) 核心章节,详细讲解 DDPM 的正向过程、逆向学习目标(变分下界与简化损失)和典型的模型架构。
④ 第 4 章:分数匹配与随机微分方程视角 从分数匹配和 SDE 的角度深入剖析扩散模型,揭示其与 Score-based Models 的联系,介绍 VP/VE SDEs。
⑤ 第 5 章:采样策略与加速 🚀 讨论如何从训练好的模型中高效生成样本,介绍 DDIM、快速采样方法和 SDE/ODE 求解器。
⑥ 第 6 章:条件扩散模型 🎯 探讨如何在扩散模型中融入条件信息,实现可控生成,重点介绍分类器引导、无分类器引导和文本到图像生成。
⑦ 第 7 章:高级架构与技术 ✨ 介绍超越标准 DDPM 的高级变体,如潜在扩散模型 (LDM)、一致性模型、流匹配、扩散 Transformer (DiT) 等。
⑧ 第 8 章:图像应用 🖼️ 详细介绍扩散模型在图像生成、编辑(修复、外绘、语义编辑)、超分辨率、医学影像等领域的具体应用案例。
⑨ 第 9 章:视觉应用 🎬 扩展讨论扩散模型在视频生成、3D 形状生成、视觉-语言任务等更广泛视觉领域的应用。
⑩ 第 10 章:评估与度量 📊 介绍评估生成模型性能的常用指标和方法,如 FID、IS、感知度量、多样性度量和人工评估。
⑪ 第 11 章:局限性、挑战与未来方向 🧭 分析当前扩散模型面临的计算成本、模式覆盖、可控性等挑战,并展望未来的研究方向和应用前景。
附录提供了数学符号、神经网络基础、实现细节、数据集介绍、术语表和参考文献等实用资源,方便读者查阅和实践。
阅读建议:
⚝ 零基础入门者 (Beginners): 建议按章节顺序阅读。重点关注第 1、2、3 章,理解扩散模型的基本原理和 DDPM 的核心细节。可以跳过第 4 章(数学要求较高),先学习第 5、6、8 章的应用部分,建立直观认识。附录 A, B, C, D 会很有帮助。
⚝ 有深度学习基础的读者 (Intermediate): 可以从第 3 章开始深入阅读,理解其数学推导和模型细节。第 4 章提供了更深层的理论视角。然后根据兴趣选择第 5-9 章的特定主题进行深入学习。附录 C, D, E 会加速实践。
⚝ 专家或研究人员 (Experts): 可以将本书作为系统回顾和查阅特定主题的参考。重点关注第 4、5、7 章的理论和高级技术,以及第 8、9 章的前沿应用。第 11 章的挑战与未来方向可能会启发新的研究思路。附录 E, F 提供了方便的索引。
无论您的背景如何,希望本书都能为您打开扩散模型世界的大门,帮助您理解其强大的生成能力背后蕴藏的理论基础,并激发您将其应用于解决实际问题的兴趣和能力! 💪
2. 概率与随机过程基础
2.1 概率分布与密度函数
理解扩散模型(Diffusion Models)的核心机制,离不开对概率论基础的扎实掌握。扩散模型本质上是在数据分布上进行操作,无论是通过逐步加噪将数据转化为简单的先验噪声分布(通常是标准高斯分布),还是通过学习逆向过程从噪声中恢复数据分布。因此,本节将回顾理解扩散模型所需的关键概率论概念。
首先,我们从随机变量(Random Variable)及其概率描述开始。一个随机变量的取值是随机的,其取到不同值的概率由其概率分布(Probability Distribution)决定。
① 对于离散随机变量(Discrete Random Variable),其概率分布可以用概率质量函数(Probability Mass Function, PMF) \(p(x)\) 来描述,其中 \(p(x) = P(X=x)\),表示随机变量 \(X\) 取值为 \(x\) 的概率。所有可能取值的概率之和必须等于1:\( \sum_x p(x) = 1 \)。
② 对于连续随机变量(Continuous Random Variable),其概率分布通常用概率密度函数(Probability Density Function, PDF) \(p(x)\) 来描述。与PMF不同,PDF本身不是概率,而是概率在某个点附近的“密度”。随机变量 \(X\) 在某个区间 \([a, b]\) 内取值的概率通过对PDF在该区间上积分得到:\( P(a \le X \le b) = \int_a^b p(x) dx \)。对于整个实数范围,PDF的积分必须等于1:\( \int_{-\infty}^{\infty} p(x) dx = 1 \)。
在扩散模型中,我们关注的是数据样本 \(x_0\) 的分布,我们称之为数据分布 \(p(x_0)\)。这个分布对于复杂的图像等高维数据来说是高度复杂且通常难以直接建模的。扩散模型的目标之一就是学习这个复杂的数据分布。
除了单一随机变量的分布,理解多个随机变量之间的关系也非常重要。
① 联合概率(Joint Probability) \(p(x, y)\) 表示两个随机变量 \(X\) 和 \(Y\) 同时取特定值 \(x\) 和 \(y\) 的概率(或密度)。
② 边缘概率(Marginal Probability) \(p(x)\) 表示忽略其他变量后,随机变量 \(X\) 取特定值 \(x\) 的概率(或密度)。它可以从联合概率通过求和(离散)或积分(连续)得到:\( p(x) = \sum_y p(x, y) \) 或 \( p(x) = \int p(x, y) dy \)。在扩散模型的正向过程中,我们会看到如何从 \(p(x_0, x_1, ..., x_T)\) 推导出边缘概率 \(p(x_t)\)。
③ 条件概率(Conditional Probability) \(p(y|x)\) 表示在给定随机变量 \(X\) 取值 \(x\) 的条件下,随机变量 \(Y\) 取值 \(y\) 的概率(或密度)。它由联合概率和边缘概率定义:\( p(y|x) = \frac{p(x, y)}{p(x)} \),前提是 \(p(x) > 0\)。反过来,我们也可以写出联合概率的链式法则(Chain Rule):\( p(x, y) = p(y|x) p(x) \)。对于多个变量,链式法则可以推广为:\( p(x_1, x_2, ..., x_n) = p(x_n|x_{n-1}, ..., x_1) p(x_{n-1}|x_{n-2}, ..., x_1) ... p(x_2|x_1) p(x_1) \)。
最后,贝叶斯定理(Bayes' Theorem)是处理条件概率的重要工具。对于两个事件 \(A\) 和 \(B\),贝叶斯定理表示为:
\[ P(A|B) = \frac{P(B|A) P(A)}{P(B)} \]
对于连续随机变量的密度函数,形式类似:
\[ p(y|x) = \frac{p(x|y) p(y)}{p(x)} \]
其中 \(p(x) = \int p(x|y) p(y) dy\)。贝叶斯定理在扩散模型的逆向过程中起着关键作用,因为逆向过程的目标是计算 \(p(x_{t-1}|x_t)\),这可以通过 \(p(x_t|x_{t-1})\)(正向过程已知)和 \(p(x_{t-1})\)(数据的边缘分布,或近似)以及 \(p(x_t)\) 来计算。
2.2 随机变量与随机过程
随机变量(Random Variable)是将随机事件的结果映射到数值的一个函数。在扩散模型中,每个时间步(timestep) \(t\) 上的数据状态 \(x_t\) 都可以被视为一个随机变量。例如,一张图像的像素值,在加入噪声后,就变成了依赖于初始图像和噪声量的随机变量。
一个随机过程(Stochastic Process)可以被看作是一系列按照某个索引(通常是时间 \(t\))排列的随机变量的集合。我们将这个过程记为 \(\{X_t\}_{t \in \mathcal{T}}\) 或 \(\{x_t\}_{t \in \mathcal{T}}\),其中 \(\mathcal{T}\) 是索引集合,可以是离散的(如 \(t=0, 1, ..., T\)) 或连续的 (\(t \in [0, T]\))。
在扩散模型中,我们主要关注时间索引为离散或连续的随机过程。
① 正向扩散过程(Forward Diffusion Process)是一个从原始数据 \(x_0\) 开始,逐步添加噪声,直到最终状态 \(x_T\) 几乎完全是噪声的过程。这个过程形成了一个随机变量序列 \(\{x_0, x_1, ..., x_T\}\)。
② 逆向去噪过程(Reverse Denoising Process)是从噪声状态 \(x_T\) 开始,逐步去除噪声,直到恢复原始数据 \(x_0\) 的过程。这个过程形成另一个随机变量序列 \(\{x_T, x_{T-1}, ..., x_0\}\)。
理解随机过程的关键在于理解序列中不同随机变量之间的依赖关系以及它们各自的概率分布如何随时间演变。
对于随机变量 \(X\),其期望(Expectation) \(E[X]\) 表示其平均值,方差(Variance) \(Var(X)\) 表示其取值围绕期望的离散程度。
① 离散随机变量的期望:\( E[X] = \sum_x x p(x) \)
② 连续随机变量的期望:\( E[X] = \int x p(x) dx \)
③ 方差:\( Var(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2 \)
在扩散模型中,我们会分析每个时间步 \(t\) 上 \(x_t\) 的分布的期望和方差,特别是高斯分布的性质,因为噪声通常被建模为高斯噪声。
2.3 马尔可夫链 (Markov Chain)
马尔可夫链(Markov Chain)是一种特殊的随机过程,其核心特性是无记忆性(Memorylessness)。这意味着在给定当前状态的情况下,未来状态的条件概率分布与过去状态无关。用数学公式表示,对于一个离散时间的随机过程 \(\{x_t\}\),如果它是一个马尔可夫链,则满足:
\[ P(x_{t+1} | x_t, x_{t-1}, ..., x_0) = P(x_{t+1} | x_t) \]
或者对于连续随机变量的密度函数:
\[ p(x_{t+1} | x_t, x_{t-1}, ..., x_0) = p(x_{t+1} | x_t) \]
其中 \(p(x_{t+1} | x_t)\) 称为转移概率(Transition Probability)或转移核(Transition Kernel)。
在去噪扩散概率模型(DDPM)中,正向扩散过程被显式地建模为一个离散时间马尔可夫链。从 \(x_0\) 到 \(x_1\),再到 \(x_2\),...,直到 \(x_T\),每一步 \(x_t\) 只依赖于前一步的状态 \(x_{t-1}\)。具体来说,DDPM的正向过程定义为:
\[ q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I}) \]
这是一个以 \(x_{t-1}\) 为均值(经过缩放),协方差矩阵为 \(\beta_t \mathbf{I}\) 的高斯分布。这里的 \(\beta_t\) 是一个预定的时间表(schedule),控制着在时间步 \(t\) 添加噪声的量。通常 \(\beta_t\) 随 \(t\) 增加而增加,意味着后期添加的噪声更多。
由于正向过程是马尔可夫链,整个正向过程的联合概率 \(q(x_1, ..., x_T | x_0)\) 可以写成一系列转移概率的乘积:
\[ q(x_1, ..., x_T | x_0) = \prod_{t=1}^T q(x_t | x_{t-1}) \]
这个链式结构使得从 \(x_0\) 前向采样到任意时间步 \(t\) 的 \(x_t\) 变得容易(详见第3章)。通过反复应用转移概率,我们可以得到从 \(x_0\) 到 \(x_t\) 的联合分布 \(q(x_t, x_{t-1}, ..., x_1 | x_0)\),进而通过边缘化得到 \(q(x_t | x_0)\)。由于高斯分布的可加性,从 \(x_0\) 经过多步加噪到 \(x_t\) 的结果仍然服从高斯分布 \(q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) \mathbf{I})\),其中 \(\alpha_t = 1 - \beta_t\) 且 \(\bar{\alpha}_t = \prod_{s=1}^t \alpha_s\)。
逆向去噪过程在形式上也是一个马尔可夫链,即 \(p(x_{t-1} | x_t, x_{t+1}, ..., x_T) = p_\theta(x_{t-1} | x_t)\)。然而,与已知转移概率的正向过程不同,逆向过程的转移概率 \(p_\theta(x_{t-1} | x_t)\) 是未知的,需要通过一个神经网络(参数为 \(\theta\))来学习近似。理论上,这个逆向转移概率可以推导得到(使用贝叶斯定理结合正向转移概率 \(q(x_t | x_{t-1})\) 和边缘分布 \(q(x_{t-1} | x_0)\) 和 \(q(x_t | x_0)\)),并且它也是一个高斯分布,只是其均值和方差依赖于 \(x_t\) 和 \(t\),且通常需要依赖于原始数据 \(x_0\)。由于 \(x_0\) 未知,模型需要学习去预测与 \(x_0\) 相关的信息(如噪声或得分函数)来计算逆向转移的均值和方差。
除了离散时间马尔可夫链,还有连续时间马尔可夫链。当时间步长趋近于零时,离散时间过程可以逼近连续时间过程,这与下一节将介绍的随机微分方程紧密相关。
2.4 随机微分方程 (Stochastic Differential Equation, SDE)
随机微分方程(Stochastic Differential Equation, SDE)是用于描述受随机噪声影响的动态系统演变的微分方程。它们是连续时间随机过程的重要数学工具。在扩散模型中,SDEs 提供了一种统一的框架来理解和构建连续时间的扩散过程及其逆过程。
一个一般形式的SDE通常写为:
\[ dx_t = f(x_t, t) dt + g(x_t, t) dw_t \]
这个方程描述了随机过程 \(x_t\) 在无限小时间间隔 \(dt\) 内的变化 \(dx_t\)。
① \(f(x_t, t)\) 是漂移系数(Drift Coefficient),它决定了 \(x_t\) 的确定性趋势或方向。
② \(g(x_t, t)\) 是扩散系数(Diffusion Coefficient),它决定了添加到 \(x_t\) 的噪声的强度。
③ \(dw_t\) 是一个维纳过程(Wiener Process),也称为布朗运动(Brownian Motion)的增量。维纳过程 \(w_t\) 是一个连续时间随机过程,具有以下性质:
▮▮▮▮⚝ \(w_0 = 0\)。
▮▮▮▮⚝ 增量 \(w_t - w_s\) (\(t > s\)) 独立于过去的所有值 \(\{w_u\}_{u \le s}\)。
▮▮▮▮⚝ 增量 \(w_t - w_s\) 服从均值为 0,方差为 \(t - s\) 的高斯分布,即 \(w_t - w_s \sim \mathcal{N}(0, (t-s)\mathbf{I})\)。因此,\(dw_t\) 可以非正式地理解为 \( \sqrt{dt} \mathcal{N}(0, \mathbf{I}) \)。
由于 \(dw_t\) 的随机性和维纳过程的非可微性,标准微积分不能直接用于求解SDE。需要引入伊藤微积分(Itô Calculus),其中的核心工具是伊藤引理(Itô's Lemma),它是随机过程中随机变量函数的微分法则。虽然本书不深入伊藤微积分的数学细节,但了解SDE是描述连续时间扩散过程的恰当语言是关键。
基于SDE的生成模型(Score-based Generative Models)和扩散模型紧密相关,可以将正向扩散过程描述为一个SDE。例如,常见的方差保持SDE(Variance Preserving SDE, VP SDE)对应于DDPM的正向过程在连续时间上的推广:
\[ dx_t = -\frac{1}{2}\beta(t) x_t dt + \sqrt{\beta(t)} dw_t \]
其中 \(\beta(t)\) 是一个与离散时间中的 \(\beta_t\) 类似的函数。这个SDE描述了 \(x_t\) 如何随时间向原点漂移(第一项)并同时被随机噪声扰动(第二项)。
逆向生成过程也可以被描述为一个SDE,它描述了如何从噪声状态 \(x_T\) 逆转SDE回到数据状态 \(x_0\)。关键的数学结果表明,如果正向SDE为 \(dx_t = f(x_t, t) dt + g(x_t, t) dw_t\),其逆向SDE为:
\[ dx_t = \left[ f(x_t, t) - g^2(x_t, t) \nabla_{x_t} \log p(x_t) \right] dt + g(x_t, t) d\bar{w}_t \]
其中 \(d\bar{w}_t\) 是一个在时间反向流逝时的维纳过程增量,\(\nabla_{x_t} \log p(x_t)\) 是时间 \(t\) 时刻的边缘数据分布 \(p(x_t)\) 的得分函数(Score Function)。
可以看到,逆向SDE的漂移项包含了正向SDE的漂移项 \(f(x_t, t)\) 以及一个与得分函数相关的项 \( - g^2(x_t, t) \nabla_{x_t} \log p(x_t) \)。这意味着要执行逆向过程,我们需要知道或能够估计得分函数 \(\nabla_{x_t} \log p(x_t)\)。基于分数的生成模型正是通过训练神经网络来估计这个得分函数,然后使用数值求解器(Numerical Solvers)来求解逆向SDE进行采样。
扩散模型(尤其是DDPM的连续时间视图)和基于分数的生成模型在这一定义下实现了统一。DDPM的训练目标被证明等价于训练一个模型来估计得分函数,而DDPM的逆向采样过程则可以看作是求解对应的逆向SDE的一种特殊离散化形式(例如,祖先采样 Ancestral Sampling 对应于 Euler-Maruyama 求解器加上额外的噪声)。
SDEs不仅提供了理论上的统一,还为开发更灵活的采样策略(如确定性求解器)和新的模型变体(如一致性模型 Consistency Models)奠定了基础。
2.5 变分推断基础
变分推断(Variational Inference, VI)是一种用于近似复杂概率模型中难以处理的后验分布的方法。在生成模型的语境下,我们通常有一个观测数据 \(x\) 和一组潜在变量(latent variables) \(z\)(在扩散模型中,这些潜在变量可以是不同时间步的加噪数据 \(x_1, ..., x_T\))。我们感兴趣的是数据的边缘概率 \(p(x) = \int p(x, z) dz\),特别是希望最大化 \(\log p(x)\) 来训练模型。然而,这个积分往往是难以计算的(特别是在高维空间)。后验分布 \(p(z|x) = \frac{p(x, z)}{p(x)}\) 也通常难以直接计算或采样。
变分推断的核心思想是引入一个易于处理的近似后验分布 \(q(z)\),通常选择参数化的分布形式(如高斯分布)以便优化。我们的目标是找到最优的 \(q(z)\) 来尽可能地逼近真实的后验分布 \(p(z|x)\)。衡量两个分布相似度的一个常用指标是 Kullback-Leibler 散度(KL divergence),定义为 \(D_{KL}(q(z) || p(z|x)) = E_{q(z)}\left[ \log \frac{q(z)}{p(z|x)} \right]\)。KL散度是非负的,当且仅当 \(q(z) = p(z|x)\) 时等于零。因此,最小化 \(D_{KL}(q(z) || p(z|x))\) 就能使 \(q(z)\) 接近 \(p(z|x)\)。
我们将 KL 散度的定义展开:
\[ D_{KL}(q(z) || p(z|x)) = E_{q(z)}[\log q(z) - \log p(z|x)] \]
根据条件概率的定义 \(p(z|x) = \frac{p(x, z)}{p(x)}\),我们有 \(\log p(z|x) = \log p(x, z) - \log p(x)\)。代入上式:
\[ D_{KL}(q(z) || p(z|x)) = E_{q(z)}[\log q(z) - (\log p(x, z) - \log p(x))] \]
\[ D_{KL}(q(z) || p(z|x)) = E_{q(z)}[\log q(z) - \log p(x, z) + \log p(x)] \]
\[ D_{KL}(q(z) || p(z|x)) = E_{q(z)}[\log q(z) - \log p(x, z)] + \log p(x) \]
将 \(\log p(x)\) 移到等式左边,将 \(E_{q(z)}[\log q(z) - \log p(x, z)]\) 移到右边,并改变符号:
\[ \log p(x) = E_{q(z)}[\log p(x, z) - \log q(z)] + D_{KL}(q(z) || p(z|x)) \]
等式右边的第一项 \(E_{q(z)}[\log p(x, z) - \log q(z)]\) 就是变分下界(Variational Lower Bound, VLB),也常被称为 Evidence Lower Bound (ELBO)。
\[ \text{ELBO}(q) = E_{q(z)}[\log p(x, z) - \log q(z)] \]
所以我们得到:
\[ \log p(x) = \text{ELBO}(q) + D_{KL}(q(z) || p(z|x)) \]
由于 \(D_{KL}(q(z) || p(z|x)) \ge 0\),因此 \(\log p(x) \ge \text{ELBO}(q)\)。这就是为什么 ELBO 是数据对数似然 \(\log p(x)\) 的下界。
最大化 ELBO:
\[ \max_q \text{ELBO}(q) = \max_q ( \log p(x) - D_{KL}(q(z) || p(z|x)) ) \]
由于 \(\log p(x)\) 对于给定的数据 \(x\) 是固定的,最大化 ELBO 等价于最小化 \(D_{KL}(q(z) || p(z|x))\)。因此,通过最大化 ELBO,我们找到了最接近真实后验 \(p(z|x)\) 的近似分布 \(q(z)\),同时也在优化模型的参数(体现在 \(p(x, z)\) 中,\(p(x, z)\) 是模型的联合概率)。
在扩散模型中,潜在变量 \(z\) 对应于马尔可夫链中的所有中间变量 \((x_1, x_2, ..., x_T)\),而数据 \(x\) 对应于 \(x_0\)。正向过程 \(q(x_1, ..., x_T | x_0)\) 可以看作是后验分布 \(p(z|x)\) 的一个特定形式(通常是固定的,不学习参数),而逆向过程 \(p_\theta(x_{T-1}, ..., x_0 | x_T)\) 则是用来建模 \(q(z|x)\) 的一个近似。DDPM 的训练目标正是最大化这个过程的 ELBO:
\[ \log p_\theta(x_0) \ge E_{q(x_1:T | x_0)} \left[ \log \frac{p_\theta(x_0:T)}{q(x_1:T | x_0)} \right] = \text{ELBO} \]
其中 \(x_{0:T} = (x_0, x_1, ..., x_T)\) 是整个序列。这个 ELBO 项可以被分解为一系列 KL 散度和重构项,与 DDPM 的训练损失函数直接对应(详见第3章)。因此,变分推断为理解和推导扩散模型的训练目标提供了坚实的理论基础。
好的,各位同學!今天我們將深入探討生成模型領域的一項革命性技術:去噪擴散概率模型 (Denoising Diffusion Probabilistic Models, DDPM)。作為本書的核心內容之一,DDPM不僅奠定了後續許多先進擴散模型的基礎,也是理解整個擴散生成範式的關鍵。
我們將首先從其基本原理入手,詳細解析看似簡單卻蘊含深刻數學原理的正向加噪過程;接著,我們將重點剖析如何構建並訓練神經網絡來學習逆轉這一過程,即逆向去噪生成;最後,我們會介紹實現這些模型的典型神經網絡架構以及整個訓練流程。
請大家準備好,我們即將踏上一段從清晰數據到隨機噪聲,再從隨機噪聲中重塑奇妙世界的數學與模型之旅! 🚀
3. 去噪擴散概率模型 (DDPM)
本章深入講解DDPM的理論框架,包括正向擴散、逆向學習目標以及模型架構。我們將剖析其核心數學原理,理解模型是如何從數據中學習生成能力,以及如何將這些原理轉化為實際可訓練的神經網絡。
3.1 正向扩散过程 (Forward Diffusion Process)
正向擴散過程是DDPM的第一步,它是一個固定且已知的、逐步向數據中添加高斯噪聲的馬爾可夫鏈 (Markov Chain)。這個過程從真實數據樣本 \(x_0 \sim q(x_0)\) 開始,經過 \(T\) 個時間步 (timestep),最終得到一個完全隨機的噪聲分佈 \(x_T\),通常是標準正態分佈 \(N(0, I)\)。
▮▮▮▮✍️ 講師筆記: 將正向過程想像成往一張清晰的照片上逐步潑灑白噪點。每一步只加一點點,經過足夠多的步驟後,原始照片就完全被白噪點淹沒,看不出任何原始信息了。這個過程是確定性的,因為我們知道每一步加了多少噪聲。
3.1.1 高斯噪声与方差调度 (Variance Schedule)
在每個時間步 \(t\) (\(t=1, \dots, T\)),我們在前一個時間步的數據 \(x_{t-1}\) 的基礎上,添加一個均值為 0、方差為 \(\beta_t\) 的高斯噪聲。這可以表示為:
\[ q(x_t | x_{t-1}) = N(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t I) \]
其中,\(N(\cdot; \mu, \Sigma)\) 表示均值為 \(\mu\)、協方差矩陣為 \(\Sigma\) 的高斯分佈。\(\beta_t\) 是預先定義的一個小量,稱為方差调度 (\(\beta_t \in (0, 1)\))。隨著時間步 \(t\) 的增加,我們逐步增加添加的噪聲量。典型的方差調度包括:
① 线性调度 (Linear Schedule): \(\beta_t\) 從一個較小的值 \(\beta_{start}\) 線性地增加到一個較大的值 \(\beta_{end}\)。例如,\(\beta_t = \beta_{start} + (t/T)(\beta_{end} - \beta_{start})\)。
② 余弦调度 (Cosine Schedule): \(\beta_t\) 根據餘弦函數變化,可以更有效地利用晚期時間步。這類調度通常涉及到計算 \(\bar{\alpha}_t = \prod_{s=1}^t (1-\beta_s)\),然後根據 \(\bar{\alpha}_t\) 來定義 \(\beta_t\)。
▮▮▮▮✍️ 講師筆記: 方差調度的選擇會影響模型的訓練和最終生成效果。線性調度是最簡單直觀的,而余弦調度等非線性調度通常能帶來更好的性能。
我們定義 \(\alpha_t = 1 - \beta_t\) 和 \(\bar{\alpha}_t = \prod_{s=1}^t \alpha_s\)。根據高斯分佈的可加性,從 \(x_0\) 經過 \(t\) 步加噪得到 \(x_t\) 的過程,可以通過一個單獨的數學公式直接表示。
3.1.2 任意时间步的采样 (Sampling at Arbitrary Timesteps)
由於正向過程是馬爾可夫鏈,且每一步都添加獨立的高斯噪聲,我們可以推導出從原始數據 \(x_0\) 直接計算任意時間步 \(t\) 的加噪數據 \(x_t\) 的公式。
根據 \(q(x_t | x_{t-1}) = N(x_t; \sqrt{\alpha_t} x_{t-1}, \beta_t I)\),我們有:
\(x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1}\),其中 \(\epsilon_{t-1} \sim N(0, I)\)。
將 \(x_{t-1}\) 代入 \(x_{t-2}\):
\(x_t = \sqrt{\alpha_t} (\sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{\beta_{t-1}} \epsilon_{t-2}) + \sqrt{\beta_t} \epsilon_{t-1}\)
\(x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t \beta_{t-1}} \epsilon_{t-2} + \sqrt{\beta_t} \epsilon_{t-1}\)
重複這個過程,直到 \(x_0\):
\(x_t = \sqrt{\alpha_t \alpha_{t-1} \dots \alpha_1} x_0 + \text{combination of noise terms}\)
\(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon\),其中 \(\epsilon \sim N(0, I)\)。
\[ q(x_t | x_0) = N(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I) \]
這個公式非常重要!它表明,任意時間步 \(t\) 的加噪數據 \(x_t\) 都可以通過原始數據 \(x_0\) 和一個標準正態分佈的噪聲 \(\epsilon\) 直接計算得到。這使得我們可以在訓練時隨機抽取一個時間步 \(t\),而不是必須按照順序處理所有 \(T\) 個時間步。這極大地提高了訓練效率。我們可以使用以下公式從 \(x_0\) 快速得到 \(x_t\):
\[ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \epsilon \sim N(0, I) \]
3.2 逆向过程的学习目标 (Learning Objective of Reverse Process)
正向過程將數據變成了噪聲。我們的目標是學習一個逆向過程,從噪聲 \(x_T \sim N(0, I)\) 開始,逐步去噪,最終恢復出原始數據 \(x_0\)。這個逆向過程也是一個馬爾可夫鏈,由一系列條件概率 \(p_\theta(x_{t-1} | x_t)\) 定義,其中 \(\theta\) 是我們需要學習的神經網絡的參數。
\[ p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t) \]
我們的目標是讓這個學習到的逆向概率分佈 \(p_\theta(x_0)\) 盡可能接近真實數據分佈 \(q(x_0)\)。這通常通過最大化數據的對數似然 (log-likelihood) \(\log p_\theta(x_0)\) 來實現。
3.2.1 基于变分下界 (VLB) 的损失
由於直接計算 \(\log p_\theta(x_0)\) 是困難的,我們轉而優化變分下界 (Variational Lower Bound, VLB),也稱為 ELBO (Evidence Lower Bound)。ELBO 是 \(\log p_\theta(x_0)\) 的一個下界:
\[ \log p_\theta(x_0) \ge E_{q(x_{1:T}|x_0)} [\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)}] = L \]
這個下界 \(L\) 可以分解為一系列項:
\[ L = E_q [ \log \frac{p_\theta(x_T | x_{T-1})}{q(x_T | x_{T-1})} + \sum_{t=2}^T \log \frac{p_\theta(x_{t-1} | x_t, x_0)}{q(x_{t-1} | x_t, x_0)} + \log p_\theta(x_0 | x_1) ] \]
注意到 \(q(x_t | x_{t-1})\) 是已知的正向過程,而 \(q(x_{t-1} | x_t, x_0)\) 是正向過程的後驗概率,也可以通過貝葉斯定理計算得到,它也是一個高斯分佈:
\[ q(x_{t-1} | x_t, x_0) = N(x_{t-1}; \tilde{\mu}(x_t, x_0), \tilde{\beta}_t I) \]
其中,\(\tilde{\mu}(x_t, x_0) = \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t} x_t\) 且 \(\tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t} \beta_t\)。
理想情況下,我們希望學習到的逆向轉移概率 \(p_\theta(x_{t-1} | x_t)\) 能盡可能接近真實的後驗概率 \(q(x_{t-1} | x_t, x_0)\)。因此,VLB 中的大部分項 \(L_{t-1} = E_q [\log \frac{p_\theta(x_{t-1} | x_t)}{q(x_{t-1} | x_t, x_0)}]\) 可以表示為兩個高斯分佈之間的 Kullback-Leibler (KL) 散度:
\[ L_{t-1} = -E_q [ D_{KL}(q(x_{t-1} | x_t, x_0) || p_\theta(x_{t-1} | x_t)) ] \]
我們的神經網絡 \(\epsilon_\theta(x_t, t)\) 需要學習去預測與 \(x_t\) 相關的一些量,使得 \(p_\theta(x_{t-1} | x_t)\) 盡可能接近 \(q(x_{t-1} | x_t, x_0)\)。原始的 DDPM (Ho et al., 2020) 設定 \(p_\theta(x_{t-1} | x_t)\) 也是一個高斯分佈,並且固定其方差為 \(\sigma_t^2 I\),其中 \(\sigma_t^2\) 可以是 \(\beta_t\) 或 \(\tilde{\beta}_t\)。網絡 \(\epsilon_\theta\) 則用於預測這個高斯分佈的均值。通過數學推導,最大化 VLB 等價於最小化學習到的逆向均值與真實後驗均值之間的差異。
3.2.2 简化的训练目标 (Simplified Training Objective)
Ho et al. (2020) 發現,原始 VLB 損失中的 KL 散度項 \(D_{KL}(q(x_{t-1} | x_t, x_0) || p_\theta(x_{t-1} | x_t))\),在網絡參數化為預測添加到 \(x_0\) 的噪聲 \(\epsilon\) 時,可以得到一個非常簡潔且有效的形式。
回顧 \(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon\),我們可以從中反推出 \(x_0\):
\(x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}} (x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon)\)
將這個 \(x_0\) 的表達式代入真實後驗均值 \(\tilde{\mu}(x_t, x_0)\) 的公式中,經過一系列推導,可以發現真實後驗均值 \(\tilde{\mu}(x_t, x_0)\) 可以用 \(x_t\)、\(\bar{\alpha}_t\)、\(\beta_t\) 和原始噪聲 \(\epsilon\) 來表示。
如果我們讓神經網絡 \(\epsilon_\theta(x_t, t)\) 直接預測添加到 \(x_0\) 中的噪聲 \(\epsilon\),那麼學習到的逆向過程均值 \(\mu_\theta(x_t, t)\) 就可以根據預測的噪聲 \(\epsilon_\theta\) 來計算。
神奇的是,最小化 KL 散度項(對於固定方差的情況)等價於最小化預測噪聲 \(\epsilon_\theta(x_t, t)\) 與真實噪聲 \(\epsilon\) 之間的均方誤差 (Mean Squared Error, MSE),可能帶有時間步相關的權重。最簡單且在實踐中非常有效的損失函數是:
\[ L_{simple} = E_{t \sim [1, T], x_0 \sim q(x_0), \epsilon \sim N(0,I)} [||\epsilon - \epsilon_\theta(x_t, t)||^2] \]
其中,
⚝ \(t\) 是在 \(1\) 到 \(T\) 之間均勻採樣的時間步。
⚝ \(x_0\) 是一個從數據分佈中採樣的真實數據。
⚝ \(\epsilon\) 是一個從標準正態分佈中採樣的噪聲。
⚝ \(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon\) 是在時間步 \(t\) 時,由 \(x_0\) 加噪得到的數據。
⚝ \(\epsilon_\theta(x_t, t)\) 是我們的神經網絡,它接收加噪數據 \(x_t\) 和時間步 \(t\) 作為輸入,輸出對應時間步添加到 \(x_0\) 中的噪聲的預測。
這個簡化的損失函數成為了訓練 DDPMs 的標準方法,它直觀且易於實現。網絡的任務就是學會從不同程度的噪聲數據 \(x_t\) 中「識別」並「預測」出導致其偏離原始數據 \(x_0\) 的那部分噪聲 \(\epsilon\)。一旦網絡學會了準確預測噪聲 \(\epsilon\),就可以在逆向過程中,從 \(x_t\) 減去預測的噪聲,逐步恢復出 \(x_{t-1}\)。
▮▮▮▮✍️ 講師筆記: 這個簡化損失的發現是 DDPM 成功的關鍵之一。它將復雜的概率分佈匹配問題轉化為一個相對簡單的迴歸問題——預測噪聲。這使得訓練過程非常穩定。
3.3 模型架构 (Model Architecture)
用於預測噪聲的神經網絡 \(\epsilon_\theta(x_t, t)\) 需要能夠處理圖像數據(通常是高維的)並考慮到時間步 \(t\) 的信息。最常用的架構是 U-Net,這是一種在圖像到圖像任務(如圖像分割、圖像去噪)中表現出色的卷積神經網絡 (Convolutional Neural Network, CNN) 架構。
3.3.1 带时间步嵌入的 U-Net
U-Net (Ronneberger et al., 2015) 具有編碼器-解碼器結構和跳躍連接 (skip connections)。
⚝ 编码器 (Encoder): 包含一系列卷積層和下採樣層,用於逐步提取圖像特徵並減小特徵圖的空間分辨率。
⚝ 解码器 (Decoder): 包含一系列卷積層和上採樣層,用於逐步恢復空間分辨率,並從提取的特徵中構建輸出圖像。
⚝ 跳跃连接 (Skip Connections): 連接編碼器中不同層次的特徵圖與解碼器中對應空間分辨率的層次。這有助於保留圖像的空間細節,避免在下採樣過程中丟失信息。
為了將時間步 \(t\) 的信息引入到網絡中,我們通常使用一種稱為时间步嵌入 (Timestep Embedding) 的技術。類似於 Transformer 中的位置編碼 (Positional Encoding),我們首先將離散的時間步 \(t\) 轉換為一個高維向量嵌入。常用的方法是正弦位置嵌入 (Sinusoidal Positional Embedding)。
\[ PE(t)_i = \begin{cases} \sin(t / 10000^{i/d_{model}}) & \text{if } i \text{ is even} \\ \cos(t / 10000^{(i-1)/d_{model}}) & \text{if } i \text{ is odd} \end{cases} \]
其中 \(d_{model}\) 是嵌入向量的維度。這個時間步嵌入向量隨後會被注入到 U-Net 的各個層次中,例如通過 FiLM (Feature-wise Linear Modulation) 層或者簡單地加到特徵向量中。這樣,U-Net 在處理圖像特徵的同時,也知道當前數據 \(x_t\) 處於哪個去噪階段 (\(t\)),從而可以根據不同的噪聲水平調整其去噪行為。
3.3.2 注意力机制 (Attention Mechanism)
雖然 U-Net 傳統上主要依賴卷積操作來捕獲局部特徵,但在現代的 DDPM 實現中,通常會在 U-Net 的某些層(尤其是在較低的空間分辨率,即編碼器後期的特徵圖上)引入自注意力机制 (Self-Attention Mechanism)。自注意力機制允許模型捕獲圖像中的長距離依賴關係,這對於生成全局一致性強、細節豐富的圖像至關重要。例如,它能幫助模型理解圖像不同部分之間的關係,確保生成的圖像在整體結構上更加合理。
▮▮▮▮✍️ 講師筆記: 將 U-Net 想像成一個漏斗:編碼器是窄口,提取高級語義信息;解碼器是寬口,重建圖像細節。跳躍連接是旁路,確保細節不丟失。時間步嵌入就像是告訴網絡「現在圖像有多模糊」,以便它知道應該如何去噪。自注意力則幫助網絡看到圖像的全貌,而不僅僅是局部區域。
3.4 训练过程
DDPM 的訓練過程相對直接,遵循之前描述的簡化訓練目標。
① 数据准备: 首先,準備用於訓練的圖像數據集。圖像通常被縮放到一個固定的大小(例如 64x64, 256x256 或 512x512),像素值被歸一化到 [-1, 1] 或 [0, 1] 範圍。
② 模型与优化器: 初始化神經網絡 \(\epsilon_\theta\) (通常是帶時間步嵌入的 U-Net) 和一個優化器 (Optimizer),如 Adam 或 AdamW。
③ 训练循环: 重複以下步驟直至收斂:
▮▮▮▮ⓓ 從數據集中採樣一個小批量 (batch) 的真實圖像 \(x_0\)。
▮▮▮▮ⓔ 對於批次中的每個圖像,隨機採樣一個時間步 \(t \in \{1, \dots, T\}\)。
▮▮▮▮ⓕ 從標準正態分佈 \(N(0, I)\) 中採樣一個與 \(x_0\) 同樣形狀的噪聲張量 \(\epsilon\)。
▮▮▮▮ⓖ 使用公式 \(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon\) 計算時間步 \(t\) 的加噪圖像 \(x_t\)。
▮▮▮▮ⓗ 將 \(x_t\) 和其對應的時間步 \(t\) (經過嵌入處理) 輸入到神經網絡 \(\epsilon_\theta(x_t, t)\),得到預測的噪聲 \(\epsilon_\theta\)。
▮▮▮▮ⓘ 計算預測噪聲 \(\epsilon_\theta\) 與真實噪聲 \(\epsilon\) 之間的均方誤差 \(L_{simple} = ||\epsilon - \epsilon_\theta||^2\)。
▮▮▮▮ⓙ 使用優化器根據計算出的損失更新網絡參數 \(\theta\)。
⑪ 采样生成: 訓練完成後,我們可以從訓練好的模型中生成新的圖像。生成過程是逆向的:
▮▮▮▮ⓛ 從標準正態分佈 \(N(0, I)\) 採樣一個隨機噪聲 \(x_T\)。
▮▮▮▮ⓜ 從 \(t = T\) 到 \(1\) 迭代:
▮▮▮▮▮▮▮▮❶ 使用網絡預測當前時間步 \(t\) 的噪聲 \(\epsilon_\theta(x_t, t)\)。
▮▮▮▮▮▮▮▮❷ 根據預測的噪聲 \(\epsilon_\theta\) 計算估計的均值 \(\mu_\theta(x_t, t)\) 和方差 \(\sigma_t^2\)。原始 DDPM 論文中 \(p_\theta(x_{t-1}|x_t)\) 的均值估計公式為:
\[ \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} (x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta(x_t, t)) \]
方差 \(\sigma_t^2\) 可以固定為 \(\beta_t\) 或 \(\tilde{\beta}_t\)。
▮▮▮▮▮▮▮▮❸ 從高斯分佈 \(N(x_{t-1}; \mu_\theta(x_t, t), \sigma_t^2 I)\) 中採樣得到 \(x_{t-1}\)。注意,當 \(t=1\) 時,生成過程的最後一步不添加額外的高斯噪聲(或添加一個非常小的噪聲),直接輸出均值作為 \(x_0\)。
▮▮▮队员ⓒ 最終得到的 \(x_0\) 就是模型生成的圖像。
整個訓練過程的目標是讓網絡學會預測每一步加入的噪聲,從而能夠在逆向過程中準確地從噪聲中恢復出數據。雖然逆向過程需要 \(T\) 步(通常 \(T\) 可以是 1000),但由於每一步的計算相對簡單(一次 U-Net 前向傳播),且訓練可以并行進行,DDPM 在生成高質量圖像方面展現出了驚人的能力。
4. 分数匹配与随机微分方程视角
本章旨在从另一个强大的理论视角——分数匹配(Score Matching)和随机微分方程(Stochastic Differential Equation, SDE)——来重新理解和审视扩散模型。通过这种视角,我们可以揭示扩散模型与早期基于分数的生成模型(Score-based Generative Models)的深层联系,并为模型的分析、设计和采样提供统一的框架。理解这一框架对于深入掌握扩散模型的理论精髓至及其变种至关重要。
4.1 分数函数 (Score Function)
分数函数是概率建模中的一个核心概念,它描述了数据分布在样本空间中各点的“形状”或“倾向”。对于一个概率密度函数 \( p(x) \),其分数函数定义为其对数密度的梯度:
\[ s(x) = \nabla_x \log p(x) \]
其中,\( \nabla_x \) 表示对变量 \( x \) 计算梯度。
分数函数 \( s(x) \) 的直观意义是什么呢?
⚝ 在 \( x \) 点,\( s(x) \) 指向概率密度增加最快的方向。
⚝ \( s(x) \) 的范数 \( \|s(x)\| \) 反映了在该点附近概率密度的变化速度。在高密度区域(数据样本附近),\( \|s(x)\| \) 通常较小;在低密度区域,\( \|s(x)\| \) 可能较大。
⚝ 分数函数蕴含了数据分布的全部信息。理论上,如果我们知道了数据分布 \( p(x) \) 的分数函数 \( s(x) \),即使不知道 \( p(x) \) 本身,我们也可以通过积分或其他方法重构出 \( p(x) \) 的相对形状(忽略归一化常数)。
为什么分数函数对生成模型很重要?
生成模型的最终目标是学习并能够从目标数据分布 \( p_{data}(x) \) 中采样。直接学习复杂的、高维的数据密度函数 \( p_{data}(x) \) 非常困难。然而,学习其分数函数 \( s_{data}(x) = \nabla_x \log p_{data}(x) \) 可能更容易,特别是当我们可以通过巧妙的方法(如分数匹配)来训练一个模型 \( s_\theta(x) \approx s_{data}(x) \) 时。一旦我们有了数据分布的分数函数的估计,就可以利用它来引导采样过程,从简单的噪声分布逐渐移动到高密度的数据区域,从而生成样本。
4.2 分数匹配 (Score Matching)
分数匹配是一种训练能够估计数据分布分数函数的模型的技术。其核心思想是最小化模型估计的分数 \( s_\theta(x) \) 与真实数据分布的分数 \( s_{data}(x) \) 之间的差异。然而,直接计算 \( s_{data}(x) \) 需要知道 \( p_{data}(x) \),这正是我们想要避免的。
标准的(显式)分数匹配目标函数是最小化 \( \| s_\theta(x) - s_{data}(x) \|^2 \) 在数据分布 \( p_{data}(x) \) 下的期望:
\[ \mathbb{E}_{x \sim p_{data}(x)} [ \| s_\theta(x) - s_{data}(x) \|^2 ] \]
通过数学推导(如利用积分恒等式,例如 Stein's Lemma 或 Integration by Parts),可以证明最小化上述目标等价于最小化以下可计算的目标函数:
\[ \mathbb{E}_{x \sim p_{data}(x)} [ \text{Tr}(\nabla_x s_\theta(x)) + \frac{1}{2} \| s_\theta(x) \|^2 ] \]
这个目标函数不需要计算 \( s_{data}(x) \),只需要计算模型的分数函数 \( s_\theta(x) \) 及其对 \( x \) 的雅可比矩阵的迹 \( \text{Tr}(\nabla_x s_\theta(x)) \)。这使得我们可以通过随机梯度下降(SGD)在数据样本上训练模型 \( s_\theta \)。
然而,直接计算 \( \text{Tr}(\nabla_x s_\theta(x)) \) 在高维数据空间中仍然具有挑战性且计算量大。这限制了标准分数匹配在大规模图像生成中的应用。
▮▮▮▮ⓐ 去噪分数匹配 (Denoising Score Matching, DSM)
去噪分数匹配是分数匹配的一种变体,它绕过了计算 \( \text{Tr}(\nabla_x s_\theta(x)) \) 的需要,使得分数匹配在高维空间中变得可行。DSM 的思想是,不直接在原始数据分布 \( p_{data}(x) \) 上学习分数函数,而是在经过噪声扰动后的分布 \( p_\sigma(\tilde{x}) = \int p_{data}(x) p_\sigma(\tilde{x} | x) dx \) 上学习其分数函数 \( s_\sigma(\tilde{x}) = \nabla_{\tilde{x}} \log p_\sigma(\tilde{x}) \)。
假设我们向原始数据 \( x \) 添加高斯噪声得到 \( \tilde{x} \):\( \tilde{x} = x + \epsilon \),其中 \( \epsilon \sim \mathcal{N}(0, \sigma^2 I) \)。扰动分布 \( p_\sigma(\tilde{x} | x) \) 是一个以 \( x \) 为均值,\( \sigma^2 I \) 为方差的高斯分布。
可以证明,最小化扰动数据分布的分数 \( s_\sigma(\tilde{x}) \) 与模型估计的分数 \( s_\theta(\tilde{x}) \) 之间的差异:
\[ \mathbb{E}_{\tilde{x} \sim p_\sigma(\tilde{x})} [ \| s_\theta(\tilde{x}) - s_\sigma(\tilde{x}) \|^2 ] \]
等价于最小化以下去噪目标函数:
\[ \mathbb{E}_{p_{data}(x)} \mathbb{E}_{\epsilon \sim \mathcal{N}(0, \sigma^2 I)} [ \| s_\theta(x + \epsilon) - (-\frac{\epsilon}{\sigma^2}) \|^2 ] \]
注意,扰动数据分布的分数函数 \( s_\sigma(\tilde{x} | x) = \nabla_{\tilde{x}} \log p_\sigma(\tilde{x} | x) = \nabla_{\tilde{x}} \log \mathcal{N}(\tilde{x}; x, \sigma^2 I) = -\frac{\tilde{x}-x}{\sigma^2} = -\frac{\epsilon}{\sigma^2} \)。当 \( \sigma \to 0 \),\( \tilde{x} \to x \),\( s_\sigma(\tilde{x}) \to s_{data}(x) \)。所以,训练模型 \( s_\theta \) 去预测扰动 \( \tilde{x} \) 对应的“噪声方向” \( -\epsilon/\sigma^2 \) 就相当于在扰动数据分布上进行分数匹配。
这个目标函数的优点在于:
① 不需要计算 \( s_{data}(x) \)。
② 不需要计算 \( \text{Tr}(\nabla_x s_\theta(x)) \)。
③ 训练过程直观:给定一个带噪声的样本 \( \tilde{x} \),模型 \( s_\theta(\tilde{x}) \) 学习预测需要移除多少噪声才能回到原始数据 \( x \)(或者说,学习预测噪声 \( \epsilon \) 的方向和大小,然后通过 \( \tilde{x} - \text{predicted\_noise} \) 实现去噪)。
DSM 的一个挑战是,使用单一噪声尺度 \( \sigma \) 可能无法有效地学习到分布在不同尺度(平滑度)上的分数信息。为了解决这个问题,基于分数的生成模型引入了多种噪声尺度。
4.3 基于分数的生成模型 (Score-based Generative Models)
基于分数的生成模型利用训练好的分数估计模型 \( s_\theta(x) \approx \nabla_x \log p_{data}(x) \) 来从数据分布中生成样本。一种常用的采样方法是朗之万动力学(Langevin Dynamics)。
朗之万动力学是一种马尔可夫链蒙特卡洛(MCMC)方法,它可以用于从一个已知其分数函数的概率分布中采样。基本的迭代更新规则如下:
\[ x_{t+1} = x_t + \frac{\delta^2}{2} \nabla_x \log p(x_t) + \delta z_t \]
其中,\( \delta \) 是步长,\( z_t \sim \mathcal{N}(0, I) \) 是随机噪声。
如果我们用估计的分数函数 \( s_\theta(x) \) 替换真实的 \( \nabla_x \log p(x) \),就可以得到基于分数的朗之万采样算法:
\[ x_{t+1} = x_t + \frac{\delta^2}{2} s_\theta(x_t) + \delta z_t \]
这个过程可以从一个随机噪声点 \( x_0 \) 开始,通过迭代应用上述更新规则,样本 \( x_t \) 会逐渐向估计的概率密度高的区域移动,最终收敛到 \( p_{data}(x) \) 的一个样本。
然而,传统的朗之万采样需要精确的分数函数估计,并且在低密度区域(Modes之间)采样效率不高,可能难以覆盖数据分布的所有模式(Mode Covering)。为了解决这个问题,Song et al. (2019) 提出了退火朗之万动力学(Annealed Langevin Dynamics)。
▮▮▮▮ⓐ 退火朗之万动力学 (Annealed Langevin Dynamics)
退火朗之万动力学的思想是,首先在较大尺度的噪声扰动分布上进行采样,然后在噪声尺度逐渐减小的情况下,逐步细化样本。这通过引入一系列递减的噪声尺度 \( \sigma_1 > \sigma_2 > \dots > \sigma_L > 0 \) 来实现。
算法流程大致如下:
① 从一个简单的先验分布(如高斯噪声)采样初始样本 \( x_0 \)。
② 对于每一个噪声尺度 \( \sigma_i \) (从 \( \sigma_1 \) 到 \( \sigma_L \)):
▮▮▮▮ⓒ 对当前样本 \( x \) 执行多次(例如 K 次)朗之万更新,使用在噪声尺度 \( \sigma_i \) 下训练的分数模型 \( s_\theta(x, \sigma_i) \):
\[ x \leftarrow x + \frac{\delta_i^2}{2} s_\theta(x, \sigma_i) + \delta_i z \]
其中 \( \delta_i \) 是与 \( \sigma_i \) 相关的步长。
③ 经过所有噪声尺度的退火过程后,得到的最终样本即为生成样本。
为了实现退火朗之万动力学,我们需要训练一个能够估计不同噪声尺度下扰动数据分布分数函数的模型 \( s_\theta(x, \sigma) \)。这可以通过训练一个条件分数模型来完成,该模型以噪声尺度 \( \sigma \) 作为输入:
\[ \min_\theta \mathbb{E}_{\sigma \in \{\sigma_i\}} \mathbb{E}_{x \sim p_{data}(x)} \mathbb{E}_{\epsilon \sim \mathcal{N}(0, \sigma^2 I)} [ \| s_\theta(x + \epsilon, \sigma) - (-\frac{\epsilon}{\sigma^2}) \|^2 ] \]
这个目标函数就是跨不同噪声尺度的加权去噪分数匹配。
4.4 扩散模型作为基于分数的模型
现在,让我们来连接基于分数的生成模型和去噪扩散概率模型(DDPM)。
回顾 DDPM 的训练目标(简化的训练目标):
\[ L_{simple} = \mathbb{E}_{t \sim U(1, T), x_0 \sim p_{data}(x_0), \epsilon \sim \mathcal{N}(0, I)} [ \| \epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, t) \|^2 ] \]
其中,\( x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon \) 是在时间步 \( t \) 的加噪数据,\( \bar{\alpha}_t \) 是与方差调度 \( \beta_t \) 相关的系数,\( \epsilon_\theta(x_t, t) \) 是模型预测的噪声。
我们知道,在时间步 \( t \),加噪数据 \( x_t \) 的分布可以视为原始数据 \( x_0 \) 经过方差为 \( 1 - \bar{\alpha}_t \) 的高斯噪声扰动后的结果。精确来说,\( x_t | x_0 \sim \mathcal{N}(x_0 \sqrt{\bar{\alpha}_t}, (1 - \bar{\alpha}_t) I) \)。其边缘分布 \( p_t(x_t) = \int p_{data}(x_0) p(x_t | x_0) dx_0 \)。
考虑 \( x_t \) 的分数函数 \( \nabla_{x_t} \log p_t(x_t) \)。我们可以证明,预测噪声 \( \epsilon \) 与预测分数函数之间存在一个精确的数学关系。
对于 \( x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon \),其中 \( \epsilon \sim \mathcal{N}(0, I) \),我们可以写出 \( \epsilon = \frac{x_t - \sqrt{\bar{\alpha}_t} x_0}{\sqrt{1 - \bar{\alpha}_t}} \)。
DDPM 模型的训练目标是让 \( \epsilon_\theta(x_t, t) \) 预测 \( \epsilon \)。也就是说,模型学习预测 \( \frac{x_t - \sqrt{\bar{\alpha}_t} x_0}{\sqrt{1 - \bar{\alpha}_t}} \)。
另一方面,考虑 \( x_t \) 条件于 \( x_0 \) 的分布 \( p(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I) \)。其对数密度为:
\[ \log p(x_t | x_0) = -\frac{D}{2}\log(2\pi(1-\bar{\alpha}_t)) - \frac{\| x_t - \sqrt{\bar{\alpha}_t} x_0 \|^2}{2(1 - \bar{\alpha}_t)} \]
对 \( x_t \) 求梯度得到其分数函数:
\[ \nabla_{x_t} \log p(x_t | x_0) = -\frac{x_t - \sqrt{\bar{\alpha}_t} x_0}{1 - \bar{\alpha}_t} \]
注意,这个分数函数与预测噪声 \( \epsilon_\theta \) 的关系:
\[ -\frac{x_t - \sqrt{\bar{\alpha}_t} x_0}{1 - \bar{\alpha}_t} = -\frac{\sqrt{1 - \bar{\alpha}_t}\epsilon}{1 - \bar{\alpha}_t} = -\frac{\epsilon}{\sqrt{1 - \bar{\alpha}_t}} \]
因此,如果模型 \( \epsilon_\theta(x_t, t) \) 成功预测了 \( \epsilon \),那么 \( -\frac{\epsilon_\theta(x_t, t)}{\sqrt{1 - \bar{\alpha}_t}} \) 就近似于条件分布 \( p(x_t | x_0) \) 的分数函数 \( \nabla_{x_t} \log p(x_t | x_0) \)。
更进一步,可以证明 DDPM 的简化训练目标等价于最小化模型分数 \( -\frac{\epsilon_\theta(x_t, t)}{\sqrt{1 - \bar{\alpha}_t}} \) 与边缘分布 \( p_t(x_t) \) 的真实分数 \( \nabla_{x_t} \log p_t(x_t) \) 之间的加权 \( L_2 \) 距离:
\[ \mathbb{E}_{t, x_0, \epsilon} [ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 ] \propto \mathbb{E}_{t, x_t \sim p_t(x_t)} [ (1 - \bar{\alpha}_t) \| \nabla_{x_t} \log p_t(x_t) - (-\frac{\epsilon_\theta(x_t, t)}{\sqrt{1 - \bar{\alpha}_t}} ) \|^2 ] \]
这表明 DDPM 的训练本质上是训练一个噪声条件的分数模型 \( s_\theta(x, t) = -\frac{\epsilon_\theta(x, t)}{\sqrt{1 - \bar{\alpha}_t}} \) 来估计不同时间步 \( t \)(对应不同的噪声水平 \( \sqrt{1 - \bar{\alpha}_t} \))下的扰动数据分布 \( p_t(x) \) 的分数函数 \( \nabla_x \log p_t(x) \)。这个训练目标与 §4.3 中提到的退火朗之万动力学所使用的加权去噪分数匹配目标非常相似。
通过这种等价性,我们将 DDPM 置于基于分数的生成模型的框架下。逆向过程的采样可以被视为利用学习到的分数函数 \( s_\theta(x_t, t) \) 从 \( p_t(x_t) \) 逐步采样到 \( p_0(x_0) \approx p_{data}(x_0) \) 的过程。
4.5 扩散SDEs与逆向SDEs (Diffusion SDEs and Reverse SDEs)
将扩散过程和生成过程形式化为随机微分方程(SDE)提供了一个更强大的统一框架,它不仅包含 DDPM 和基于分数的生成模型,还为设计新的扩散过程和采样算法打开了大门。
一般形式的扩散过程可以被描述为一个扩散SDE (Diffusion SDE):
\[ dx = f(x, t) dt + g(t) dw \]
其中,
⚝ \( x(t) \) 是时间 \( t \) 时的样本状态(从 \( t=0 \) 到 \( t=T \),\( x(0) \sim p_{data} \),\( x(T) \) 是纯噪声)。
⚝ \( f(x, t) \) 是漂移系数 (drift coefficient),描述了 \( x \) 随时间变化的确定性趋势。
⚝ \( g(t) \) 是扩散系数 (diffusion coefficient),描述了随机噪声的强度。
⚝ \( w \) 是标准的维纳过程(Wiener Process),即布朗运动(Brownian Motion)。
这个 SDE 描述了数据 \( x(0) \) 如何随着时间 \( t \) 演变成一个简单的噪声分布 \( x(T) \)。
基于 Lu et al. (2020) 和 Song et al. (2021) 的工作,我们可以证明,与任何前向扩散 SDE 相对应的,存在一个在时间上从 \( T \) 到 \( 0 \) 运行的逆向SDE (Reverse SDE),它可以用于从 \( x(T) \) 采样,并恢复出原始数据分布 \( p_{data}(x(0)) \)。这个逆向 SDE 的形式为:
\[ dx = [f(x, t) - g(t)^2 \nabla_x \log p_t(x)] dt + g(t) d\bar{w} \]
其中,
⚝ \( x(t) \) 是时间 \( t \) 时的样本状态(从 \( t=T \) 到 \( t=0 \),\( x(T) \sim p_T \),\( x(0) \sim p_0 \approx p_{data} \))。
⚝ \( p_t(x) \) 是前向 SDE 在时间 \( t \) 时样本 \( x(t) \) 的边缘分布。
⚝ \( d\bar{w} \) 是一个逆向时间的维纳过程。
请注意,逆向 SDE 的漂移项中包含了 \( \nabla_x \log p_t(x) \),即时间 \( t \) 时边缘分布的分数函数。为了能够数值求解这个逆向 SDE 进行采样,我们需要一个模型来估计这个分数函数 \( s_\theta(x, t) \approx \nabla_x \log p_t(x) \)。这正是我们在 §4.4 中讨论的,DDPM 模型训练的目标就是学习这样的一个分数函数估计器(通过预测噪声 \( \epsilon_\theta \) 并进行转换)。
接下来,我们看几个具体的 SDE 类型及其与现有模型的联系。
4.5.1 VP SDE (Variance Preserving SDE)
方差保持 SDE 对应于 DDPM 中的前向扩散过程。在 DDPM 中,每一步加噪的方差是固定的 \( \beta_t \),但由于是累积加噪,总噪声水平逐渐增加。VP SDE 的形式通常写为:
\[ dx = -\frac{1}{2}\beta(t) x dt + \sqrt{\beta(t)} dw \]
其中,\( \beta(t) \) 是一个随着时间 \( t \) 变化的方差调度函数(从 \( t=0 \) 到 \( t=T \),通常 \( \beta(t) \) 是递增的)。
这个 SDE 的性质是,如果 \( x(0) \) 来自数据分布 \( p_{data} \),那么 \( x(t) \) 的均值会趋向于 0(如果数据均值为 0),而其方差会逐渐增大,但总体的信噪比(信号与噪声的比例)会以某种方式保持。在 \( t=T \) 时,\( x(T) \) 会接近一个各向同性高斯分布。
对应的逆向 VP SDE 为:
\[ dx = [-\frac{1}{2}\beta(t) x - \beta(t) \nabla_x \log p_t(x)] dt + \sqrt{\beta(t)} d\bar{w} \]
DDPM 的采样过程本质上就是对这个逆向 VP SDE 的离散化数值求解。DDPM 模型 \( \epsilon_\theta(x_t, t) \) 估计的是 \( \epsilon \),而 \( \nabla_{x_t} \log p_t(x_t) \approx -\frac{\epsilon_\theta(x_t, t)}{\sqrt{1 - \bar{\alpha}_t}} \)。将 \( \sqrt{1 - \bar{\alpha}_t} \) 写成连续时间形式,并代入逆向 SDE 中,就可以看到 DDPM 离散采样步的数学形式与这个连续时间的逆向 SDE 是对应的。
4.5.2 VE SDE (Variance Exploding SDE)
方差爆发 SDE 对应于 Song et al. (2019) 提出的基于分数的生成模型的前向过程。这类 SDE 的扩散系数通常随时间 \( t \) 增加,使得样本的方差在 \( t \to T \) 时趋于无穷大:
\[ dx = f(x, t) dt + g(t) dw \]
例如,一种常见的 VE SDE 是:
\[ dx = \sigma(t) dw \]
其中 \( \sigma(t) \) 是一个递增函数,如 \( \sigma(t) = t \) 或 \( \sigma(t) = \sigma_{max}^t \)。这种 SDE 描述的是一个纯随机过程,没有漂移项 \( f(x, t) \)。
对应的逆向 VE SDE 为:
\[ dx = -g(t)^2 \nabla_x \log p_t(x) dt + g(t) d\bar{w} \]
可以看出,逆向过程仅依赖于分数函数 \( \nabla_x \log p_t(x) \) 和扩散系数 \( g(t) \)。Song et al. (2019) 的模型训练了一个分数网络 \( s_\theta(x, t) \) 来估计 \( \nabla_x \log p_t(x) \),并利用退火朗之万动力学(可以看作是逆向 SDE 的一种离散化和采样方法)来生成样本。
4.5.3 逆向SDEs与ODE (Ordinary Differential Equation)
除了随机逆向 SDE 外,与任意扩散 SDE \( dx = f(x, t) dt + g(t) dw \) 相对应的,还存在一个确定性的概率流ODE (Probability Flow ODE):
\[ dx = [f(x, t) - \frac{1}{2} g(t)^2 \nabla_x \log p_t(x)] dt \]
这个 ODE 在时间上从 \( T \) 到 \( 0 \) 运行。它具有一个重要的性质:如果 \( x(T) \) 服从边缘分布 \( p_T \),那么通过这个 ODE 演化得到的 \( x(t) \) 在任何时间 \( t \) 都服从对应的边缘分布 \( p_t \),并且 \( x(0) \) 服从 \( p_0 \approx p_{data} \)。
概率流 ODE 提供了一种确定性的采样方法。从 \( p_T \) 采样一个噪声 \( x_T \),然后通过数值求解概率流 ODE 从 \( T \) 到 \( 0 \),最终得到一个数据样本 \( x_0 \)。与逆向 SDE 相比,ODE 采样不包含随机项 \( d\bar{w} \),因此对于相同的起始噪声 \( x_T \),求解 ODE 得到的样本是唯一的。
DDIM (Denoising Diffusion Implicit Models, Song et al. 2020) 正是利用了与 DDPM 前向过程对应的概率流 ODE 进行采样。DDIM 的确定性采样步骤可以看作是对逆向 VP SDE 对应的概率流 ODE 的一种离散化求解。这解释了为什么 DDIM 可以在比 DDPM 少得多的步骤下生成高质量样本,因为它沿着的是概率流线的确定性轨迹。
SDE 框架的意义:
① 统一性:将 DDPM 和基于分数的生成模型统一到同一个数学框架下。DDPM 可以看作是基于 VP SDE 的离散化模型,而 Song et al. (2019) 的模型可以看作是基于 VE SDE 和退火朗之万采样的模型。
② 理论分析:SDE 理论提供了分析扩散过程和生成过程性质的强大工具,例如样本的分布、收敛性等。
③ 新模型与算法:启发了新的扩散过程定义(不同的 \( f(x, t) \) 和 \( g(t) \))、新的训练目标和更高效、更灵活的采样算法(如利用不同的 ODE/SDE 求解器、一致性模型等)。
理解分数匹配和 SDE 视角,对于把握扩散模型领域的最新进展和变体模型(如各种采样加速方法、一致性模型等)至关重要。它揭示了模型学习的核心——估计数据分布在不同噪声水平下的分数函数,以及生成过程的本质——沿着分数函数引导的轨迹(随机或确定性)从噪声恢复数据。
好的,同学们,欢迎回到我们的课程。在前面几章中,我们深入探讨了扩散模型的核心原理,包括正向扩散过程、逆向去噪过程以及DDPM和基于分数的模型等理论基础。我们理解了模型是如何学习数据分布的,并且知道生成过程实际上是逆转了这个加噪过程。
然而,从理论到实践,我们还有一个关键环节需要掌握:那就是如何从训练好的模型中有效地生成(采样)出高质量的新样本。扩散模型的生成过程通常涉及数百甚至上千个时间步,这使得采样成为一个计算密集且耗时的过程。因此,本章我们将专注于讨论各种采样策略以及如何加速这一过程,让扩散模型变得更加实用。
让我们开始第五章的学习:采样策略与加速。
5. 采样策略与加速 (Sampling Strategies and Acceleration)
本章讨论如何从训练好的扩散模型中高效生成高质量样本,包括不同的求解器和加速技术。
在成功训练了一个扩散模型之后,其核心能力体现在能够通过其学习到的逆向过程从纯噪声中生成出符合目标数据分布的样本。回忆我们之前的学习,逆向过程通常被建模为一个参数化的概率分布 \(p_\theta(x_{t-1}|x_t)\),它描述了如何在给定当前时间步 \(t\) 的数据 \(x_t\) 时,估计前一个时间步 \(t-1\) 的数据 \(x_{t-1}\)。生成过程则是一个逐步去噪的过程,从随机采样的纯噪声 \(x_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\) 开始,迭代地应用这个逆向过程,直到达到时间步 \(t=0\),获得最终的生成样本 \(x_0\)。
这个迭代过程的数学描述,在离散时间步下,通常可以写成一系列条件概率的乘积:
\[ p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t) \]
其中 \(p(x_T)\) 是纯噪声分布(通常是标准高斯分布),\(p_\theta(x_{t-1}|x_t)\) 是由我们训练的神经网络(例如预测噪声或预测均值的U-Net)参数化的逆向步。
生成样本就是从这个 \(p_\theta(x_{0:T})\) 分布中进行采样,具体是通过祖先采样 (Ancestral Sampling) 的方式来实现,即从 \(x_T\) 采样,然后根据 \(p_\theta(x_{T-1}|x_T)\) 采样 \(x_{T-1}\),以此类推,直到 \(x_0\)。
在连续时间框架下,逆向过程可以被描述为一个随机微分方程 (SDE) 或普通微分方程 (ODE)。生成样本则对应于求解这个SDE或ODE。
本章将深入探讨不同的采样方法:首先是基于离散时间逆向马尔可夫链的祖先采样;然后是与连续时间视角相关的SDE/ODE求解器;接着是具有突破性的确定性采样方法DDIM;最后,我们将概述其他各种旨在显著减少采样所需时间步数的快速采样技术。
5.1 逆向SDE/ODE求解器 (Reverse SDE/ODE Solvers)
介绍用于数值求解逆向过程的常见方法,如Euler-Maruyama、Runge-Kutta等。
正如我们在第四章提到的,许多扩散模型,特别是基于分数的生成模型 (Score-based Generative Models),可以将正向扩散过程描述为一个随机微分方程 (SDE)。相应的,逆向生成过程也可以描述为一个逆向SDE。对于特定的SDE,比如VP SDE (Variance Preserving SDE),其逆向过程对应于一个SDE。对于与之相关的概率流ODE (Probability Flow ODE),逆向生成过程则对应于一个确定性的ODE。
从连续时间模型中生成样本,本质上就是从某个初始噪声状态(对应于SDE/ODE在时间 \(T\) 的解)开始,沿着SDE或ODE定义的轨迹,数值求解到时间 \(t=0\) 的过程。这个数值求解就需要用到SDE或ODE的求解器。
5.1.1 Euler-Maruyama 方法 (Euler-Maruyama Method)
Euler-Maruyama 方法是求解SDE最简单和最直观的数值方法,它是标准Euler 方法在随机情况下的扩展。
一个一般的SDE可以写为:
\[ dx_t = f(x_t, t) dt + g(x_t, t) dW_t \]
其中 \(f\) 是漂移项 (drift term),\(g\) 是扩散项 (diffusion term),\(dW_t\) 是维纳过程 (Wiener Process) 或布朗运动 (Brownian Motion) 的微分。
逆向SDE通常具有以下形式:
\[ dx_t = \left[ f(x_t, t) - g(x_t, t)^2 \nabla_{x_t} \log p(x_t|t) \right] dt + g(x_t, t) d\bar{W}_t \]
其中 \(\nabla_{x_t} \log p(x_t|t)\) 是分数函数 (score function),需要用神经网络 \(\mathbf{s}_\theta(x_t, t)\) 来估计;\(d\bar{W}_t\) 是逆向时间布朗运动的微分。
Euler-Maruyama 方法将连续时间 \(t \in [0, T]\) 离散化为一系列时间步 \(T = t_M > t_{M-1} > \dots > t_1 > t_0 = 0\)。设 \(\Delta t_i = t_i - t_{i-1}\),对于从 \(t_i\) 到 \(t_{i-1}\) 的逆向过程,Euler-Maruyama 更新规则为:
\[ x_{t_{i-1}} \approx x_{t_i} + \left[ f(x_{t_i}, t_i) - g(x_{t_i}, t_i)^2 \mathbf{s}_\theta(x_{t_i}, t_i) \right] \Delta t_i + g(x_{t_i}, t_i) \sqrt{|\Delta t_i|} \xi_i \]
其中 \(\xi_i \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\) 是随机噪声。
① 优点:
▮▮▮▮ⓑ 简单易理解,实现直观。
▮▮▮▮ⓒ 对于SDE而言,它是最基本的随机求解器。
② 缺点:
▮▮▮▮ⓑ 精度较低,需要非常小的步长(即大量的采样步数 \(M\))才能获得较好的结果。
▮▮▮▮ⓒ 计算效率低。
5.1.2 Runge-Kutta 方法 (Runge-Kutta Methods)
Runge-Kutta 方法是一族用于数值求解常微分方程 (ODE) 的高精度方法。当我们将逆向过程视为求解概率流ODE时,可以使用Runge-Kutta方法。
概率流ODE的形式为:
\[ dx_t = \left[ f(x_t, t) - \frac{1}{2} g(x_t, t)^2 \nabla_{x_t} \log p(x_t|t) \right] dt \]
注意与逆向SDE的区别,这里的扩散项 \(g(x_t, t) d\bar{W}_t\) 消失了,因为它是一个确定性的过程。
最常用的 Runge-Kutta 方法是四阶 Runge-Kutta 方法 (RK4)。它通过计算当前点及其附近的几个斜率的加权平均来估计下一个点,从而获得更高的精度。
对于一个一般的ODE \(dx/dt = F(x, t)\),从 \(t_i\) 到 \(t_{i-1}\) (逆向),RK4 的基本思想是:
① 计算几个中间点 \(k_1, k_2, k_3, k_4\) 来估计斜率。
② 用这些斜率的加权平均来更新 \(x\)。
\[ k_1 = F(x_{t_i}, t_i) \Delta t_i \]
\[ k_2 = F(x_{t_i} + k_1/2, t_i + \Delta t_i/2) \Delta t_i \]
\[ k_3 = F(x_{t_i} + k_2/2, t_i + \Delta t_i/2) \Delta t_i \]
\[ k_4 = F(x_{t_i} + k_3, t_i + \Delta t_i) \Delta t_i \]
\[ x_{t_{i-1}} \approx x_{t_i} + \frac{1}{6} (k_1 + 2k_2 + 2k_3 + k_4) \]
这里的 \(F(x_t, t) = f(x_t, t) - \frac{1}{2} g(x_t, t)^2 \mathbf{s}_\theta(x_t, t)\) 是概率流ODE的右侧。
① 优点:
▮▮▮▮ⓑ 相比Euler方法,在相同步数下通常能获得更高的精度,或者达到相同精度所需的步数更少。
▮▮▮▮ⓒ 对于确定性的ODE采样路径非常有效。
② 缺点:
▮▮▮▮ⓑ 每一步需要进行多次模型评估(对于RK4是4次),计算量比Euler方法大。
▮▮▮▮ⓒ 只能用于求解ODE,不能直接用于SDE(有SDE的Runge-Kutta版本,但更复杂)。
总结: SDE/ODE求解器提供了一种从连续时间扩散模型中采样的通用框架。简单的求解器(如Euler-Maruyama)易于实现但效率较低,而更高级的求解器(如Runge-Kutta,用于ODE)可以在更少的步数下提供更好的精度,但每一步的计算成本可能更高。选择哪种求解器取决于所需的生成质量、计算资源以及模型的具体形式(是SDE还是对应的ODE)。
5.2 DDIM (Denoising Diffusion Implicit Models)
介绍DDIM作为一种确定性采样方法,可以在更少的步数下生成样本。
DDPM的原始采样过程是随机的马尔可夫链过程,每一步都依赖于前一步的结果并引入新的噪声。这使得从噪声 \(x_T\) 到数据 \(x_0\) 的路径是随机的。虽然这有助于生成多样化的样本,但也意味着为了获得高质量的样本,通常需要与训练时相同数量(通常为1000步)的采样步数,这非常慢。
DDIM (Denoising Diffusion Implicit Models) [Song et al., 2020] 提出了一种不同的采样过程,它不是一个马尔可夫链。核心思想是构造一个非马尔可夫的逆向过程,使得在给定 \(x_t\) 的条件下,\(x_{t-1}\) 可以被确定性地计算出来(或者以可控的方差进行采样),同时仍然能够匹配正向扩散过程的边缘分布 \(q(x_t|x_0)\)。
DDIM 的采样过程基于对潜变量 \(x_t\) 的隐式概率模型建模,其关键在于重新参数化了从 \(x_0\) 到 \(x_t\) 的正向过程。回忆DDPM正向过程:
\[ q(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\alpha_t} x_0, (1-\alpha_t)\mathbf{I}) \]
其中 \(\alpha_t = 1 - \beta_t\),\(\bar{\alpha}_t = \prod_{s=1}^t \alpha_s\)。我们也可以写成:
\[ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon \]
其中 \(\epsilon \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\)。
DDIM不是去学习 \(p_\theta(x_{t-1}|x_t)\),而是直接去估计原始数据 \(x_0\) 或者噪声 \(\epsilon\)。通过训练预测噪声的模型 \(\epsilon_\theta(x_t, t)\),我们可以估计当前时间步 \(t\) 的噪声 \(\epsilon\),进而估计出对应的原始数据 \(x_0\):
\[ \hat{x}_0 = \frac{x_t - \sqrt{1-\bar{\alpha}_t} \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \]
然后,DDIM构建了一个从 \(x_t\) 到 \(x_{t-1}\) 的采样步,这个步长是根据 \(x_0\) 的估计值 \(\hat{x}_0\) 和一个控制随机性的参数 \(\eta\) 来定义的:
\[ x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \hat{x}_0 + \sqrt{1-\bar{\alpha}_{t-1} - \sigma_t^2} \cdot \epsilon_\theta(x_t, t) + \sigma_t \cdot z \]
其中 \(z \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\),\(\sigma_t^2\) 是控制随机性的方差项。DDIM提出了一种设置 \(\sigma_t^2\) 的方式,使其与正向过程的方差 \((1-\bar{\alpha}_t)\) 相关,并且引入参数 \(\eta \in [0, 1]\):
\[ \sigma_t^2 = \eta \cdot \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t} (1 - \frac{\bar{\alpha}_t}{\bar{\alpha}_{t-1}}) = \eta \cdot \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t} \beta_t \]
如果取 \(\sigma_t^2 = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t} (1 - \frac{\bar{\alpha}_t}{\bar{\alpha}_{t-1}})\),即 \(\eta=1\),则DDIM的采样过程回到了DDPM的祖先采样过程(随机的)。
如果取 \(\sigma_t^2 = 0\),即 \(\eta=0\),则DDIM的采样过程变为完全确定的:
\[ x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \hat{x}_0 + \sqrt{1-\bar{\alpha}_{t-1}} \cdot \epsilon_\theta(x_t, t) \]
将 \(\hat{x}_0\) 的表达式代入:
\[ x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \frac{x_t - \sqrt{1-\bar{\alpha}_t} \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} + \sqrt{1-\bar{\alpha}_{t-1}} \cdot \epsilon_\theta(x_t, t) \]
\[ x_{t-1} = \sqrt{\frac{\bar{\alpha}_{t-1}}{\bar{\alpha}_t}} x_t + \left(\sqrt{1-\bar{\alpha}_{t-1}} - \sqrt{\frac{\bar{\alpha}_{t-1}}{\bar{\alpha}_t}}\sqrt{1-\bar{\alpha}_t}\right) \epsilon_\theta(x_t, t) \]
这个公式描述了从 \(x_t\) 到 \(x_{t-1}\) 的确定性一步。
DDIM的关键优势在于,由于其非马尔可夫性质,我们可以使用一个子序列的时间步 \(\{t_1, \dots, t_S\}\),其中 \(S \ll T\),例如只使用100步甚至50步来进行采样,就能获得与DDPM使用1000步相似甚至更好的生成效果。これは大きなサンプリング高速化につながります。
① 优点:
▮▮▮▮ⓑ 可以使用远少于训练步数的时间步进行采样,大幅提高了采样速度。
▮▮▮▮ⓒ 通过参数 \(\eta\) 可以控制采样的随机性:\(\eta=0\) 为确定性采样,\(\eta=1\) 恢复到DDPM的随机采样。
▮▮▮▮ⓓ 确定性采样路径使得图像编辑等任务更加可控(因为从 \(x_0\) 到 \(x_t\) 和从 \(x_t\) 回到 \(x_0\) 的路径是唯一的)。
② 缺点:
▮▮▮▮ⓑ \(\eta=0\) 的确定性采样可能会牺牲一些样本多样性,尽管在高保真度方面表现优异。
▮▮▮▮ⓒ 理论上,DDIM是基于一个与DDPM略有不同的、隐式的概率模型。
DDIM 是扩散模型采样速度提升的一个重要里程碑,为后续的快速采样方法奠定了基础。
5.3 快速采样方法 (Fast Sampling Methods)
讨论各种加速扩散模型采样速度的技术,如步长调度、模型蒸馏等。
尽管DDIM已经显著减少了采样所需的步数,但对于许多实时应用或需要大量生成样本的场景,即使是100步采样仍然可能太慢。因此,研究人员提出了多种进一步加速采样的方法。这些方法通常可以归为几类:优化求解器和步长、模型蒸馏、以及构建一步生成模型等。
5.3.1 优化求解器与步长调度 (Optimizing Solvers and Step Scheduling)
这是在不改变模型本身结构的情况下加速采样最直接的方法。
① 更高级的ODE求解器: 除了RK4,还有更高阶或更高效的ODE求解器(如Adams-Bashforth, Adams-Moulton, Dormand-Prince 等),这些方法在每一步计算成本可能更高,但在相同精度下所需的总步数可能更少。自动化方法(如自动调整步长和阶数)也可以用于优化求解过程。
② 非均匀步长调度: DDPM和早期的DDIM通常在时间步上采用均匀或接近均匀的间隔。研究发现,在采样过程中,某些时间段(例如噪声较大或较小的阶段)可能需要更精细的步长,而另一些时间段可以使用更大的步长。通过精心设计的非均匀步长序列(例如在噪声较大的后期阶段采取更多步),可以在固定总步数下提高生成质量,或者在保证质量的前提下减少总步数。常见的策略包括对时间步空间进行对数或幂律间隔采样。
③ 预测校正器 (Predictor-Corrector) 方法: 这类方法结合了预测步(如Euler或Runge-Kutta)和一个校正步(通常基于分数匹配或马尔可夫链蒙特卡洛),以提高每一步的准确性,从而允许使用更少的步数。
5.3.2 模型蒸馏 (Model Distillation)
模型蒸馏 (Model Distillation) 是指训练一个“学生”模型来模仿一个已经训练好的“教师”模型。在扩散模型中,可以训练一个采样速度更快的学生模型来模仿一个训练好的多步教师扩散模型。
① 渐进式蒸馏 (Progressive Distillation): [Meng et al., 2022] 提出了一种方法,训练一个学生模型来模仿教师模型经过 两步 采样后的结果。学生模型可以直接从 \(x_t\) 预测出 \(x_{t-2}\)。通过多轮蒸馏,可以将原本需要 \(T\) 步的采样过程蒸馏到 \(T/2\) 步,然后进一步蒸馏到 \(T/4\) 步,以此类推,理论上可以蒸馏到一步完成采样。
② 一致性模型 (Consistency Models): (虽然在第七章会详细介绍,但作为一种一步生成方法,其思想与蒸馏有关) 一致性模型 [Song et al., 2023] 直接学习一个“一致性函数”,这个函数具有“一致性”属性,即应用于时间步 \(t\) 的任何点都应该映射到时间步 \(0\) 的同一点,无论从 \(t\) 开始到 \(0\) 经过多少中间步。通过强制执行这个属性,模型可以直接从噪声一步跳跃到干净数据。一致性模型可以通过专门的训练(如一致性训练 Consistent Training)或从现有扩散模型进行蒸馏来获得。
5.3.3 其他加速技术
① 潜在空间扩散 (Latent Diffusion Models, LDM): (第七章也会详细介绍) 在高维像素空间进行扩散和采样计算成本很高。LDM的思想是在一个低维的潜在空间进行扩散过程。先通过一个编码器将高维图像压缩到低维潜在空间,在这个潜在空间训练和运行扩散模型,生成潜在表示,最后通过一个解码器将潜在表示还原为图像。由于潜在空间的维度远低于像素空间,扩散和采样的计算量大大降低,从而实现加速。Stable Diffusion 就是 LDM 的代表。
② 级联扩散模型 (Cascaded Diffusion Models): [Ho et al., 2021] 提出训练多个扩散模型,每个模型负责生成不同分辨率的图像,或者在低分辨率模型生成结果的基础上进行超分辨率处理。这种分阶段的生成可以减少每个模型的复杂度,有时也能提升效率和生成质量。
③ 更高效的网络架构: 使用计算量更小、并行性更好的神经网络架构作为扩散模型的骨干网络,例如扩散Transformer (DiT) [Peebles & Xie, 2023] 相比传统的U-Net可能在某些硬件上具有更高的效率。
④ 硬件优化与并行计算: 利用GPU、TPU等硬件的并行计算能力,优化内存访问模式,使用低精度计算(如FP16),也可以显著提高采样速度。
通过上述各种技术,扩散模型的采样速度已经从最初需要几分钟生成一张图片,缩短到几秒甚至亚秒级别,这极大地扩展了其应用范围。
5.4 祖先采样 (Ancestral Sampling)
介绍基于随机逆向马尔可夫链的原始采样方法。
祖先采样 (Ancestral Sampling) 是DDPM论文 [Ho et al., 2020] 中首次提出并使用的、最原始的采样方法。它直接基于训练好的模型 \(p_\theta(x_{t-1}|x_t)\) 来一步一步地从时间步 \(T\) 逆向采样到时间步 \(0\)。
回忆DDPM中的逆向过程,它被建模为一个高斯分布的马尔可夫链:
\[ p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)) \]
其中,论文证明了当 \(\beta_t\) 较小时,最优的方差 \(\Sigma_\theta(x_t, t)\) 接近于 \(\beta_t \mathbf{I}\) 或 \(\tilde{\beta}_t \mathbf{I}\),其中 \(\tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t\)。而均值 \(\mu_\theta(x_t, t)\) 可以通过训练一个模型来预测噪声 \(\epsilon_\theta(x_t, t)\) 或直接预测均值来获得。
使用预测噪声 \(\epsilon_\theta(x_t, t)\) 的方式,逆向步的均值可以推导为:
\[ \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) \]
祖先采样的步骤如下:
① 从标准正态分布中采样初始噪声:\(x_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\)。
② 对于 \(t = T, T-1, \dots, 1\):
▮▮▮▮ⓒ 使用训练好的模型 \(\epsilon_\theta(x_t, t)\) 预测当前时间步 \(t\) 的噪声。
▮▮▮▮ⓓ 计算当前时间步的逆向均值 \(\mu_\theta(x_t, t)\)。
▮▮▮▮ⓔ 从高斯分布中采样 \(x_{t-1}\):\(x_{t-1} \sim \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \sigma_t^2 \mathbf{I})\),其中 \(\sigma_t^2\) 通常取 \(\beta_t\) 或 \(\tilde{\beta}_t\)。
这个过程之所以被称为“祖先采样”,是因为在概率图模型中,从联合分布中采样可以通过依序采样每个变量在其所有“祖先”(在图中指向它的变量)条件下的分布来实现。在这里,我们从 \(x_T\) 开始,然后采样 \(x_{T-1}\) 条件于 \(x_T\),再采样 \(x_{T-2}\) 条件于 \(x_{T-1}\)(因为是马尔可夫链,只需要依赖前一步),以此类推,这类似于在反向链中追踪祖先。
① 优点:
▮▮▮▮ⓑ 是DDPM理论框架下最自然的采样方式。
▮▮▮▮ⓒ 能够生成高质量和高多样性的样本,因为每一步都引入了新的随机性。
② 缺点:
▮▮▮▮ⓑ 需要与训练过程相同数量的采样步数 \(T\) (通常是1000步) 才能获得最佳结果,采样速度慢。
▮▮▮▮ⓒ 采样过程是随机的,从同一个 \(x_T\) 出发每次可能生成不同的 \(x_0\),对于需要确定性映射的图像编辑等任务不太方便(尽管可以通过固定噪声实现伪确定性)。
祖先采样是理解扩散模型生成过程的基础,也是评估后续加速方法效果的基准之一。后来的DDIM等方法就是在保持或提升生成质量的同时,努力减少祖先采样所需的巨大步数。
通过本章的学习,我们理解了从训练好的扩散模型生成样本的不同策略,特别是祖先采样和DDIM这两种基础方法,以及如何通过优化求解器、步长调度、模型蒸馏等多种技术来大幅提升采样效率。这些技术的进步使得扩散模型从一个理论上强大的生成模型,真正走向了实用的应用领域。
6. 条件扩散模型
6.1 条件生成的基本原理
扩散模型最初被提出时,主要用于无条件地从噪声中生成与训练数据分布相似的新样本。然而,在许多实际应用中,我们希望能够控制生成样本的属性,例如生成特定类别的图像,或者根据一段文本描述来生成对应的图像。这就引出了条件扩散模型 (Conditional Diffusion Models) 的概念。
条件扩散模型的目标是学习条件概率分布 \( p(x | c) \),其中 \( x \) 是数据(例如图像),而 \( c \) 是条件信息(例如类别标签、文本描述、分割掩码等)。为了实现这一点,我们需要修改扩散模型的逆向过程。回想一下,标准的扩散模型学习的是无条件噪声分布下的梯度 \( \nabla_x \log p(x_t) \),或者直接预测噪声 \( \epsilon \),其训练目标是最小化 \( \mathbb{E}_{t, x_0, \epsilon} [||\epsilon - \epsilon_\theta(x_t, t)||^2] \),其中 \( x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon \)。
对于条件扩散模型,我们的目标是预测条件分布下的噪声,或者估计条件分数函数 \( \nabla_x \log p(x_t | c) \)。相应的,模型需要学习一个依赖于条件 \( c \) 的函数 \( \epsilon_\theta(x_t, t, c) \),其训练目标变为最小化条件期望:
\[ \mathbb{E}_{t, x_0, c, \epsilon} \left[ \left|\left| \epsilon - \epsilon_\theta(x_t, t, c)\right|\right|^2 \right] \]
这里的 \( x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon \) 仍然由原始数据 \( x_0 \) 和噪声 \( \epsilon \) 决定,但模型的输出 \( \epsilon_\theta \) 现在额外依赖于条件 \( c \)。条件 \( c \) 通常在训练时与数据样本 \( x_0 \) 一起提供。
将条件信息 \( c \) 融入到神经网络模型 \( \epsilon_\theta \) 中有多种方法:
① 输入层融合 (Input Layer Fusion):
▮▮▮▮将条件 \( c \) 的表示与加噪数据 \( x_t \) 在输入层拼接 (concatenation),然后送入网络。这种方法比较直接,但可能对模型结构要求较高,特别是当条件信息维度很高时。
② 中间层融合 (Intermediate Layer Fusion):
▮▮▮▮将条件 \( c \) 通过一个编码器 (encoder) 或简单的线性层 (linear layer) 转换为与中间层特征图维度匹配的向量或张量,然后通过加法、乘法或拼接的方式与中间层的特征融合。
③ 注意力机制融合 (Attention Mechanism Fusion):
▮▮▮▮这是目前最常用和有效的方法,特别是在处理文本等复杂条件时。通过引入交叉注意力 (cross-attention) 层,模型可以在处理图像特征时,有选择性地关注条件信息中最相关的部分。例如,在U-Net结构的编码器和解码器部分插入交叉注意力层,让图像特征作为查询 (query),条件特征作为键 (key) 和值 (value)。
④ 调整层范数 (Modulating Layer Norms):
▮▮▮▮如 Adaptive Normalization (AdaN) 或 Spatial Adaptive Normalization (SPADE) 等技术,根据条件 \( c \) 动态调整归一化层 (normalization layer) 的参数(如均值和方差),从而影响后续特征的分布。时间步嵌入 (timestep embedding) 本身也可以视为一种条件,它通常就是通过类似的方式(如傅里叶特征编码 (Fourier Features) 后接线性层,然后与特征相加或通过AdaN)融入模型。
在训练过程中,对于每个训练样本 \((x_0, c)\),我们随机采样一个时间步 \( t \),计算 \( x_t \),然后让模型预测加入的噪声 \( \epsilon \),并最小化预测噪声 \( \epsilon_\theta(x_t, t, c) \) 与真实噪声 \( \epsilon \) 之间的误差。在推理(生成)时,我们从随机噪声 \( x_T \) 开始,结合给定的条件 \( c \) 和学习到的模型 \( \epsilon_\theta \),迭代地进行去噪步骤,最终得到符合条件 \( c \) 的生成样本 \( x_0 \)。
6.2 分类器引导 (Classifier Guidance)
分类器引导是一种在生成过程中利用一个单独训练的分类器来指导扩散采样方向的技术。其核心思想是,如果我们想生成属于某个特定类别 \( y \) 的样本,我们不仅要遵循扩散模型学习到的数据分布梯度 \( \nabla_x \log p(x_t) \),还要朝着能够最大化 \( p(y | x_t) \) 的方向进行引导。
根据贝叶斯定理,我们可以写出条件概率 \( p(x_t | y) \):
\[ p(x_t | y) = \frac{p(y | x_t) p(x_t)}{p(y)} \]
对两边取对数并求关于 \( x_t \) 的梯度:
\[ \nabla_{x_t} \log p(x_t | y) = \nabla_{x_t} \log p(y | x_t) + \nabla_{x_t} \log p(x_t) - \nabla_{x_t} \log p(y) \]
由于 \( p(y) \) 不依赖于 \( x_t \),其梯度为零。因此,条件分布的分数函数可以分解为:
\[ \nabla_{x_t} \log p(x_t | y) = \nabla_{x_t} \log p(x_t) + \nabla_{x_t} \log p(y | x_t) \]
这里,\( \nabla_{x_t} \log p(x_t) \) 是由无条件扩散模型学习到的分数函数,而 \( \nabla_{x_t} \log p(y | x_t) \) 是类别 \( y \) 关于加噪数据 \( x_t \) 的对数概率的梯度。后者可以通过训练一个标准的分类器 \( p_\phi(y | x) \) 来近似,并计算其在 \( x_t \) 处的梯度 \( \nabla_{x_t} \log p_\phi(y | x_t) \)。
在扩散模型的逆向采样过程中,每一步从 \( x_t \) 预测 \( x_{t-1} \) 都依赖于对 \( \epsilon \) 或 \( \nabla_{x_t} \log p(x_t) \) 的估计。利用分数函数与预测噪声的关系(对于DDPM, \( \epsilon_\theta(x_t, t) \propto -\sigma_t \nabla_{x_t} \log p(x_t) \)),我们可以将引导项纳入噪声预测中。
经典的分类器引导方法 (Classifier Guidance) 由 Dhariwal and Nichol 在 Improving Diffusion Models 论文中提出。他们训练一个分类器 (Classifier) \( p_\phi(y | x) \) 在不同的加噪时间步 \( t \) 下对 \( x_t \) 进行分类。然后,在逆向采样过程中,他们通过结合无条件扩散模型预测的噪声 \( \epsilon_\theta(x_t, t) \) 和分类器在 \( x_t \) 处计算的梯度 \( \nabla_{x_t} \log p_\phi(y | x_t) \) 来调整预测的噪声 \( \tilde{\epsilon} \):
\[ \tilde{\epsilon} = \epsilon_\theta(x_t, t) - s \cdot \sigma_t \nabla_{x_t} \log p_\phi(y | x_t) \]
或者更直观地,直接在分数函数层面进行引导(尽管实际实现中通常调整噪声预测):
\[ \tilde{\nabla}_{x_t} \log p(x_t | y) \approx \nabla_{x_t} \log p_\theta(x_t) + s \cdot \nabla_{x_t} \log p_\phi(y | x_t) \]
其中 \( s > 0 \) 是一个引导尺度 (Guidance Scale) 参数,控制分类器引导的强度。较大的 \( s \) 会使生成样本更严格地符合类别 \( y \),但可能牺牲多样性和生成质量(引入伪影)。
优点:
⚝ 概念上直观,利用现有的分类器技术。
⚝ 可以应用于已经训练好的无条件扩散模型(只需要额外训练一个分类器)。
缺点:
⚝ 需要额外训练一个高质量的分类器,这增加了训练开销和复杂性。
⚝ 分类器的质量会显著影响生成效果。
⚝ 引导强度 \( s \) 的选择是一个超参数调优问题。
⚝ 可能存在生成样本质量和多样性之间的权衡。
6.3 无分类器引导 (Classifier-Free Guidance, CFG)
无分类器引导 (Classifier-Free Guidance, CFG) 是目前条件扩散模型中最流行和强大的引导技术之一,由 Ho and Salimans 在他们的论文《Classifier-Free Diffusion Guidance》中提出。与分类器引导需要一个单独训练的分类器不同,CFG 将条件信息和引导过程集成到同一个扩散模型中。
CFG 的核心思想是在训练一个条件扩散模型 (Conditional Diffusion Model) \( \epsilon_\theta(x_t, t, c) \) 的同时,通过随机地舍弃训练样本的条件 \( c \)(例如,以一定的概率将 \( c \) 设置为一个特殊的“空”条件 \( \emptyset \) 或全零向量),迫使模型在训练过程中同时学习条件预测 \( \epsilon_\theta(x_t, t, c) \) 和无条件预测 \( \epsilon_\theta(x_t, t, \emptyset) \)。
训练过程中,对于一个给定的训练样本 \((x_0, c)\):
① 以概率 \( p \) 使用真实的条件 \( c \) 进行训练,即最小化 \( ||\epsilon - \epsilon_\theta(x_t, t, c)||^2 \)。
② 以概率 \( 1-p \) 忽略条件 \( c \),使用空条件 \( \emptyset \) 进行训练,即最小化 \( ||\epsilon - \epsilon_\theta(x_t, t, \emptyset)||^2 \)。
通过这种方式训练后,同一个模型 \( \epsilon_\theta \) 就能够根据提供的条件 \( c \) 做出预测,也能在条件被忽略(设置为 \( \emptyset \))时做出无条件预测。
在推理(生成)阶段,为了实现引导效果,CFG 利用条件预测和无条件预测之间的差异来推断出朝着条件 \( c \) 方向的“引导梯度”。其基本原理基于对数概率的线性组合:
\[ \log p(x_t | c) \approx \log p(x_t | \emptyset) + w \cdot (\log p(x_t | c) - \log p(x_t | \emptyset)) \]
对上式求关于 \( x_t \) 的梯度,并使用分数函数与预测噪声的关系,可以得到用于生成过程的组合预测噪声 \( \tilde{\epsilon}_\theta(x_t, t, c) \):
\[ \tilde{\epsilon}_\theta(x_t, t, c) = (1 - w) \cdot \epsilon_\theta(x_t, t, \emptyset) + w \cdot \epsilon_\theta(x_t, t, c) \]
或者等价地表示为:
\[ \tilde{\epsilon}_\theta(x_t, t, c) = \epsilon_\theta(x_t, t, \emptyset) + w \cdot (\epsilon_\theta(x_t, t, c) - \epsilon_\theta(x_t, t, \emptyset)) \]
其中 \( w \ge 1 \) 是CFG引导尺度 (CFG Guidance Scale)。当 \( w=1 \) 时,这等价于标准的条件生成,不施加额外的引导。当 \( w > 1 \) 时,模型会更强调朝着条件预测 \( \epsilon_\theta(x_t, t, c) \) 的方向去噪,从而生成更符合条件 \( c \) 的样本。\( \epsilon_\theta(x_t, t, c) - \epsilon_\theta(x_t, t, \emptyset) \) 可以看作是条件预测相对于无条件预测的“残差”或“方向向量”,表示朝着条件 \( c \) 移动的趋势。
通过调整 \( w \) 的大小,可以在生成样本的与条件的相关性/质量 (Alignment/Quality) 和多样性 (Diversity) 之间进行权衡。较大的 \( w \) 通常会提高与条件的相关性,但可能导致样本多样性下降,甚至引入伪影;较小的 \( w \) 会增加多样性,但可能生成与条件不太相关的样本。
优点:
⚝ 不需要单独训练分类器,简化了训练流程。
⚝ 通常比分类器引导产生更高质量的生成样本。
⚝ 在许多任务中表现出强大的性能和灵活性。
⚝ 引导尺度 \( w \) 直接控制条件影响的强度。
缺点:
⚝ 需要修改训练过程,在训练时随机舍弃条件。
⚝ 模型需要同时学习条件和无条件分布,可能稍微增加模型本身的训练难度(尽管实践中效果很好)。
CFG 是当前大多数高性能条件扩散模型(如文本到图像模型)采用的标准引导技术。
6.4 文本到图像生成 (Text-to-Image Generation)
文本到图像生成 (Text-to-Image Generation) 是扩散模型最引人注目的应用之一。这项任务要求模型根据一段自然语言文本描述 \( \text{prompt} \) 来生成一张视觉上相符的图像。扩散模型,特别是结合了无分类器引导和潜在空间的模型,在这一领域取得了前所未有的成功。
实现高质量文本到图像生成的关键在于如何有效地将复杂的文本信息融入到图像扩散过程中。这通常涉及以下几个核心组件:
6.4.1 文本编码器 (Text Encoders)
文本编码器负责将输入的文本描述 \( \text{prompt} \) 转换为模型可以理解的数值表示,即文本嵌入 (Text Embeddings) 或文本特征 (Text Features)。这些嵌入应该能够捕捉文本的语义内容、句法结构以及细微之处。常用的文本编码器包括:
① CLIP文本编码器 (CLIP Text Encoder):
▮▮▮▮CLIP (Contrastive Language–Image Pre-training) 模型通过在大规模图文对上进行对比学习而训练得到。其文本编码器(通常是一个Transformer)能够生成具有强大零样本 (zero-shot) 能力的文本嵌入,这些嵌入与图像嵌入处于同一个潜在空间,因此非常适合用于文本到图像任务。许多流行的扩散模型(如Stable Diffusion的早期版本、DALL-E 2的部分组件)使用CLIP文本编码器。
② T5 (Text-to-Text Transfer Transformer):
▮▮▮▮T5 是一种强大的文本到文本Transformer模型,可以在各种NLP任务上进行预训练和微调。Imagen 模型使用了大型的T5变体(如T5-XXL)作为文本编码器,取得了当时最先进的文本到图像生成效果,表明强大的文本理解能力对生成质量至关重要。
③ BERT (Bidirectional Encoder Representations from Transformers):
▮▮▮▮BERT 是另一种基于Transformer的流行语言模型,虽然最初用于理解任务,但其编码器部分也可以用于生成文本特征,并在一些早期的文本到图像模型中有所应用。
④ OpenCLIP:
▮▮▮▮OpenCLIP 是对CLIP的开源复现和扩展,通常使用更大规模的数据集进行训练,能够生成性能与CLIP相当或更好的文本嵌入。Stable Diffusion的后续版本常使用OpenCLIP。
这些文本编码器通常输出一个序列的向量,例如对于一个包含 \( L \) 个词或token的文本序列,编码器可能输出一个 \( L \times D \) 的张量,其中 \( D \) 是文本嵌入的维度。这个张量包含了文本描述的丰富信息,需要有效地注入到图像生成网络中。
6.4.2 交叉注意力 (Cross-Attention)
将文本特征有效地融入到图像扩散模型的神经网络(通常是U-Net)中,交叉注意力 (Cross-Attention) 机制扮演了关键角色。交叉注意力允许扩散模型在生成图像的每个阶段(不同的分辨率和时间步)根据文本描述来调整其内部状态和特征。
在一个典型的基于U-Net的扩散模型中,编码器和解码器块处理图像特征图。为了引入文本条件,可以在U-Net的适当位置(例如,在卷积层和上/下采样层之间)插入交叉注意力层。
交叉注意力的计算方式如下:
给定图像特征图的展平表示 \( Z \in \mathbb{R}^{N_I \times D_I} \)(其中 \( N_I \) 是像素/patch的数量,\( D_I \) 是图像特征维度)和文本特征序列 \( C \in \mathbb{R}^{N_T \times D_T} \)(其中 \( N_T \) 是文本token数量,\( D_T \) 是文本特征维度)。
① 将图像特征 \( Z \) 通过一个线性投影层转换为查询 (Query) 矩阵 \( Q \in \mathbb{R}^{N_I \times D_k} \)。
② 将文本特征 \( C \) 分别通过两个线性投影层转换为键 (Key) 矩阵 \( K \in \mathbb{R}^{N_T \times D_k} \) 和值 (Value) 矩阵 \( V \in \mathbb{R}^{N_T \times D_v} \)。注意,这里的 \( D_k \) 和 \( D_v \) 可以与 \( D_I, D_T \) 不同,通常 \( D_k = D_v = D_I \)。
③ 计算注意力分数: \( AttentionScores = Q K^T \in \mathbb{R}^{N_I \times N_T} \)。这个矩阵的每个元素表示图像中的一个位置与文本中的一个token之间的关联强度。
④ 对注意力分数进行缩放(通常除以 \( \sqrt{D_k} \))和 Softmax 归一化,得到注意力权重 (Attention Weights) \( A \in \mathbb{R}^{N_I \times N_T} \),其中 \( \sum_{j=1}^{N_T} A_{ij} = 1 \) 对于每个 \( i \)。
⑤ 使用注意力权重对文本的值矩阵 \( V \) 进行加权求和,得到输出特征 \( O \in \mathbb{R}^{N_I \times D_v} \): \( O = A V \)。
⑥ 输出 \( O \) 通常会加回到原始图像特征 \( Z \) 上(通过残差连接 (residual connection)),或者通过其他方式融入到U-Net的特征流中。
\[ \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{D_k}}\right)V \]
通过交叉注意力,模型可以根据文本描述的不同部分来动态地调整对图像不同区域的关注,从而生成与文本语义精确对应的图像内容和风格。例如,当文本描述提到“一只红色的猫”时,模型在生成猫的区域时会特别关注文本特征中“红色”和“猫”相关的部分。
6.4.3 代表性模型 (Representative Models)
文本到图像扩散模型领域涌现了许多具有里程碑意义的模型,它们在架构、训练数据和生成效果上各有特点:
① DALL-E 2:
▮▮▮▮由OpenAI开发,是早期展示扩散模型强大文本到图像能力的模型之一。其架构包含两个主要部分:一个先验模型 (Prior Model) 将CLIP文本嵌入转换为CLIP图像嵌入,另一个扩散模型 (Diffusion Model) 以CLIP图像嵌入为条件生成图像。这种解耦的设计允许先验模型学习文本和图像嵌入之间的复杂关系,而扩散模型专注于从嵌入生成高质量图像。DALL-E 2以其出色的生成质量和对文本细节的理解能力而闻名。
② Imagen:
▮▮▮▮由Google Brain开发,强调了强大文本编码器(如大型T5)的重要性。Imagen采用了级联扩散 (Cascaded Diffusion) 的方法,先训练一个基础扩散模型生成低分辨率(如64x64)图像,然后训练一系列超分辨率扩散模型逐步将图像分辨率提升(如到256x256和1024x1024)。Imagen的成功表明,在扩散模型中,“理解”文本比图像生成本身更具挑战性,而强大的文本编码器是关键。Imagen在文本理解和生成逼真图像方面表现出色。
③ Stable Diffusion:
▮▮▮▮由CompVis、RunwayML、LMFlow和Stability AI合作开发,是目前最流行和易于访问的文本到图像扩散模型之一。Stable Diffusion属于潜在扩散模型 (Latent Diffusion Model, LDM) 家族(详见第7章)。它不在原始像素空间,而是在一个较低维度的潜在空间 (Latent Space) 中进行扩散过程。这极大地降低了计算成本和内存需求,使得在消费级硬件上进行训练和推理成为可能。Stable Diffusion使用CLIP或OpenCLIP作为文本编码器,通过交叉注意力将文本条件注入到潜在空间的U-Net中,并广泛使用了无分类器引导。其开源性和高效性极大地推动了扩散模型生态的发展和应用。
④ Parti (Pathways Autoregressive Text-to-Image):
▮▮▮▮由Google Research开发,虽然不是纯粹的扩散模型,但展示了结合大型语言模型和视觉模型在文本到图像任务上的强大潜力。它采用了自回归 (Autoregressive) 方法,将图像视为一系列token进行生成,但其背后的思想(利用强大的文本理解)与扩散模型殊途同归。
这些代表性模型在不断推动文本到图像技术的边界,使得从简单的文字描述生成高质量、富有想象力的图像成为现实。
6.5 其他条件生成任务
除了文本到图像,扩散模型还可以应用于各种其他需要基于特定条件生成图像或视觉数据的任务。核心思想都是将条件信息编码并以合适的方式融入到扩散模型的训练和推理过程中。
① 基于类别标签的生成 (Class-Conditional Generation):
▮▮▮▮这是最简单的条件生成形式之一。条件 \( c \) 是一个离散的类别标签。可以将标签转换为独热向量 (one-hot vector) 或嵌入向量 (embedding vector),然后通过简单的方式(如与时间步嵌入一起加到U-Net的特征中)融入模型。早期许多验证条件扩散模型概念的工作都是基于类别标签的生成,例如在CIFAR-10或ImageNet数据集上生成特定类别的图像。
② 基于语义分割图/布局的生成 (Semantic Segmentation/Layout-based Generation):
▮▮▮▮给定一张语义分割图(图中每个像素代表一个对象的类别,如天空、草地、人等)或一个布局信息(如对象的位置和大小框),生成符合该结构的逼真图像。可以将分割图或布局信息编码为张量(例如,将分割图转换为多通道特征图),然后通过卷积层处理后,与图像特征进行拼接或通过交叉注意力融合。这种方法在生成场景图像、人像背景替换等方面有应用。
③ 基于图像的条件生成 (Image-Conditional Generation):
▮▮▮▮一个图像本身也可以作为生成另一张图像的条件。这包括:
▮▮▮▮⚝ 图像修复 (Inpainting):给定一张带有缺失区域的图像,生成填充缺失区域的内容。原始图像(带有掩码)作为条件。
▮▮▮▮⚝ 图像外绘 (Outpainting):给定一张图像,生成扩展其边界的内容。原始图像作为条件。
▮▮▮▮⚝ 风格迁移 (Style Transfer):将参考图像的风格应用到内容图像上。内容图像和风格图像都可以作为条件。
▮▮▮▮⚝ 图像到图像翻译 (Image-to-Image Translation):将一种类型的图像转换为另一种类型,例如将航拍图转换为地图,或将白天场景转换为夜晚场景。输入图像是条件。
▮▮▮▮⚝ 超分辨率 (Super-Resolution):将低分辨率图像作为条件,生成对应的高分辨率图像。
▮▮▮▮⚝ 深度图到图像 (Depth-to-Image):给定场景的深度图,生成对应的彩色图像。
▮▮▮▮⚝ 边缘图到图像 (Edge-to-Image):给定对象的边缘轮廓图,生成逼真的对象图像。
▮▮▮▮⚝ 草图到图像 (Sketch-to-Image):给定手绘草图,生成对应的逼真图像。
在这种情况下,条件图像通常通过一个编码器网络(如另一个U-Net或Vision Transformer)进行处理,提取其特征表示,然后将这些特征通过拼接、加法或交叉注意力等方式融入到主扩散模型的U-Net中。ControlNet等技术就是通过增加额外的条件分支并锁定原始模型权重来实现更精细的图像条件控制。
④ 基于姿态的生成 (Pose-based Generation):
▮▮▮▮给定人体的骨架姿态信息,生成具有该姿态的人体图像。姿态信息可以编码为关键点坐标或热力图,然后作为条件输入模型。
⑤ 多模态条件生成 (Multi-modal Conditional Generation):
▮▮▮▮结合多种类型的条件进行生成,例如同时使用文本和布局作为条件生成图像,或者使用图像和音频作为条件生成视频帧等。这通常需要设计更复杂的条件编码和融合机制。
总的来说,条件扩散模型通过灵活地将各种外部信息引入到生成过程中,极大地扩展了扩散模型的应用范围,使其能够用于解决更多具有实际意义的图像和视觉任务。如何高效、鲁Pst地编码和融合不同模态、不同形式的条件信息,仍然是该领域活跃的研究方向。
7. 高级架构与技术
本章将深入探讨在标准去噪扩散概率模型 (DDPM) 框架基础上发展起来的各种高级架构、变体和优化技术。这些创新极大地提升了扩散模型的效率、可控性以及在更广泛应用中的性能,特别是在处理高分辨率图像和实现复杂条件生成任务方面。我们将介绍潜在扩散模型 (LDM),它将扩散过程转移到更高效的潜在空间;探索一致性模型 (Consistency Models),它们提供了一种全新的、高效的采样范式;了解流匹配 (Flow Matching),一个与扩散模型紧密相关的生成建模框架;考察扩散Transformer (DiT),一种替代传统U-Net骨干网络的 Transformer 架构;最后,讨论将扩散模型应用于多模态数据处理的技术。
7.1 潜在扩散模型 (Latent Diffusion Models, LDM)
潜在扩散模型 (Latent Diffusion Models, LDM) 是当前许多最先进的文本到图像生成模型(如 Stable Diffusion)的核心技术。它解决了标准扩散模型直接在像素空间进行训练和采样时面临的巨大计算成本问题,尤其对于高分辨率图像。LDM的核心思想是将扩散过程从高维的像素空间转移到一个更低维、计算效率更高的潜在空间 (Latent Space) 进行。
这一思想的实现依赖于一个强大的感知压缩模型 (Perceptual Compression Model),通常是一个变分自编码器 (Variational Autoencoder, VAE) 或类似的自编码结构。这个压缩模型负责将高维图像数据编码到低维潜在表示,并将潜在表示解码回图像空间。扩散模型则在这个潜在空间上进行训练和采样。
7.1.1 感知压缩 (Perceptual Compression)
感知压缩的目标是找到一个有效的低维表示,既能显著降低数据的维度,又能保留对人类感知最重要的信息,即感知上等价 (Perceptually Equivalent) 的信息。
① VAE (变分自编码器) 作为压缩模型:
▮▮▮▮ⓑ 编码器 (Encoder) \( \mathcal{E} \): 这是一个神经网络,负责将原始图像 \( x \in \mathbb{R}^{H \times W \times 3} \) 映射到一个低维的潜在表示 \( z = \mathcal{E}(x) \in \mathbb{R}^{h \times w \times c} \),其中 \( h \times w \times c \) 通常远小于 \( H \times W \times 3 \)。编码器学习如何从图像中提取紧凑的特征表示。
▮▮▮▮ⓒ 解码器 (Decoder) \( \mathcal{D} \): 这是另一个神经网络,负责将潜在表示 \( z \) 映射回图像空间 \( \hat{x} = \mathcal{D}(z) \in \mathbb{R}^{H \times W \times 3} \)。解码器学习如何从低维潜在代码重构出逼真的图像。
▮▮▮▮ⓓ VAE 的训练目标通常包括两部分:重构损失 (Reconstruction Loss) 确保解码图像与原始图像相似,以及一个正则化项 (Regularization Term)(如 KL 散度 (KL Divergence))来规范潜在空间的分布。在 LDM 中,通常使用一个预训练好的、具有强大重构能力的 VAE。
② 压缩的优势:
▮▮▮▮⚝ 维度降低:将扩散过程从 \( H \times W \times 3 \) 维空间移到 \( h \times w \times c \) 维空间,显著减少了计算复杂性。例如,对于 \( 512 \times 512 \) 的图像,潜在空间可能是 \( 64 \times 64 \times 4 \),维度降低了 \( (512 \times 512 \times 3) / (64 \times 64 \times 4) \approx 76.8 \) 倍。
▮▮▮▮⚝ 关注语义:预训练的感知压缩模型往往能够将像素空间中的冗余信息去除,保留更高级别的语义信息,使得潜在空间更适合生成建模。
7.1.2 潜在空间扩散 (Diffusion in Latent Space)
在 LDM 框架下,标准的扩散过程(正向加噪和逆向去噪)不再应用于原始像素数据 \( x \),而是应用于 VAE 编码器得到的潜在表示 \( z = \mathcal{E}(x) \)。
① 正向扩散过程:
▮▮▮▮ⓑ 从数据 \( x \) 编码得到其潜在表示 \( z_0 = \mathcal{E}(x) \)。
▮▮▮▮ⓒ 正向过程在潜在空间 \( z_0 \) 上进行,通过逐步添加高斯噪声,生成一系列带噪的潜在变量 \( z_1, z_2, \dots, z_T \)。这个过程与像素空间的正向扩散过程数学形式类似,通常是一个固定的马尔可夫链。
② 逆向去噪学习:
▮▮▮▮ⓑ 训练一个去噪模型 \( \epsilon_\theta \)(或分数模型 \( s_\theta \)),其输入是带噪的潜在变量 \( z_t \) 和时间步 \( t \),输出是预测的噪声或分数。
▮▮▮▮ⓒ 这个模型在潜在空间进行训练,目标是学习逆转正向加噪过程。训练目标通常采用简化的去噪目标,最小化预测噪声与实际噪声之间的差异 \( \mathbb{E}_{t, z_0, \epsilon \sim \mathcal{N}(0, I)} [||\epsilon - \epsilon_\theta(z_t, t)||^2] \),其中 \( z_t = \sqrt{\bar{\alpha}_t} z_0 + \sqrt{1-\bar{\alpha}_t} \epsilon \)。
▮▮▮▮ⓓ 模型的骨干网络(如 U-Net 或 Transformer)处理的是维度较低的潜在表示,因此训练速度更快、内存消耗更少。
③ 生成过程:
▮▮▮▮ⓑ 从潜在空间的纯噪声 \( z_T \sim \mathcal{N}(0, I) \) 开始。
▮▮▮▮ⓒ 使用训练好的潜在扩散模型,通过逆向去噪过程,逐步从 \( z_T \) 恢复到无噪声的潜在表示 \( z_0 \)。这个采样过程可以在潜在空间高效进行。
▮▮▮▮ⓓ 最后,使用预训练的 VAE 解码器 \( \mathcal{D} \) 将潜在表示 \( z_0 \) 转换回像素空间的图像 \( \hat{x} = \mathcal{D}(z_0) \)。
④ 潜在扩散模型的优势总结:
▮▮▮▮⚝ 计算效率高:在低维潜在空间训练和采样,显著降低了计算资源和时间消耗,使得训练更大模型和生成高分辨率图像成为可能。
▮▮▮▮⚝ 内存占用低:模型处理的数据维度低,对显存要求更低。
▮▮▮▮⚝ 解耦:感知压缩阶段和潜在扩散阶段可以分开训练(尽管也可以联合微调),增加了灵活性。
▮▮▮▮⚝ 可扩展性:更容易扩展到更高分辨率和更大规模的数据集。
▮▮▮▮⚝ 条件生成:条件信息(如文本、类别标签)可以直接通过交叉注意力等机制注入到潜在扩散模型的骨干网络中,实现强大的条件生成能力。
LDM 框架的提出(如 Stable Diffusion 的前身 Latent Diffusion Models by Rombach et al., 2022)是扩散模型发展史上的一个重要里程碑,极大地推动了其在实际应用中的普及。
7.2 一致性模型 (Consistency Models)
一致性模型 (Consistency Models) 是一种新型的生成模型,它受到了扩散模型连续时间表示(特别是其常微分方程 ODE 表示)的启发,旨在克服传统扩散模型采样速度慢的缺点,实现一步生成 (One-step Generation) 或少量步数生成 (Few-step Generation) 高质量样本。
① 核心思想:
▮▮▮▮ⓑ 考虑扩散过程对应的连续时间 ODE \( \frac{dx}{dt} = f(x, t) \). 这个 ODE 定义了一个从数据分布到噪声分布的流,以及反过来从噪声分布到数据分布的逆流。
▮▮▮▮ⓒ ODE 的一个重要性质是,同一条轨迹上的所有点 \( x_t \) 在时间 \( t \) 处的解都对应于数据空间的同一个原始点 \( x_0 \). 即,存在一个函数 \( f^* \) 使得 \( f^*(x_t, t) = x_0 \) 对于任意 \( t \in [0, T] \) 都成立,只要 \( x_t \) 是从 \( x_0 \) 通过正向 ODE 轨迹到达的。
▮▮▮▮ⓓ 一致性模型学习一个一致性函数 (Consistency Function) \( f_\theta(x, t) \) 来近似这个理想的 \( f^* \). 这个函数的目标是使得对于任意时间步 \( t_1, t_2 \in [\epsilon, T] \) (其中 \( \epsilon \) 是一个接近0的小常数,避免奇异性),如果 \( x_{t_2} \) 是从 \( x_{t_1} \) 通过 ODE 前向一步得到的,那么 \( f_\theta(x_{t_1}, t_1) \approx f_\theta(x_{t_2}, t_2) \). 更强的版本要求 \( f_\theta(x_t, t) \approx x_0 \) 对于所有 \( t \) 成立。
② 训练目标:
▮▮▮▮ⓑ 一致性模型的训练不依赖于变分下界或分数匹配,而是直接优化一致性属性 (Consistency Property)。
▮▮▮▮ⓒ 训练时,随机采样一对时间步 \( t_1, t_2 \) 且 \( t_1 > t_2 \)。从数据 \( x_0 \) 计算对应的带噪点 \( x_{t_1} \) 和 \( x_{t_2} \)(使用扩散模型的正向过程或对应的 SDE/ODE 解)。
▮▮▮▮ⓓ 训练目标是最小化 \( ||f_\theta(x_{t_1}, t_1) - f_\theta(x_{t_2}, t_2)||^2 \) 或类似的损失,其中 \( x_{t_2} \) 可以是从 \( x_{t_1} \) 通过少量 ODE 步数计算得到的。这鼓励模型学习到,沿着 ODE 轨迹上的点,其一致性函数输出应该相同。
③ 生成过程:
▮▮▮▮ⓑ 一步生成:从纯噪声 \( x_T \sim \mathcal{N}(0, I) \) 开始,直接计算 \( \hat{x}_0 = f_\theta(x_T, T) \). 这个 \( \hat{x}_0 \) 就是生成的样本。
▮▮▮▮ⓒ 少量步数生成:从 \( x_T \) 开始,在预定义的时间步序列 \( T = t_M > t_{M-1} > \dots > t_1 > t_0 = \epsilon \) 上迭代。在每一步,使用当前点 \( x_{t_i} \) 计算 \( x_0^{pred} = f_\theta(x_{t_i}, t_i) \),然后使用一个简单的更新规则(例如,基于 ODE 求解器的单步或几步)从 \( x_0^{pred} \) 计算 \( x_{t_{i-1}} \)。重复直到达到 \( t_0 \).
④ 优势:
▮▮▮▮⚝ 采样速度极快:可以实现一步采样,生成速度比需要数百上千步的传统扩散模型快几个数量级。
▮▮▮▮⚝ 无需迭代求解:生成过程不依赖于复杂的 ODE/SDE 求解器。
▮▮▮▮⚝ 可以基于预训练的扩散模型训练:可以在一个已训练好的扩散模型之上提取数据点和轨迹用于训练一致性模型,无需从头开始训练生成模型。
一致性模型提供了一种有别于传统迭代去噪的新生成范式,是提高扩散模型实际可用性的重要进展。
7.3 流匹配 (Flow Matching)
流匹配 (Flow Matching) 是另一种学习连续时间生成模型的方法,它与扩散模型在理论上有着密切的联系,并且在训练和生成方面具有一些独特的优势。其核心思想是将生成建模看作是学习一个连续的流场 (Vector Field),该流场可以将一个简单的基础分布(如高斯噪声)平滑地转换到复杂的数据分布。
① 核心思想:
▮▮▮▮ⓑ 定义一个随时间 \( t \in [0, 1] \) 变化的概率路径 \( p_t(x) \),使得 \( p_0(x) \) 是一个简单的基础分布(如 \( \mathcal{N}(0, I) \)),而 \( p_1(x) \) 是目标数据分布。一个常见的选择是线性插值路径 (Linear Interpolation Path),即 \( p_t(x) \) 是基础分布和数据分布的凸组合,例如 \( p_t(x) = (1-t) p_0(x) + t p_{data}(x) \). 更常用的是将数据 \( x_1 \sim p_{data}(x) \) 和噪声 \( x_0 \sim p_0(x) \) 连接起来,定义 \( x_t = (1-t)x_0 + tx_1 \),然后 \( p_t(x) \) 是 \( x_t \) 的分布。
▮▮▮▮ⓒ 根据概率流的连续性方程,存在一个随时间变化的向量场 (Vector Field) \( v_t^*(x) \) 使得如果 \( x_t \) 满足 ODE \( \frac{dx_t}{dt} = v_t^*(x_t) \),并且 \( x_0 \sim p_0(x) \),那么 \( x_1 \sim p_{data}(x) \). 这个 \( v_t^*(x) \) 称为概率路径的瞬时流 (Instantaneous Flow of Probability Path)。
▮▮▮▮ⓓ 流匹配的目标是训练一个神经网络 \( v_\theta(x, t) \) 来近似这个理想的瞬时流 \( v_t^*(x) \).
② 训练目标:
▮▮▮▮ⓑ 与分数匹配学习分数函数 \( \nabla_x \log p_t(x) \) 不同,流匹配直接学习向量场 \( v_t^*(x) \)。
▮▮▮▮ⓒ 对于线性插值路径 \( x_t = (1-t)x_0 + tx_1 \)(其中 \( x_0 \sim p_0(x), x_1 \sim p_{data}(x) \)),其对应的瞬时流 \( v_t^*(x_t) \) 可以计算出来,例如 \( v_t^*(x_t) = x_1 - x_0 \).
▮▮▮▮ⓓ 训练目标是最小化预测向量场与目标向量场之间的L2距离的期望:
\[ \mathbb{E}_{t \sim \mathcal{U}(0, 1), x_0 \sim p_0, x_1 \sim p_{data}}[||v_\theta(x_t, t) - v_t^*(x_t)||^2] \]
其中 \( x_t = (1-t)x_0 + tx_1 \) 且 \( v_t^*(x_t) = x_1 - x_0 \). 这变成了一个简单的回归问题:给定 \( x_t \) 和 \( t \),预测目标向量 \( x_1 - x_0 \).
③ 生成过程:
▮▮▮▮ⓑ 从基础分布采样初始点 \( x_0 \sim p_0(x) \) (通常是高斯噪声)。
▮▮▮▮ⓒ 使用标准的 ODE 求解器(如 Euler、Runge-Kutta 等)数值求解学到的向量场 ODE \( \frac{dx}{dt} = v_\theta(x, t) \) 从 \( t=0 \) 到 \( t=1 \).
▮▮▮▮ⓓ 最终得到的 \( x_1 \) 就是生成的样本。
④ 与扩散模型的联系:
▮▮▮▮⚝ 数学等价性:在某些条件下,特别是当扩散模型使用连续时间 SDE/ODE 表示时,学习分数函数或学习概率路径的瞬时流是等价的。分数函数 \( \nabla_x \log p_t(x) \) 与向量场 \( v_t(x) \) 之间存在明确的关系。
▮▮▮▮⚝ 训练目标的相似性:流匹配的训练目标与分数匹配中的去噪分数匹配目标形式上非常相似,都是一个L2回归问题。
▮▮▮▮⚝ 生成方式:两者都可以通过求解 ODE 来生成样本。
⑤ 流匹配的优势:
▮▮▮▮⚝ 训练简单:直接学习向量场,训练目标是一个简单的回归问题,不需要计算雅可比矩阵或涉及变分下界。
▮▮▮▮⚝ 采样灵活:生成过程是求解 ODE,可以使用各种成熟的 ODE 求解器,并且可以通过调整求解器精度来权衡生成质量和速度。理论上也可以实现一步采样(尽管通常多步效果更好)。
▮▮▮▮⚝ 可以连接任意两个分布:流匹配框架不仅限于连接高斯噪声和数据分布,理论上可以学习连接任何两个分布的流。
流匹配提供了一个替代扩散模型训练的框架,理论优雅且在实践中表现出色,尤其是在提高训练效率和采样灵活性方面。
7.4 扩散Transformer (Diffusion Transformers, DiT)
传统的扩散模型(如 DDPM)通常使用基于卷积神经网络 (CNN) 的 U-Net 架构作为其核心的去噪模型。U-Net 因其能够有效地捕获图像的多尺度特征和局部性而成为图像任务的标准骨干网络。然而,随着 Transformer 模型在各种领域(包括视觉任务,如 Vision Transformer, ViT)取得巨大成功,研究人员开始探索使用 Transformer 作为扩散模型的骨干网络。扩散Transformer (Diffusion Transformers, DiT) 就是这一探索的成果。
① 架构变化:
▮▮▮▮ⓑ 替代 U-Net:DiT 用一个 Transformer 网络完全取代了标准的 U-Net 架构。
▮▮▮▮ⓒ 图像分块与嵌入:输入的带噪图像 \( x_t \) 首先被分割成一系列小的图像块 (Patches),类似于 ViT。每个图像块被展平并线性投影到一个嵌入向量空间,生成一系列图像块嵌入 (Patch Embeddings)。
▮▮▮▮ⓓ Transformer 处理:这些图像块嵌入与时间步 \( t \) 的嵌入(通过 MLP 或傅里叶特征编码等方式生成)以及可能的条件信息嵌入(如文本嵌入)一起,被送入一系列标准的 Transformer 块进行处理。Transformer 通过自注意力机制 (Self-Attention Mechanism) 来建模图像块之间的全局依赖关系,这与 U-Net 主要依赖局部卷积操作不同。
▮▮▮▮ⓔ 输出:Transformer 的输出是一系列与输入图像块对应的高维特征向量。这些特征向量通过一个线性层或反卷积层被映射回原始图像分辨率,以预测该时间步下的噪声 \( \epsilon \) 或分数函数 \( s \)。
② 训练目标:
▮▮▮▮ⓑ DiT 的训练目标与基于 U-Net 的扩散模型相同,通常是预测噪声的 L2 损失:\( \mathbb{E}_{t, x_0, \epsilon}[||\epsilon - \epsilon_\theta(x_t, t)||^2] \),其中 \( \epsilon_\theta \) 现在是一个基于 Transformer 的网络。
▮▮▮▮ⓒ 条件信息(如类别标签或文本)的嵌入可以与时间步嵌入一起,通过加法或更复杂的门控机制融入到 Transformer 块中。交叉注意力层也可以用于处理文本等序列条件信息。
③ 优势与特点:
▮▮▮▮⚝ 捕获全局依赖:Transformer 的自注意力机制能够有效地捕获图像中任意两个位置之间的长距离依赖关系,这对于理解图像的整体结构和生成连贯的图像至关重要。而 U-Net 的局部卷积感受野有限,虽然可以通过层叠和跳跃连接扩大,但在建模全局信息方面不如 Transformer 直接。
▮▮▮▮⚝ 可扩展性:Transformer 架构在处理大规模数据和模型尺寸方面表现出色,这使得 DiT 能够轻松扩展到更高的分辨率和更复杂的生成任务。有研究表明,缩放 DiT 模型的大小可以稳定地提升生成性能。
▮▮▮▮⚝ 统一性:采用 Transformer 架构使得图像生成与其他基于 Transformer 的模态(如文本)更容易集成,有助于构建多模态生成模型。
④ 局限性:
▮▮▮▮⚝ 局部性处理:虽然 Transformer 擅长全局建模,但其对局部精细结构的建模能力可能不如卷积网络直接。图像块划分丢失了一定的局部空间信息。可以通过改进图像块嵌入方式或结合卷积操作来缓解。
▮▮▮▮⚝ 计算成本:标准 Transformer 的自注意力机制对于输入序列长度(图像块数量)是二次方复杂度,在高分辨率图像下图像块数量巨大时计算成本很高。需要采用各种优化技术(如窗口注意力、局部注意力等)来降低计算量。
DiT 的出现表明 Transformer 架构同样适用于扩散模型的骨干网络,并且在大规模生成任务中展现出了强大的潜力,为扩散模型的架构设计开辟了新的方向。
7.5 多模态扩散模型 (Multimodal Diffusion Models)
扩散模型强大的生成能力和灵活的条件控制机制使其成为构建多模态生成模型 (Multimodal Generative Models) 的有力工具。多模态扩散模型旨在联合处理和生成来自不同类型的数据,如文本、图像、音频、视频等,或者基于一种模态的信息生成另一种模态的数据。
① 核心思想:
▮▮▮▮ⓑ 将不同模态的数据嵌入到共享的表示空间,或通过交叉注意力机制让它们进行交互。
▮▮▮▮ⓒ 利用扩散模型的条件生成能力,以一种模态的数据作为条件来指导另一种模态数据的生成过程。
② 常见的多模态任务与扩散模型应用:
▮▮▮▮ⓑ 文本到图像生成 (Text-to-Image Generation):这是最成功的应用之一,详见第六章。模型以文本描述为条件生成对应的图像。LDM 和 DiT 架构都广泛应用于此。条件信息(文本嵌入)通过交叉注意力等机制注入到去噪网络中。
▮▮▮▮ⓒ 图像到文本生成 (Image-to-Text Generation):虽然传统上常使用 Seq2Seq 或 Transformer 模型,但扩散模型也可以用于此。例如,可以训练一个扩散模型来生成文本序列的潜在表示,并以图像特征为条件。或者直接在离散的文本 token 空间上进行扩散(但通常较为复杂)。
▮▮▮▮ⓓ 文本到视频生成 (Text-to-Video Generation):将扩散模型扩展到时序数据。这通常涉及在标准的图像扩散模型基础上添加时序注意力层,或者在潜在空间同时建模空间和时间维度。文本条件信息同样用于引导生成过程。
▮▮▮▮ⓔ 图像编辑与操控 (Image Editing and Manipulation):如使用文本指令修改图像内容(例如,“把天空变成黄色”)。这通常通过在扩散模型的逆向采样过程中,根据文本指令修改中间的带噪样本或引导去噪方向来实现。
▮▮▮▮ⓕ 跨模态检索与理解 (Cross-modal Retrieval and Understanding):扩散模型虽然是生成模型,但其内部学习到的跨模态映射能力有助于理解不同模态之间的关联,例如在潜在空间对齐图像和文本表示。
▮▮▮▮⚝ 其他组合:还可以探索音频到图像、图像到三维形状、文本到三维形状、联合生成图像和文本等更复杂的任务。
③ 实现机制:
▮▮▮▮ⓑ 条件编码器 (Conditional Encoders):使用特定模态的编码器(如文本使用 CLIP 的文本编码器、图像使用 CNN 或 ViT)将条件模态数据编码成嵌入向量序列或张量。
▮▮▮▮ⓒ 条件注入机制 (Conditional Injection Mechanisms):将条件编码器的输出融入到扩散模型的去噪网络中。常见的技术包括:
▮▮▮▮▮▮▮▮⚝ 交叉注意力 (Cross-Attention):在去噪网络的 Transformer 块或卷积块中引入交叉注意力层,让图像特征(或潜在特征)与条件嵌入(如文本嵌入序列)进行交互,从而让模型在去噪时考虑条件信息。
▮▮▮▮▮▮▮▮⚝ 自适应归一化 (Adaptive Normalization):根据条件嵌入调整归一化层的参数(如 Scale 和 Shift),这是一种简单的条件注入方式,尤其在基于卷积的 U-Net 中常用。
▮▮▮▮▮▮▮▮⚝ 拼接 (Concatenation):将条件嵌入(如果维度匹配)直接与图像特征拼接。
▮▮▮▮ⓒ 多模态骨干网络:设计能够联合处理多种模态输入的骨干网络,例如同时接收图像块和文本 token,并在 Transformer 中通过注意力机制进行融合。
多模态扩散模型是当前研究的热点领域之一,它充分利用了扩散模型在高维数据建模和条件生成方面的优势,正在推动跨模态智能的进步。
8. 图像应用
本章将深入探讨扩散模型 (Diffusion Models) 在各种图像处理和生成任务中的具体应用案例。作为一种强大的生成范式,扩散模型在图像领域展现出了前所未有的潜力和灵活性,不仅能够生成高质量的图像,还能应用于各种复杂的图像编辑、增强和分析任务。本章旨在通过丰富的实例,帮助读者理解扩散模型如何从理论走向实践,解决现实世界中的图像问题。无论您是希望利用扩散模型生成艺术作品、编辑照片,还是探索其在医学影像等专业领域的应用,本章都将为您提供有价值的洞察和实践指导。
8.1 高质量图像生成 (High-Quality Image Generation)
扩散模型最引人注目的成就之一是其生成极高质量、逼真且多样化图像的能力。相比于早期的生成模型如生成对抗网络 (GANs),扩散模型通常表现出更稳定的训练过程和更少见的模式坍塌 (Mode Collapse) 问题,从而能够更好地覆盖数据分布并生成更多样化的样本。
扩散模型生成高质量图像的核心在于其逐步去噪的生成过程。模型学习的是每一步去除微小噪声的策略,这个过程可以看作是在数据空间中遵循一个学习到的概率流,最终从纯噪声恢复到清晰的数据样本。通过精确地学习这种逆向过程的概率分布,扩散模型能够捕捉到极其细微的数据结构和纹理细节。
具体的实现细节通常依赖于以下几个关键方面:
① 模型架构 (Model Architecture):
▮▮▮▮ⓑ 大多数高质量图像生成模型使用 U-Net 结构的变体作为骨干网络,因为它在处理图像这类具有空间层级结构的二维数据方面表现出色。
▮▮▮▮ⓒ U-Net 内部集成了自注意力机制 (Self-Attention Mechanism) 和交叉注意力机制 (Cross-Attention Mechanism)(尤其是在条件生成任务中),以捕捉图像的全局依赖关系和条件信息。
▮▮▮▮ⓓ 时间步嵌入 (Timestep Embedding) 被有效地集成到网络中,使得模型能够感知当前的去噪进度。
② 噪声调度 (Noise Scheduling):
▮▮▮▮⚝ 合理的方差调度 (Variance Schedule)(例如,随着时间步增加,噪声方差线性或余弦增加)对于训练稳定性和生成质量至关重要。
▮▮▮▮⚝ 不同的调度策略会影响模型学习的重点,例如,在早期时间步(噪声多)学习全局结构,在后期时间步(噪声少)学习精细细节。
③ 训练目标 (Training Objective):
▮▮▮▮⚝ 预测噪声 \( \epsilon \) 的简化目标 \[ L = E_{t \sim U(1, T), x_0 \sim q(x_0), \epsilon \sim N(0, I)} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] \] 是训练高质量模型的主流方法。这里的 \( x_t \) 是在 \( x_0 \) 上加了 \( t \) 时间步噪声后的样本,\( \epsilon_\theta \) 是模型预测的噪声。
▮▮▮▮⚝ 也有工作探索预测原始数据 \( x_0 \) 或去噪后的数据 \( \hat{x}_0 \),这些预测可以相互转化。
④ 采样策略 (Sampling Strategy):
▮▮▮▮⚝ 虽然原始的 DDPM 采样需要大量的步数 (如 1000 步),但 DDIM 等确定性采样方法和各种加速技术(如快速求解器、模型蒸馏)使得在较少的步数(如 50-250 步)内生成高质量图像成为可能。
▮▮▮▮⚝ 无分类器引导 (Classifier-Free Guidance, CFG) 在条件生成中被广泛用于提高生成样本与条件(如文本)的相关性和质量,这通常通过联合训练条件模型 \( \epsilon_\theta(x_t, t, c) \) 和无条件模型 \( \epsilon_\theta(x_t, t) \),并在采样时使用加权组合 \[ \hat{\epsilon}(x_t, t, c) = \epsilon_\theta(x_t, t) + w \cdot (\epsilon_\theta(x_t, t, c) - \epsilon_\theta(x_t, t)) \] 实现,其中 \( w \) 是引导强度。
通过这些技术的综合应用,扩散模型已经在 ImageNet、FFHQ、LAION 等大规模数据集上展示了令人惊叹的生成效果,生成的图像在分辨率、细节丰富度、真实感和多样性方面都达到了新的高度。例如,DALL-E 2、Imagen、Stable Diffusion 等模型的成功极大地推动了文本到图像生成领域的发展,其核心正是基于强大的扩散模型。
8.2 图像编辑 (Image Editing)
扩散模型不仅擅长从头生成图像,其独特的生成过程也使其成为图像编辑任务的有力工具。通过巧妙地利用扩散模型的逆向去噪过程以及条件控制能力,可以实现多种灵活且高质量的图像编辑操作,如图像修复 (Inpainting)、图像外绘 (Outpainting)、语义编辑 (Semantic Editing) 和风格迁移 (Style Transfer) 等。
图像编辑通常依赖于“逆向”扩散过程。给定一张需要编辑的原始图像 \( x_0 \),我们可以先通过正向扩散过程将其逐步加噪到某个中间时间步 \( t \) 得到 \( x_t \)。然后,在从 \( x_t \) 执行逆向去噪过程恢复图像时,引入编辑目标或约束。这种“加噪-去噪”循环允许模型在保留图像原始信息(通过加噪过程)的同时,根据编辑需求重塑图像内容(通过受控的去噪过程)。
8.2.1 Inpainting (图像修复)
图像修复 (Inpainting) 的目标是填充图像中缺失或需要替换的区域。利用扩散模型进行图像修复的基本思想是,在逆向去噪过程中,约束模型在已知区域(未被遮罩的部分)的生成结果与原始图像的对应区域保持一致,而允许模型在未知区域(被遮罩的部分)自由生成内容。
典型的实现方法是在每个逆向去噪步 \( t \rightarrow t-1 \) 中,将模型对 \( x_{t-1} \) 的预测结果与原始图像 \( x_0 \) 在已知区域的信息结合起来。具体来说,假设 \( M \) 是一个二值掩码 (binary mask),其中 \( M_{i,j}=1 \) 表示像素 \((i, j)\) 属于未知区域,\( M_{i,j}=0 \) 表示已知区域。在逆向采样步 \( t \rightarrow t-1 \),模型首先预测 \( x_{t-1} \) 或相关的量(如噪声 \( \epsilon \) 或 \( x_0 \)),然后:
① 计算模型的预测结果 \( \hat{x}_{t-1} \)。
② 将已知区域的像素替换为原始图像 \( x_0 \) 在该区域的对应像素,但需要考虑当前时间步的噪声水平。一种常见的做法是,将 \( \hat{x}_{t-1} \) 的已知区域替换为从 \( x_0 \) 通过 \( t-1 \) 步正向扩散得到的加噪版本 \( x_{t-1}^{\text{known}} \),即:
\[ x_{t-1}^{\text{combined}} = M \odot \hat{x}_{t-1} + (1-M) \odot x_{t-1}^{\text{known}} \]
这里的 \( \odot \) 表示逐元素乘法。\( x_{t-1}^{\text{known}} \) 可以通过 \( x_{t-1}^{\text{known}} = \sqrt{\alpha_{t-1}} x_0^{\text{known}} + \sqrt{1-\alpha_{t-1}} \epsilon^{\text{known}} \) 得到,其中 \( x_0^{\text{known}} \) 是 \( x_0 \) 的已知区域,\( \epsilon^{\text{known}} \) 是对应区域的噪声。
③ 使用 \( x_{t-1}^{\text{combined}} \) 作为下一个时间步 \( t-1 \) 的输入进行去噪。
这个过程迭代进行,直到达到 \( t=0 \),最终得到一个未知区域被合理填充的新图像。扩散模型在图像修复任务中表现出色,能够生成与周围环境在视觉上一致且自然的填充内容。
8.2.2 Outpainting (图像外绘)
图像外绘 (Outpainting) 是图像修复的一种扩展,旨在扩展图像的边界,生成原始图像之外的内容。这可以被看作是修复一个中心区域已知、周围区域未知的“图像”。
实现图像外绘通常采用类似于图像修复的方法,但掩码 \( M \) 覆盖了图像的外部区域。或者,可以将原始图像放置在一个更大的画布的中心,然后利用扩散模型对这个更大的画布进行修复,其中原始图像所在的区域被视为已知区域,外部区域被视为未知区域。
通过控制生成过程,扩散模型可以生成与原始图像内容、风格和结构相协调的外部区域,从而无缝地扩展图像。
8.2.3 语义编辑 (Semantic Editing)
语义编辑 (Semantic Editing) 允许用户根据高级语义指令(如文本描述或参考图像)修改图像的内容。例如,改变图片中物体的颜色、添加或删除物体、改变场景的风格等。
扩散模型实现语义编辑的主要方式是利用条件扩散模型 (Conditional Diffusion Models)。通过在逆向去噪过程中引入编辑条件的引导,模型可以生成满足特定语义要求的图像。
① 文本引导编辑:利用文本到图像扩散模型的能力,通过修改输入的文本提示 (text prompt) 来引导生成过程。这可以通过在特定时间步(通常是在去噪过程的早期,模型对整体结构影响较大时)重新注入与新文本条件相关的噪声估计来实现。或者,利用无分类器引导 (CFG) 技术,通过增加或减少与特定文本条件相关的分数梯度权重来引导生成。
② 基于掩码的语义编辑:用户提供一个掩码,指定需要编辑的区域,并提供相应的文本描述。模型仅对掩码覆盖的区域进行扩散过程,同时确保该区域的生成内容符合文本描述,并且与掩码外部的原始图像区域保持一致。这结合了图像修复和文本引导的思想。
③ 文本反演 (Textual Inversion) 或 DreamBooth:这些技术允许用户通过少量示例图像学习特定的概念(如某个物体或风格),然后将这些概念嵌入到模型的文本空间中。之后,用户就可以通过文本提示引用这些学习到的概念来进行个性化的图像生成或编辑。
语义编辑是扩散模型在图像应用中最具创造性和吸引力的方向之一,它极大地降低了图像创作和修改的门槛。
8.2.4 风格迁移 (Style Transfer)
风格迁移 (Style Transfer) 的目标是将一幅图像的风格(如绘画风格、色彩、纹理)应用到另一幅图像的内容上。传统的风格迁移方法依赖于优化过程或特定的网络架构。扩散模型也为风格迁移提供了新的思路。
一种基于扩散模型的风格迁移方法是,将内容图像通过正向扩散加噪到某个中间时间步,得到一个包含内容图像主要结构但带有噪声的图像 \( x_t \)。然后,在从 \( x_t \) 进行逆向去噪生成 \( x_0 \) 的过程中,引入风格图像的约束或引导。这可以通过以下方式实现:
① 基于分数函数的引导:训练一个模型来估计风格图像分布的分数函数,然后在去噪过程中,除了遵循数据分布的分数梯度外,还加上风格分布的分数梯度来引导生成。
② 特征空间匹配:在去噪过程中,尝试使生成图像在某个预训练网络(如 VGG 或 CLIP)的特征空间中的表示与风格图像的特征表示相匹配。这可以在模型的每个去噪步中作为额外的损失项加入。
③ 微调 (Finetuning):在内容图像和风格图像的组合数据集上微调扩散模型,使其学会生成特定风格的内容。
④ 文本引导:如果风格可以通过文本描述(如“印象派绘画风格”)来捕捉,那么可以直接使用文本到图像扩散模型的文本引导能力来实现风格迁移。
扩散模型的迭代去噪过程使其能够逐步注入风格信息,同时保持内容图像的结构,从而生成高质量的风格迁移结果。
8.3 超分辨率 (Super-Resolution)
超分辨率 (Super-Resolution, SR) 任务旨在从低分辨率 (Low-Resolution, LR) 图像恢复出对应的高分辨率 (High-Resolution, HR) 图像。这是一个病态问题,因为一个 LR 图像可以对应多个 HR 图像(高频细节丢失)。扩散模型因其强大的概率建模能力,特别适合处理这种一对多的生成任务。
基于扩散模型的超分辨率方法通常将 LR 图像作为条件,训练一个条件扩散模型来生成对应的 HR 图像。过程如下:
① 数据准备:将高分辨率图像 \( x_{\text{HR}} \) 退化 (degenerate) 到低分辨率图像 \( x_{\text{LR}} \)(例如,通过下采样和加模糊)。训练数据对是 \( (x_{\text{LR}}, x_{\text{HR}}) \)。
② 模型训练:训练一个条件扩散模型 \( \epsilon_\theta(x_t, t, x_{\text{LR}}) \),其中 \( x_t \) 是 \( x_{\text{HR}} \) 在时间步 \( t \) 的加噪版本。模型学习从加噪的高分辨率图像 \( x_t \) 和对应的低分辨率图像 \( x_{\text{LR}} \) 中预测噪声 \( \epsilon \)。低分辨率图像 \( x_{\text{LR}} \) 通常通过上采样或直接在模型的 U-Net 结构中作为额外输入层或通过交叉注意力机制融入。
③ 采样生成:给定一个新的低分辨率图像 \( x'_{\text{LR}} \),从随机噪声 \( x_T \) 开始,使用训练好的条件扩散模型 \( \epsilon_\theta(x_t, t, x'_{\text{LR}}) \) 进行逆向去噪采样,最终生成对应的高分辨率图像 \( x'_{\text{HR}} \)。
与基于 GANs 或 VAEs 的超分辨率方法相比,扩散模型生成的 HR 图像通常具有更丰富的细节、更自然的纹理,并且在感知质量评估指标(如 FID、LPIPS)上表现更好。此外,扩散模型的概率性也使得它可以生成给定 LR 图像的多种可能的 HR 对应,这在某些应用中是有益的。
一些高级的扩散模型超分辨率方法还会结合图像退化过程的先验知识(如模糊核、噪声类型)来改进模型。
8.4 医学影像应用 (Medical Imaging Applications)
医学影像数据具有其独特性:通常样本量较小、数据分布复杂、对细节精度要求高、存在隐私限制等。扩散模型凭借其强大的生成能力和对数据分布的精细建模能力,在医学影像领域展现出巨大的应用潜力。
① 数据增强 (Data Augmentation):医学影像数据集的规模往往有限,影响深度学习模型的训练效果。扩散模型可以生成逼真的合成医学影像,用于扩充训练数据集,提高模型的泛化能力,例如用于训练分割、检测或分类模型。
② 合成正常与病理影像:可以训练条件扩散模型,在给定患者信息或特定疾病条件的情况下生成对应的医学影像。这对于研究疾病进展、生成罕见病例数据或训练疾病诊断模型很有价值。例如,生成带有特定肿瘤或病变的 CT、MRI 图像。
③ 图像去噪与伪影去除:医学影像常受到噪声或伪影 (artifacts) 的影响。扩散模型的去噪能力可以直接应用于医学影像去噪。通过训练模型学习干净影像的分布,可以从带噪影像中恢复出清晰的影像。
④ 图像分割 (Image Segmentation):虽然扩散模型主要用于生成,但也有研究探索将其应用于医学影像分割。例如,将分割掩码作为条件生成影像,或反过来,将影像作为条件生成对应的分割掩码。
⑤ 图像生成用于隐私保护:生成合成的医学影像数据集,可以替代真实的患者数据用于模型开发和分享,从而保护患者隐私。
⑥ 跨模态合成 (Cross-modal Synthesis):利用条件扩散模型,从一种医学影像模态(如 MRI T1 加权图像)生成另一种模态(如 MRI T2 加权图像),或从 CT 生成 PET 图像。
在医学影像中应用扩散模型需要注意处理高维数据(如 3D 影像)、保证生成影像的医学准确性以及满足严格的合规性要求。将领域知识融入模型架构或训练过程中是提升效果的关键。
8.5 图像压缩与去噪
扩散模型的核心机制是逐步加噪和去噪。这使得它们天然地适合处理图像去噪任务,并且其潜在的表示能力也为图像压缩提供了新的视角。
① 基于扩散模型的图像去噪:给定一张包含噪声的图像 \( x_{\text{noisy}} \),可以将其视为在某个干净图像 \( x_0 \) 上经过少量或某个时间步 \( t \) 的正向扩散过程得到的 \( x_t \)。我们可以利用一个在大量干净图像上训练好的扩散模型,从 \( x_{\text{noisy}} \) 开始进行逆向去噪过程,恢复出更接近原始干净图像 \( x_0 \) 的版本。由于扩散模型学习了真实图像的数据分布,它能够区分真实的图像结构和随机噪声,从而实现有效的去噪。这种方法通常能保留更多细节并生成视觉上更令人满意的结果,尤其是在噪声水平较高的情况下。
② 基于扩散模型的图像压缩:扩散模型作为一种生成模型,可以学习数据分布的紧凑表示。虽然不像传统压缩算法那样直接操作像素或变换系数,但可以探索以下几种与压缩相关的思路:
▮▮▮▮ⓑ 潜在扩散模型 (LDM) 的思想本身就与压缩相关。LDM 在低维潜在空间进行扩散,VAE 的编码器实现感知压缩,将高维图像压缩到低维潜在表示。这个潜在表示可以被视为一种压缩形式。虽然主要的目的是计算效率,但其潜在代码本身可以用于表示图像。
▮▮▮▮ⓒ 学习量化 (Learned Quantization):将扩散模型的潜在空间或中间表示与学习到的量化技术相结合,从而实现可逆或有损的图像压缩。
▮▮▮▮ⓓ 作为编解码器的一部分:训练一个基于扩散模型的编解码器结构,其中编码器将图像映射到低维表示,解码器利用扩散过程从该低维表示重建图像。这种方法有望在提供高压缩率的同时保持良好的重建质量,特别是在视觉感知质量方面。
尽管基于扩散模型的图像压缩尚处于研究早期,但其强大的生成和重建能力预示着在这个领域具有广阔的应用前景,尤其是在追求高质量感知重建的应用场景。
9. 视觉应用
本章将把扩散模型的应用范围从静态图像扩展到更广泛的视觉领域。随着扩散模型在图像生成和编辑方面展现出卓越的能力,研究人员自然而然地将其强大的建模能力迁移到视频生成、三维数据生成、视觉-语言多模态任务以及其他各类视觉感知与生成任务中。本章旨在探讨这些扩展应用的基本原理、挑战和代表性方法,帮助读者了解扩散模型在动态和多维视觉世界中的潜力。
9.1 视频生成 (Video Generation)
视频是一种包含时间和空间信息的序列数据。从高维、复杂的视频分布中进行采样一直是生成模型的巨大挑战。早期的视频生成方法通常基于循环神经网络(RNN)、长短期记忆网络(LSTM)或生成对抗网络(GANs)。随着扩散模型的兴起,其在建模复杂分布和生成高质量样本方面的优势使其成为视频生成领域一个有前景的方向。
将扩散模型应用于视频生成的核心挑战在于如何有效地处理时序依赖性,并确保生成的视频在时间维度上是连贯且平滑的。
① 扩展扩散过程到视频
视频可以看作是一系列相互关联的图像帧。一种直接的方法是将扩散模型从建模 \( p(x_0) \) (单个图像的分布)扩展到建模 \( p(x_{0:T}) \) (视频序列的分布),其中 \( x_{0:T} = (x_0, x_1, \dots, x_T) \) 表示一个包含 \( T+1 \) 帧的视频序列。
正向扩散过程(Forward Diffusion Process)可以定义为逐步向整个视频序列添加噪声:
\[ q(x_{1:T} | x_0) = \prod_{t=1}^T q(x_t | x_{t-1}) \]
其中,\( q(x_t | x_{t-1}) \) 是一个条件概率,通常假设每一帧独立地添加高斯噪声,或者考虑帧之间的噪声相关性。
逆向过程(Reverse Process)则需要学习一个模型来逐步去噪并生成视频序列:
\[ p_\theta(x_{0:T-1} | x_T) = \prod_{t=1}^1 p_\theta(x_{t-1} | x_t) \]
这个逆向过程模型 \( p_\theta(x_{t-1} | x_t) \) 需要同时考虑空间和时间维度上的信息。
② 时空U-Net架构
对于图像,常用的骨干网络是U-Net,它通过编码器-解码器结构和跳跃连接来处理空间信息。为了处理视频数据,需要将U-Net扩展到时空领域。
▮▮▮▮ⓐ 3D卷积:最直接的方法是使用3D卷积核代替2D卷积核。3D卷积核同时在高度、宽度和时间维度上进行操作。这会显著增加模型的参数量和计算量,对硬件要求很高。
▮▮▮▮ⓑ 分解卷积:为了降低计算成本,可以采用时空分解卷积(Spatio-Temporal Separable Convolutions),即将3D卷积分解为单独的空间卷积和时间卷积。例如,先应用一个处理空间维度的2D卷积,再应用一个只处理时间维度的1D卷积。
▮▮▮▮ⓒ 时空注意力机制:在U-Net的跳跃连接和 Bottleneck 层中引入时空注意力机制(Spatio-Temporal Attention)。这使得模型能够在不同时间步和不同空间位置之间建立联系,捕捉更复杂的时序动态。可以分别应用空间注意力(在帧内)和时间注意力(在不同帧之间),或者联合应用时空注意力。
▮▮▮▮ⓓ 条件注入:类似图像条件生成,可以将文本、音频或其他引导信息注入到时空U-Net中,实现条件视频生成。
③ 视频扩散模型的训练
训练视频扩散模型通常面临以下挑战:
▮▮▮▮⚝ 数据量与计算资源:视频数据集通常比图像数据集更大,训练视频模型需要更多的计算资源和时间。
▮▮▮▮⚝ 时序一致性:确保生成的视频在时间上平滑、连贯,运动轨迹合理,是核心难题。简单的逐帧生成往往会导致闪烁或不连续。
▮▮▮▮⚝ 分辨率与时长:生成高分辨率、长时间的视频更加困难,因为这会急剧增加数据的维度和复杂性。
④ 现有方法与进展
当前视频生成扩散模型大致可以分为几类:
▮▮▮▮ⓐ 直接在像素空间扩散:将视频视为一个高维张量,直接在像素空间进行扩散。例如,Google 的 Imagen Video 和 Phenaki 模型,它们在大规模数据集上训练,能够生成高分辨率的视频,并支持文本到视频生成(Text-to-Video Generation)。
▮▮▮▮ⓑ 潜在空间扩散:类似潜在扩散模型(LDM)的思想,先使用一个视频编解码器(Video Autoencoder)将视频压缩到低维的潜在空间,然后在潜在空间中进行扩散和去噪。生成过程也是先在潜在空间采样,再通过解码器得到像素空间的视频。这种方法显著降低了计算复杂度,例如 Meta 的 Make-A-Video 模型。
▮▮▮▮ⓒ 级联扩散模型(Cascaded Diffusion Models):训练多个扩散模型,分别负责生成不同分辨率或不同方面的视频信息。例如,先生成低分辨率视频,再用另一个模型对其进行超分辨率。或者先生成关键帧,再插帧生成整个视频。
▮▮▮▮ⓓ 运动建模与内容建模分离:一些方法尝试将视频生成分解为运动生成(Motion Generation)和内容生成(Content Generation)。例如,先用一个模型生成运动场或运动特征,再用另一个模型根据运动信息生成视频帧。
⑤ 采样策略
视频扩散模型的采样同样可以采用各种ODE/SDE求解器。为了提高时序连贯性,可以在采样过程中引入额外的约束或正则化项,鼓励相邻帧之间的相似性或平滑运动。例如,一些方法会在训练或采样时引入帧间一致性损失(Inter-frame Consistency Loss)。
总的来说,视频生成是扩散模型研究的一个重要前沿方向,其挑战在于如何高效地建模时序信息并生成高质量、连贯的视频。
9.2 3D形状生成 (3D Shape Generation)
除了二维图像和序列视频,扩散模型也被成功应用于生成三维(3D)数据,如点云(Point Clouds)、体素(Voxels)、网格(Meshes)等。三维数据结构复杂,生成模型需要捕捉其几何、拓扑和空间关系。
① 三维数据的表示形式
在应用扩散模型生成三维数据之前,首先需要选择合适的三维数据表示形式:
▮▮▮▮⚝ 点云:由一组离散的三维点组成,表示物体表面。点云是无序的,这给建模带来了挑战。
▮▮▮▮⚝ 体素:将三维空间划分为小的立方体单元(体素),用0/1或概率值表示体素是否被占据。体素表示简单直观,但分辨率较低时会损失细节,分辨率较高时数据量呈立方增长。
▮▮▮▮⚝ 网格:由顶点、边和面组成的结构,通常用于表示物体表面。网格数据结构复杂,拓扑关系非欧几里得,直接在网格上应用扩散模型比较困难。
▮▮▮▮⚝ 隐式表示(Implicit Representations):例如符号距离函数(Signed Distance Function, SDF)、占用网络(Occupancy Networks)或神经辐射场(Neural Radiance Fields, NeRF)。这些方法通过一个神经网络将三维空间中的点映射到某个值(如距离、密度、颜色),从而隐式地表示三维形状或场景。
② 扩散模型用于不同三维表示
▮▮▮▮ⓑ 点云扩散模型:由于点云是无序集合,直接应用卷积网络比较困难。通常使用基于点的网络架构(如PointNet, PointNet++)或Transformer来处理点云数据。扩散模型可以学习逐步去噪一个初始的随机点集,使其演变成一个具有目标分布的点云形状。挑战在于如何设计合适的网络来捕捉点之间的关系和整体形状结构。
▮▮▮▮ⓒ 体素扩散模型:体素数据可以视为三维栅格。可以使用3D卷积U-Net来建模体素数据的扩散过程。正向过程是向体素网格添加噪声(如二值体素可以添加伯努利噪声或高斯噪声),逆向过程是学习去噪。这类似于图像扩散模型的三维扩展。
▮▮▮▮ⓓ 隐式表示扩散模型:通过扩散模型生成隐式表示的参数或特征。例如,训练一个扩散模型来生成NeRF的权重,或者生成隐式函数网络的输入特征向量。这允许生成更精细、连续的三维表示。这种方法的优势在于可以生成任意分辨率的三维细节,但训练和采样可能比较复杂。
▮▮▮▮ⓔ 多视图或投影扩散模型:不直接在三维空间进行扩散,而是利用扩散模型生成物体的多视图图像,然后通过三维重建技术(如神经渲染)从这些视图中恢复三维形状。例如,使用条件图像扩散模型生成同一物体从不同角度拍摄的图像,再利用这些图像生成三维模型。这种方法可以 leveraging 成熟的2D图像扩散模型的强大能力。
③ 挑战与技术
▮▮▮▮⚝ 数据高维性:无论是点云、体素还是其他表示,三维数据通常比图像更加高维和稀疏。
▮▮▮▮⚝ 结构复杂性:三维形状具有复杂的几何和拓扑结构,扩散模型需要有效地学习和重构这些结构。
▮▮▮▮⚝ 计算效率:直接在三维空间进行扩散计算量巨大,尤其对于高分辨率数据。
▮▮▮▮⚝ 条件生成:实现基于文本、图像或其他条件的三维形状生成是重要的方向,例如文本到3D、图像到3D。这需要在三维扩散模型中有效地融合多模态条件信息。
④ 应用领域
三维形状生成在许多领域具有重要应用:
▮▮▮▮⚝ 计算机图形学:生成游戏资产、电影特效、虚拟现实/增强现实内容等。
▮▮▮▮⚝ 计算机辅助设计 (CAD):生成设计原型、零部件模型等。
▮▮▮▮⚝ 机器人学:生成环境地图、物体模型用于感知和交互。
▮▮▮▮⚝ 科学研究:生成分子结构、材料结构等。
通过将扩散模型的原理与适合三维数据特点的网络结构和表示方法相结合,研究人员正在不断推动三维生成模型的边界。
9.3 视觉-语言模型 (Vision-Language Models)
视觉-语言模型(Vision-Language Models, VLM)旨在理解和处理图像与文本之间的复杂关系。扩散模型,尤其是条件扩散模型,在构建强大的视觉-语言生成模型方面发挥了关键作用,最典型的应用就是文本到图像生成(Text-to-Image Generation)。本节将深入探讨扩散模型在VLM框架下的应用,超越简单的文本到图像生成,涵盖更广泛的视觉-语言任务。
① 扩散模型作为视觉-语言桥梁
扩散模型的条件生成能力使其天然适合作为连接视觉和语言模态的桥梁。通过将文本(或其他语言信息)作为条件输入给图像扩散模型,模型可以生成符合文本描述的图像。这已经在文本到图像领域取得了巨大成功(如 Stable Diffusion, DALL-E 2 等)。
② 文本到图像生成以外的VLM应用
除了文本到图像生成,扩散模型在VLM框架下还可以应用于多种任务:
▮▮▮▮ⓐ 图像字幕生成 (Image Captioning):虽然传统的图像字幕生成是判别式任务(输入图像,输出文本序列),但也可以构建一个逆向过程:给定文本生成图像,再通过一个判别器或评分函数来评估生成图像与原始图像的相似度,或者训练一个条件扩散模型,以文本为条件,生成与输入图像语义相似的新图像,这有助于理解图像与文本的对应关系。
▮▮▮▮ⓑ 视觉问答 (Visual Question Answering, VQA):VQA需要模型理解图像内容并根据问题给出文本回答。扩散模型可以辅助VQA,例如,生成与问题相关的图像区域或概念的视觉表示,或者生成一个示例图像来帮助模型理解问题。更进一步,可以尝试使用扩散模型生成一个“解释性”图像或热力图,展示模型在图像中关注的区域。
▮▮▮▮ⓒ 跨模态检索 (Cross-Modal Retrieval):包括文本到图像检索和图像到文本检索。训练一个联合嵌入空间(Joint Embedding Space),使得相关的图像和文本在该空间中距离较近。扩散模型可以通过生成与查询模态对应的另一模态数据来辅助或增强检索过程。例如,给定一个文本描述,使用扩散模型生成一些候选图像,再在图像空间进行检索;或者给定一个图像,生成一些候选文本描述。
▮▮▮▮ⓓ 视觉推理 (Visual Reasoning):涉及理解图像中对象之间的关系、事件序列等。扩散模型可以通过生成中间状态或反事实(Counterfactual)图像来帮助模型进行视觉推理。例如,给定一个场景图像,生成一个稍微改变了某些元素的图像,帮助模型理解这些改变对场景含义的影响。
▮▮▮▮ⓔ 图文编辑 (Image-Text Editing):基于文本指令对图像进行修改。扩散模型在这方面表现出色(如 Chapter 8 提到的图像编辑)。通过将文本指令作为条件,扩散模型可以学习在保留图像主体内容的同时,根据文本要求进行局部的修改、风格迁移或概念替换。
③ VLM中的条件注入机制
在VLM框架下,将文本(或语言特征)有效地注入到扩散模型中是关键。常用的技术包括:
▮▮▮▮ⓐ 交叉注意力 (Cross-Attention):这是目前最主流的方式。将文本编码器(如 CLIP 的文本编码器、BERT 等)输出的文本特征序列作为 Key (K) 和 Value (V),将图像编码器(如 U-Net 的中间特征)作为 Query (Q)。通过计算 Query 与 Key 的注意力权重,将文本信息加权聚合到图像特征中。这使得模型能够在生成过程中“关注”到文本描述中的重要词汇和概念。
▮▮▮▮ⓑ 适配器 (Adapters):在预训练好的图像扩散模型中插入小的、可训练的模块(如适配器层),用于接收和处理文本条件。这样可以固定大部分预训练模型的权重,只训练适配器和少部分其他参数,降低训练成本。
▮▮▮▮ⓒ 特征级联/融合:将文本特征向量直接与图像特征向量在通道维度上进行拼接或通过简单的全连接层融合,然后输入到扩散模型的骨干网络中。这种方法相对简单,但可能不如注意力机制灵活和强大。
④ 挑战与未来
▮▮▮▮⚝ 对齐与细粒度控制:如何实现图像生成内容与复杂文本描述(特别是涉及多个对象、属性和关系的描述)的精确对齐仍然是一个挑战。
▮▮▮▮⚝ 推理与常识:当前的VLM在处理需要复杂推理或依赖大量世界常识的任务时仍有局限性。扩散模型生成结果的合理性依赖于训练数据的分布,可能无法泛化到训练中未见的组合或场景。
▮▮▮▮⚝ 评估方法:除了生成质量和文本相关性,如何全面评估VLM在理解、推理和生成方面的能力,特别是其跨模态交互的能力,需要更完善的评估指标。
▮▮▮▮⚝ 计算效率:大型VLM,特别是基于扩散模型的生成部分,计算量仍然很大。
将扩散模型的强大生成能力与先进的视觉-语言理解技术相结合,是构建更通用、更智能的人工智能系统的关键方向之一。
9.4 其他视觉任务 (Other Visual Tasks)
扩散模型的建模能力不仅限于图像、视频和三维生成,其核心思想——通过逐步去噪过程建模复杂分布——可以迁移到许多其他视觉感知和生成任务中。本节简要介绍扩散模型在一些非典型生成或感知任务中的探索和应用。
① 图像恢复与增强 (Image Restoration and Enhancement)
许多图像恢复任务(如去噪、去模糊、超分辨率、修复)可以被视为从低质量/损坏图像恢复高质量原始图像的过程。这与扩散模型的逆向去噪过程天然契合。可以将低质量图像作为条件输入,训练一个条件扩散模型来生成对应的干净/高分辨率/完整图像。扩散模型能够生成具有丰富细节和真实感的恢复结果,克服了传统方法可能导致的过度平滑问题。
② 图像分割 (Image Segmentation)
图像分割是将图像划分为不同区域或对象的任务。尽管主流的分割方法是判别式的,但扩散模型也被探索用于生成分割掩码(Segmentation Mask)或辅助分割。例如,可以训练一个扩散模型生成与图像内容对应的语义分割图,或者用于生成训练数据不足的类别的分割样本。
③ 目标检测 (Object Detection)
目标检测是在图像中定位并识别对象。直接用扩散模型生成边界框(Bounding Box)或对象类别比较困难。然而,扩散模型可以用于:
▮▮▮▮⚝ 数据增强:生成更多包含特定对象或场景的图像,用于训练检测模型。
▮▮▮▮⚝ 生成候选区域:扩散模型可以生成与对象形状相关的特征图或注意力图,辅助生成潜在的目标区域。
▮▮▮▮⚝ 小样本/零样本检测:利用扩散模型的生成能力合成小样本类别的新图像,或根据文本描述生成对象的视觉特征,辅助检测未见过的类别。
④ 姿态估计 (Pose Estimation)
姿态估计是检测人体或物体关键点位置的任务。扩散模型可以用来生成关键点热力图(Heatmap)或关键点坐标。例如,训练一个条件扩散模型,输入图像,输出关键点热力图,模型学习从噪声热力图逐步恢复出精确的关键点位置表示。
⑤ 少样本学习 (Few-Shot Learning) 与零样本学习 (Zero-Shot Learning)
在少样本/零样本场景下,模型需要识别或生成仅见过少量样本甚至从未见过的类别的实例。扩散模型可以通过生成合成数据来增强训练集,或者学习生成新类别的特征表示,从而改善少样本/零样本任务的性能。例如,给定新类别的少量图像,训练一个扩散模型生成更多该类别的图像;或者给定新类别的文本描述,使用文本到图像扩散模型生成示例图像。
⑥ 逆向问题求解 (Inverse Problems)
许多计算机视觉问题本质上是逆向问题,即从观测到的结果(如低分辨率、模糊或不完整图像)推断出原始的潜在数据。扩散模型的逆向过程天然适合解决这类问题。通过将观测结果作为条件,并设计合适的采样过程,扩散模型可以有效地从噪声中恢复出满足观测条件的原始数据。
⑦ 领域适应 (Domain Adaptation) 与领域泛化 (Domain Generalization)
扩散模型可以通过学习不同领域数据之间的映射关系,或者生成中间领域的样本,来辅助领域适应和泛化任务。例如,训练一个条件扩散模型,以源领域图像为条件生成目标领域风格的图像。
这些应用仍在积极探索中,许多方法处于初步阶段。但它们共同表明,扩散模型作为一种强大的概率生成模型,其影响力正超越单纯的图像生成,触及到计算机视觉的各个层面,为解决传统方法难以处理的问题提供了新的思路和工具。
10. 评估与度量
本章致力于探讨如何科学且全面地评估扩散模型在图像和视觉任务中的表现。随着扩散模型生成能力的飞速提升,仅仅通过肉眼观察样本已不足以区分模型的优劣。我们需要一套系统的评估框架和量化指标来衡量生成图像的质量(quality)、多样性(diversity),以及对于条件生成的符合度(fidelity to condition)。理解这些评估方法,不仅能帮助我们比较不同的模型和技术,也能为模型改进提供清晰的方向。本章将介绍当前领域内常用的评估指标,并讨论它们的优点、局限性以及适用的场景。
10.1 常用生成评估指标
评估生成模型的核心挑战在于如何量化“真实性”和“多样性”。早期的像素级指标(如均方误差 (MSE)、峰值信噪比 (PSNR))并不能很好地捕捉图像的感知质量。基于特征空间的评估指标因其与人类感知相关性更强而成为主流。这些指标通常利用在大型数据集(如 ImageNet)上预训练的深度学习模型(最常用的是 Inception-v3)提取图像特征,然后在特征空间中比较真实数据分布与生成数据分布。
10.1.1 IS (Inception Score)
① 概念 (Concept)
IS (Inception Score) 是最早被广泛用于评估生成模型(特别是 GANs)性能的指标之一。它基于一个关键假设:高质量的图像应该包含清晰可辨的物体(即易于被分类),并且生成的图像集合应该具有足够的多样性,能够覆盖多个类别。IS 旨在同时衡量生成样本的清晰度(可信度)和多样性。
② 计算方法 (Calculation Method)
IS 的计算依赖于一个在 ImageNet 上预训练好的图像分类器(通常是 Inception-v3 模型)。
它衡量两个方面的分数:
▮▮▮▮ⓐ 清晰度/可信度:对于每一个生成的图像 \( x \),使用分类器得到其在所有 \( K \) 个类别上的预测概率分布 \( p(y|x) \)。如果图像清晰且包含明确的物体,分类器对其类别的预测概率 \( p(y|x) \) 将会集中在一个或几个类别上,即条件分布 \( p(y|x) \) 的熵 \( H(y|x) = -\sum_y p(y|x) \log p(y|x) \) 较低。低熵意味着高可信度。
▮▮▮▮ⓑ 多样性:计算所有生成的图像在类别上的平均预测概率分布,即边缘分布 \( p(y) = \mathbb{E}_x [p(y|x)] \)。如果模型生成了多样化的图像,涵盖了多个类别,那么这个平均分布 \( p(y) \) 应该接近均匀分布,即其熵 \( H(y) = -\sum_y p(y) \log p(y) \) 较高。
IS 的计算公式是将这两个方面结合起来,使用 KL 散度 (KL Divergence) 来衡量条件分布 \( p(y|x) \) 相对于边缘分布 \( p(y) \) 的“差异”(或者说“信息增益”):
\[ IS = \exp(\mathbb{E}_x [D_{KL}(p(y|x) || p(y))]) \]
其中,\( \mathbb{E}_x \) 表示对所有生成的图像 \( x \) 取期望。
直观上,如果生成的图像集合质量高且多样,那么对于单个图像 \( x \),其类别分布 \( p(y|x) \) 会非常尖锐(低熵);而对于整个集合,平均分布 \( p(y) \) 会比较平缓(高熵)。\( D_{KL}(p(y|x) || p(y)) = \sum_y p(y|x) \log \frac{p(y|x)}{p(y)} \) 会较大。IS 取指数形式,因此 IS 值越高越好。
③ 优点 (Pros)
▮▮▮▮⚝ 概念相对直观,易于理解。
▮▮▮▮⚝ 计算相对简单,只需要一个预训练分类器。
④ 局限性 (Cons)
▮▮▮▮⚝ IS 仅依赖于分类器在 ImageNet 上的表现。如果生成的数据集与 ImageNet 分布差异较大,IS 可能失效。
▮▮▮▮⚝ 它不直接比较生成图像与真实图像之间的分布差异,而是依赖于一个中间的分类任务。
▮▮▮▮⚝ 容易受到“模式坍塌” (Mode Collapse) 的欺骗。一个生成模型可能只生成少数几个类别的非常清晰的图像,这仍然可能获得较高的 IS,但其多样性实际上很差。
▮▮▮▮⚝ 计算过程中对样本量的依赖性,需要足够多的样本才能稳定。
10.1.2 FID (Fréchet Inception Distance)
① 概念 (Concept)
FID (Fréchet Inception Distance) 是目前图像生成领域最广泛使用的评估指标之一。与 IS 相比,FID 更直接地衡量了生成数据分布与真实数据分布之间的距离。它利用预训练的 Inception-v3 模型提取图像的特征,并将这些特征视为多维空间中的点。FID 计算的是真实图像特征集合和生成图像特征集合在特征空间中的 Fréchet 距离,也称为 Wasserstein-2 距离,假设这两个特征集合都服从多元高斯分布 (Multivariate Gaussian Distribution)。
② 计算方法 (Calculation Method)
FID 的计算步骤如下:
▮▮▮▮ⓐ 使用一个在 ImageNet 上预训练的 Inception-v3 模型(通常是最后一个池化层之前的激活)提取大量真实图像集合 \( X_r \) 和生成图像集合 \( X_g \) 的特征。
▮▮▮▮ⓑ 假设真实特征 \( f_r \) 和生成特征 \( f_g \) 分别服从多元高斯分布 \( \mathcal{N}(\mu_r, \Sigma_r) \) 和 \( \mathcal{N}(\mu_g, \Sigma_g) \),其中 \( \mu_r, \mu_g \) 分别是两个特征集合的均值向量,\( \Sigma_r, \Sigma_g \) 分别是两个特征集合的协方差矩阵。
▮▮▮▮ⓒ 计算这两个高斯分布之间的 Fréchet 距离:
\[ FID = ||\mu_r - \mu_g||_2^2 + \text{Tr}(\Sigma_r + \Sigma_g - 2(\Sigma_r \Sigma_g)^{1/2}) \]
其中,\( ||\cdot||_2^2 \) 是平方欧几里得范数 (Squared Euclidean Norm),\( \text{Tr}(\cdot) \) 是矩阵的迹 (Trace)。
FID 值越低越好,因为这表示生成分布与真实分布越接近。
③ 优点 (Pros)
▮▮▮▮⚝ 能够有效衡量生成样本的质量和多样性,因为它比较的是整个分布的统计量(均值和协方差)。
▮▮▮▮⚝ 相较于 IS,FID 与人类对图像质量的感知更一致。
▮▮▮▮⚝ 对模式坍塌 (Mode Collapse) 更敏感,模式坍塌会导致生成分布的协方差矩阵无法覆盖真实分布的范围,从而导致 FID 升高。
▮▮▮▮⚝ 广泛应用于各种生成模型的评估,是目前的事实标准。
④ 局限性 (Cons)
▮▮▮▮⚝ 假设特征服从多元高斯分布,这可能并不完全准确。
▮▮▮▮⚝ 需要较大的样本量(通常是几千到几万张图片)才能准确估计协方差矩阵,小样本量下不稳定。
▮▮▮▮⚝ 仍然依赖于 Inception-v3 模型的特征,其有效性受限于 Inception-v3 在 ImageNet 上的训练。
▮▮▮▮⚝ 对于特别高分辨率的图像,直接使用 Inception-v3 特征可能不总是最优。
10.1.3 KID (Kernel Inception Distance)
① 概念 (Concept)
KID (Kernel Inception Distance) 是另一种用于评估生成模型的方法,它也是在 Inception 特征空间中进行的,但与 FID 不同的是,KID 使用最大均值差异 (Maximum Mean Discrepancy, MMD) 及其核方法 (Kernel Method) 来衡量两个分布之间的距离,避免了对高斯分布的假设以及协方差矩阵的估计。
② 计算方法 (Calculation Method)
KID 的计算步骤如下:
▮▮▮▮ⓐ 同样使用 Inception-v3 模型提取真实图像和生成图像的特征。
▮▮▮▮ⓑ 将特征视为两个集合 \( \mathcal{F}_r \) 和 \( \mathcal{F}_g \)。
▮▮▮▮ⓒ 计算这两个特征集合之间的 MMD。MMD 衡量的是两个分布下函数期望的差异的最大值,通常通过核函数来计算。KID 使用多项式核 (Polynomial Kernel)。
\[ KID = \text{MMD}^2(\mathcal{F}_r, \mathcal{F}_g) \]
实际计算时,KID 通常通过分块 (Blocking) 和平均的方式来减少方差。
KID 值越低越好,通常报告其平方根。
③ 优点 (Pros)
▮▮▮▮⚝ 不需要假设特征服从高斯分布。
▮▮▮▮⚝ 使用 MMD 统计量,提供了两个分布距离的一个无偏估计 (Unbiased Estimator),且方差比 FID 低。
▮▮▮▮⚝ 对样本量不那么敏感,即使在样本量相对较少的情况下也比 FID 更稳定可靠。
▮▮▮▮⚝ 与 FID 一样,也能有效衡量质量和多样性。
④ 局限性 (Cons)
▮▮▮▮⚝ 计算复杂度相对较高。
▮▮▮▮⚝ 仍然依赖于 Inception-v3 特征。
▮▮▮▮⚝ MMD 度量本身的选择(核函数)会影响结果。
总之,FID 和 KID 是目前最常用的基于特征空间的生成质量和多样性综合评估指标。在大多数情况下,它们比 IS 更能反映模型的真实性能。实践中,通常会同时计算 FID 和 KID 来互相验证。
10.2 感知度量
除了评估生成样本的整体分布与真实数据分布的匹配程度外,有时我们也需要衡量两张特定图像在人类感知上的相似度。例如,在图像修复 (Inpainting)、超分辨率 (Super-Resolution) 或图像风格迁移 (Style Transfer) 等任务中,我们可能需要比较生成结果与原始图像或目标图像之间的像素差异,但更重要的是它们在视觉上的相似性。传统的像素级指标(如 PSNR、SSIM)无法很好地捕捉人眼的感知差异。感知度量 (Perceptual Metrics) 应运而生。
10.2.1 LPIPS (Learned Perceptual Image Patch Similarity)
① 概念 (Concept)
LPIPS (Learned Perceptual Image Patch Similarity) 是一种衡量两张图像感知相似度的指标。它的核心思想是:如果两张图片在人类视觉系统认为重要的特征空间中很接近,那么它们在感知上就是相似的。LPIPS 不是直接比较像素值,而是提取图像经过预训练深度网络的激活特征,并计算这些特征之间的距离。这个距离是“学习”出来的,通过一个小的线性层对不同层级的特征距离进行加权求和,以更好地匹配人类的感知判断。
② 计算方法 (Calculation Method)
LPIPS 的计算步骤如下:
▮▮▮▮ⓐ 选择一个在大型数据集(如 ImageNet 或 Places)上预训练好的深度卷积网络作为特征提取器(常用的有 AlexNet, VGG, SqueezeNet)。
▮▮▮▮ⓑ 输入两张待比较的图像 \( x \) 和 \( x_0 \) 到该网络中。
▮▮▮▮ⓒ 从网络中的多个层提取特征激活图。记第 \( l \) 层的特征图为 \( \phi_l(x) \) 和 \( \phi_l(x_0) \)。
▮▮▮▮ⓓ 对每一层的特征图进行归一化(例如,L2 归一化)。
▮▮▮▮ⓔ 计算每一层归一化特征图之间的差异(例如,L2 距离的平方)。
▮▮▮▮⚝ For image \( x \): \( v_l = \phi_l(x) / ||\phi_l(x)||_2 \)
▮▮▮▮⚝ For image \( x_0 \): \( v_{l0} = \phi_l(x_0) / ||\phi_l(x_0)||_2 \)
▮▮▮▮⚝ Layer-wise distance: \( d_l = ||v_l - v_{l0}||_2^2 \)
▮▮▮▮⚝ 通过一个学习到的线性权重 \( w_l \) 对每一层的距离进行加权求和,得到最终的 LPIPS 分数:
\[ LPIPS(x, x_0) = \sum_l w_l \cdot d_l \]
这些权重 \( w_l \) 是通过训练一个小的线性模型来预测人类对成对图像相似度的判断而学习到的。
LPIPS 值越低,表示感知相似度越高,图像差异越小。
③ 优点 (Pros)
▮▮▮▮⚝ 与人类感知判断高度相关,比传统的像素级指标(如 MSE, PSNR, SSIM)更能反映视觉质量。
▮▮▮▮⚝ 适用于评估图像重建、编辑、超分辨率等任务中生成结果与参考图像之间的相似度。
④ 局限性 (Cons)
▮▮▮▮⚝ LPIPS 主要衡量两张具体图像之间的相似度,而不是整个数据集分布的匹配程度。因此,它不能替代 FID、KID 等用于评估生成模型整体性能的指标。
▮▮▮▮⚝ 依赖于选择的预训练网络和学习到的权重。
▮▮▮▮⚝ 对于评估多样性没有直接作用。
10.3 多样性度量
生成模型的一个重要目标是不仅要生成逼真的样本,还要能生成多样化的样本,从而覆盖真实数据分布中的所有模式 (Modes)。如果模型只能生成非常相似的图像,或者只能生成数据分布中少数几个模式下的样本,就发生了模式坍塌 (Mode Collapse)。评估生成样本的多样性是评估生成模型性能不可或缺的一环。
① 多样性为何重要 (Why Diversity Matters)
▮▮▮▮⚝ 避免模式坍塌:这是生成模型(尤其是 GANs)长期面临的挑战。扩散模型通常在多样性方面表现较好,但也需要定量评估。
▮▮▮▮⚝ 捕捉数据分布:一个好的生成模型应该能学习并复现真实数据的完整分布,包括不同类别、不同姿态、不同风格等。
▮▮▮▮⚝ 应用需求:在许多应用中,如内容创作、数据增强等,需要生成具有丰富多样性的样本。
② FID 和 KID 的多样性关联 (Diversity Link with FID and KID)
如前所述,FID 和 KID 通过比较生成样本和真实样本的 分布 来工作。如果生成模型发生模式坍塌,它生成的样本将只占据真实数据分布空间的一小部分。这会导致生成特征的协方差矩阵 \( \Sigma_g \) “变小”或“扁平”,无法覆盖真实数据的协方差 \( \Sigma_r \)。反映在 FID 公式中,迹项 \( \text{Tr}(\Sigma_r + \Sigma_g - 2(\Sigma_r \Sigma_g)^{1/2}) \) 会变大,从而导致 FID 升高。因此,FID 和 KID 在一定程度上隐式地捕获了多样性:低 FID/KID 通常意味着较高的质量 和 较高的多样性(相对于训练数据而言)。
③ 显式多样性度量 (Explicit Diversity Metrics)
除了依赖 FID/KID 隐式衡量多样性外,也可以使用更显式的多样性指标:
▮▮▮▮ⓐ 基于特征空间的距离 (Feature Space Distance):
▮▮▮▮▮▮▮▮❷ 计算生成样本集合中任意两张图像在特征空间(如 Inception 特征或 LPIPS 特征)中的距离。
▮▮▮▮▮▮▮▮❸ 计算所有样本对之间距离的平均值或中位数。平均距离越大,表明样本之间差异越大,多样性越高。
▮▮▮▮ⓓ 精度与召回率 (Precision and Recall):
▮▮▮▮▮▮▮▮❺ 这是一个源自信息检索领域的概念,后被应用于生成模型评估。
▮▮▮▮▮▮▮▮❻ 精度 (Precision) 衡量生成的样本中有多少是“真实的”(即落在真实数据分布的支持集 (Support) 内)。高精度意味着生成样本质量高,没有产生“假”的样本。
▮▮▮▮▮▮▮▮❼ 召回率 (Recall) 衡量真实数据分布的模式有多少被生成的样本所覆盖。高召回率意味着模型能够生成多样化的样本,覆盖了真实数据的大部分变异性。
▮▮▮▮▮▮▮▮❽ 计算精度和召回率通常需要构建真实数据和生成数据的近邻图 (Nearest Neighbor Graphs) 或使用核密度估计 (Kernel Density Estimation) 等方法。模式坍塌的模型通常具有高精度(生成的少数模式样本很真实)但低召回率。
▮▮▮▮ⓘ 分类多样性 (Categorical Diversity):
▮▮▮▮▮▮▮▮❿ 如果数据集有类别标签,可以统计模型生成的样本在不同类别上的分布。理想的模型应该能生成来自所有或绝大多数类别的样本。
▮▮▮▮▮▮▮▮❷ 计算生成样本的类别分布的熵或者覆盖的类别数量。
扩散模型在多样性方面通常表现优异,但也并非万无一失。特别是在训练数据极度不平衡或模型容量不足时,仍然可能出现对某些模式覆盖不足的问题。因此,在评估时需要综合考虑 FID/KID 等指标和(如果需要)更显式的多样性指标。
10.4 人工评估 (Human Evaluation)
尽管量化指标越来越成熟,但人类的视觉感知能力仍然是评估图像生成模型性能的“黄金标准”。最终,生成图像的目的是为了供人观看和使用,因此人类评估 (Human Evaluation) 在判断图像的真实性、美观度、创造性以及对复杂指令的遵循程度等方面具有不可替代的作用。
① 重要性 (Importance)
▮▮▮▮⚝ 捕捉主观质量:很多图像的感知质量、艺术性、吸引力是难以用简单数学公式量化的。
▮▮▮▮⚝ 发现指标盲点:量化指标可能存在局限性或被模型“欺骗”,人类评估可以发现这些问题。
▮▮▮▮⚝ 评估复杂性:对于开放式或创造性的生成任务,人类可以判断生成结果是否符合预期或是否具有创意。
▮▮▮▮⚝ 验证指标:人类评估的结果也常被用来验证新的量化评估指标是否有效。
② 评估方法 (Evaluation Methods)
常见的人工评估方法包括:
▮▮▮▮ⓐ A/B 测试 (A/B Testing):向评估者同时展示两组图片(例如,来自模型 A 和模型 B),询问他们更喜欢哪一组,或者哪一组看起来更真实。
▮▮▮▮ⓑ Likert 量表评分 (Likert Scale Rating):要求评估者对单张图片或一组图片在某个维度(如真实性、质量、与文本匹配度)上使用一个预设的等级量表进行评分(例如,1-5 分)。
▮▮▮▮ⓒ 排名 (Ranking):要求评估者对一组图片(来自不同模型或真实图片)按照某个标准(如真实性)进行排序。
▮▮▮▮ⓓ 图灵测试 (Turing Test):将真实图片和生成图片混在一起,让评估者判断哪些是真实的,哪些是生成的。如果评估者区分不出,说明生成模型的性能很高。
③ 实施要点 (Key Points for Implementation)
▮▮▮▮⚝ 招募足够数量的多样化评估者。
▮▮▮▮⚝ 设计清晰、客观的评估标准和说明。
▮▮▮▮⚝ 随机打乱图片顺序和来源,避免偏见。
▮▮▮▮⚝ 控制评估环境,减少干扰。
▮▮▮▮⚝ 收集足够多的评估数据,进行统计分析。
④ 优点 (Pros)
▮▮▮▮⚝ 最能反映人类的感知和偏好。
▮▮▮▮⚝ 可以评估量化指标难以捕捉的方面(如创意、美观度)。
⑤ 局限性 (Cons)
▮▮▮▮⚝ 成本高昂(时间和金钱)。
▮▮▮▮⚝ 耗时且难以大规模自动化。
▮▮▮▮⚝ 结果可能带有主观性,不同评估者之间可能存在差异。
▮▮▮▮⚝ 评估结果可能受到评估者背景、情绪、疲劳等因素的影响。
鉴于其局限性,人工评估通常作为量化评估的补充或验证手段,尤其是在模型性能接近或需要评估更主观的方面时。
10.5 条件生成评估
对于条件生成模型(Conditional Generative Models),例如文本到图像 (Text-to-Image)、语义分割图到图像 (Semantic Segmentation Map to Image) 等,除了评估生成图像本身的质量和多样性外,还需要评估生成图像与给定条件之间的符合度(Condition Fidelity)。即,模型生成的图像是否准确地反映了输入的条件信息?
① 为什么需要额外的评估 (Why Extra Evaluation is Needed)
一个条件生成模型可能生成非常逼真的图像,但如果这些图像与给定的条件不符,那么模型仍然是失败的。例如,一个文本到图像模型可能生成高质量的猫图片,但如果用户要求的是“一只蓝色的狗”,而它仍然生成猫,那么即使图片质量高,它也不是一个好的条件生成模型。
② 基于文本条件的评估 (Evaluation for Text-based Conditions)
文本到图像生成是当前扩散模型最热门的应用之一,其评估尤其需要关注文本与图像的匹配度。
▮▮▮▮ⓐ CLIP Score:
▮▮▮▮▮▮▮▮❷ 概念:CLIP (Contrastive Language-Image Pre-training) 模型在一个包含大量图像-文本对的数据集上进行训练,学会了将图像和文本编码到同一个共享的嵌入空间中。在这个空间中,匹配的图像和文本对距离较近。
▮▮▮▮▮▮▮▮❸ 计算方法:将生成的图像和对应的文本条件分别输入到 CLIP 的图像编码器和文本编码器中,得到它们的特征向量。计算这两个特征向量之间的余弦相似度 (Cosine Similarity)。CLIP Score 越高,表明生成的图像与文本条件越匹配。
▮▮▮▮▮▮▮▮❹ 优点:专门为图像-文本匹配设计,能够量化文本与图像的对齐程度,计算相对高效。
▮▮▮▮▮▮▮▮❺ 局限性:依赖于 CLIP 模型本身的理解能力,可能无法捕捉文本中所有的细微之处;高 CLIP Score 不一定保证图像本身的质量,有时模型可能生成低质量但与文本“沾边”的图像。
▮▮▮▮ⓕ 人工评估 (Human Evaluation):
▮▮▮▮▮▮▮▮❼ 对于文本到图像任务,人工评估至关重要。评估者需要判断:
▮▮▮▮▮▮▮▮▮▮⚝ 图像的质量和真实性。
▮▮▮▮▮▮▮▮▮▮⚝ 图像是否准确地表达了文本描述的内容(所有关键元素是否出现,关系是否正确)。
▮▮▮▮▮▮▮▮▮▮⚝ 图像的创造性和吸引力。
▮▮▮▮▮▮▮▮❷ 可以使用 Likert 量表对每个方面进行评分,或要求评估者对不同模型生成的图像进行排序。
③ 基于其他条件的评估 (Evaluation for Other Conditions)
对于基于其他类型条件(如语义分割图、草图、风格图像等)的生成任务,评估方法需要根据条件的性质进行调整:
▮▮▮▮ⓐ 基于语义分割图 (Semantic Segmentation Map):
▮▮▮▮▮▮▮▮❷ 评估生成的图像是否准确地再现了分割图中的物体类别和边界。
▮▮▮▮▮▮▮▮❸ 可以使用图像分割相关的指标(如像素准确率 (Pixel Accuracy)、平均交并比 (Mean IoU))来衡量生成图像中的物体与输入分割图的匹配程度。这通常需要先对生成的图像进行一次语义分割。
▮▮▮▮ⓓ 基于草图/边缘图 (Sketch/Edge Map):
▮▮▮▮▮▮▮▮❺ 评估生成图像的轮廓和结构是否与输入的草图或边缘图一致。
▮▮▮▮ⓕ 基于风格图像 (Style Image):
▮▮▮▮▮▮▮▮❼ 评估生成图像的内容是否保留了内容图像的信息,同时风格是否成功迁移自风格图像。可以结合 LPIPS(评估内容或结构的相似度)和专门的风格度量(如基于 VGG 特征 Gram 矩阵的距离)。
④ 综合评估 (Comprehensive Evaluation)
在实践中,评估条件生成模型通常需要结合多种指标:
▮▮▮▮⚝ 使用 FID/KID 等评估生成图像的整体质量和多样性。
▮▮▮▮⚝ 使用 CLIP Score (对于文本) 或其他任务特有的指标(对于其他条件)评估与条件的符合度。
▮▮▮▮⚝ 进行人工评估,捕捉主观感受和复杂符合度判断。
通过多角度、多层次的评估,我们可以更全面、准确地理解扩散模型在不同任务上的真实表现。
11. 局限性、挑战与未来方向
本章讨论当前扩散模型面临的挑战、潜在的局限性,并展望未来的研究方向。
扩散模型(Diffusion Models)在图像和视觉生成领域取得了令人瞩目的成就,它们在生成质量、多样性和训练稳定性方面展现出了强大的实力。然而,就像任何快速发展的技术一样,扩散模型目前也面临着一些固有的局限性和挑战。理解这些问题对于进一步推动该领域的研究和应用至关重要。同时,这些挑战也指明了未来研究的多个有前景的方向。本章将深入探讨这些问题,并对扩散模型未来的发展进行展望。
11.1 计算成本与采样速度
分析扩散模型在训练和采样阶段的高计算资源需求和时间消耗问题。
扩散模型的一个显著挑战在于其高昂的计算成本,这体现在训练和推理(采样)两个阶段。
11.1.1 训练阶段的计算成本
训练一个高质量的扩散模型通常需要大量的计算资源和时间。
① 模型规模:生成高分辨率图像的模型(如处理1024x1024甚至更高分辨率)通常需要庞大的网络结构,包含数十亿甚至更多的参数。
② 迭代训练:扩散模型的训练目标是预测不同时间步长的噪声或分数函数。这意味着在训练过程中,对于每个输入样本,模型需要在一个广泛的时间步长范围内进行预测,这增加了计算量。
③ 数据需求:为了生成高质量和多样化的图像,扩散模型通常需要在极其庞大的数据集上进行训练,例如LAION-5B,这进一步增加了训练所需的硬件资源(如大量的GPU)和时间。
这些因素使得训练大型扩散模型成为只有少数研究机构和公司能够承担的任务。
11.1.2 采样阶段的计算成本与速度
扩散模型的生成过程是一个逐步去噪的迭代过程,通常需要执行数百甚至上千个离散的时间步长来从纯噪声中生成最终图像。
① 顺序依赖:逆向扩散过程是一个马尔可夫链(Markov Chain),后续步骤的生成依赖于前一步骤的结果,这使得采样过程难以高度并行化(尽管可以在批次维度上并行)。
② 步数多:标准的去噪扩散概率模型(DDPM)需要大量的采样步数才能获得高质量的样本。即使是一些改进的采样器,如去噪扩散隐式模型(DDIM),虽然可以减少步数,但通常仍需要几十到上百步。
③ 实时性挑战:对于需要低延迟的应用,如交互式图像编辑或实时视频生成,扩散模型的采样速度往往不够快。即使在强大的硬件上,生成一张高分辨率图像也可能需要数秒到数十秒。
▮▮▮▮⚝ 缓解计算成本与采样速度挑战的方法:
▮▮▮▮⚝ 快速采样器(Fast Samplers):
▮▮▮▮▮▮▮▮⚝ DDIM (Denoising Diffusion Implicit Models) 通过构建一个非马尔可夫的生成过程,允许使用更少的采样步数。
▮▮▮▮▮▮▮▮⚝ 利用随机微分方程(SDE)或常微分方程(ODE)求解器,如DDPM Solver, DPM-Solver, PNDM 等,可以优化求解逆向过程,显著减少采样步数。
▮▮▮▮⚝ 潜在扩散模型(Latent Diffusion Models, LDM):
▮▮▮▮▮▮▮▮⚝ 在低维度的潜在空间(Latent Space)进行扩散过程,大大降低了模型的输入/输出维度和计算量,从而加速训练和采样。
▮▮▮▮⚝ 模型蒸馏(Model Distillation):
▮▮▮▮▮▮▮▮⚝ 训练一个“学生”模型来模仿一个已经训练好的“教师”模型,以减少采样的步数,甚至实现一步生成(如Consistency Models)。
▮▮▮▮⚝ 其他架构创新:
▮▮▮▮▮▮▮▮⚝ 研究如何使用更高效的网络结构或优化训练策略来减少计算需求。
尽管这些方法在一定程度上缓解了问题,但如何在保证生成质量的同时大幅提高速度并降低训练成本,仍然是该领域一个重要的研究方向。
11.2 模式覆盖与长尾分布
讨论模型在覆盖复杂数据分布和生成罕见样本方面的挑战。
生成模型的一个核心目标是学习并能够从复杂的数据分布中采样。虽然扩散模型在捕捉主要数据模式方面表现出色,但在完全覆盖数据分布,特别是生成罕见或属于“长尾”(Long-tail)部分的样本时,仍然面临挑战。
① 模式覆盖(Mode Coverage):真实世界的数据分布往往是多峰的(Multimodal),包含多种不同的模式(Modes)。一个理想的生成模型应该能够采样到分布中的所有显著模式。尽管扩散模型相比于早期的GANs在模式覆盖方面有所改进,但在极端复杂或高度离散的数据分布上,完全覆盖所有模式仍然是困难的。
② 长尾分布(Long-Tail Distribution):数据集中很大一部分样本可能集中在少数几个常见类别或特征上(头部),而只有很少的样本属于许多罕见的类别或特征(长尾)。模型在训练时可能会更多地关注头部数据,导致对长尾数据的生成能力较弱,难以生成罕见或异常的样本。
③ 分布外泛化(Out-of-Distribution Generalization):模型通常在训练数据的分布范围内表现良好,但生成与训练数据分布差异较大的新颖样本时,其能力可能会受限。
▮▮▮▮⚝ 挑战原因:
▮▮▮▮⚝ 训练数据偏差:训练数据本身的模式覆盖不全或长尾问题会直接影响模型的学习结果。
▮▮▮▮⚝ 模型容量限制:即使数据充分,模型的容量也可能不足以完全捕捉极其复杂和细致的分布结构。
▮▮▮▮⚝ 优化难题:训练扩散模型本质上是优化一个复杂的非凸目标函数(如ELBO的某个变体),找到能够覆盖所有模式的最优解是具有挑战性的。
未来研究可以在以下方向努力:开发新的训练目标或正则化技术以鼓励模式覆盖;研究针对长尾分布数据的特定训练策略;探索结合其他生成模型(如变分自编码器(VAE)的结构化潜在空间)来更好地捕捉分布的全局结构;以及利用更大的模型和更多样化的数据进行训练。
11.3 可控性与编辑精度
探讨如何进一步提升扩散模型生成和编辑的可控性及精细度。
高质量生成是扩散模型的优势,但如何在生成过程中实现精细的控制,并对已有图像进行精确编辑,仍然是一个活跃的研究领域和重要挑战。
① 可控性(Controllability):用户或应用 often 需要根据特定的条件(如文本描述、布局图、风格参考、特定对象)来引导生成过程。虽然条件扩散模型(Conditional Diffusion Models)在这方面取得了巨大进展(如文本到图像生成),但实现更细粒度的控制仍然困难。例如,精确控制生成对象的数量、位置、姿态、相互关系等,或者结合多种复杂的条件。
② 编辑精度(Editing Precision):利用扩散模型进行图像编辑(如图像修复(Inpainting)、图像外绘(Outpainting)、语义编辑(Semantic Editing))时,如何保证编辑区域与未编辑区域的无缝衔接,如何在保持图像整体一致性的同时修改局部细节,以及实现对编辑结果的精确控制(例如,“将这棵树移到窗户右边”)仍然具有挑战性。简单的提示词编辑可能无法达到期望的精确效果。
③ 空间理解与操作:当前的扩散模型在理解图像中的空间关系、对象属性及其相互作用方面仍有不足,这限制了其在需要精确空间操作或逻辑推理的编辑任务中的表现。
▮▮▮▮⚝ 现有控制方法及其局限性:
▮▮▮▮⚝ 分类器引导(Classifier Guidance)和无分类器引导(Classifier-Free Guidance, CFG):通过引导梯度来增加生成样本与条件的匹配度,但有时可能牺牲样本多样性,且对复杂条件的控制能力有限。
▮▮▮▮⚝ 交叉注意力(Cross-Attention):在文本到图像模型中用于融合文本特征,但其内部工作机制复杂,不易直接控制特定文本token对图像特定区域的影响。
▮▮▮▮⚝ 外部控制信号(如ControlNet):通过引入额外的网络模块来整合边缘图、姿态骨架等条件,提高了控制能力,但这需要额外的训练,且对新型控制信号的适应性需要进一步研究。
▮▮▮▮⚝ Prompt Engineering:依赖于精心构造的文本提示词,但对用户要求较高,且难以精确表达所有意图。
未来研究需要探索更直观、更灵活的控制接口,例如基于对象、区域或更高级语义概念的控制。结合场景图(Scene Graph)、三维信息或更强的视觉-语言理解模型,可以提高模型对空间关系和复杂场景的理解和操作能力。开发新的架构或训练范式,使得模型能够更好地解耦(Disentangle)不同的生成属性,从而实现更精确的编辑。
11.4 伦理考虑与潜在风险
讨论深度伪造 (Deepfakes)、版权、偏见等相关的伦理和社会问题。
强大的生成能力伴随着显著的伦理和社会风险。扩散模型作为当前最先进的生成技术之一,其潜在的负面影响需要引起广泛关注和严肃对待。
① 深度伪造(Deepfakes)与虚假信息:扩散模型能够生成高度逼真甚至难以与真实图像区分的图像和视频。这使得创建虚假信息(如虚假新闻、恶意诽谤内容)、进行网络诈骗或传播宣传变得更加容易和便捷,对个人声誉、社会信任乃至政治稳定都构成了威胁。
② 版权与知识产权:扩散模型通常在包含大量网络图片的巨大数据集上训练,这些图片可能包含版权内容。由此训练出的模型生成的图像与训练数据中的特定作品相似时,可能会引发版权纠纷。同时,生成内容的版权归属问题(是模型所有者、使用者还是其他人)也尚不明确,需要在法律和行业层面进行规范。
③ 偏见(Bias):训练数据中普遍存在的社会偏见(如种族、性别、文化偏见)会被模型学习到,并在生成内容中体现出来。例如,文本到图像模型在生成特定职业人物图像时,可能会过度依赖训练数据中的性别刻板印象。这可能加剧社会不平等,并产生歧视性内容。
④ 恶意使用与安全:除了虚假信息,扩散模型还可能被用于生成其他有害内容,如色情、暴力、仇恨言论等。如何防止模型的恶意使用,以及如何检测和识别AI生成内容,是重要的安全挑战。
⑤ 数字鸿沟:训练和运行大型扩散模型需要昂贵的计算资源和专业知识,这可能导致技术优势集中在少数大型机构手中,加剧数字鸿沟。
▮▮▮▮⚝ 应对策略:
▮▮▮▮⚝ 技术检测:研究开发有效的水印技术(Watermarking)在生成内容中植入难以察觉的标记,以及开发能够识别AI生成内容的检测工具。
▮▮▮▮⚝ 数据治理:关注训练数据的来源和合规性,推动构建更公平、更具代表性的数据集。
▮▮▮▮⚝ 模型设计:探索如何在模型设计和训练过程中融入偏见缓解机制。
▮▮▮▮⚝ 伦理规范与法律法规:制定行业自律规范和相关的法律法规,明确技术的使用边界、责任归属和惩罚机制。
▮▮▮▮⚝ 公众教育:提高公众对AI生成内容潜在风险的认知能力。
负责任的AI开发和部署是扩散模型发展不可或缺的一部分。需要在技术进步的同时,积极应对其带来的伦理挑战。
11.5 与其他领域的结合
展望扩散模型在自然语言处理、音频处理、药物发现等其他领域的应用前景。
扩散模型的核心思想——通过逐步去噪来建模复杂数据分布——具有通用性,不仅仅局限于图像和视觉领域。它已经被成功地推广到许多其他类型的数据和应用中,并且这种跨领域的结合有望带来更多突破。
① 自然语言处理(NLP):
▮▮▮▮⚝ 文本生成:虽然自回归模型是文本生成的主流,但已有研究探索将扩散模型用于文本序列的生成,例如在离散空间进行扩散。
▮▮▮▮⚝ 文本编辑:类似于图像编辑,扩散模型可用于根据指示修改或完善现有文本。
▮▮▮▮⚝ 跨模态任务:与视觉领域的视觉-语言模型(Vision-Language Models, VLMs)类似,扩散模型可以作为桥梁,连接文本与其他模态数据(如音频、视频),实现文本到音频、文本到3D等生成任务。
② 音频处理(Audio Processing):
▮▮▮▮⚝ 音频生成:扩散模型在语音合成(Text-to-Speech, TTS)、音乐生成、环境音生成等方面展现出强大的潜力,能够生成高质量、自然的音频样本。
▮▮▮▮⚝ 音频编辑:如音频去噪、音频填充(Audio Inpainting)。
③ 3D数据生成:
▮▮▮▮⚝ 3D形状生成:生成点云(Point Clouds)、体素(Voxels)、网格(Meshes)等三维表示。
▮▮▮▮⚝ 3D场景生成:生成更复杂的室内或室外三维场景。
④ 科学计算与数据建模:
▮▮▮▮⚝ 分子生成与药物发现:生成具有特定性质的分子结构,加速新药研发。
▮▮▮▮⚝ 材料科学:生成具有期望属性的新材料结构。
▮▮▮▮⚝ 物理系统模拟:建模和生成复杂的物理过程数据。
⑤ 机器人与控制:
▮▮▮▮⚝ 轨迹生成:生成机器人执行任务的平滑轨迹。
▮▮▮▮⚝ 策略学习:建模和生成最优控制策略。
⑥ 医疗健康:
▮▮▮▮⚝ 医学图像分析:除生成外,扩散模型的去噪特性和表示学习能力也可用于医学图像去噪、分割、重建等任务。
将扩散模型的理论和技术应用于更广泛的数据类型和领域,需要根据特定领域的数据特性和任务需求进行模型 adaptarion 和创新。这包括定义合适的扩散过程、设计有效的网络结构以及开发新的训练和采样策略。
11.6 理论深化与模型创新
讨论未来的研究热点,如图形化模型解释、更高效的架构、新的扩散过程定义等。
尽管扩散模型取得了显著成功,但其理论基础仍在不断完善,模型设计和优化仍有巨大的创新空间。未来的研究将继续在理论和实践层面推动扩散模型的发展。
① 理论理解深化:
▮▮▮▮⚝ 更深入地理解扩散过程与数据分布之间的关系,特别是高维空间中的行为。
▮▮▮▮⚝ 形式化分析扩散模型的模式覆盖、收敛性质和泛化能力。
▮▮▮▮⚝ 探索其与信息理论、统计物理等更广泛理论框架的联系。
② 更高效与可扩展的架构:
▮▮▮▮⚝ 研究替代或改进的骨干网络,例如使用Transformer架构(Diffusion Transformers, DiT)处理不同类型的数据,并探索其在大规模数据和高分辨率生成上的扩展性。
▮▮▮▮⚝ 设计更适用于特定任务(如视频、3D)的高效模型架构。
▮▮▮▮⚝ 探索更小的模型,如何在保持性能的同时降低参数量和计算需求。
③ 新的扩散过程定义:
▮▮▮▮⚝ 研究基于其他噪声类型(非高斯噪声)、其他动力学过程或在离散空间上的扩散模型。
▮▮▮▮⚝ 设计自适应的方差调度(Variance Schedule)或其他过程参数,使其能够更好地适应数据的局部结构。
▮▮▮▮⚝ 探索无需预定义马尔可夫链的扩散过程,例如流匹配(Flow Matching)等相关方法。
④ 训练策略与优化:
▮▮▮▮⚝ 改进训练稳定性,特别是在处理复杂数据集或使用新架构时。
▮▮▮▮⚝ 研究如何降低训练对数据量的依赖,例如通过数据增强或半监督学习。
▮▮▮▮⚝ 探索更有效的损失函数或训练目标。
⑤ 模型解释性(Explainability):
▮▮▮▮⚝ 理解扩散模型内部如何学习和表示数据特征。
▮▮▮▮⚝ 开发工具和方法来可视化和解释生成过程的每一步,帮助理解模型为何生成特定结果。
⑥ 混合模型与协同:
▮▮▮▮⚝ 探索将扩散模型的优势与其他生成模型(如GANs在判别能力、VAEs在潜在空间结构、自回归模型在序列生成)结合,构建更强大的混合生成系统。
⑦ 硬件与系统优化:
▮▮▮▮⚝ 针对扩散模型的计算特性,优化硬件设计和软件框架,进一步提高训练和推理效率。
未来的研究将是一个多学科交叉的过程,需要理论研究者、算法工程师、硬件专家以及应用领域专家的共同努力,以克服现有挑战,释放扩散模型在更多领域的巨大潜力。🚀
Appendix A: 常用数学符号与公式
在深入探讨扩散模型(Diffusion Models)之前,掌握一些基本的数学符号、概率论以及随机过程的概念是必不可少的。本附录旨在汇集本书中常用的数学符号和核心公式,为读者提供一个方便的参考。
Appendix A1: 常用数学符号表
本节列出了本书中可能出现的常用数学符号及其含义。
⚝ \( x \): 通常表示数据样本,例如图像像素值向量。
⚝ \( x_0 \): 原始数据样本(在正向扩散过程开始时,即 \( t=0 \) 时的数据)。
⚝ \( x_t \): 在时间步 \( t \) 时的加噪数据样本。
⚝ \( t \): 时间步(Timestep),在离散时间扩散模型中通常是整数,表示加噪或去噪的步骤;在连续时间模型中可以是实数。
⚝ \( T \): 总的时间步数或最终时间。
⚝ \( \epsilon \): 噪声项,通常假设其服从标准正态分布 \( \mathcal{N}(0, I) \)。
⚝ \( \alpha_t \): 与时间步 \( t \) 相关的参数,通常用于控制噪声强度或信号比例。常见形式有 \( \alpha_t = 1 - \beta_t \) 或其累积乘积 \( \bar{\alpha}_t = \prod_{s=1}^t \alpha_s \)。
⚝ \( \beta_t \): 在时间步 \( t \) 添加的噪声强度(方差),通常有一个预设的方差调度(Variance Schedule)。
⚝ \( \bar{\alpha}_t \): \( \alpha_t \) 的累积乘积,定义为 \( \bar{\alpha}_t = \prod_{s=1}^t \alpha_s \)。
⚝ \( p(x) \): 数据分布(Data Distribution),即我们希望模型学习并生成的目标分布。
⚝ \( q(x_t | x_0) \): 正向扩散过程(Forward Diffusion Process)中,给定原始数据 \( x_0 \) 在时间步 \( t \) 时的条件分布。在DDPM中通常是高斯分布。
⚝ \( q(x_{t-1} | x_t, x_0) \): 正向扩散过程中,给定 \( x_t \) 和 \( x_0 \) 时,前一步 \( x_{t-1} \) 的条件分布。
⚝ \( p_\theta(x_{t-1} | x_t) \): 逆向去噪过程(Reverse Denoising Process)中,由模型 \( \theta \) 学习到的、给定 \( x_t \) 时 \( x_{t-1} \) 的条件分布。
⚝ \( p_\theta(x_0) \): 由模型 \( \theta \) 建模的最终生成数据分布。
⚝ \( \mathcal{N}(\mu, \Sigma) \): 均值为 \( \mu \),协方差矩阵为 \( \Sigma \) 的多元正态(高斯)分布(Multivariate Normal Distribution)。
⚝ \( \log p(x) \): 数据分布 \( p(x) \) 的对数。
⚝ \( \nabla_x \log p(x) \): 数据分布 \( p(x) \) 对数梯度的分数函数(Score Function)。
⚝ \( E[\cdot] \): 期望(Expectation)。
⚝ \( D_{\text{KL}}(p || q) \): 克劳斯巴克-莱布勒散度(Kullback-Leibler Divergence),衡量两个概率分布之间的差异。
⚝ \( \mathcal{L} \): 损失函数(Loss Function),用于训练模型。在扩散模型中常使用变分下界(Variational Lower Bound, VLB)或其简化形式。
⚝ \( L_{VLB} \): 变分下界损失。
⚝ \( L_{\text{simple}} \): DDPM中常用的预测噪声的简化损失函数。
⚝ \( s_\theta(x_t, t) \): 模型 \( \theta \) 预测的分数函数,即 \( \nabla_{x_t} \log p_\theta(x_t) \)。
⚝ \( \mathbf{f}(x_t, t) \): 在连续时间SDE中, \( x_t \) 的漂移系数(Drift Coefficient)。
⚝ \( g(t) \): 在连续时间SDE中,扩散系数(Diffusion Coefficient),与噪声强度相关。
⚝ \( \mathbf{w}_t \): 标准维纳过程(Standard Wiener Process)或布朗运动(Brownian Motion)的无穷小增量 \( d\mathbf{w}_t \)。
Appendix A2: 概率分布与变分推断基础
本节回顾了概率论中与扩散模型相关的核心概念和公式。
Appendix A2.1: 概率分布与密度函数
① 概率密度函数 (Probability Density Function, PDF):
▮▮▮▮对于连续随机变量 \( X \),其PDF \( p(x) \) 满足 \( p(x) \geq 0 \) 且 \( \int_{-\infty}^{\infty} p(x) dx = 1 \)。
▮▮▮▮\( p(x) \) 表示随机变量取值在 \( x \) 附近的“可能性密度”,但 \( p(x) \) 本身不是概率。特定区间上的概率是PDF在该区间上的积分。
② 联合概率分布 (Joint Probability Distribution):
▮▮▮▮对于多个随机变量 \( X_1, \dots, X_n \),它们的联合分布描述了这些变量同时取特定值的概率。用PDF表示为 \( p(x_1, \dots, x_n) \)。
③ 边缘概率分布 (Marginal Probability Distribution):
▮▮▮▮从联合分布中,通过对其他变量积分或求和得到单个或部分变量的分布。例如,对于 \( p(x, y) \), \( p(x) = \int p(x, y) dy \)。
④ 条件概率分布 (Conditional Probability Distribution):
▮▮▮▮给定事件B发生时事件A发生的概率,记为 \( P(A|B) \)。对于连续变量,给定 \( Y=y \) 时 \( X \) 的条件PDF为 \( p(x|y) = \frac{p(x, y)}{p(y)} \),前提是 \( p(y) > 0 \)。
⑤ 贝叶斯定理 (Bayes' Theorem):
\[ p(y|x) = \frac{p(x|y) p(y)}{p(x)} \]
▮▮▮▮其中,\( p(x) = \int p(x|y) p(y) dy \)(对于连续变量)。这在计算逆向过程概率 \( q(x_{t-1} | x_t, x_0) \) 时非常重要。
⑥ 高斯分布 (Gaussian Distribution / Normal Distribution):
▮▮▮▮一维高斯分布的PDF为 \( \mathcal{N}(x|\mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) \)。
▮▮▮▮多元高斯分布的PDF为 \( \mathcal{N}(\mathbf{x}|\boldsymbol{\mu}, \boldsymbol{\Sigma}) = \frac{1}{\sqrt{(2\pi)^d|\boldsymbol{\Sigma}|}} \exp\left(-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu})\right) \),其中 \( d \) 是维度,\( \boldsymbol{\mu} \) 是均值向量,\( \boldsymbol{\Sigma} \) 是协方差矩阵。
▮▮▮▮高斯分布的优良性质在于其条件分布和边缘分布仍然是高斯分布,这使得DDPM中的正向过程数学推导变得可行。
Appendix A2.2: 变分推断 (Variational Inference)
① 证据下界 (Evidence Lower Bound, ELBO) 或 变分下界 (Variational Lower Bound, VLB):
▮▮▮▮在潜变量模型中,直接计算数据的对数似然 \( \log p(x_0) \) 通常是难解的。变分推断通过引入一个近似的后验分布 \( q(z|x_0) \) 来最大化一个下界,即ELBO。
▮▮▮▮对于扩散模型,我们将中间状态 \( x_{1:T} \) 视为潜变量,目标是最大化 \( \log p_\theta(x_0) \)。其变分下界为:
\[ \log p_\theta(x_0) \geq E_{q(x_{1:T}|x_0)} \left[ \log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)} \right] = E_q \left[ \log p(x_T) + \sum_{t=1}^T \log \frac{p_\theta(x_{t-1}|x_t)}{q(x_t|x_{t-1})} \right] \]
▮▮▮▮这个ELBO可以分解为多个项,DDPM的训练目标就是基于这个变分下界导出的。
② 克劳斯巴克-莱布勒散度 (KL Divergence):
▮▮▮▮衡量两个概率分布 \( p \) 和 \( q \) 之间的差异:
\[ D_{\text{KL}}(p || q) = \int p(x) \log \frac{p(x)}{q(x)} dx \]
▮▮▮▮KL散度非负,且仅当 \( p=q \) 时等于零。变分下界可以表示为 \( \log p(x_0) - D_{\text{KL}}(q(x_{1:T}|x_0) || p_\theta(x_{1:T}|x_0)) \)。最大化ELBO等价于最小化真实后验 \( q(x_{1:T}|x_0) \) 与模型后验 \( p_\theta(x_{1:T}|x_0) \) 之间的KL散度(尽管模型并不直接学习这个后验)。DDPM的训练损失与正向过程后验 \( q(x_{t-1}|x_t, x_0) \) 和模型逆向过程 \( p_\theta(x_{t-1}|x_t) \) 之间的KL散度密切相关。
Appendix A3: 随机过程基础
本节介绍随机过程和随机微分方程相关的基础知识。
Appendix A3.1: 马尔可夫链 (Markov Chain)
① 定义:
▮▮▮▮一个随机过程如果满足马尔可夫性质(即给定当前状态,未来状态的条件分布独立于过去状态),则称为马尔可夫过程。
▮▮▮▮马尔可夫链是状态空间离散或连续、时间离散或连续的马尔可夫过程。
▮▮▮▮正向扩散过程 \( q(x_t | x_{t-1}) \) 是一个离散时间马尔可夫链:\( q(x_{1:T}|x_0) = \prod_{t=1}^T q(x_t|x_{t-1}) \)。
② 转移概率 (Transition Probability):
▮▮▮▮马尔可夫链从状态 \( i \) 转移到状态 \( j \) 的概率,记为 \( P(X_{t+1}=j | X_t=i) \) 或 \( q(x_t | x_{t-1}) \)。
Appendix A3.2: 随机微分方程 (Stochastic Differential Equation, SDE)
① 定义:
▮▮▮▮SDE是一种描述随机过程演化的微分方程,通常包含一个确定性的“漂移”项和一个随机性的“扩散”项。
▮▮▮▮一般形式为 \( dx_t = \mathbf{f}(x_t, t) dt + g(t) d\mathbf{w}_t \),其中 \( x_t \) 是随机过程,\( \mathbf{f} \) 是漂移系数,\( g \) 是扩散系数,\( d\mathbf{w}_t \) 是维纳过程的无穷小增量。
② 维纳过程 (Wiener Process / Brownian Motion):
▮▮▮▮记为 \( \mathbf{w}_t \),具有连续的路径,\( \mathbf{w}_0 = 0 \),独立的增量 \( \mathbf{w}_{t+h} - \mathbf{w}_t \sim \mathcal{N}(0, hI) \)。其无穷小增量 \( d\mathbf{w}_t \) 可以理解为服从 \( \mathcal{N}(0, dt \cdot I) \) 的随机变量。
③ 伊藤引理 (Itô's Lemma):
▮▮▮▮这是处理SDEs中函数变换的链式法则。如果 \( x_t \) 服从SDE \( dx_t = \mathbf{f}(x_t, t) dt + g(t) d\mathbf{w}_t \),对于一个二次连续可微的函数 \( U(x_t, t) \),其微分 \( dU \) 为:
\[ dU = \left( \frac{\partial U}{\partial t} + \mathbf{f}^T \nabla_x U + \frac{1}{2} \text{Tr}\left( g g^T \nabla_x^2 U \right) \right) dt + (\nabla_x U)^T g d\mathbf{w}_t \]
▮▮▮▮这个引理在推导与SDE相关的概率密度演化方程(如Fokker-Planck方程)或变分推断中的公式时非常有用。
④ Fokker-Planck方程:
▮▮▮▮描述由SDE定义的随机过程的概率密度函数 \( p(x, t) \) 随时间演化的偏微分方程。对于 \( dx_t = \mathbf{f}(x_t, t) dt + g(t) d\mathbf{w}_t \),Fokker-Planck方程为:
\[ \frac{\partial p(x, t)}{\partial t} = -\nabla_x \cdot (\mathbf{f}(x, t) p(x, t)) + \frac{1}{2} \nabla_x \cdot (\nabla_x^T (g(t) g(t)^T p(x, t))) \]
▮▮▮▮这个方程揭示了数据分布在正向扩散SDE下的演化过程。
⑤ 逆向SDE (Reverse SDE):
▮▮▮▮对于一个正向SDE \( dx_t = \mathbf{f}(x_t, t) dt + g(t) d\mathbf{w}_t \) 且其概率密度为 \( p(x, t) \),对应的逆向SDE(时间从 \( T \) 到 \( 0 \)) 为:
\[ dx_t = \left( \mathbf{f}(x_t, t) - g(t)^2 \nabla_x \log p(x_t, t) \right) dt + g(t) d\bar{\mathbf{w}}_t \]
▮▮▮▮其中 \( d\bar{\mathbf{w}}_t \) 是一个在逆时间方向上的维纳过程。扩散模型的生成过程正是基于学习这个逆向SDE中的分数函数 \( \nabla_x \log p(x_t, t) \)。
掌握这些基本的数学符号和概念将极大地帮助读者理解扩散模型的理论推导、算法设计以及各种变体。
Appendix B: 神经网络基础回顾
本附录旨在为读者提供理解本书主体内容所需的神经网络基础知识。扩散模型,特别是其逆向过程建模部分,严重依赖于深度神经网络的强大表达能力。回顾全连接网络、卷积网络(CNN)、循环网络(RNN)和 Transformer 这些核心架构,有助于读者更好地理解扩散模型中 U-Net 或 Transformer 等骨干网络的原理和作用。
Appendix B.1: 全连接网络 (Fully Connected Networks)
全连接网络(Fully Connected Network, FCN),也称为多层感知机(Multilayer Perceptron, MLP),是最基础的神经网络类型之一。它由多个全连接层(Fully Connected Layer)组成,层与层之间所有神经元都两两相连。
⚝ 结构 (Structure)
全连接网络通常包含一个输入层(Input Layer)、若干个隐藏层(Hidden Layers)和一个输出层(Output Layer)。
① 神经元 (Neuron):网络的基本计算单元,接收来自上一层神经元的输入,计算它们的加权和,并通过一个激活函数(Activation Function)产生输出。
② 层 (Layer):一组并行的神经元。
③ 权重 (Weights) 和 偏置 (Biases):连接神经元之间的参数,是模型学习的目标。
④ 激活函数 (Activation Function):引入非线性,使得网络能够学习复杂的映射关系。常见的激活函数包括 Sigmoid、ReLU (Rectified Linear Unit)、Tanh 等。
⚝ 数学表示 (Mathematical Representation)
对于一个单一神经元,其输出 \(y\) 可以表示为:
\[ y = f \left( \sum_{i=1}^n w_i x_i + b \right) \]
其中,\(x_i\) 是输入,\(w_i\) 是对应的权重,\(b\) 是偏置,\(f\) 是激活函数。
对于一个全连接层,输入向量为 \( \mathbf{x} \),输出向量为 \( \mathbf{y} \),其计算可以表示为矩阵乘法和向量加法:
\[ \mathbf{y} = f(\mathbf{W}\mathbf{x} + \mathbf{b}) \]
其中,\( \mathbf{W} \) 是权重矩阵,\( \mathbf{b} \) 是偏置向量,\( f \) 是逐元素应用的激活函数。
⚝ 应用 (Applications)
全连接网络适用于处理向量化数据,常用于分类、回归等任务。在更复杂的网络结构(如 CNN 或 Transformer)中,全连接层也经常作为最后的分类器或在层内部使用。
⚝ 与扩散模型的关系 (Relevance to Diffusion Models)
全连接层是构成扩散模型骨干网络(如 U-Net 或 Transformer)的基本计算单元。虽然图像通常不是直接输入到大型全连接网络中,但其内部的线性变换和非线性激活是所有神经网络的基础。
Appendix B.2: 卷积网络 (Convolutional Neural Networks, CNN)
卷积网络(Convolutional Neural Network, CNN)是一种专门处理具有网格状拓扑结构数据(如图像、视频、音频波形等)的神经网络。CNN 的核心思想是利用卷积操作来捕获数据的局部特征,并通过权值共享(Weight Sharing)和池化(Pooling)等技术减少参数数量并增强特征的平移不变性。
⚝ 结构 (Structure)
CNN 通常包含卷积层(Convolutional Layer)、池化层(Pooling Layer)和全连接层。
① 卷积层 (Convolutional Layer):使用一组可学习的滤波器(Filter)或卷积核(Kernel)与输入数据进行卷积操作。每个滤波器扫描输入数据的局部区域,生成一个特征图(Feature Map)。
▮▮▮▮ⓑ 滤波器 (Filter/Kernel):一组共享的权重参数。
▮▮▮▮ⓒ 步长 (Stride):滤波器在输入数据上移动的步长。
▮▮▮▮ⓓ 填充 (Padding):在输入数据边界添加额外的元素(通常是零)以控制输出特征图的尺寸。
⑤ 激活函数 (Activation Function):通常在卷积操作后应用,引入非线性。ReLU 是最常用的激活函数。
⑥ 池化层 (Pooling Layer):对输入的特征图进行下采样(Downsampling),减小空间尺寸并保持重要特征。常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。
⑦ 全连接层 (Fully Connected Layer):在经过若干卷积层和池化层后,将学到的特征展平(Flatten)并输入到全连接层进行最终的分类或回归等任务。
⚝ 数学表示 (Mathematical Representation)
二维卷积操作可以表示为:
\[ (I * K)(i, j) = \sum_m \sum_n I(i-m, j-n) K(m, n) \]
其中,\(I\) 是输入图像,\(K\) 是卷积核,\(i, j\) 是输出特征图的坐标,\(m, n\) 是卷积核内部的坐标。在神经网络中,这个操作通常涉及多个输入通道和输出通道,并且会加上偏置项。
⚝ 应用 (Applications)
CNN 在图像处理领域取得了巨大成功,广泛应用于图像分类、目标检测(Object Detection)、语义分割(Semantic Segmentation)、图像生成等。
⚝ 与扩散模型的关系 (Relevance to Diffusion Models)
大多数早期和当前的扩散模型(如 DDPM 和 LDM)都使用基于 CNN 的架构,尤其是 U-Net。U-Net 是一种编码器-解码器(Encoder-Decoder)结构,特别适合处理图像生成任务。编码器通过卷积和下采样逐渐提取高级特征,而解码器通过反卷积(Transposed Convolution)或上采样(Upsampling)并结合编码器中的跳跃连接(Skip Connections)逐步恢复空间细节,这与扩散模型逆向过程从噪声逐步恢复清晰图像的过程非常契合。理解 CNN 的工作原理是理解 U-Net 架构的基础。
Appendix B.3: 循环网络 (Recurrent Neural Networks, RNN)
循环网络(Recurrent Neural Network, RNN)是一类设计用于处理序列数据(Sequential Data)的神经网络。与前馈网络(如全连接网络和 CNN)不同,RNN 具有内部循环,允许信息在网络中持续流动,从而使其能够捕捉序列中不同时间步(Timestep)之间的依赖关系。
⚝ 结构 (Structure)
RNN 的核心是一个循环单元,它在每个时间步接收当前输入 \( \mathbf{x}_t \) 和前一个时间步的隐藏状态 \( \mathbf{h}_{t-1} \),并产生当前时间步的隐藏状态 \( \mathbf{h}_t \) 和输出 \( \mathbf{y}_t \)。
① 隐藏状态 (Hidden State):网络的记忆,包含了之前时间步的信息摘要。
② 循环连接 (Recurrent Connection):将当前时间步的隐藏状态反馈给下一个时间步作为输入。
③ 权重共享 (Weight Sharing):同一组权重参数(\( \mathbf{W}_{hh}, \mathbf{W}_{xh}, \mathbf{W}_{hy}, \mathbf{b}_h, \mathbf{b}_y \))在所有时间步共享。
⚝ 数学表示 (Mathematical Representation)
在一个简单 RNN 中,隐藏状态和输出的计算可以表示为:
\[ \mathbf{h}_t = f(\mathbf{W}_{hh}\mathbf{h}_{t-1} + \mathbf{W}_{xh}\mathbf{x}_t + \mathbf{b}_h) \]
\[ \mathbf{y}_t = g(\mathbf{W}_{hy}\mathbf{h}_t + \mathbf{b}_y) \]
其中,\( f \) 和 \( g \) 是激活函数。
⚝ 变体 (Variants)
简单的 RNN 在处理长序列时容易遇到梯度消失(Vanishing Gradient)或梯度爆炸(Exploding Gradient)问题。为了解决这些问题,出现了更复杂的 RNN 变体:
▮▮▮▮ⓐ 长短期记忆网络 (Long Short-Term Memory, LSTM):引入了门控机制(如输入门、遗忘门、输出门)来更好地控制信息的流动和记忆。
▮▮▮▮ⓑ 门控循环单元 (Gated Recurrent Unit, GRU):LSTM 的简化版本,同样使用门控机制。
⚝ 应用 (Applications)
RNN 在自然语言处理(如机器翻译、文本生成、语音识别)、时间序列分析等领域有过广泛应用。
⚝ 与扩散模型的关系 (Relevance to Diffusion Models)
虽然 CNN 或 Transformer 是图像扩散模型中更常见的骨干网络,但扩散过程本身可以看作是一个顺序决策过程(从 \(t\) 到 \(t-1\))。对于处理视频等时序数据,或者在扩散模型中需要显式建模时间依赖时,RNN 的思想或变体可能会有所启发或应用。然而,直接使用传统 RNN 作为图像扩散模型的主体架构并不常见。扩散模型中的时间步信息通常是通过位置编码(Positional Encoding)的方式注入到非循环的网络结构中。
Appendix B.4: Transformer
Transformer 是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,由 Vaswani 等人于 2017 年在论文 "Attention Is All You Need" 中提出。它在处理序列数据方面取得了巨大成功,并已成为自然语言处理领域的标准模型,近年来也越来越多地应用于计算机视觉任务,包括作为扩散模型的骨干网络。
⚝ 结构 (Structure)
Transformer 主要由编码器(Encoder)和解码器(Decoder)堆叠而成(尽管在某些应用中可能只使用编码器或解码器)。其核心组件包括:
① 自注意力机制 (Self-Attention Mechanism):允许模型在处理序列中的某个元素时,考虑到序列中所有其他元素的重要性,并据此计算该元素的表示。通过查询(Query, Q)、键(Key, K)和值(Value, V)三个向量来计算注意力权重。
② 多头注意力 (Multi-Head Attention):并行运行多个自注意力机制,每个机制学习不同的注意力表示,然后将它们的输出拼接(Concatenate)起来。这有助于模型捕获不同方面的信息。
③ 位置编码 (Positional Encoding):由于自注意力机制本身不包含序列的顺序信息,需要引入位置编码来标识序列中元素的位置。这通常是通过将位置编码向量加到输入嵌入(Input Embeddings)上来实现。
④ 前馈网络 (Feed-Forward Network):在注意力层之后,每个位置的表示都会通过一个独立但参数共享的全连接前馈网络。
⑤ 层归一化 (Layer Normalization) 和 残差连接 (Residual Connections):用于改善训练过程和模型性能。
⚝ 数学表示 (Mathematical Representation)
自注意力机制的计算可以表示为:
\[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]
其中,\(Q, K, V\) 分别是查询、键、值矩阵,\(d_k\) 是键向量的维度。
⚝ 应用 (Applications)
Transformer 在自然语言处理领域取得了革命性进展,催生了 BERT、GPT 等大型预训练模型。在计算机视觉领域,出现了 Vision Transformer (ViT) 等模型,直接将图像分割成块并作为序列输入 Transformer。它也成功应用于图像生成、目标检测、分割等任务。
⚝ 与扩散模型的关系 (Relevance to Diffusion Models)
Transformer 在扩散模型中扮演着越来越重要的角色。
▮▮▮▮ⓐ 条件生成 (Conditional Generation):在文本到图像扩散模型中,Transformer 的交叉注意力(Cross-Attention)机制是关键。它允许扩散模型的网络(通常是 U-Net)“关注”输入的文本嵌入,从而实现根据文本描述生成图像。
▮▮▮▮ⓑ 骨干网络 (Backbone Network):Diffusion Transformer (DiT) 等工作表明,可以直接使用 Transformer 架构(通常是将图像视为展平的补丁序列,类似于 ViT)作为扩散模型的去噪网络,取代传统的 U-Net。这展示了 Transformer 在建模高维数据分布方面的强大潜力。
理解 Transformer 的自注意力、交叉注意力和位置编码机制,对于理解现代条件扩散模型和基于 Transformer 的扩散模型至关重要。
Appendix C: 实现细节与主流框架
本附录旨在为读者提供关于如何实现和使用扩散模型的实践指导。我们将探讨扩散模型的通用代码结构,介绍当前主流的深度学习框架,重点讲解常用的扩散模型库,并通过示例展示如何利用这些库进行模型的使用和自定义训练。无论是希望从零开始构建扩散模型,还是想快速利用现有模型进行应用开发,本附录都能提供有价值的参考。
Appendix C.1: 扩散模型的通用实现结构
一个典型的扩散模型实现通常包含几个核心组成部分,并在训练和采样阶段遵循特定的流程。理解这些通用结构对于阅读和修改现有的扩散模型代码至关重要。
Appendix C.1.1: 主要组成部分 (Main Components)
构建扩散模型需要以下几个关键模块:
① 噪声调度器 (Noise Scheduler):
▮▮▮▮用于管理正向扩散过程中的噪声水平(方差 \(\beta_t\) 或 \(\alpha_t\))随时间步长 \(t\) 的变化。
▮▮▮▮定义了如何在任意时间步长 \(t\) 下,根据原始数据 \(x_0\) 计算加噪数据 \(x_t\)(正向过程)。
▮▮▮▮在逆向采样过程中,调度器帮助确定每一步需要去除的噪声量或更新数据的步长。
▮▮▮▮常见的调度策略包括线性 (Linear)、余弦 (Cosine) 等。
② 噪声预测模型 (Noise Prediction Model) 或 分数预测模型 (Score Prediction Model):
▮▮▮▮这是扩散模型的核心神经网络。
▮▮▮▮其任务是预测在给定时间步长 \(t\) 下加入到数据 \(x_t\) 中的噪声 \(\epsilon\)(对于DDPM)或数据分布的对数梯度 \(\nabla_{x_t} \log p(x_t)\)(对于基于分数的模型)。
▮▮▮▮最常用的架构是带时间步嵌入 (Time Embedding) 和条件信息的 U-Net。
③ 优化器 (Optimizer):
▮▮▮▮用于更新噪声预测模型或分数预测模型的参数,以最小化训练损失函数。
▮▮▮▮常用的优化器包括 Adam、AdamW 等。
④ 损失函数 (Loss Function):
▮▮▮▮在DDPM中,损失函数通常是预测噪声 \(\hat{\epsilon}\) 与实际噪声 \(\epsilon\) 之间的均方误差 (Mean Squared Error, MSE)。
▮▮▮▮在分数匹配模型中,损失函数与分数匹配目标相关。
▮▮▮▮对于条件扩散模型,损失函数可能还会考虑条件信息的影响。
⑤ 数据加载器 (Data Loader):
▮▮▮▮负责批量加载和预处理训练数据。
▮▮▮▮对于图像数据,通常包括图像 resizing、归一化 (normalization) 等操作。
Appendix C.1.2: 训练循环 (Training Loop)
扩散模型的训练循环通常涉及以下步骤:
① 从训练数据集中采样一批原始数据 \(x_0\)。
② 从预定义的噪声调度器中随机采样一个时间步长 \(t \in [0, T]\)。
③ 根据 \(x_0\) 和 \(t\),使用噪声调度器计算加噪数据 \(x_t\) 和在时间步 \(t\) 加入的实际噪声 \(\epsilon\)。这通常利用公式 \(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon\),其中 \(\bar{\alpha}_t = \prod_{s=1}^t (1 - \beta_s)\)。
④ 将加噪数据 \(x_t\) 和时间步长 \(t\) (编码后) 输入到噪声预测模型中,得到预测的噪声 \(\hat{\epsilon}\)。
⑤ 计算预测噪声 \(\hat{\epsilon}\) 与实际噪声 \(\epsilon\) 之间的损失(通常是MSE)。
⑥ 使用优化器执行反向传播 (backpropagation) 和参数更新。
⑦ 重复步骤 ①-⑥ 直到训练收敛。
1
# 伪代码示例:简化的训练循环
2
import torch
3
4
# model: 噪声预测模型 (e.g., U-Net)
5
# noise_scheduler: 噪声调度器
6
# optimizer: 优化器
7
# dataloader: 数据加载器
8
# num_epochs: 训练轮数
9
10
for epoch in range(num_epochs):
11
for batch in dataloader:
12
optimizer.zero_grad()
13
14
x_0 = batch['image'] # 原始数据
15
16
# 随机采样时间步长
17
t = torch.randint(0, noise_scheduler.num_train_timesteps, (x_0.shape[0],), device=x_0.device).long()
18
19
# 获取噪声
20
noise = torch.randn_like(x_0)
21
22
# 计算加噪数据 x_t
23
x_t = noise_scheduler.add_noise(x_0, noise, t)
24
25
# 预测噪声
26
predicted_noise = model(x_t, t)
27
28
# 计算损失 (例如 MSE)
29
loss = torch.nn.functional.mse_loss(predicted_noise, noise)
30
31
# 反向传播和参数更新
32
loss.backward()
33
optimizer.step()
34
35
# 打印损失等信息...
Appendix C.1.3: 采样循环 (Sampling Loop)
训练完成后,可以使用模型通过逆向过程从随机噪声中生成新样本。采样循环通常是迭代的:
① 从纯高斯噪声 \(x_T \sim \mathcal{N}(0, I)\) 开始。
② 从时间步长 \(T\) 迭代到 \(1\) (或 \(0\),取决于调度器的实现)。
③ 在每个时间步长 \(t\),使用模型预测噪声 \(\hat{\epsilon}\) 或分数函数。
④ 利用噪声调度器定义的逆向步 (Reverse Step) 公式,根据 \(x_t\) 和预测的噪声/分数计算 \(x_{t-1}\)。这个步骤可能包含随机性(随机采样器)或确定性(确定性采样器,如DDIM)。
⑤ 重复步骤 ②-④ 直到达到时间步长 \(0\),得到生成的样本 \(x_0\)。
1
# 伪代码示例:简化的采样循环 (基于DDPM祖先采样)
2
import torch
3
4
# model: 噪声预测模型 (e.g., U-Net)
5
# noise_scheduler: 噪声调度器
6
# initial_noise: 初始高斯噪声 x_T
7
8
x = initial_noise
9
timesteps = noise_scheduler.get_timesteps() # 从T到1
10
11
for t in timesteps:
12
# 获取当前时间步的参数
13
alpha_t = noise_scheduler.alpha_t[t]
14
alpha_bar_t = noise_scheduler.alpha_bar_t[t]
15
beta_t = noise_scheduler.beta_t[t]
16
17
# 预测噪声
18
predicted_noise = model(x, t)
19
20
# 计算去噪后的 x_0 估计
21
x_0_pred = (x - torch.sqrt(1 - alpha_bar_t) * predicted_noise) / torch.sqrt(alpha_bar_t)
22
23
# 计算 x_{t-1} 的均值 (根据DDPM公式)
24
mean = (x - beta_t * predicted_noise / torch.sqrt(1 - alpha_bar_t)) / torch.sqrt(alpha_t)
25
26
if t > 0:
27
# 添加噪声 (根据DDPM公式)
28
z = torch.randn_like(x)
29
sigma_t = torch.sqrt(beta_t) # 或其他方差定义
30
x = mean + sigma_t * z
31
else:
32
x = mean # 最终的 x_0
33
34
# x 即为生成的样本
📌 注意:上述伪代码仅为简化说明,实际实现会依赖于具体的噪声调度器和模型库。
Appendix C.2: 主流深度学习框架的选择
实现扩散模型可以基于多种深度学习框架。目前,PyTorch 和 TensorFlow 是最常用的两个框架。
Appendix C.2.1: PyTorch
① 特点:动态计算图 (Dynamic Computation Graph),易于调试和快速原型开发,社区活跃,学术界使用广泛。
② 优势:许多前沿的扩散模型研究成果首先在 PyTorch 中实现并开源。丰富的生态系统,如 TorchVision、TorchAudio 等,方便处理不同类型的数据。
③ 应用:大多数流行的扩散模型库和实现(如 Hugging Face Diffusers、CompVis latent-diffusion)都是基于 PyTorch。
Appendix C.2.2: TensorFlow
① 特点:静态计算图 (Static Computation Graph)(TensorFlow 1.x)或动态计算图(TensorFlow 2.x),工业界应用广泛,拥有强大的生产部署能力。
② 优势:TFLite、TensorFlow.js 等工具链方便模型在不同平台上的部署。Keras API 提供了高级抽象,简化模型构建。
③ 应用:也有一些扩散模型的实现在 TensorFlow 中,但相比 PyTorch 社区生态略显逊色。
选择建议:对于初学者和研究人员,建议优先选择 PyTorch,因为它与当前最流行的扩散模型库和研究成果更紧密。对于需要在生产环境中部署模型,并且现有基础设施基于 TensorFlow 的团队,可以考虑 TensorFlow 实现。
Appendix C.3: 常用扩散模型库介绍
从头开始实现一个完整的扩散模型涉及大量细节,包括噪声调度、模型架构、训练流程、采样方法等。幸运的是,社区开发了许多优秀的库,极大地简化了扩散模型的实现和应用。
Appendix C.3.1: Hugging Face Diffusers
① 介绍:Diffusers 是 Hugging Face 推出的一个专注于扩散模型(及相关生成模型)的库。它提供了模块化的组件(如预训练模型、噪声调度器、管道 Pipelines)和易于使用的 API,旨在让用户能够轻松地进行推理、训练和自定义。
② 核心模块:
▮▮▮▮管线 (Pipelines): 高级 API,封装了完整的推理流程(如文本到图像生成),用户只需几行代码即可调用。
▮▮▮▮模型 (Models): 提供了各种预训练的噪声预测模型,如 UNet2DModel、UNet2DConditionModel 等。
▮▮▮▮调度器 (Schedulers): 包含了多种噪声调度器算法,用于正向加噪和逆向去噪过程,如 DDPM、DDIM、LMSDiscreteScheduler 等。
③ 优势:
▮▮▮▮易用性:提供了高级 Pipeline API,非常适合快速推理和应用开发。
▮▮▮▮模块化:模型、调度器、管线等组件是独立的,方便用户组合和替换。
▮▮▮▮预训练模型:集成了大量社区和官方发布的预训练扩散模型,覆盖多种任务和领域。
▮▮▮▮社区支持:依托 Hugging Face 强大的社区生态,文档齐全,更新频繁。
④ 适用场景:快速部署和使用预训练模型进行推理、基于现有组件进行微调 (Fine-tuning)、学习扩散模型实现细节、进行新的扩散模型研究。
1
# Hugging Face Diffusers 简单使用示例 (文本到图像生成)
2
from diffusers import StableDiffusionPipeline
3
import torch
4
5
# 载入预训练模型 (需要下载模型权重,首次运行会自动下载)
6
# 使用 GPU 加载以加速
7
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
8
pipe = pipe.to("cuda")
9
10
# 定义文本 Prompt
11
prompt = "一只宇航员骑着马在月球上奔跑,高品质数字艺术" # An astronaut riding a horse on the moon, high quality digital art
12
13
# 生成图像
14
image = pipe(prompt).images[0]
15
16
# 保存图像
17
image.save("astronaut_on_moon.png")
18
print("图片已生成并保存为 astronaut_on_moon.png")
Appendix C.3.2: 其他库 (Other Libraries)
除了 Diffusers,还有一些其他的扩散模型实现和库,例如:
⚝ CompVis latent-diffusion:这是提出潜在扩散模型 (LDM) 的原始代码库,提供了 LDMs 的实现和预训练模型。Diffusers 中的 Stable Diffusion 实现就是基于这个库的思想。
⚝ Guided-Diffusion:OpenAI 开源的 DDPM 原始代码库之一,实现了 DDPM 和一些早期的改进技术,如分类器引导。
⚝ k-diffusion:一个用于扩散模型的 PyTorch 库,专注于提供各种采样方法 (samplers) 的实现,这些采样器通常与 SDE/ODE 求解器相关。
选择建议:对于大多数应用和学习目的,Hugging Face Diffusers 是首选,因为它功能全面、易于使用且社区支持好。如果你需要复现特定论文的结果,可能需要查找并使用该论文作者发布的官方代码库。如果你专注于探索不同的采样方法,k-diffusion 可能是一个不错的选择。
Appendix C.4: 基于Diffusers库的实践示例
本节将通过 Hugging Face Diffusers 库提供更详细的实践示例,帮助读者快速上手。
Appendix C.4.1: 安装与配置 (Installation and Configuration)
首先需要安装 Diffusers 库及其依赖。建议在一个虚拟环境 (Virtual Environment) 中进行安装。
① 安装 PyTorch(根据你的 CUDA 版本选择,以支持 GPU 加速):
1
# 例如,对于 CUDA 11.8
2
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
② 安装 Diffusers、Transformers (用于文本编码) 和 Accelerate (用于分布式训练和优化):
1
pip install diffusers transformers accelerate
③ 安装其他可能的依赖(如用于图像处理的 Pillow):
1
pip install Pillow
确保你的硬件环境支持 GPU,并且正确安装了显卡驱动和 CUDA 工具包,因为扩散模型的计算量很大,GPU 加速是必需的。
Appendix C.4.2: 载入预训练模型与管道 (Loading Pre-trained Models and Pipelines)
Diffusers 的 Pipeline 是最高级的 API,它封装了整个生成过程。
1
from diffusers import DiffusionPipeline
2
import torch
3
4
# 载入一个文本到图像的潜在扩散模型管线 (例如 Stable Diffusion v1.5)
5
# 使用 from_pretrained 方法,提供模型在 Hugging Face Hub 上的名称
6
pipeline_id = "runwayml/stable-diffusion-v1-5"
7
# 指定数据类型为 float16 可以减少显存占用并加速,需要 GPU 支持
8
pipeline = DiffusionPipeline.from_pretrained(pipeline_id, torch_dtype=torch.float16)
9
10
# 将管线加载到 GPU 上
11
pipeline = pipeline.to("cuda")
12
13
# 现在可以使用 pipeline 对象进行生成
14
print(f"模型 {pipeline_id} 已加载到 {pipeline.device} 设备。")
对于其他类型的扩散模型,例如非潜在空间的 DDPM,载入方式类似:
1
from diffusers import DDPMPipeline
2
3
# 载入一个预训练的 DDPM 模型管线 (例如 MNIST 数据集)
4
pipeline = DDPMPipeline.from_pretrained("mnist")
5
pipeline = pipeline.to("cuda") # 如果需要使用 GPU
6
print("DDPM MNIST 模型已加载。")
7
8
# 生成一个样本
9
image = pipeline().images[0]
10
image.save("mnist_sample.png")
11
print("MNIST 样本已生成。")
Appendix C.4.3: 文本到图像生成示例 (Text-to-Image Generation Example)
使用 Stable Diffusion 等模型进行文本到图像生成非常直观。
1
from diffusers import DiffusionPipeline
2
import torch
3
4
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16).to("cuda")
5
6
# 定义正向和负向 Prompt (用于 Classifier-Free Guidance)
7
prompt = "一只可爱的小猫咪在阳光下的草地上玩耍,数字艺术,高细节" # A cute kitten playing on a grassy field in the sun, digital art, high detail
8
negative_prompt = "低质量,模糊,水印,丑陋" # Low quality, blurry, watermark, ugly
9
10
# 调用管线进行生成
11
# num_inference_steps: 采样步数,步数越多生成质量可能越高,但速度越慢
12
# guidance_scale: CFG 权重,越大图像越贴合 prompt 但可能牺牲多样性
13
image = pipeline(prompt, negative_prompt=negative_prompt, num_inference_steps=50, guidance_scale=7.5).images[0]
14
15
# 显示或保存图像
16
image.save("kitten_in_grass.png")
17
print("图像已生成并保存为 kitten_in_grass.png")
18
19
# 也可以生成多个图像
20
# images = pipeline([prompt] * 4, num_inference_steps=50, guidance_scale=7.5).images
21
# for i, img in enumerate(images):
22
# img.save(f"kitten_{i}.png")
🌟 实践提示:尝试不同的 num_inference_steps
和 guidance_scale
参数可以显著影响生成结果。
Appendix C.4.4: 自定义训练入门 (Getting Started with Custom Training)
Diffusers 也支持用户在自己的数据集上训练或微调扩散模型。这通常涉及载入模型组件(模型、调度器),设置优化器和数据加载器,然后运行训练循环。
① 准备数据:将你的图像数据集组织好,可以使用 Diffusers 提供的 load_dataset
功能或标准的 PyTorch Dataset
和 DataLoader
。
② 载入组件:
1
from diffusers import UNet2DModel, DDPMScheduler
2
from transformers import CLIPTextModel, CLIPTokenizer
3
from diffusers.models import AutoencoderKL # For Latent Diffusion
4
5
# 示例:载入 DDPM 的 UNet 模型和调度器
6
model = UNet2DModel(
7
sample_size=64, # 数据尺寸 (例如 64x64)
8
in_channels=3, # 输入通道数 (RGB 为 3)
9
out_channels=3, # 输出通道数
10
layers_per_block=2,
11
block_out_channels=(128, 128, 256, 256, 512, 512),
12
down_block_types=("DownBlock2D", "DownBlock2D", "DownBlock2D", "DownBlock2D", "AttnDownBlock2D", "DownBlock2D"),
13
up_block_types=("UpBlock2D", "AttnUpBlock2D", "UpBlock2D", "UpBlock2D", "UpBlock2D", "UpBlock2D"),
14
)
15
model.to("cuda")
16
17
noise_scheduler = DDPMScheduler(num_train_timesteps=1000)
对于潜在扩散模型 (LDM),还需要载入 VAE 编码器和解码器以及条件编码器(如 CLIP)。
1
# 示例:载入 Latent Diffusion 的 UNet、VAE 和 Scheduler
2
# 这个 U-Net 是条件模型
3
model = UNet2DConditionModel.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="unet")
4
vae = AutoencoderKL.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="vae")
5
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14")
6
text_encoder = CLIPTextModel.from_pretrained("openai/clip-vit-large-patch14")
7
8
model.to("cuda")
9
vae.to("cuda")
10
text_encoder.to("cuda")
11
12
# 潜在扩散模型通常使用 DDPMScheduler 或 PNDMScheduler 等
13
noise_scheduler = DDPMScheduler.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="scheduler")
③ 设置优化器和训练参数:选择合适的优化器(如 AdamW)和学习率调度器。
④ 编写训练循环:实现前面 Appendix C.1.2 中描述的训练过程。Diffusers 提供了 add_noise
和 step
等方法来简化噪声调度器的使用。
⑤ 利用 Accelerate:对于需要分布式训练或混合精度训练 (Mixed Precision Training) 以节省显存的情况,Hugging Face 的 Accelerate 库提供了便捷的抽象层。只需少量代码修改,就可以让训练脚本支持多 GPU 或混合精度。
这是一个简化的训练伪代码框架,实际训练脚本会更复杂,包含数据加载、预处理、日志记录、模型保存、评估等:
1
# 伪代码示例:简化的自定义训练框架
2
import torch
3
from diffusers import UNet2DModel, DDPMScheduler
4
# ... 其他导入 ...
5
6
# 1. 初始化模型、调度器、优化器
7
model = UNet2DModel(...) # 根据数据和任务配置模型
8
model.to("cuda")
9
noise_scheduler = DDPMScheduler(...)
10
optimizer = torch.optim.AdamW(model.parameters(), lr=...)
11
12
# 2. 准备数据加载器
13
# dataloader = ...
14
15
# 3. 使用 Accelerate 初始化 (可选,用于分布式/混合精度)
16
# from accelerate import Accelerator
17
# accelerator = Accelerator()
18
# model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
19
20
21
num_epochs = 100
22
for epoch in range(num_epochs):
23
for step, batch in enumerate(dataloader):
24
# accelerator.unwrap_model(model).train() # 如果使用 Accelerate
25
26
x_0 = batch['images'].to(model.device) # 原始数据
27
28
# 随机采样时间步长
29
t = torch.randint(0, noise_scheduler.config.num_train_timesteps, (x_0.shape[0],), device=x_0.device).long()
30
31
# 获取噪声
32
noise = torch.randn_like(x_0)
33
34
# 计算加噪数据 x_t
35
x_t = noise_scheduler.add_noise(x_0, noise, t)
36
37
# 预测噪声
38
# 对于条件模型,这里还需要传入条件信息,例如 text_embeddings
39
predicted_noise = model(x_t, t).sample # Diffusers 模型输出是一个字典或对象,取 sample 属性
40
41
# 计算损失
42
loss = torch.nn.functional.mse_loss(predicted_noise, noise)
43
44
# 反向传播和参数更新
45
# if accelerator.sync_gradients:
46
# accelerator.backward(loss) # 使用 Accelerate
47
# else:
48
loss.backward() # 不使用 Accelerate
49
optimizer.step()
50
optimizer.zero_grad()
51
52
# 打印日志,保存模型等
53
if step % 100 == 0:
54
print(f"Epoch {epoch}, Step {step}, Loss: {loss.item():.4f}")
55
56
# 训练完成后保存模型
57
# accelerator.save_model(model, "my_diffusion_model") # 如果使用 Accelerate
58
# else:
59
# torch.save(model.state_dict(), "my_diffusion_model.pt")
Appendix C.5: 实践建议与技巧
在实现和训练扩散模型时,有一些实践建议可以帮助你提高效率和效果。
Appendix C.5.1: 计算资源考量 (Computational Resource Considerations)
⚝ GPU 内存:扩散模型(尤其是 U-Net 架构和大型潜在模型如 Stable Diffusion)需要大量 GPU 内存。图像分辨率越高、批量大小 (batch size) 越大、模型参数越多,所需的内存越多。考虑使用显存更大的 GPU(如 A100、RTX 4090),或者采用混合精度训练 (如 FP16/BF16) 和梯度累积 (Gradient Accumulation) 技术来减少内存占用。
⚝ 训练时间:扩散模型训练通常需要较长时间,从几天到几周不等,取决于数据集大小、模型复杂度和可用硬件。使用多 GPU 进行分布式训练可以显著缩短训练时间。
⚝ 推理时间:扩散模型的原始采样过程是迭代的,需要数百甚至上千个步长,推理速度较慢。利用 DDIM、PNDM、Euler A 等快速采样器可以将采样步数减少到几十步,大幅提高推理速度。潜在扩散模型在低维空间采样也更快。
Appendix C.5.2: 超参数调优 (Hyperparameter Tuning)
⚝ 学习率 (Learning Rate):学习率的选择至关重要。常用的初始学习率在 \(10^{-4}\) 到 \(10^{-5}\) 之间。学习率调度器 (Learning Rate Scheduler) 可以帮助在训练过程中动态调整学习率。
⚝ 批量大小 (Batch Size):批量大小影响模型的训练稳定性和内存占用。较大的批量大小可能有助于训练稳定,但也需要更多内存。
⚝ 噪声调度器 (Noise Scheduler):不同的噪声调度策略(如线性、余弦)和参数(如时间步长数量 num_train_timesteps
)会影响模型的性能。默认的线性或余弦调度器通常是好的起点。
⚝ 采样步数 (Number of Inference Steps):在推理阶段,采样步数是生成质量和速度之间的权衡。通常,更多步数可以产生更高质量的图像,但需要更长时间。几十步通常就能获得不错的结果。
⚝ 分类器引导/无分类器引导权重 (Guidance Scale):对于条件生成,引导权重控制生成结果与条件的匹配程度。较大的权重使结果更贴合条件,但可能牺牲多样性或引入伪影 (artifacts)。
Appendix C.5.3: 数据集处理 (Dataset Preparation)
⚝ 数据归一化 (Normalization):通常将图像像素值归一化到 \([-1, 1]\) 范围,以匹配模型输出的激活范围。扩散模型通常在 \([-1, 1]\) 或 \([0, 1]\) 范围内工作,确保数据范围与模型和调度器期望的一致。
⚝ 数据增强 (Data Augmentation):适当的数据增强(如随机裁剪、水平翻转)可以提高模型的泛化能力。
⚝ 高分辨率数据:直接在高分辨率图像上训练计算成本极高。潜在扩散模型通过在低维潜在空间训练有效解决了这个问题。对于非潜在模型,可以先在低分辨率下训练,然后使用超分辨率模型进行提升,或者采用级联扩散模型 (Cascaded Diffusion Models)。
Appendix C.5.4: 常见问题与调试 (Common Issues and Debugging)
⚝ 模型不收敛:检查学习率是否过高或过低,批量大小是否合适,损失函数实现是否正确,数据是否正确加载和预处理,以及模型架构是否有问题。
⚝ 生成的图像质量差或模式坍塌:尝试调整超参数、增加训练数据、改进模型架构、更换噪声调度器或采样器。确保训练损失在合理范围内下降。
⚝ 显存溢出 (Out-of-Memory, OOM):减少批量大小,降低图像分辨率,使用混合精度训练 (torch.cuda.amp
),启用梯度检查点 (Gradient Checkpointing),或使用更大的 GPU。
⚝ 采样速度慢:使用更快的采样器(如 DDIM、Euler A),减少采样步数,或者考虑潜在扩散模型。
🚀 Diffusers 库提供了丰富的示例脚本和文档,是学习和实践扩散模型的绝佳资源。建议读者结合官方文档和示例代码进行实践。
Appendix D: 常用数据集介绍
Appendix D1: 引言
在深度学习,特别是生成模型领域,高质量、多样化的数据集是训练成功的模型的基石。对于扩散模型(Diffusion Models)在图像和视觉领域的应用而言,数据集的选择直接影响到模型的生成能力、生成样本的质量、多样性以及模型能够处理的任务类型。本附录旨在介绍一些在扩散模型研究和应用中常用的图像和视觉数据集,帮助读者了解这些数据集的特点,以及它们为何适用于训练和评估扩散模型。
选择合适的数据集需要考虑多个因素,包括:
⚝ 数据规模:训练大型扩散模型通常需要海量数据。
⚝ 数据多样性:数据集应包含足够丰富的内容,以避免模式坍塌(Mode Collapse)。
⚝ 图像分辨率:生成高分辨率图像需要数据集提供高分辨率样本。
⚝ 数据标注:对于条件生成任务(如文本到图像、类别条件生成),标注信息的质量至关重要。
⚝ 数据领域:根据应用场景选择通用图像、特定领域(如人脸、医学影像)或图像-文本对数据集。
以下将详细介绍一些代表性的数据集。
Appendix D2: 经典通用图像数据集
这些数据集常被用作基准(Benchmark)数据集,用于评估不同生成模型在通用图像生成任务上的性能,特别是对于较早或较小的模型。
Appendix D2.1: CIFAR-10
① 数据集描述
▮▮▮▮ⓑ 全称:加拿大高级研究院图像数据集(Canadian Institute for Advanced Research, CIFAR)的一个子集。
▮▮▮▮ⓒ 组成:包含10个类别的60,000张32x32彩色图像。
▮▮▮▮ⓓ 类别:飞机(airplane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog)、蛙类(frog)、马(horse)、船(ship)、卡车(truck)。每类6000张图像。
▮▮▮▮ⓔ 划分:训练集50,000张,测试集10,000张。
② 在扩散模型中的应用
▮▮▮▮⚝ CIFAR-10由于其相对较小的尺寸和分辨率,常被用作快速验证新模型架构、训练技巧或理论概念的实验平台。
▮▮▮▮⚝ 许多早期的扩散模型,如DDPM(Denoising Diffusion Probabilistic Models)的原始论文,首先在CIFAR-10上展示了其生成高质量图像的能力,并且在FID(Fréchet Inception Distance)等指标上超越了当时的GANs和VAEs。
▮▮▮▮⚝ 它适用于类别条件生成任务的研究。
Appendix D2.2: ImageNet
① 数据集描述
▮▮▮▮ⓑ 全称:大规模视觉识别挑战赛数据集(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)常使用的版本。
▮▮▮▮ⓒ 组成:一个庞大的图像数据库,IL SVRC 2012版本包含超过1400万张图像,分为1000个物体类别。
▮▮▮▮ⓓ 类别:覆盖了各种物体、动物、场景等。
▮▮▮▮ⓔ 分辨率:图像分辨率各不相同,通常在使用时会被缩放到固定大小,如256x256或512x512像素进行训练。
▮▮▮▮ⓕ 规模:训练集约128万张,验证集5万张,测试集10万张。
② 在扩散模型中的应用
▮▮▮▮⚝ ImageNet是训练大型、高能力通用生成模型的标准数据集。在ImageNet上表现良好是衡量生成模型能力的重要标准。
▮▮▮▮⚝ 扩散模型在ImageNet上生成高分辨率、高保真度图像方面取得了巨大成功,是其超越早期生成模型的重要里程碑。
▮▮▮▮⚝ 它广泛用于类别条件扩散模型的训练。训练能够生成ImageNet 1000个类别中任意一个类别图像的模型。
▮▮▮▮⚝ 由于数据集规模巨大,在ImageNet上训练扩散模型需要大量的计算资源和时间。
Appendix D3: 特定领域图像数据集
这些数据集聚焦于特定类型的图像,常用于训练在该领域表现卓越的扩散模型。
Appendix D3.1: FFHQ (Flickr-Faces-High-Quality)
① 数据集描述
▮▮▮▮ⓑ 全称:Flickr高品质人脸数据集。
▮▮▮▮ⓒ 组成:包含70,000张高分辨率(1024x1024)的人脸图像。
▮▮▮▮ⓓ 特点:数据集质量高,覆盖了年龄、种族、背景、姿态、表情、妆容、眼镜等多种变化,具有较高的多样性。图像是从Flickr上抓取并经过筛选和预处理。
▮▮▮▮ⓔ 分辨率:原始分辨率高达1024x1024,常被缩放到不同大小用于训练。
② 在扩散模型中的应用
▮▮▮▮⚝ FFHQ是训练高质量人脸生成模型的常用数据集。扩散模型在FFHQ上展现了生成逼真人脸图像的卓越能力。
▮▮▮▮⚝ 由于其高分辨率,是评估模型在高分辨率生成方面性能的理想选择。
▮▮▮▮⚝ 常用于研究和实现人脸相关的生成任务,如人脸编辑、属性控制生成等。
Appendix D3.2: LSUN (Large-scale Scene Understanding)
① 数据集描述
▮▮▮▮ⓑ 全称:大规模场景理解数据集。
▮▮▮▮ⓒ 组成:包含数百万张图像,按场景类别(如卧室 bedroom、教堂 church、厨房 kitchen、客厅 living_room 等)和物体类别(如汽车 car、鸟 bird、猫 cat 等)进行组织。
▮▮▮▮ⓓ 分辨率:图像分辨率较高,例如LSUN bedrooms数据集通常是256x256或更高。
▮▮▮▮ⓔ 规模:每个类别的图像数量庞大,例如LSUN bedroom训练集有超过300万张图像。
② 在扩散模型中的应用
▮▮▮▮⚝ LSUN的不同类别数据集(如LSUN bedrooms)常用于训练特定场景的生成模型,评估模型在复杂场景结构和细节方面的生成能力。
▮▮▮▮⚝ 由于其高分辨率和大规模,与ImageNet类似,是训练和评估大型扩散模型的重要数据集。
▮▮▮▮⚝ 在早期生成模型研究中(包括扩散模型的前身或并行工作),LSUN是重要的基准之一。
Appendix D3.3: CelebA / CelebA-HQ
① 数据集描述
▮▮▮▮ⓑ 全称:名人面部属性数据集(Large-scale CelebFaces Attributes Dataset, CelebA)及其高品质版本(CelebA-HQ)。
▮▮▮▮ⓒ 组成:CelebA包含20万张名人图像,带有40个面部属性标注。CelebA-HQ是CelebA的子集,包含30,000张经过人工筛选和处理的高分辨率(1024x1024)图像。
▮▮▮▮ⓓ 特点:提供了丰富的属性标注,如年龄、性别、发色、是否戴眼镜等。
▮▮▮▮ⓔ 分辨率:CelebA原始分辨率较低,通常需要裁剪对齐,CelebA-HQ为高分辨率。
② 在扩散模型中的应用
▮▮▮▮⚝ CelebA及其HQ版本常用于人脸生成和属性条件生成任务。
▮▮▮▮⚝ 利用其丰富的属性标注,可以训练能够根据指定属性生成人脸的条件扩散模型。
▮▮▮▮⚝ 相比FFHQ,CelebA提供了更多的属性控制可能性,而FFHQ通常用于追求最高生成质量。
Appendix D4: 图像-文本对数据集
这些数据集包含图像及其对应的文本描述,是训练文本到图像扩散模型(Text-to-Image Diffusion Models)不可或缺的数据源。
Appendix D4.1: MS COCO (Microsoft Common Objects in Context)
① 数据集描述
▮▮▮▮ⓑ 全称:微软通用物体上下文数据集。
▮▮▮▮ⓒ 组成:一个大型图像数据集,包含超过33万张图像,用于物体检测、图像分割、关键点检测、图像标注(Captioning)等任务。
▮▮▮▮ⓓ 特点:每张图像都配有多条高质量的英文文本标注。
▮▮▮▮ⓔ 规模:训练集约12万张,验证集约5千张,测试集约4万张。
② 在扩散模型中的应用
▮▮▮▮⚝ COCO数据集常用于训练文本条件下的图像生成模型,包括扩散模型。
▮▮▮▮⚝ 它的文本标注质量较高,适合评估模型理解文本描述并生成相应图像的能力。
▮▮▮▮⚝ 也常用于图像编辑(如Inpainting, Outpainting)和理解任务的评估。
Appendix D4.2: LAION (Large-scale Artificial Intelligence Open Network)
① 数据集描述
▮▮▮▮ⓑ 全称:大规模人工智能开放网络数据集(非官方全称,LAION是一个组织)。
▮▮▮▮ⓒ 组成:由LAION组织公开发布的一系列超大规模图像-文本对数据集,例如LAION-400M、LAION-5B等。这些数据集是通过抓取互联网上带有Alt-text的图像和文本对构建的。
▮▮▮▮ⓓ 特点:规模极其庞大,LAION-5B包含约50亿对图像-文本对。数据质量相对于人工标注数据集(如COCO)较低,但规模巨大提供了前所未有的多样性。
▮▮▮▮ⓔ 规模:数十亿对图像-文本对。
② 在扩散模型中的应用
▮▮▮▮⚝ LAION数据集是训练当前最先进的、能够进行开放域文本到图像生成的扩散模型(如Stable Diffusion、Imagen)的关键。
▮▮▮▮⚝ 其巨大的规模使得模型能够学习到海量的视觉概念及其与文本的对应关系,从而实现强大的零样本(Zero-shot)生成能力。
▮▮▮▮⚝ 尽管数据质量参差不齐,但通过大规模训练,模型能够从中学习到强大的泛化能力。
Appendix D5: 数据集的选择与使用考量
选择和使用数据集时,除了上述特点,还需要考虑以下几点:
⚝ 数据许可(Licensing):确保使用的数据集符合相关的许可协议,特别是在商业应用中。例如,ImageNet、COCO等有明确的许可条款。LAION数据集本身只提供索引和链接,原始数据的使用需遵守各网站的条款。
⚝ 数据预处理:大多数数据集需要进行预处理,如图像缩放、裁剪、数据增强等,以适应模型输入和提高训练效率。
⚝ 计算资源:大规模数据集需要巨大的存储空间和计算资源进行训练。例如,在ImageNet上训练一个大型扩散模型可能需要数十甚至上百个GPU天。
⚝ 数据偏差(Data Bias):现实世界数据集往往存在偏差,可能导致模型生成的结果反映或放大这些偏差(如性别、种族、风格等)。在使用和评估模型时应注意这一点。
⚝ 数据质量:抓取的数据集(如LAION)可能包含低质量图像、不准确的文本描述、水印等,需要采取策略(如过滤、清洗)来缓解这些问题。
了解这些常用数据集的特点及其在扩散模型中的应用,对于读者理解扩散模型的研究进展、复现已有工作以及开展新的研究至关重要。读者应根据自己的研究或应用需求,选择最合适的数据集。
Appendix E: 术语表 (Glossary)
本附录收录了本书中出现的关键术语及其定义,旨在帮助读者快速查阅和理解专业概念。术语按中文名称的首字母排序。
⚝ GANs (生成对抗网络)(Generative Adversarial Networks)
一种生成模型框架。它包含一个生成器 (Generator) 和一个判别器 (Discriminator),两者通过对抗训练的方式相互优化。生成器试图生成逼真的样本以欺骗判别器,而判别器试图区分真实样本和生成样本。
⚝ ELBO (变分下界)(Evidence Lower Bound)
在变分推断中,是模型数据对数似然的一个下界。最大化 ELBO 等价于最小化数据分布与变分后验分布之间的KL散度 (KL Divergence)。在许多生成模型(如 VAE 和 DDPM)的训练中被用作目标函数。
⚝ FID (Fréchet Inception Distance)(Fréchet Inception Distance)
一种用于评估生成模型样本质量的指标。它计算生成样本集合与真实样本集合在Inception网络特征空间中的弗雷歇距离 (Fréchet Distance)。较低的 FID 值表示生成样本的质量和多样性更接近真实数据。
⚝ IS (Inception Score)(Inception Score)
一种早期的生成模型评估指标,主要用于评估图像的清晰度和多样性。它利用一个预训练的图像分类模型 (如 Inception) 计算生成图像的分类概率分布的熵 (Entropy) 和条件熵 (Conditional Entropy)。高 IS 值通常表示生成图像既清晰又多样。
⚝ KID (Kernel Inception Distance)(Kernel Inception Distance)
FID 的一个变体,使用最大均值差异 (Maximum Mean Discrepancy, MMD) 来衡量生成样本与真实样本在 Inception 特征空间中的分布差异。相比 FID,KID 对样本量不那么敏感。
⚝ LPIPS (Learned Perceptual Image Patch Similarity)(Learned Perceptual Image Patch Similarity)
一种基于深度学习的图像感知相似度度量。它训练一个神经网络来判断两张图像在人类感知上的相似程度,常用于评估图像生成、超分辨率等任务中生成结果与参考图像的相似度。
⚝ ODE (常微分方程)(Ordinary Differential Equation)
描述一个函数相对于其一个自变量的导数与其函数值之间关系的方程。在连续时间扩散模型中,逆向过程可以被描述为一个确定的 ODE。
⚝ SDE (随机微分方程)(Stochastic Differential Equation)
描述一个随机过程的演化方程,其中包含一个随机噪声项(通常是维纳过程,Wiener Process)。在基于分数的生成模型和连续时间扩散模型中,正向扩散过程和逆向生成过程都可以用 SDE 来描述。
⚝ U-Net(U-Net)
一种常用的卷积神经网络架构,最初用于生物医学图像分割。其特点是编码器-解码器结构以及跳跃连接 (Skip Connections),能够有效地结合不同尺度的特征。在扩散模型中,U-Net 常常被用作预测噪声或分数函数的骨干网络。
⚝ VAE (变分自编码器)(Variational Autoencoder)
一种基于变分推断的生成模型。它包含一个编码器将输入数据映射到潜在空间的概率分布,以及一个解码器从潜在空间采样并重建原始数据。通过优化 ELBO 进行训练。
⚝ VE SDE (方差爆发 SDE)(Variance Exploding SDE)
一种描述扩散过程的随机微分方程。在这种过程中,数据方差随时间步的增加而“爆发”式增长,最终趋向于无穷大。常用于描述基于分数的生成模型中的正向过程。
⚝ VLB (变分下界)(Variational Lower Bound)
参见 ELBO。
⚝ VP SDE (方差保持 SDE)(Variance Preserving SDE)
一种描述扩散过程的随机微分方程。在这种过程中,数据方差随时间步的增加而被逐渐“污染”,但通常被归一化或控制在一个范围内。DDPM 的正向过程可以看作是 VP SDE 的离散化。
⚝ 3D形状生成(3D Shape Generation)
利用生成模型(包括扩散模型)创建三维数据(如点云、体素、网格等)的任务。
⚝ 注意力机制(Attention Mechanism)
一种神经网络技术,允许模型在处理序列或网格数据时,对输入的不同部分赋予不同的权重,从而关注最重要的信息。在扩散模型(尤其是基于 Transformer 或带有注意力层的 U-Net)中用于捕捉长距离依赖关系。
⚝ 采样速度(Sampling Speed)
指从训练好的生成模型中生成一个新样本所需的时间。扩散模型早期的一个主要挑战是采样速度较慢,需要许多步迭代去噪,但后续提出了许多加速技术。
⚝ 变分自编码器(Variational Autoencoder)
参见 VAE。
⚝ 变分下界(Variational Lower Bound)
参见 ELBO, VLB。
⚝ 超分辨率(Super-Resolution)
从低分辨率图像重建高分辨率图像的任务。扩散模型在这一领域取得了显著成果。
⚝ 常微分方程(Ordinary Differential Equation)
参见 ODE。
⚝ 长尾分布(Long-tail Distribution)
指数据集中大部分样本集中在少数类别或模式,而许多类别或模式只包含极少量样本的分布。生成模型在捕捉和生成长尾分布中的罕见样本时面临挑战。
⚝ 惩罚项(Penalty Term)
在优化目标函数中添加的项,用于约束模型的某些属性或行为。
⚝ 交叉注意力(Cross-Attention)
一种注意力机制的变体,允许模型在生成过程中,让一个模态(如图像特征)查询另一个模态(如文本特征),从而实现跨模态信息的融合。在文本到图像扩散模型中广泛使用。
⚝ 代码库(Codebase)
用于实现特定模型或算法的程序代码集合。流行的扩散模型代码库包括 Diffusers 等。
⚝ 扩散模型(Diffusion Models)
一类生成模型,通过模拟数据从复杂分布逐步演变成简单噪声(正向扩散过程),然后学习逆转这个过程,从噪声中逐步恢复数据(逆向去噪过程)来进行生成。
⚝ 扩散SDE(Diffusion SDE)
描述连续时间正向扩散过程的随机微分方程。
⚝ 扩散Transformer(Diffusion Transformers, DiT)
使用 Transformer 架构作为骨干网络来替换传统的 U-Net 结构的扩散模型。
⚝ 多模态扩散模型(Multimodal Diffusion Models)
能够处理和生成多种类型数据(如图像、文本、音频、视频等)或它们之间关联的扩散模型。
⚝ 多样性度量(Diversity Metrics)
用于评估生成模型生成样本集合在数据分布上的覆盖程度和多样性,避免模式坍塌。
⚝ 方差保持 SDE(Variance Preserving SDE)
参见 VP SDE。
⚝ 方差爆发 SDE(Variance Exploding SDE)
参见 VE SDE。
⚝ 方差调度(Variance Schedule)
在扩散模型的正向过程中,控制每一步添加噪声量(方差)的函数或策略。常见的有线性、二次、余弦调度等。
⚝ 快速采样(Fast Sampling)
指通过各种技术手段(如改进求解器、模型蒸馏、一步生成等)来减少扩散模型生成样本所需的迭代步数,提高采样效率。
⚝ 感知压缩(Perceptual Compression)
在潜在扩散模型 (LDM) 中,指通过一个感知编码器(如 VAE 的编码器)将高维数据(如图像)压缩到低维潜在空间,同时尽量保留对感知重要的信息。
⚝ 分类器引导(Classifier Guidance)
一种条件生成技术,通过训练一个单独的分类器,并在扩散模型的逆向过程中利用分类器的梯度来引导样本生成,使其更符合特定的类别条件。
⚝ 高斯噪声(Gaussian Noise)
指服从高斯分布(正态分布)的随机噪声。在扩散模型的正向过程中,通常每一步添加的是独立的高斯噪声。
⚝ 计算机视觉(Computer Vision)
人工智能领域的一个分支,研究如何让计算机“看懂”和理解图像或视频内容。
⚝ 高质量图像生成(High-Quality Image Generation)
利用生成模型创建逼真、细节丰富、视觉效果好的图像的任务。
⚝ 根源采样(Ancestral Sampling)
指 DDPM 论文中描述的,基于离散时间逆向马尔可夫链的原始采样过程,每一步从模型预测的分布中随机采样。
⚝ 流匹配(Flow Matching)
一种新型的生成模型训练框架,将生成过程建模为学习一个向量场,使得数据点沿着该向量场从简单分布流向复杂分布。与扩散模型在连续时间视角下有密切联系。
⚝ 计算成本(Computational Cost)
指训练或运行模型所需的计算资源,如 GPU 时间、内存等。扩散模型通常训练计算成本较高。
⚝ 潜在空间(Latent Space)
在许多生成模型(如 VAE、GAN、LDM)中,指一个低维的向量空间,数据被编码到该空间中,模型的生成过程通常在该空间进行。
⚝ 潜在扩散模型(Latent Diffusion Models, LDM)
一种在低维潜在空间而非原始像素空间进行扩散过程的扩散模型变体。这显著降低了计算量,特别适用于高分辨率图像生成。
⚝ 朗之万动力学(Langevin Dynamics)
一种基于分数函数的采样算法。通过迭代地朝着分数函数的方向移动并添加噪声,可以渐进地从复杂的数据分布中采样。是基于分数的生成模型的关键采样方法。
⚝ 模式坍塌(Mode Collapse)
生成模型训练中的一个常见问题,指生成器只能生成数据分布中的部分模式(子集),无法覆盖整个真实数据分布的多样性。
⚝ 评估指标(Evaluation Metrics)
用于量化评估生成模型性能的标准或方法,如 FID、IS、LPIPS 等。
⚝ 医学影像应用(Medical Imaging Applications)
扩散模型在医学图像生成、增强、去噪、分割、重建等领域的应用探索。
⚝ 去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)
一种具体的扩散模型实现,定义了固定的正向马尔可夫高斯扩散过程,并学习逆向过程以预测每一步需要去除的噪声。
⚝ 去噪分数匹配(Denoising Score Matching)
一种训练分数匹配模型的技术,通过向数据添加噪声,然后训练模型预测噪声方向(与分数函数方向一致),来估计分数函数。DDPM 的简化训练目标等价于加权去噪分数匹配。
⚝ 求解器(Solver)
在连续时间扩散模型或 DDIM 中,指用于数值求解逆向 SDE 或 ODE,从而实现样本生成的算法,如 Euler 方法、Runge-Kutta 方法等。
⚝ 人工评估(Human Evaluation)
由人类观察者主观评估生成样本的质量、逼真度、创造性或是否符合特定条件的方法。通常作为自动化指标的补充。
⚝ 深度学习(Deep Learning)
机器学习的一个子领域,利用包含多个隐藏层(深度)的神经网络模型来学习数据表示和完成任务。
⚝ 深度伪造(Deepfakes)
利用深度学习技术(特别是生成模型,如 GAN 或扩散模型)合成虚假图像、音频或视频,通常用于创建逼真的虚假人物言行。这是一个重要的伦理风险。
⚝ 生成模型(Generative Models)
一类机器学习模型,旨在学习数据(如图像、文本、音频等)的内在分布,并能够生成新的、与真实数据具有相似统计特性的样本。
⚝ 生成对抗网络(Generative Adversarial Networks)
参见 GANs。
⚝ 时间步嵌入(Timestep Embedding)
在扩散模型的神经网络(如 U-Net)中,将当前扩散时间步信息编码成向量并注入到网络结构中的技术,使模型能够根据不同的噪声水平进行预测。
⚝ 图像编辑(Image Editing)
利用扩散模型等生成技术,对现有图像进行修改、增强或转换的任务,包括修复、外绘、风格迁移、语义编辑等。
⚝ 图像外绘(Outpainting)
利用生成模型(如扩散模型)根据图像的现有内容,向图像边界外部扩展并生成新的内容,从而扩大图像画布。
⚝ 图像生成(Image Generation)
利用生成模型创建新的图像的任务。
⚝ 图像修复(Inpainting)
利用生成模型(如扩散模型)填充图像中缺失或被遮挡区域的任务,使其与周围内容协调一致。
⚝ 图像压缩与去噪(Image Compression and Denoising)
利用扩散模型强大的去噪能力实现图像压缩或从含噪图像中恢复干净图像的任务。
⚝ 无分类器引导(Classifier-Free Guidance, CFG)
一种流行的条件生成技术。通过训练一个模型,使其同时能够进行条件生成和无条件生成,并在采样时结合两者的预测,从而在不依赖额外分类器的情况下实现更强的条件引导效果。
⚝ 物理学(Physics)
扩散过程的概念最初来源于物理学中的布朗运动和热力学,这为扩散模型的理论基础提供了启示。
⚝ 文本到图像生成(Text-to-Image Generation)
利用条件生成模型(如文本引导的扩散模型)根据输入的文本描述生成相应图像的任务。
⚝ 文本编码器(Text Encoder)
在文本到图像生成模型中,用于将文本描述(字符串)转换成具有语义信息的向量表示(嵌入)的神经网络模型,通常使用 Transformer 架构(如 CLIP 的文本编码器、BERT 等)。
⚝ 逆向SDE(Reverse SDE)
描述连续时间逆向生成过程的随机微分方程。通过数值求解逆向 SDE 可以从噪声中采样数据。
⚝ 逆向过程(Reverse Process)
在扩散模型中,指模型学习从加噪后的数据逐步恢复原始数据的过程。通常被建模为一个参数化的马尔可夫链。
⚝ 逆向去噪过程(Reverse Denoising Process)
参见逆向过程。
⚝ 正向扩散过程(Forward Diffusion Process)
在扩散模型中,指数据逐步被添加噪声,最终变为纯高斯噪声的过程。通常被定义为一个固定的马尔可夫链。
⚝ 条件生成(Conditional Generation)
指生成模型根据额外的输入条件(如类别标签、文本描述、另一张图像等)来生成符合这些条件的样本。
⚝ 语义编辑(Semantic Editing)
利用生成模型(如扩散模型)根据高级语义指令(如文本描述或概念)修改图像内容的任务。
⚝ 分数函数(Score Function)
数据分布对数概率密度函数关于数据本身的梯度。在基于分数的生成模型和扩散模型中,分数函数包含了数据分布的重要信息,学习估计分数函数是核心任务。数学表示为 \( \nabla_{\mathbf{x}} \log p(\mathbf{x}) \)。
⚝ 风格迁移(Style Transfer)
将一幅图像的风格(如艺术风格)应用到另一幅图像的内容上,生成一幅新的图像的任务。扩散模型可以用于风格迁移。
⚝ 随机变量(Random Variable)
一个其可能值由随机现象决定的变量。
⚝ 随机过程(Random Process)
一系列随机变量在时间或其他维度上的集合。
⚝ 随机微分方程(Stochastic Differential Equation)
参见 SDE。
⚝ 统一视角(Unified View)
指将不同类型的生成模型(如 DDPM、基于分数的模型)从数学上统一到一个框架下进行理解,例如通过 SDE 和 ODE 的视角。
⚝ 马尔可夫链(Markov Chain)
一个随机过程,其中未来状态的概率分布仅取决于当前状态,与过去状态无关。扩散模型的正向和逆向过程通常被建模为马尔可夫链。
⚝ 流模型(Flow-based Models)
一类通过可逆变换 (Invertible Transformations) 学习数据分布的生成模型。能够精确计算数据点的对数似然。
⚝ 视觉-语言模型(Vision-Language Models)
能够处理和理解图像/视频和文本之间关联的深度学习模型。扩散模型可以与这些模型结合,实现强大的跨模态生成和理解任务。
⚝ 自回归模型(Autoregressive Models)
一类生成模型,按顺序生成数据点的每个元素,且每个元素的生成都以前面的元素为条件。常用于序列数据(如文本、音频)或按像素生成的图像模型。
Appendix F: 参考文献 (References)
本附录列出了本书在撰写过程中引用和参考的重要研究论文、书籍以及其他资源。这些文献涵盖了扩散模型(Diffusion Models)从早期概念到最新进展的关键工作,是进一步深入学习和研究的基础。
以下是一些具有代表性的核心参考文献:
① Sohl-Dickstein, J., Weiss, E., Maheswaranathan, N., & Ganguli, S. (2015). Deep Unsupervised Learning using Nonequilibrium Thermodynamics. arXiv preprint arXiv:1503.03585.
▮▮▮▮ⓑ 这篇论文首次提出了扩散概率模型(Diffusion Probabilistic Models, DPM)的基本思想,将数据生成过程类比于非平衡热力学过程。
② Ho, J., Jain, A., & Abbeel, P. (2020). Denoising Diffusion Probabilistic Models. Advances in Neural Information Processing Systems, 33, 6840-6851.
▮▮▮▮ⓑ 该论文是去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)的开创性工作之一,通过简化变分下界(Variational Lower Bound, VLB)得到了一个易于实现的训练目标,极大地推动了扩散模型在图像生成领域的应用。
③ Song, Y., Meng, C., & Ermon, S. (2020). Denoising Diffusion Implicit Models. arXiv preprint arXiv:2010.02502.
▮▮▮▮ⓑ 提出了去噪扩散隐式模型(Denoising Diffusion Implicit Models, DDIM),展示了在扩散模型中存在确定性的逆向采样过程,可以在大幅减少采样步数的同时生成高质量样本,并支持样本插值等特性。
④ Song, Y., Kingma, D. P., Ermon, S., Poole, B., & Ha, D. (2021). Score-Based Generative Modeling through Stochastic Differential Equations. International Conference on Learning Representations.
▮▮▮▮ⓑ 从基于分数的生成模型(Score-based Generative Models)的角度统一了扩散模型和分数匹配模型,提出了通过随机微分方程(Stochastic Differential Equation, SDE)描述正向扩散和逆向生成过程的框架,并引入了预测校正采样器。
⑤ Dhariwal, P., & Nichol, A. (2021). Diffusion Models Beat GANs on Image Synthesis. Advances in Neural Information Processing Systems, 34, 8789-8803.
▮▮▮▮ⓑ 这篇工作通过改进模型架构(如使用注意力机制)和采样策略,证明了扩散模型在图像生成质量上可以超越生成对抗网络(GANs),达到了当时的领先水平。
⑥ Nichol, A. Q., Dhariwal, P., Ramesh, A., Shyam, P., Mishkin, P., Xu, T., ... & Chen, M. (2021). Improved Denoising Diffusion Probabilistic Models. arXiv preprint arXiv:2102.09672.
▮▮▮▮ⓑ 对DDPM进行了多方面的改进,包括更好的方差调度(Variance Scheduling)和引入分类器引导(Classifier Guidance),进一步提升了生成质量和条件生成的能力。
⑦ Rombach, R., Blattmann, A., Lorenz, D., Esser, P., & Ommer, B. (2022). High-Resolution Image Synthesis with Latent Diffusion Models. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, 10684-10695.
▮▮▮▮ⓑ 提出了潜在扩散模型(Latent Diffusion Models, LDM),通过在预训练的变分自编码器(VAE)的潜在空间(Latent Space)进行扩散过程,大幅降低了计算复杂度,使得高分辨率图像生成和各种条件生成任务(特别是文本到图像)变得更加高效和可行。Stable Diffusion 模型即是基于此框架。
⑧ Ramesh, A., Dhariwal, P., Chen, M., Meng, C., Mishkin, P., Tang, X., ... & Sutskever, I. (2022). Hierarchical Text-Conditional Image Generation with Diffusion Models. arXiv preprint arXiv:2204.06125.
▮▮▮▮ⓑ 介绍了DALL-E 2,一个利用层级扩散模型(Hierarchical Diffusion Models)实现高质量文本到图像生成的系统,并在模型中有效结合了对比语言-图像预训练(CLIP)模型的特征。
⑨ Ho, J., Salimans, T., Chan, C., Saharia, C., Whang, J., Gao, J., ... & Norouzi, M. (2022). Imagen: Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding. arXiv preprint arXiv:2205.11487.
▮▮▮▮ⓑ Google提出的Imagen模型,强调使用大型语言模型(Large Language Models)作为文本编码器来提升文本理解能力,并利用级联扩散模型(Cascaded Diffusion Models)生成高分辨率图像,展示了文本编码器在文本到图像任务中的重要性。
⑩ Song, Y., Wu, J., J., Zhu, Y., Pang, J., & Ermon, S. (2023). Consistency Models. International Conference on Machine Learning.
▮▮▮▮ⓑ 提出了一种新型的生成模型——一致性模型(Consistency Models),它可以从连续时间扩散模型的解路径中学习,并允许仅用一步(或少量几步)就能生成高质量样本,大大提高了采样效率。
⑪ Peebles, W., & Xie, S. (2023). Scalable Diffusion Models with Transformers. Proceedings of the IEEE/CVF International Conference on Computer Vision, 4195-4205.
▮▮▮▮ⓑ 探索了使用纯Transformer架构(即Diffusion Transformer, DiT)替代传统的U-Net作为扩散模型的骨干网络,并在ImageNet等数据集上取得了领先的生成性能,展示了Transformer在扩散模型中的潜力。
⑫ Meng, C., He, Y., Song, Y., Zhou, J., Wu, J., Zhang, R., ... & Ermon, S. (2022). SDEdit: Image Manipulation by Stochastic Differential Equations. International Conference on Learning Representations.
▮▮▮▮ⓑ 介绍了一种基于随机微分方程(SDE)的图像编辑框架SDEdit,利用扩散模型的逆向过程,并结合用户的输入(如带有涂鸦的图像),实现图像修复、风格迁移等编辑任务。
⑬ Radford, A., Kim, J. W., Xu, T., Brockman, G., McLeavey, C., & Sutskever, I. (2021). Learning Transferable Visual Models From Natural Language Supervision. International Conference on Machine Learning.
▮▮▮▮ⓑ 虽然不是扩散模型本身,但对比语言-图像预训练(CLIP)模型在多种条件扩散模型(特别是文本到图像)中作为强大的文本或图像编码器发挥了关键作用,为实现跨模态理解和生成提供了重要基础。