扩散模型的工作原理:从零开始的数学
扩散模型(Diffusion Models)是一类强大的生成模型,能够生成高分辨率、高质量的图像。近年来,随着 OpenAI、NVIDIA 和 Google 等机构训练出大规模扩散模型,这类方法受到了广泛关注。GLIDE、DALL·E 2、Imagen 以及完全开源的 Stable Diffusion 都是基于扩散模型的代表性架构。
本文从基本原理出发,重点介绍由 Sohl-Dickstein 等人 提出、并经 Ho 等人(2020) 改进的去噪扩散概率模型(DDPM, Denoising Diffusion Probabilistic Model)。Stable Diffusion、基于分数的模型等变体不在本文详细讨论范围内。
扩散模型与以往的生成方法有本质不同:它将图像生成过程拆解为许多小的“去噪”步骤,通过逐步去噪从随机噪声中合成样本。
扩散模型属于生成模型,其目标是学习训练数据的分布并生成相似的新样本。具体而言,扩散模型首先通过前向过程逐步向数据中添加高斯噪声以破坏数据结构,然后学习逆转这一过程,从噪声中恢复原始数据。训练完成后,只需从随机噪声出发,经过学习的去噪过程即可生成新样本。

扩散模型通过多步迭代去噪生成样本。这种逐步求精的思想与 AlphaFold 等模型有相似之处,但迭代过程也使得采样速度相对较慢。
1. 扩散过程
扩散模型的核心思想可以概括为:通过前向过程逐步向数据添加高斯噪声,再通过反向过程学习逐步去噪。前向过程是固定的、无需学习的马尔可夫链;反向过程则由神经网络参数化,是实际的生成采样过程。
1.1 前向扩散
扩散模型可视为隐变量模型,其中隐变量是与原始数据同维的连续特征。与 VAE 不同,扩散模型的隐变量维度不会降低。
具体地,给定从真实数据分布中采样的样本

前向扩散过程示意图,修改自 Ho et al. 2020。
这里
若要在任意时刻
1.1.1 重参数化技巧
定义
由于所有时间段都有相同的高斯噪声,我们从现在开始只使用符号
因此,为了产生一个样本
由于
1.1.2 方差表
方差参数

Latent samples from linear (top) and cosine (bottom) schedules respectively. Source: Nichol & Dhariwal 2021
1.2 反向扩散
当
1.2.1 用神经网络近似反向过程
在实际情况中,我们不知道
相反,我们用一个参数化的模型

Reverse diffusion process. Image modified by Ho et al. 2020, 其中均值和方差也取决于噪声水平
如果我们对所有的时间步数应用反向公式
通过在模型上添加时间
但我们如何训练这样一个模型呢?
2. 扩散模型训练
2.1 定义目标函数
为了推导出逆向扩散过程的目标函数,作者观察到,
我们来分析一下这些内容:
可以当作是一个重建项 (reconstruction term) ,类似于变分自编码器 ELBO 中的项。在 Ho et al 2020 的研究中,这一项是用一个单独的解码器学习的。 显示了 与标准高斯有多接近。注意到,整个项都没有可训练的参数,因此,在训练过程这个项会被忽略。 - 最后的第三项
也表示为 ,描述了期望的去噪步骤 与近似项 之间的差异。
很明显,通过 ELBO ,最大化似然可以归结为学习去噪步骤
尽管
是难以解决的,但 Sohl-Dickstein et al 说明,通过对 的附加条件,可以使它变得容易解决
直观地说,画家(我们的生成模型)需要一个参考图像 (
和 只取决于 ,所以它可以被预先计算出来
这个小技巧为我们提供了一个完全可操作的 ELBO 。上述属性还有一个重要的副作用,正如我们在重参数化技巧中已经看到的,我们可以将
其中
通过合并最后两个方程,现在每个时间步长将有一个仅依赖于
因此,我们可以使用一个神经网路
因此,损失函数(ELBO 中的去噪项)可以表示为:
这实际上告诉我们,该模型不是预测分布的平均值,而是预测每个时间点
Ho et.al 2020 对实际损失项做了一些简化,他们忽略了一个加权项。简化后的版本优于完整的目标:
其中,$ x_0
作者发现,优化上述目标比优化原始 ELBO 效果更好。这两个方程的证明可以在 Lillian Weng 的这篇优秀文章或 Luo et al. 2022 中找到。
此外,Ho et. al 2020 决定保持方差固定,让网络只学习均值。后来 Nichol et al. 2021 对此进行了改进,他们让网络学习协方差矩阵

DDPMs 的训练和采样算法 , 图片来自 Ho et al. 2020
训练算法现在看起来如下:
- 首先从真实的未知且可能是复杂的概率分布
中随机采样$ x_0$; - 在 1 到 T 之间均匀地采样一个噪声水平
(即,一个随机的时间步); - 从高斯分布中采样一些噪声,并通过这个噪声破坏输入;
- 在水平
(使用重参数技巧)上,神经网络被训练来基于被破坏的图像 预测这个噪声(即,基于已知的时间表 应用于 上的噪声);
3. 扩散模型架构
到目前为止,我们还没有提到的一件事是模型的架构是什么样子的。请注意,模型的输入和输出应该是相同尺寸的。
为此, Ho et al. 采用了一个 U-Net 。如果你对 U-Net 不熟悉,请随时查看我们过去关于 U-Net 架构 的文章。简而言之, U-Net 是一种对称的架构,其输入和输出的空间大小相同,在相应特征维度的编码器和解码器块之间使用 跳层连接 。通常,输入图像首先经过下采样,然后上采样,直到达到其初始尺寸。
在 DDPMs 的原始实现中, U-Net 由 Wide ResNet 块 、 分组归一化 以及 自注意力 块组成。
扩散时间段

U-Net 的架构 ,图片来自 Ronneberger et al.
4. 条件图像生成:引导扩散
图像生成的一个关键方面是调节采样过程,以操纵生成的样本。在这里,这也被称为引导性扩散。
甚至有一些方法将图像嵌入到扩散中,以便“引导”生成。从数学上讲,引导指的是用一个条件
条件在每个时间步都可见,这可能是文字提示的优秀样本的一个良好证明。
一般来说,引导扩散模型的目的是学习
因为
再加上一个引导标量项
利用这一表述,让我们对分类器和无分类器的引导进行区分。
4.1 分类引导
Sohl-Dickstein et al. 以及后来的 Dhariwal 和 Nichol 表明,我们可以使用第二个模型,即分类器
我们可以建立一个具有均值
由于
在 Nichol et al. 著名的 GLIDE 论文 中,作者扩展了这个想法,并使用 CLIP 嵌入 来指导扩散。 Saharia et al. 提出的 CLIP 由一个图像编码器
因此,我们可以用它们的点积来扰动梯度:
结果,他们能够“引导”生成过程朝着用户定义的文本标题发展。

分类器引导的扩散采样算法,图片来自 Dhariwal & Nichol 2021
4.2 无分类器引导
使用与之前相同的表述,我们可以将无分类器的引导扩散模型定义为:
正如 Ho & Salimans 所提议的那样,不需要第二个分类器模型就可以实现指导作用。事实上,他们使用的是完全相同的神经网络,而不是训练一个单独的分类器,作者将条件性扩散模型
请注意,这也可以用来“注入”文本嵌入,正如我们在分类器指导中显示的那样
这个无疑“奇怪”的过程有两个主要优点:
- 它只使用一个单一的模型来指导扩散。
- 它简化了在难以用分类器预测的信息(如文本嵌入)的条件下的引导。
Saharia et al. 提出的 Imagen 在很大程度上依赖于无分类器的引导,因为他们发现这是生成具有强图像-文本对齐的样本的关键贡献者。关于 Imagen 方法的更多信息,请看 AI Coffee Break 与 Letitia 的这段 YouTube 视频:
4.3 扩展扩散模型
你可能会问这些模型有什么问题。嗯,将这些 U-Nets 扩展到高分辨率图像在计算上非常昂贵。这给我们带来了两种方法,将扩散模型扩展到更高分辨率:级联扩散模型和潜在扩散模型。
4.4 级联扩散模型
Ho et al. 2021 引入了级联扩散模型,以产生高保真的图像。级联扩散模型包括一个由许多连续扩散模型组成的

级联扩散模型
,图片来自 Ho & Saharia et al.
为了在使用级联架构时获得良好的结果,对每个超分辨率模型的输入进行强数据增强至关重要。为什么?因为它减轻了前面级联模型的复合误差,以及由于训练-测试不匹配造成的误差。
研究发现,发现高斯模糊是实现高保真度的一个关键转换。他们将这种技术称为条件增强。
4.5 Stable Diffusion: 隐变量扩散模型
隐变量扩散模型是基于一个相当简单的想法:我们不是直接在高维输入上应用扩散过程,而是将输入投射到一个较小的隐变量空间,并在隐变量空间应用扩散。
更详细地说, Rombach et al. 建议使用编码器网络将输入编码为隐变量表示,即
如果一个典型的扩散模型 (DM) 的损失被表述为:
然后,给定编码器

隐变量的扩散模型,图片来自 Rombach et al
欲了解更多信息,请看这个 YouTube 视频:
5. 基于分数的生成模型
在 DDPM 论文发表的同时, Song and Ermon 提出了一种不同类型的生成模型,似乎与扩散模型有许多相似之处。基于分数的模型利用分数匹配和 Langevin 动力学来解决生成式学习。
- 分数匹配 (Score-matching) 指的是对数概率密度函数梯度的建模过程,也被称为分数函数。
- Langevin 动力学 (Langevin dynamics) 是一个迭代过程,它可以使用仅其分数函数从分布中绘制样本。
其中
假设我们有一个概率密度
然后通过使用 Langevin 动力学,我们可以使用近似的分数函数直接从
引导式扩散模型使用这种基于分数的模型的表述,因为它直接学习
。当然,它并不依赖 Langevin 动力学
5.1 为基于分数的模型添加噪音:噪声条件得分网络 (NCSN)
到目前为止的问题是:在低密度地区,估计的分数函数通常是不准确的,因为那里的数据点很少。因此,使用 Langevin 动力学采样的数据质量并不好.
他们的解决方案是对数据点进行噪声扰动,然后在噪声数据点上训练基于分数的模型。事实上,他们使用了多种规模的高斯噪声扰动。
因此,添加噪声是使 DDPM 和基于分数的模型都起作用的关键。

基于分数的生成模型与分数匹配以及 Langevin 动力学,图片来自 Generative Modeling by Estimating Gradients of the Data Distribution
在数学上,给定数据分布
然后我们训练一个网络
5.2 通过随机微分方程 (SDE) 进行基于分数的生成性建模
Song et al. 2021 探讨了基于分数的模型与扩散模型的联系。为了将 NSCNs 和 DDPMs 都囊括在同一伞下,他们提出了以下建议。
我们不使用有限数量的噪声分布来扰动数据,而是使用连续的分布,这些分布根据扩散过程随时间演变。这个过程由一个规定的随机微分方程 (SDE) 来模拟,它不依赖于数据,也没有可训练的参数。通过逆转这个过程,我们可以生成新的样本。

通过随机微分方程 (SDE) 进行基于分数的生成性建模, 图片来自 Song et al. 2021
我们可以把扩散过程
其中,
为了理解我们为什么使用 SDE ,这里有一个提示: SDE 的灵感来自于布朗运动,在布朗运动中,一些粒子在介质内随机移动。粒子运动的这种随机性模拟了数据上的连续噪声扰动
在对原始数据分布进行足够长时间的扰动后,被扰动的分布会变得接近于一个可操作的噪声分布。
为了产生新的样本,我们需要逆转扩散过程。该 SDE 被选择为有一个相应的封闭形式的反向 SDE:
为了计算反向 SDE ,我们需要估计分数函数
其中
有许多解决反向 SDE 的方案,我们在此不作分析。请务必查看原始论文或作者的 这篇优秀博文

通过 SDEs 进行基于分数的生成性建模的概述, 图片来自 Song et al. 2021
总结
让我们对这篇博文中所学到的主要内容做一个简单的总结。
- 扩散模型的工作原理是通过一系列的 T 步骤将高斯噪声逐渐添加到原始图像中,这个过程被称为扩散。
- 为了对新数据进行采样,我们使用神经网络对反向扩散过程进行近似。
- 模型的训练是基于证据下界 (ELBO) 的最大化。
- 我们可以将扩散模型置于图像标签或文本嵌入的条件下,以便“指导”扩散过程。
- 级联扩散和隐变量扩散是两种将模型扩展到高分辨率的方法。
- 级联扩散模型是连续的扩散模型,可以生成分辨率越来越高的图像。
- 隐变量扩散模型(像 Stable Diffusion )在较小的隐变量空间上应用扩散过程,以提高计算效率,使用变分自编码器进行向上和向下取样。
- 基于分数的模型也将一连串的噪声扰动应用到原始图像上。但它是用分数匹配和 Langevin 动力学来训练的。尽管如此,它最终的目标是相似的。
- 扩散过程可以被表述为一个 SDE 。解决反向 SDE 使我们能够生成新的样本。
最后,有关扩散模型和 VAE 或 AE 之间联系的更多信息,请查看 这些很棒的文章 。
本文翻译自 AI Summer 的工作人员 Sergios Karagiannakos, Nikolas Adaloglou 等几人发布的一篇文章,原文是 How diffusion models work: the math from scratch | AI Summer (theaisummer.com)
6. References
[1] Sohl-Dickstein, Jascha, et al. Deep Unsupervised Learning Using Nonequilibrium Thermodynamics. arXiv:1503.03585, arXiv, 18 Nov. 2015
[2] Ho, Jonathan, et al. Denoising Diffusion Probabilistic Models. arXiv:2006.11239, arXiv, 16 Dec. 2020
[3] Nichol, Alex, and Prafulla Dhariwal. Improved Denoising Diffusion Probabilistic Models. arXiv:2102.09672, arXiv, 18 Feb. 2021
[4] Dhariwal, Prafulla, and Alex Nichol. Diffusion Models Beat GANs on Image Synthesis. arXiv:2105.05233, arXiv, 1 June 2021
[5] Nichol, Alex, et al. GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models. arXiv:2112.10741, arXiv, 8 Mar. 2022
[6] Ho, Jonathan, and Tim Salimans. Classifier-Free Diffusion Guidance. 2021. openreview.net
[7] Ramesh, Aditya, et al. Hierarchical Text-Conditional Image Generation with CLIP Latents. arXiv:2204.06125, arXiv, 12 Apr. 2022
[8] Saharia, Chitwan, et al. Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding. arXiv:2205.11487, arXiv, 23 May 2022
[9] Rombach, Robin, et al. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752, arXiv, 13 Apr. 2022
[10] Ho, Jonathan, et al. Cascaded Diffusion Models for High Fidelity Image Generation. arXiv:2106.15282, arXiv, 17 Dec. 2021
[11] Weng, Lilian. What Are Diffusion Models? 11 July 2021
[12] O'Connor, Ryan. Introduction to Diffusion Models for Machine Learning AssemblyAI Blog, 12 May 2022
[13] Rogge, Niels and Rasul, Kashif. [The Annotated Diffusion Model](https://Hugging Face.co/blog/annotated-diffusion) . Hugging Face Blog, 7 June 2022
[14] Das, Ayan. “An Introduction to Diffusion Probabilistic Models.” Ayan Das, 4 Dec. 2021
[15] Song, Yang, and Stefano Ermon. Generative Modeling by Estimating Gradients of the Data Distribution. arXiv:1907.05600, arXiv, 10 Oct. 2020
[16] Song, Yang, and Stefano Ermon. Improved Techniques for Training Score-Based Generative Models. arXiv:2006.09011, arXiv, 23 Oct. 2020
[17] Song, Yang, et al. Score-Based Generative Modeling through Stochastic Differential Equations. arXiv:2011.13456, arXiv, 10 Feb. 2021
[18] Song, Yang. Generative Modeling by Estimating Gradients of the Data Distribution, 5 May 2021
[19] Luo, Calvin. Understanding Diffusion Models: A Unified Perspective. 25 Aug. 2022