在生成对抗网络 (GAN)、变分自动编码器 (VAE) 和基于流的模型之后,扩散模型是生成模型的最新研究,可以生成多样化的高分辨率图像。这些模型在 OpenAI、谷歌、Nvidia 训练大规模模型后也引起了很多关注。Diffusion 上预训练架构的一些例子有 DALLE-2、GLIDE、Imagen 等。
扩散背后的主要原则
扩散模型逻辑的灵感来自非平衡热力学。他们定义了一个马尔可夫链过程来缓慢地将高斯噪声添加到数据中,然后学习反转扩散步骤以从噪声中构建所需的数据。
例如,A 修复噪声过程逐渐将数据 x₀ 噪声化为噪声 xₜ。我们学习将其从噪声 xₜ 反转为数据 x₀。
背后的逻辑是我们为一系列 T 步骤添加一个非常少量的固定高斯噪声,这称为前向传递。值得注意的是,这与神经网络的前向传递无关。
训练神经网络学习逆向过程后,即对图像进行降噪恢复原始数据。这就是所谓的生成模型的反向扩散过程或采样过程。
正向过程
现在,固定马尔可夫链用于添加方差为 βₜ 的高斯噪声,q 是给定 xₜ₋₁ 的 xₜ 的后验概率。这个过程可以表述如下:
由于我们处于多维场景,这里I是单位矩阵,它表示每个维度具有相同的标准偏差 βₜ。请注意,q(xₜ | xₜ₋₁) 仍然是均值为 μₜ 的正态分布
方差 Σₜ = βₜI。因此,我们现在可以从 x₀, …, xₜ₋₁, xₜ, … x(T) 以一种易于处理的方式出发。在数学上,这个后验概率将被定义为
反向扩散
现在,我们需要学习相反的过程,即,给定 xₜ 学习预测 xₜ₋₁,有 q(xₜ | xₜ₋₁) 的后验概率。为此,我们需要采用参数化模型,例如神经网络。因为,我们知道 q(xₜ | xₜ₋₁) 将是高斯分布的,对于小的 βₜ,我们可以选择 p₀ 是高斯分布的,并选择均值和方差作为参数。
如果我们对所有时间步 T 应用反向扩散,那么公式将变为:
现在,由于我们需要模型来学习均值 μₜ 和协方差 Σₜ 来预测每个时间步长的高斯参数。
稳定扩散模型的模型架构
由于我们正在谈论稳定扩散模型,该模型将获取文本或文本段落并尝试创建图像。
这里使用了卷积 UNet 架构,它具有与输入相同的输出形状。UNet 使用下采样和上采样层以及各种其他组件,例如残差连接、批处理或组归一化层。现在我们还需要传递描述文本,该文本被转换为标记并在其上运行 Transformer。然后将这些 transformer 加入到 UNet 中。
这里模型将在时间步 t 获取噪声图像 xₜ 并尝试预测图像中的噪声,因为方差设置为固定,我们将每个像素只输出一个值,这意味着模型学习图像的高斯分布的均值这是也称为去噪分数匹配。
条件图像生成:引导扩散
图像生成的一个重要步骤是在采样过程中添加条件来操纵生成的样本。这也称为引导扩散。
已经有一些方法可以使用图像/文本嵌入将分布引导到扩散中,以引导生成。在数学上我们可以说,指导指的是用条件 y 作为类标签或文本嵌入来调节先验分布 p(x),从而得到 p(x/y)。
为了将扩散模型转换为条件扩散模型,我们可以在每个扩散步骤添加条件信息 y。
在每个时间步添加条件可能会导致从文本提示中生成出色的样本。
一般来说,扩散模型旨在学习∇logp₀(xₜ|y)。现在添加我们拥有的指导标量项“s”
使用此指导,让我们了解分类器和无分类器指导之间的区别。
分类指导
Sohl-Dickstein 等人。后来Dhariwal 和 Nichol在他们的论文中解释了使用第二个模型,即分类器fϕ ( y |xₜ , t ),以引导向目标类 y 的扩散。为了实现这一点,我们可以在噪声图像 xₜ 上训练分类器fϕ ( y |xₜ , t ) 来预测其类别 y。 然后我们可以使用梯度∇logp₀(xₜ|y)来指导扩散。
免课指导
这里Ho & Salimans提出了一个没有第二个分类器模型的模型。这里作者使用单个神经网络并训练条件扩散模型和无条件扩散模型。在训练过程中,他们将 y 随机设置为 0 类,这样模型就会暴露在有条件和无条件的设置中。
放大扩散模型
我们讨论的模型的问题是它们的计算量很大。为了生成高质量的图像,U-Net 架构将非常昂贵。因此,为了使用扩散产生高分辨率图像,有两种方法:级联扩散模型和潜在扩散模型。
级联扩散模型
何等。2021引入了级联模型,该模型由许多生成高保真图像的顺序扩散模型组成。每个模型生成的样本的分辨率都比以前的模型高。上采样层用于提高扩散层的分辨率。
稳定扩散:潜在扩散模型
在潜在扩散模型中,我们不是在高维数据上应用扩散,而是将输入投影到较小的潜在空间,然后应用扩散
Rombach 等人。提出了使用编码器网络将输入编码为更小的潜在表示的想法,即 zₜ = g(xₜ)。使用编码器的主要目的是通过将图像减少到一个小的潜在空间来减少扩散网络的计算要求。之后,应用扩散模型(U-Net)生成新数据,并使用解码器网络将图像上采样到原始分辨率。
结果
从这里生成的扩散模型的一些结果:
示例输入 1: “迪士尼风格的雪山顶小木屋,artstation。”
示例输入 2:“ 印度道路上的机械机器人”
概括
让我们总结一下我们从扩散模型中学到的要点:
- 扩散模型的工作是将固定的高斯噪声应用于原始图像 T 个时间步,这个过程称为扩散。
- 它有正向扩散和反向扩散两个过程。在反向扩散中,模型或神经网络学习对图像进行去噪。
- 我们可以使用图像或文本嵌入来“引导”扩散过程。
- 级联和潜在扩散是将模型放大到高分辨率的两种方法。
- 级联扩散是一种顺序扩散模型,它使用放大层来创建高分辨率图像。
- 潜在扩散模型在潜在空间中应用扩散,并且通过使用变分自动编码器进行上采样和下采样来降低计算成本。