第18章 扩散模型
第 15 章介绍了生成对抗模型,它可以产生看起来合理的样本但不定义数据上的概率分布。第 16 章讨论了归一化流,它确实定义了概率分布但必须对网络施加架构约束;每一层必须是可逆的,且其雅可比行列式必须易于计算。第 17 章介绍了变分自编码器,它也有坚实的概率基础但似然的计算是不可处理的,必须用下界来近似。
本章介绍扩散模型(diffusion models)。与归一化流类似,它们是定义从潜变量到观测数据的非线性映射的概率模型,其中两者具有相同的维度。与变分自编码器类似,它们使用基于编码器映射到潜变量的下界来近似数据似然。然而,在扩散模型中,这个编码器是预设的;目标是学习一个解码器,它是编码过程的逆过程,可以用来产生样本。扩散模型易于训练,能够产生非常高质量的样本,其真实感超过 GAN 产生的样本。读者在阅读本章前应熟悉变分自编码器(第 17 章)。
18.1 概述
扩散模型由一个编码器(encoder)和一个解码器(decoder)组成。编码器接收一个数据样本
编码器是预先设定的;它逐渐将输入与白噪声样本混合(图 18.1)。经过足够多的步骤,条件分布
在解码器中,一系列网络被训练来学习每对相邻潜变量

图 18.1 扩散模型。编码器(前向或扩散过程)将输入
映射到一系列潜变量 。这个过程是预设的,逐渐将数据与噪声混合直到只剩噪声。解码器(逆过程)是学习的,将数据通过潜变量传回,在每个阶段去除噪声。训练后,通过采样噪声向量 并通过解码器传递来生成新样本。
在第 18.2 节中,我们详细考虑编码器。它的性质虽不显而易见但对学习算法至关重要。在第 18.3 节中,我们讨论解码器。第 18.4 节推导训练算法,第 18.5 节将其重新表述为更实用的形式。第 18.6 节讨论实现细节,包括如何使生成以文本提示为条件。
18.2 编码器(前向过程)
扩散(diffusion)或前向过程(forward process)(图 18.2)将数据样本
其中
这是一个马尔可夫链(Markov chain),因为
给定输入

图 18.2 前向过程。a) 考虑一维数据
,有 个潜变量 且 。三个 值(灰色、青色和橙色)被初始化(顶行),传播经过 。在每一步,变量通过将其值衰减 并添加均值为零、方差为 的噪声来更新(等式 18.1)。因此,三个样本带噪声地向零移动。b) 条件概率 和 是正态分布,均值略微比当前点更接近零,方差固定为 (等式 18.2)。
18.2.1 扩散核
为了训练解码器反转这个过程,我们需要在同一数据样本
为了推导
将第一个等式代入第二个,得到:
最后两项是均值为零的独立正态分布的样本,方差分别为
其中
如果我们继续将这个等式代入
其中
对于任何起始数据点

图 18.3 扩散核。a) 点
通过等式 18.1 传播经过潜变量(五条路径以灰色显示)。扩散核 是在给定从 出发时变量 上的概率分布。它可以以封闭形式计算,是一个均值趋向零且方差随 增大而增大的正态分布。热力图显示了每个变量的 。青色线显示均值偏离 个标准差。b) 明确显示了 时的扩散核 。实际上,扩散核允许我们在给定 时采样对应于任意时间 的潜变量 ,而无需计算中间变量 。当 变得很大时,扩散核趋近于标准正态分布。
18.2.2 边缘分布
边缘分布
然而,由于我们有一个"跳过"中间变量的扩散核
因此,如果我们反复从数据分布

图 18.4 边缘分布。a) 给定初始密度
(顶行),扩散过程在通过潜变量 时逐渐模糊分布并将其移向标准正态分布。每一行热力图代表一个边缘分布 。b) 顶部图显示初始分布 。另外两个图分别显示边缘分布 和 。
18.2.3 条件分布
我们将条件概率
这是不可处理的,因为我们无法计算边缘分布
对于简单的一维示例,可以数值地评估

图 18.5 条件分布
。a) 边缘密度 中高亮三个点 。b) 概率 (青色曲线)通过贝叶斯法则计算,与 成正比。一般来说,它不是正态分布(顶部图),但通常正态分布是一个好的近似(底部两个图)。
18.2.4 条件扩散分布
还有与编码器相关的最后一个分布需要考虑。我们注意到无法求得条件分布
因此,可以以封闭形式计算条件扩散分布
其中第一行和第二行之间,我们利用了
以及两个高斯乘积的恒等式:
得到:

图 18.6 条件扩散分布
。a) 对于 的扩散核 ,高亮三个点 。b) 概率 通过贝叶斯法则计算,与 成正比。这是正态分布的,可以以封闭形式计算。
18.3 解码器模型(逆过程)
当我们学习扩散模型时,我们学习一系列从潜变量
其中
我们使用祖先采样从
18.4 训练
观测变量
观测数据
为了训练模型,我们最大化训练数据
我们无法直接最大化,因为等式 18.18 中的边缘化是不可处理的。因此,我们使用 Jensen 不等式来定义似然的下界,并像对 VAE 所做的那样(见第 17.3.1 节),关于参数
18.4.1 证据下界(ELBO)
为了推导下界,我们将对数似然乘以并除以编码器分布
这给出了证据下界(ELBO):
在 VAE 中,编码器
18.4.2 化简 ELBO
我们现在将 ELBO 中的对数项操纵为最终优化的形式。首先分别代入等式 18.17 和 18.3 中分子和分母的定义:
经过展开分母并利用比值
其中我们对
18.4.3 分析 ELBO
ELBO 中的第一个概率项在等式 18.16 中定义:
等价于 VAE 中的重构项。如果模型预测与观测数据匹配,ELBO 会更大。与 VAE 一样,我们使用蒙特卡罗估计来近似该量的对数的期望(见等式 17.22-17.23),用
ELBO 中的 KL 散度项衡量
两个正态分布之间的 KL 散度有封闭形式表达式。而且,该表达式中的许多项不依赖于

图 18.7 拟合的模型。a) 可以通过从标准正态分布
(底行)采样生成单个样本,然后从 采样 ,依此类推直到到达 (五条路径)。估计的边缘密度(热力图)与图 18.4 中的真实边缘密度相似。b) 估计的分布 (棕色曲线)是图 18.5 中扩散模型真实后验 (青色曲线)的合理近似。
18.4.4 扩散损失函数
为了拟合模型,我们关于参数
其中
18.4.5 训练过程
这个损失函数可以用来为每个扩散时间步训练一个网络。它最小化隐变量在前一时间步的估计

图 18.8 拟合模型的结果。青色和棕色曲线分别是原始和估计密度,分别对应图 18.4 和 18.7 的顶行。垂直条是从模型中分箱的样本,通过从
采样并传播回 生成,如图 18.7 中的五条路径所示。
18.5 损失函数的重参数化
虽然等式 18.29 中的损失函数可以使用,但已发现扩散模型在不同的参数化下表现更好;损失函数被修改为让模型预测与原始数据样本混合以产生当前变量的噪声。第 18.5.1 节讨论目标(等式 18.29 第二行的前两项)的重参数化,第 18.5.2 节讨论网络(等式 18.29 第二行的最后一项)的重参数化。
18.5.1 目标的重参数化
原始扩散更新由下式给出:
由此得出等式 18.28 中的数据项
将其代入等式 18.29 的目标项并化简,得到:
将其代回损失函数(等式 18.29),得到:
18.5.2 网络的重参数化
现在我们用一个预测与
将新模型代入等式 18.34,经过化简,忽略各项的缩放因子(它们在每个时间步可能不同),得到更简洁的表述:
其中第二行使用扩散核(等式 18.30)重写了
18.6 实现
这导出了直观的训练模型(算法 18.1)和采样(算法 18.2)算法。训练算法的优点是 (i) 实现简单,(ii) 自然地增强数据集;我们可以在每个时间步以不同的噪声实例化
算法 18.1:扩散模型训练
- 输入:训练数据
- 输出:模型参数
- 重复:
- 对批次中的每个训练样本
: - 采样随机时间步
- 采样噪声
- 计算个体损失
- 采样随机时间步
- 累积批次损失并进行梯度步
- 对批次中的每个训练样本
- 直到收敛
算法 18.2:采样
- 输入:模型
- 输出:样本
(采样最后的潜变量) - 对
: (预测前一个潜变量) (抽取新的噪声向量) (向前一个潜变量添加噪声)
(从 生成样本,不加噪声)
18.6.1 应用于图像
扩散模型在建模图像数据方面非常成功。这里,我们需要构建能够接受一个有噪图像并预测在每一步添加了什么噪声的模型。对于这种图像到图像映射,U-Net(图 11.10)是显而易见的架构选择。然而,可能有非常多的扩散步骤,训练和存储多个 U-Net 效率低下。解决方案是训练一个单一的 U-Net,它还接收一个代表时间步的预设向量作为输入(图 18.9)。实际上,这个向量被调整大小以匹配 U-Net 每个阶段的通道数,用于偏移和/或缩放每个空间位置的表示。
需要大量时间步,因为当超参数

图 18.9 用于图像的扩散模型中的 U-Net。网络旨在预测添加到图像中的噪声。它由一个降低尺度并增加通道数的编码器和一个增加尺度并减少通道数的解码器组成。编码器表示与解码器中的对应部分连接。相邻表示之间的连接由残差块和周期性全局自注意力组成,其中每个空间位置与其他每个空间位置交互。所有时间步使用单一网络,通过将正弦时间嵌入(图 12.5)通过一个浅层神经网络传递并将结果添加到 U-Net 每个阶段每个空间位置的通道上。
18.6.2 提高生成速度
损失函数(等式 18.40)要求扩散核具有形式
其中包括去噪扩散隐式模型(denoising diffusion implicit models),它在从

图 18.10 与同一模型兼容的不同扩散过程。a) 重参数化模型的五个采样轨迹。b) 重参数化模型生成的样本直方图。c-d) 去噪扩散隐式模型(DDIM),它是确定性的,在每一步不添加噪声。e-f) 加速扩散模型,跳过推理步骤以提高采样速度。
18.6.3 条件生成
如果数据具有关联标签
新项取决于基于潜变量
无分类器引导(classifier-free guidance)避免了学习单独的分类器

图 18.11 基于文本提示的级联条件生成。a) 由一系列 U-Net 组成的扩散模型用于生成
图像。b) 该生成以语言模型计算的句子嵌入为条件。c) 更高分辨率的 图像在较小图像和文本编码上生成和调节。d) 重复此过程以创建 图像。e) 最终图像序列。改编自 Saharia et al. (2022b)。
18.6.4 提高生成质量
与其他生成模型一样,最高质量的结果来自对基本模型应用一系列技巧和扩展。首先,发现同时估计逆过程的方差
第三,为了生成高分辨率图像,使用扩散模型的级联。首先创建一个低分辨率图像(可能由类别信息引导)。后续的扩散模型生成逐步更高分辨率的图像。它们通过将低分辨率图像调整大小并附加到组成 U-Net 的各层以及任何其他类别信息来以低分辨率图像为条件(图 18.11)。
结合所有这些技术,可以生成非常高质量的图像。图 18.12 展示了从以 ImageNet 类别为条件的模型生成的图像样本。该模型能够学习生成如此多样化的类别,尤其令人印象深刻。图 18.13 展示了从训练为以语言模型编码的文本标题为条件的模型生成的图像,这些编码以与时间步相同的方式插入模型(图 18.9 和 18.11)。这产生了与标题一致的非常逼真的图像。由于扩散模型本质上是随机的,可以生成以同一标题为条件的多个不同图像。

图 18.12 使用分类器引导的条件生成。以不同 ImageNet 类别为条件的图像样本。同一模型可以产生高度多样化的图像类别的高质量样本。改编自 Dhariwal & Nichol (2021)。

图 18.13 使用文本提示的条件生成。从级联生成框架合成的图像,以大型语言模型编码的文本提示为条件。随机模型可以产生许多与提示兼容的不同图像。模型可以计数物体并将文本整合到图像中。改编自 Saharia et al. (2022b)。
18.7 总结
扩散模型通过反复将当前表示与随机噪声混合,将数据样本映射到一系列潜变量。经过足够多的步骤,表示变得与白噪声不可区分。由于这些步骤很小,每一步的逆去噪过程可以用正态分布近似并由深度学习模型预测。损失函数基于证据下界(ELBO),最终导出简单的最小二乘形式。
对于图像生成,每个去噪步骤使用 U-Net 实现,因此与其他生成模型相比采样较慢。为了提高生成速度,可以将扩散模型改为确定性形式,此时用更少步骤采样也能获得良好效果。已经提出了多种方法来在类别信息、图像和文本信息上进行条件生成。结合这些方法产生了令人印象深刻的文本到图像合成结果。