前言
在当今这个信息爆炸的时代,数据的生成与处理无疑成为了科技领域的热门话题。而 Diffusion Model(扩散模型)作为一种新兴的生成模型,宛如一颗璀璨的新星,在生成多样化高分辨率图像方面展现出了卓越的能力,为数据生成领域注入了新的活力。这类模型通过模拟数据的扩散和去噪过程,能够从看似杂乱无章的随机噪声中,神奇地生成清晰、逼真的图像,这一过程在理论上可以产生与真实数据分布极为相似的样本,令人惊叹不已。
众多科技巨头纷纷投身于扩散模型的研究和应用,推动了其迅猛发展,并引起了全球范围内的广泛关注。例如,OpenAI 的 DALL-E 2 就是一个利用扩散模型进行文本条件图像合成的杰出代表,它可以根据用户的文字描述生成各种奇妙的图像;Google 的 Imagen 则在文本到图像转换方面大放异彩,展示了扩散模型在这一领域的巨大潜力,让人们看到了文字与图像之间奇妙的转化可能。
基于扩散模型的示例架构更是层出不穷,令人目不暇接。GLIDE 是 OpenAI 开发的一种文本引导的扩散模型,它能够根据文本提示生成和编辑逼真的图像,仿佛是一位听从文字指令的“图像魔法师”;DALLE-2 作为 DALL-E 的升级版,使用了一个扩散先验在 CLIP 潜在空间上进行高分辨率图像的生成,让图像的清晰度和细节表现更上一层楼;Imagen 以其简化了的模型结构,使得生成过程更加高效,大大提高了工作效率;而开源的 Stable Diffusion 则采用了 latent diffusion(潜在扩散)的方法,通过巧妙地将图像压缩到 latent space(潜在空间)来降低计算量,同时能够生成任意尺寸的图像,为用户提供了极大的便利和灵活性。
1. Introduction
扩散模型,顾名思义,是一种生成模型,它们致力于生成与训练数据相似的数据。本质上,扩散模型采用了一种独特而巧妙的方式,通过逐步添加高斯噪声来破坏训练数据,然后再学习逆转这个加噪过程以恢复数据,这一过程充满了智慧和创造力。训练完成后,我们就可以通过将随机采样的噪声经过学习得到的去噪过程,像变魔术一样生成全新的数据。
在生成模型的舞台上,生成对抗网络(GAN)和变分自编码器(VAE)无疑是两种重要的“明星选手”,它们在多个应用中都取得了显著的成功和广泛认可,为数据生成领域做出了巨大贡献。然而,任何事物都并非完美无缺,GAN 虽然在许多方面表现出色,但由于诸如模式崩溃和梯度消失等多种挑战,其生成的输出可能缺乏多样性,并且训练过程复杂,宛如在崎岖的山路上艰难前行,稍有不慎就可能陷入困境;VAE 拥有坚实的理论基础,宛如一座坚固的城堡,但在 VAE 中设计一个良好的损失函数却是一个难题,这可能导致其输出结果不是最优的,就像在烹饪中缺少了恰到好处的调味料,难以达到令人满意的美味程度。
扩散模型的核心思想犹如一束照亮黑暗的光芒,给人以新的启示。它基于这样一个理念:如果我们能够构建一个学习模型来理解由于噪声引起的信息系统性退化,那么理论上这个模型也能够逆转这一过程,从噪声中恢复出有用的信息,就像一位高超的侦探,通过蛛丝马迹还原出事件的真相。这与 VAE 的理念有异曲同工之妙,VAE 通过将数据映射到潜在空间,然后再重建回原始状态来优化目标函数,仿佛是在另一个维度对数据进行“解码”和“编码”。然而,扩散模型的目标并非直接学习数据的分布,而是在马尔可夫链中对一系列噪声条件进行建模,并通过分步解码的方式来去除数据中的噪声,这一独特的思路为数据生成开辟了新的道路。
事实上,扩散模型可以被看作是 latent variable model(潜在变量模型)。latent variable 意味着我们所指的是一组隐藏的连续特征空间,它们仿佛是隐藏在数据背后的神秘力量,支配着数据的生成和变化。从这个角度来看,它们与 variational autoencoders(VAEs,变分自编码器)有着相似之处,都试图在潜在空间中寻找数据的本质特征,但它们的实现方式和侧重点却有所不同,各有千秋。
在扩散模型的发展历程中,有几种基于扩散的生成模型提出了类似的想法,它们宛如探索未知世界的先驱者,为扩散模型的发展奠定了坚实的基础。例如,diffusion probabilistic models(Sohl-Dickstein 等人,2015 年)首次提出了基于扩散过程的概率模型,为后续研究开辟了新的思路;noise-conditioned score network(NCSN;Yang 和 Ermon,2019 年)则从噪声条件下的分数网络角度进行探索,为扩散模型的理论体系增添了新的维度;denoising diffusion probabilistic models(DDPM;Ho 等人,2020 年)更是将去噪扩散概率模型推向了一个新的高度,使其在实际应用中展现出巨大的潜力。
在实践中,扩散模型通常使用 T 步的 Markov chain(马尔可夫链)来建模。这里,马尔可夫链意味着每一步只依赖于前一步,这是一个相对温和且合理的假设,使得模型在计算和实现上更加可行。重要的是,与 flow-based models(基于流的模型)不同,扩散模型不受限于使用特定类型的神经网络,这为模型的设计和创新提供了广阔的空间,让研究人员可以自由地探索各种不同的架构和方法,以充分发挥扩散模型的潜力。
2. Forward diffusion process
更具体地说,Diffusion Model 是一种潜在变量模型,它使用固定的 Markov chain 将数据映射到潜在空间。在这个过程中,该链逐渐添加噪声到数据中,以获得近似后验 q(x1:T | x0) 分布,其中 x1,….XT 是具有相同维度的潜在变量。在下面的图中,我们可以清晰地看到用于图像数据的这样一个 Markov chain 的表现,它宛如一幅描绘数据从清晰到逐渐模糊的画卷。
Forward diffusion process. Image modified by Ho et al. 2020
我们可以正式定义前向扩散过程为一个 Markov Chain,因此,与 VAE 中的编码器不同,它不需要进行训练。从初始数据点 x0 开始,我们在接下来的 T 步中添加方差为 βt 的高斯噪声到 x**t-1** 中,并获得一组具有分布 q(xt | x**t-1**) 的噪声样本 xt。在时间 t 的概率密度预测仅取决于时间 t-1 的直接前置物,因此可以计算出条件概率密度,如下所示:
随着步长逐渐增大,数据样本 x0 逐渐失去其可区分的特征,仿佛被一层层的迷雾所笼罩。最终,当 T 趋近于无穷大时,xt 等价于一个各向同性的高斯分布,此时的数据已经完全被噪声所淹没,变得毫无特征可言。
由于我们处于多维场景中,I 是单位矩阵,表示每个维度具有相同的噪声强度,即标准差 β_t。请注意,q(xt | xt-1)仍然是一个正态分布,由均值 μ 和方差 Σ 定义,其中 μt = sqrt(1-βt)* xt-1 并且 Σt = βtI。Σ 始终是一个具有方差的对角矩阵(这里是 βt),这意味着每个维度的噪声是相互独立的,互不影响。
因此,我们可以通过一种可处理的方式,从输入数据 x0 逐步走向封闭形式的 xT。在数学上,这可以被视为一个后验概率,整个过程的完整分布可以按以下方式计算:
符号 :在 q(x0:T) 中表示我们从时间步 0 到第 T 步。它也被称作 trajectory(轨迹),宛如一条记录数据变化过程的路径。
在这里,概率密度函数的均值和方差取决于参数 βτ,这是一个超参数,其值可以在整个过程中保持为常数,也可以在连续的步骤中逐渐改变,以适应不同的扩散需求。对于不同的扩散参数值分配,可以使用一系列函数来模拟其行为,例如 sigmoid、tanh、线性等函数,它们各自具有独特的性质和应用场景,为扩散过程提供了多样化的选择。
以上的推导已经足以让我们预测连续的状态,然而,如果我们想在任何给定的时间间隔 t 内进行抽样,而不必经过所有的中介步骤,从而实现一个高效的实现,那么我们可以通过替换超参数为 ατ = 1-βτ 来重新构思上述方程,使其更加简洁和易于计算。经过重新组织后,方程如下:
为了在时间步骤 t 上产生样本,我们可以从热力学领域借鉴一个强大的概念 —— “Langevin dynamics(朗之万动力学)”。根据随机梯度 Langevin dynamics,我们只需通过在马尔可夫链更新中密度函数的梯度,就可以像在湍流的河流中找到新的方向一样,采样出系统的新状态。基于时间 t-1 上的上一个点,使用步长 ε,我们可以按照以下方式计算出在时间 t 上的新数据点的采样方法:
3. Reverse diffusion process
当 T 趋近于无限大时,latent 变量 xt 几乎是一个各向同性高斯分布,此时的数据已经完全被噪声所掩盖,失去了原有的特征。因此,如果我们能够学习到反向分布 q(xt-1 | xt),就可以从均值为 0、协方差矩阵为单位矩阵的正态分布中采样 xt,然后运行反向过程,从而获得从 q(x0) 中采样的一个样本,生成一个全新的数据点,从原始数据分布中脱颖而出,仿佛是从无到有创造出了新的生命。
如果我们能够反转上述过程并从 q(xt-1 | xt)采样,我们将能够从高斯噪声输入 xT~N(0,I) 中重新构建真实样本,这听起来就像是在进行一场神奇的“数据复活术”。但遗憾的是,我们无法轻易地估计 q(xt-1 | xt),因为这需要使用整个数据集来进行复杂的计算,这在实际应用中是不切实际的。因此,我们需要学习一个模型 pθ,以近似这些条件概率,从而能够顺利地运行反向扩散过程,这就好比我们需要训练一个智能的“向导”,让它能够在复杂的噪声迷宫中找到通往真实数据的路径。
最终,图像在扩散过程中逐渐转换为纯高斯噪声,仿佛被分解成了最基本的元素。而训练扩散模型的目标就是学习这个反向过程 —— 即训练 pθ(xt-1 | xt),通过沿着这个链向后遍历,我们可以像拼凑碎片一样,逐步生成新的数据。
逆向过程需要在当前系统状态的基础上估计先前时间步长的概率密度,这就好比是通过观察现在的结果,去推测过去发生的事情。这意味着在 t=T 时估计 q(xt-1 | xt),并从同质性高斯噪声中生成数据样本。然而,与正向过程不同的是,从当前状态估计先前状态需要知道所有先前的梯度,而我们无法在没有能够预测此类估计的学习模型的情况下获取它们。因此,我们必须训练一个神经网络模型,该模型根据学习的权重 θ 和时间 t 的当前状态来估计 ρθ(χτ-1|χτ),这就好比是训练一个智能的“预测家”,让它能够根据当前的信息,准确地预测出过去的事件。这可以通过以下方式对所有时间步骤应用反向公式(pθ(x0:T),也称为轨迹,进行估计:
通过将模型加上时间步骤 t 的条件,模型将会学习预测每个时间步骤的高斯参数,而均值函数的参数化是由 Ho 等人提出的,可以按以下方式进行计算:
在 Ho 等人的研究中,作者建议使用固定方差函数 Σθ = βt,这使得模型的计算更加简单和稳定。然后,我们可以按照以下方式计算时间为 t-1 的样本:
4. Architecture
虽然我们简化过的损失函数旨在训练模型 ϵθ,但我们仍未定义该模型的架构。而该模型的唯一要求是其输入和输出的维度相同,这为模型的设计提供了很大的灵活性,让研究人员可以充分发挥自己的创造力,设计出各种独特的架构来满足不同的需求。
考虑到这一限制,图像 Diffusion Model 通常使用类似于 U-Net 的架构实现。U-Net 是一个对称的架构,其输入和输出具有相同的大小,宛如一对相互呼应的镜像。它使用相应特征维度的编码器和解码器块之间的跳过连接,这种独特的连接方式使得模型能够更好地保留和利用数据中的信息。通常,输入图像首先进行下采样,逐渐降低图像的分辨率,然后进行上采样,逐步恢复图像的细节,直到达到其初始大小,这一过程仿佛是在对图像进行一次奇妙的“压缩”和“解压缩”之旅。
在 DDPM 的原始实现中,U-Net 由 Wide ResNet blocks(宽残差块)、group normalization(组归一化)以及 self-attention(自注意力)块组成,这些组件各司其职,共同协作,使得模型能够更好地捕捉和处理图像中的各种特征。通过在每个残差块中添加正弦 position embedding(位置嵌入),来指定扩散时间步长 t,这就好比是在模型中加入了一个“时间感知器”,让模型能够根据不同的时间步长调整自己的行为。
Reverse Process Decoder and L0
在反向过程中,路径包含许多在连续条件高斯分布下的转换,这些转换仿佛是一系列精心设计的“数据变形术”。然而,在反向过程结束时,我们试图生成由整数像素值组成的图像,这就需要我们设计一种方法,以获取所有像素的每个可能像素值的 discrete(离散)(log)概率。
这是通过将反向扩散链中的最后一个转换设置为独立离散解码器来完成的。为了确定给定图像 x1 的情况下图像 x0 的概率,我们首先将数据维度之间的独立性约束,这就好比是为每个像素建立了一个独立的“概率小世界”。具体来说:
在这里,D 表示数据的维度,上标 i 表示提取一个坐标。现在的目标是确定对于给定像素,每个整数值的可能性是多少,给定时间 t=1 时稍微有噪声的图像中对应像素的可能值分布:
在此,t=1 的像素分布是从下面的多元高斯分布中推导出来的,其对角协方差矩阵允许我们将分布分解为单变量高斯分布的乘积,每个数据维度对应一个单变量高斯分布,这就好比是将一个复杂的问题拆解成多个简单的部分来分别处理,从而降低了问题的复杂度。具体来说:
我们假设图像由介于 0、1、…、255 的整数组成(与标准 RGB 图像相同),并已线性缩放至 [-1,1]。然后,我们将实数线分成小的“桶”,对于给定的缩放像素值 x,该范围的桶是 ([x-1/255, x+1/255])。给定 (x_1) 中对应像素的单变量高斯分布,像素值 x 的概率是在以 x 为中心的桶中该单变量高斯分布下的面积,这就好比是在测量一个特定区间内的“概率含量”。
下面展示了每个桶的面积及其对于平均值为零的高斯分布的概率。在这种情况下,平均像素值为 255/2(半亮度)。红色曲线表示 (t=1) 图像中特定像素的分布,而区域则给出了 (t=0) 图像中相应像素值的概率,这种直观的展示方式有助于我们更好地理解概率分布的变化过程。
对于每个像素的初始值 (t=0),其 (p_θ(x_0|x_1)) 的值就是它们的乘积,这就好比是将各个维度的概率“汇聚”起来,形成一个综合的概率评估。这个过程可以用以下方程式简洁地表达:
其中:
以及:
给定 (p_θ(x_0|x_1)) 的这个方程式,我们可以计算 (L_{vlb}) 的最后一项,而这并不是以 KL 散度的形式表述,这为我们提供了一种不同于 KL 散度的视角来评估模型的性能。
5. Training and sampling algorithms
5.1 Construction of the Model
在扩散模型的训练中使用的模型遵循与 VAE 网络类似的模式,但与其他网络架构相比,它通常更简单和直接,这使得模型的构建和训练过程更加高效和易于实现。输入层的输入大小与数据维度相同,这保证了模型能够完整地接收和处理输入数据的所有信息。根据网络要求的深度,可以有多层隐藏层,这些隐藏层负责逐步提取和转换数据中的特征。中间层是具有相应激活函数的线性层,激活函数的引入为模型带来了非线性能力,使其能够处理复杂的模式和关系。最后一层的大小再次与原始输入层的大小相同,因此可以重构原始数据,这就好比是模型在经历了复杂的处理过程后,最终能够还原出原始的“模样”。在 Denoising Diffusion Networks 中,最后一层由两个独立的输出组成,分别专门用于预测 probability density(概率密度)的 mean(均值)和 variance(方差),这种设计使得模型能够更准确地描述数据的分布特性。
5.2 Computation of Loss Function
网络模型的训练目标是优化损失函数,这就好比是模型在学习过程中需要努力达到的一个“目标分数”。扩散模型是通过找到最大化训练数据概率的反向 Markov 转换来进行训练的,这就好比是模型在寻找一种最优的“逆向路径”,以便能够从噪声中恢复出原始数据。实际上,训练过程相当于最小化负对数似然的变分上限,这就好比是模型在努力降低一个“上限分数”,以达到更好的性能。
Sohl-Dickstein 等人提出了这个损失函数的简化形式,它将损失定义为两个高斯分布之间 KL 散度的线性组合和一组熵的形式。这不仅简化了计算过程,还使得实现损失函数变得更加容易,就好比是为模型的训练过程提供了一条更加简洁的“路径”。损失函数如下:
5.3 Kullback-Leibler (KL) Divergences
我们希望将 (L_{vlb}) 重写为 Kullback-Leibler(KL)散度的形式。KL 散度是一种非对称统计距离度量,用于衡量一个概率分布 P 与参考分布 Q 相差多少,这就好比是在测量两个分布之间的“差异程度”。我们对以 KL 散度的形式表达 (L_{vlb}) 感兴趣,是因为我们 Markov 链中的转换分布是高斯分布,而高斯分布之间的 KL 散度具有封闭形式,这使得计算过程更加高效和准确。
连续分布的 KL 散度的数学形式是:
The double bars indicate that the function is not symmetric with respect to its arguments.
下面你可以看到一个变化的分布 (P)(蓝色)从参考分布 (Q)(红色)的 KL 散度。绿色曲线表示上面 KL 散度定义中的积分函数,曲线下的总面积表示任何给定时刻 (P) 从 (Q) 的 KL 散度值,这个值也以数字形式显示,这种直观的展示方式有助于我们更好地理解 KL 散度的含义和变化过程。
根据 KL 散度投影 (L_{vlb})
在 (L_{VLB}) 中,除了 (L_0) 以外的每个 KL 项都比较两个高斯分布,因此它们可以以“封闭形式”计算,这就好比是找到了一种直接计算两个分布差异的方法,而不需要进行复杂的近似计算。(L_T) 是常数,可以在训练期间被忽略,因为 (q) 没有可学习的参数,而 (x_T) 是 Gaussian noise(高斯噪声)。Ho 等人(2020 年)使用从 (N(x_0;μ_θ(x_1,1),Σ_θ(x_1,1))) 衍生的单独离散解码器模拟 (L_0),这种设计使得模型能够更准确地处理离散数据。
让我们分别标记变分下限损失中的每个部分:
将 (L_{t-1}) 中的前向过程后验条件于 (x_0),可以得到一个可行的形式,这导致所有 KL 散度都是高斯之间的比较。这意味着,可以使用闭式表达式而不是蒙特卡罗估计来精确计算散度,这就好比是选择了一种更精确的“测量工具”,从而提高了计算的准确性和效率。
5.4 Final Objective and Simplification Loss
在实验过程中,Ho 等人(2020)发现,在给定时间步长的情况下,预测图像的噪声部分可以产生最佳结果,并且使用忽略权重项的简化目标执行扩散模型的训练效果更好,这就好比是找到了一种更有效的“训练策略”,能够使模型在训练过程中表现得更加出色。在损失函数中,Ho 等人进一步提出了改进,其中均值的参数化使用了前向过程中上一节所述的方式,这种改进使得模型能够更准确地描述数据的分布特性。
最终的简化目标如下:
其中,C 是不依赖于 θ 的常数。
扩散模型的训练和采样算法可以用简洁的图表呈现如下:
Fig. 4. The training and sampling algorithms in DDPM (Image source: Ho et al. 2020)
6. Conditioned Generation
扩散模型是有条件的模型,它依赖于先验知识,这就好比是一位艺术家在创作过程中需要参考一些已有的灵感来源。在图像生成任务中,prior 数据通常是文本、图像或语义地图,这些先验信息为模型提供了创作的方向和依据。为了获取此条件的潜在表示,使用 transformer(例如 CLIP)将文本/图像嵌入潜在向量“τ”中,这就好比是将先验信息转化为模型能够理解和处理的形式。因此,最终的损失函数不仅取决于原始图像的 latent space(潜在空间),也取决于条件的 latent embedding(潜在嵌入),而这样子以条件化采样过程操纵 generated sample(生成样本),在这里也称为 guided diffusion(引导扩散)。
在数学上,引导是指将先验数据分布 (p(x)) 与条件 (y)(即类别标签或图像/文本嵌入)进行条件化,从而得到 (p(x|y)),这就好比是为数据分布添加了一个“条件约束”,使其能够根据不同的条件产生不同的结果。
要将扩散模型 (p_θ) 转换为条件扩散模型,可以在每个扩散步骤中添加条件信息 (y),这就好比是在模型的每一步都加入了先验信息的引导,使其能够朝着期望的方向发展。
每个时间步骤都看到条件可能是从文本提示获得优秀样本的良好理由,这就好比是让模型在每个时刻都能够接收到文本提示的“灵感”,从而生成更符合期望的图像。
通常,引导扩散模型旨在学习 (\nabla \log p_θ(x_t|y)),这就好比是模型在学习如何根据条件 (y) 来调整数据 (x_t) 的分布。因此,使用贝叶斯规则,我们可以将其表示为:
因为梯度运算符 (\nabla_{x_t}) 只涉及 (x_t),所以没有 (y) 的梯度。此外,记住 (\log(ab) = \log(a) + \log(b))。
通过添加 guidance scalar(引导标量)项 (s),我们得到:
使用这种公式,让我们区分 classifier(分类器)和 classifier-free(无分类器)的引导。接下来,我们将介绍两种旨在注入 label(标签)信息的方法。
6.1 Classifier guidance
Sohl-Dickstein 等人和后来的 Dhariwal 和 Nichol 展示了我们可以使用分类器 (f_ϕ(y|x_t,t)) 来指导扩散过程在训练中朝着目标类 (y) 方向移动,这就好比是为扩散过程添加了一个“导航仪”,使其能够朝着期望的类别方向发展。为了实现这一点,我们可以使用分类器 (f_ϕ(y|x_t,t)) 对噪声图像 (x_t) 进行训练,以预测其类别 (y)。然后,我们可以使用梯度 (\nabla \log(f_ϕ(y|x_t))) 来指导扩散过程,这就好比是利用分类器的“知识”来引导扩散过程朝着正确的方向发展。具体来说,我们可以建立一个类条件扩散模型,其均值为 (μ_θ(x_t|y)),方差为 (Σ_θ(x_t|y))。
由于 (p_θ \sim N(μ_θ, Σ_θ)),我们可以使用先前章节的引导公式来显示,均值受到类 (y) 的 (\log f_ϕ(y|x_t)) 的梯度干扰,从而产生:
在著名的 GLIDE 论文中,Nichol 等人进一步扩展了这个想法,并使用 CLIP 嵌入来引导扩散。CLIP 是由 Saharia 等人提出的,包括一个图像编码器 (g) 和一个文本编码器 (h)。它分别产生图像和文本嵌入 (g(x_t)) 和 (h©),其中 © 是文本标题,这就好比是将图像和文本的信息转化为模型能够理解和处理的形式。因此,我们可以使用它们的点积来干扰梯度,这就好比是利用图像和文本之间的“关联”来引导扩散过程:
因此,他们成功地将 generation process(生成过程)“引导”向 user-defined(用户定义)的文本标题,这就好比是让模型能够根据用户的文本提示生成符合期望的图像。
Algorithm of classifier guided diffusion sampling. Source: Dhariwal & Nichol 2021
6.2 Classifier-Free Guidance
使用与之前相同的公式,我们可以定义一个 classifier-free 引导扩散模型:
Ho 和 Salimans 提出了不需要第二个分类器模型即可实现引导的方法,这就好比是找到了一种更简洁的“引导策略”。作者们没有训练单独的分类器,而是训练了一个有条件的扩散模型 (ε_θ(x_t|y)) 和一个无条件的模型 (ε_θ(x_t|0))。实际上,他们使用完全相同的神经网络,在训练过程中,他们随机将类别 (y) 设置为 0,以便模型暴露于有条件和无条件的设置,这就好比是让模型在训练过程中同时学习有引导和无引导的情况,从而提高了模型的适应性和灵活性。
注意,这也可以用于“inject”文本嵌入,就像在 classifier guidance 中展示的那样,这就好比是将文本信息注入到模型中,使其能够根据文本内容进行生成。
这个过程虽然有些“奇怪”,但有两个主要优点:
- 它只使用单一模型来引导扩散,这就好比是简化了引导过程,使得模型更加简洁和高效。
- 当在条件上需要使用分类器难以预测的信息(例如 text embedding)时,它简化了引导的过程,这就好比是为模型提供了一种更灵活的引导方式,使其能够更好地处理复杂的条件信息。
7. Stable diffusion: Latent diffusion model
潜变散射模型(Latent diffusion model,LDM;Rombach 等人)基于一个相对简单的思路:不直接在高维输入上应用扩散过程,而是将输入投影到较小的潜变空间中进行扩散运算,这就好比是将问题从一个复杂的高维空间转移到一个更简单的低维空间,从而降低了问题的复杂度和计算成本。
更详细地说,Rombach 等人提出使用编码器网络将输入编码成潜变表示,即 (z_t = g(x_t))。这个决策的直觉是通过在较低维空间中处理输入来降低训练扩散模型的计算要求,这就好比是为模型找到了一种更高效的“处理方式”。之后,应用标准的扩散模型(U-Net)生成新数据,由解码器网络进行上采样,这就好比是将生成的数据从低维空间“还原”回高维空间。
从逆向扩散过程的马尔可夫链中生成样本的速度非常慢,因为 T 可能高达一千或几千步,这就好比是一场漫长的“旅程”。一种简单的解决方法是运行一个分步抽样计划(Nichol 和 Dhariwal,2021),每 (\lceil T / S \rceil) 步采取抽样更新,以将过程从 T 减少到 S 步,这就好比是为模型提供了一种“加速策略”,使其能够更快地生成样本。生成的新抽样计划为 ({\tau_1,\dots,\tau_S}),其中 (\tau_1 < \tau_2 < \dots < \tau_S \in [1, T]) 且 (S < T)。
如果将典型扩散模型(DM)的损失公式化为:
另一种方法是,根据 nice property 将 (q_σ(x_{t-1}|x_t,x_0)) 改写为以所需标准差 (σ_t) 为参数化的形式,这就好比是为模型提供了一种更灵活的“参数化方式”,使其能够更好地控制扩散过程。
回想一下,在 (q(x_{t-1}|x_t,x_0) = N(x_{t-1};\mu_t(x_t,x_0),β_t I)),因此我们有:
让 (σ_t^2 = η ⋅ β_t),这样我们就可以调整 (η \in \mathbb{R}^+) 作为超参数以控制抽样的随机性,这就好比是为模型提供了一个“调节旋钮”,使其能够根据需要调整随机性的程度。当 (η=0) 时,抽样过程变成了 deterministic(确定性的)。这样的模型称为 denoising diffusion implicit model(DDIM;Song 等人,2020)。DDIM 具有相同的边际噪声分布,但是可以将噪声映射回原始数据样本,这就好比是为模型提供了一种“逆向映射”的能力。
在生成过程中,我们只对 (S) 个扩散步骤 ({\tau_1,\dots,\tau_S}) 进行抽样,推理过程变为:
在实验中,所有模型都是用 (T = 1000) 个扩散步骤进行训练的,他们观察到当 (S) 很小时,DDIM((η = 0))可以产生最好的质量样本,而小 (S) 时 DDPM((η = 1))表现更差。当我们有足够的资源运行完整的反向马尔可夫扩散步骤((S = T = 1000))时,DDPM 的表现更好。使用 DDIM,可以训练扩散模型达到任意数量的正向步骤,但只能从生成过程的某些步骤中进行采样,这就好比是为模型提供了一种灵活的“采样策略”,使其能够在不同的步骤中生成样本。
图 7. 不同设置下扩散模型的 CIFAR10 和 CelebA 数据集上的 FID 得分,包括 DDIM ((η=0)) 和 DDPM ((σ^2))。(图片来源:Song 等人,2020)
相较于 DDPM,DDIM 能够:
- 在使用少得多的步骤时生成更高质量的样本,这就好比是提高了生成效率,能够在更短的时间内生成更优质的图像。
- 具有“一致性”特性,因为生成过程是确定性的,这意味着在相同潜变量的条件下产生的多个样本应具有类似的高级特征,这就好比是保证了生成样本的稳定性和一致性。
- 由于具有一致性,DDIM 可以在潜在变量中进行语义上有意义的插值,这就好比是为模型提供了一种“语义插值”的能力,使其能够在潜在空间中生成具有语义关联的样本。
潜变散射模型(LDM;Rombach 和 Blattmann 等人,2022)在潜在空间中运行扩散过程,而不是像素空间,使训练成本更低,推理速度更快,这就好比是为模型找到了一种更高效的“运行方式”。它的动机来自于观察到图像的大部分比特贡献于知觉细节,而在进行激烈压缩后,语义和概念组成仍然存在。LDM 通过首先使用自编码器削减 pixel-level redundancy(像素级冗余),然后通过学习到的潜在变量在扩散过程上操作/生成语义概念,松散地分解了知觉压缩和语义压缩的生成建模学习,这就好比是将图像的知觉和语义信息分别进行处理,从而提高了模型的效率和效果。
图 8. 压缩率和失真之间的权衡示意图,展示了两阶段压缩 —— 知觉压缩和语义压缩。(图片来源:Rombach 和 Blattmann等人,2022)
知觉压缩过程依赖于自编码器模型。使用编码器 (ε) 压缩输入图像 (x \in \mathbb{R}^{H \times W \times 3}) 到更小的 2D 潜在变量 (z = ε(x) \in \mathbb{R}^{h \times w \times c}),其中下采样率 (f = H/h = W/w = 2^m, m \in \mathbb{N})。然后,解码器 (D) 从潜在变量重建图像,即 (x̃ = D(z))。本文探讨了自编码器训练中的两种正则化方法,以避免潜在变量空间中任意高变异性:
- KL-reg:对学习的潜在变量施加小的 KL 惩罚,使其接近标准正态分布,类似于 VAE(变分自编码器)。
- VQ-reg:在解码器中使用向量量化层,类似于 VQ-VAE,但量化层被解码器吸收。
扩散和去噪过程发生在潜在变量 (z) 上。去噪模型是一个时间条件下的 U-Net,通过交叉注意力机制进行扩展,以处理图像生成的灵活调节信息(例如类别标签、语义地图、图像的模糊变体),这就好比是为模型提供了一种灵活的“调节机制”,使其能够根据不同的调节信息生成不同的图像。该设计相当于使用交叉注意力机制将不同模态的表示融合到模型中,每种调节信息都与特定领域的编码器 (τ_θ) 配对,以将调节输入 (y) 投影到可以映射到交叉注意力组件的中间表示,(τ_θ(y) \in \mathbb{R}^{M \times d_τ}):
8. Summary
在本节中,我们对扩散模型的理论进行了详细的探讨。从鸟瞰的角度来看,以下是本节中最重要的几点:
- 我们的扩散模型被参数化为 Markov chain(马尔可夫链),这意味着我们的潜在变量 (x_1,\dots,x_T) 仅取决于前一个(或后一个)时间步,这就好比是为模型建立了一个“记忆机制”,使其能够根据前一步的信息来决定下一步的行为。
- 马尔可夫链中的 transition distributions(转移分布) 是 高斯分布,其中前向过程需要一个方差计划,而反向过程的参数是学习的,这就好比是为模型的扩散和去噪过程分别设计了不同的“行为模式”。
- 扩散过程确保了当 T 足够大时,(x_T) 渐近地分布为一个各向同性的高斯分布,这就好比是将数据逐渐“淹没”在噪声中,使其失去原有的特征。
- 在我们的情景下,方差计划是固定的,但也可以进行学习。对于固定的计划,按照几何进度可能比按线性进度获得更好的结果,这就好比是为模型的扩散过程选择了一个更合适的“节奏”。无论哪种情况,方差通常随着时间在序列中增加(即 (i < j) 时 (β_i < β_j)),这就好比是随着时间的推移,噪声的影响逐渐增大。
- 扩散模型非常灵活,允许使用任何输入和输出维度相同的架构。许多实现使用类似于 U-Net 的架构,这就好比是为模型选择了一种广泛认可且高效的“骨架”。
- 训练目标是 最大化训练数据的可能性。这表现为调整模型参数以 最小化数据的负对数概率的变分上限,这就好比是让模型在训练过程中努力提高对数据的拟合能力,同时避免过拟合。
- 由于我们的马尔可夫假设,几乎所有目标函数中的项都可以被表示为 KL 散度。由于我们使用的是高斯分布,因此这些值 易于计算,这就好比是为模型的训练过程提供了一种高效的“计算工具”,从而无需进行复杂的蒙特卡洛近似。
- 最终,使用 简化的训练目标 来训练预测给定潜在变量的噪声组件的函数会产生最好且最稳定的结果,这就好比是为模型的训练找到了一条最有效的“路径”。
- 在反向扩散过程的最后一步中,使用 离散解码器 获得像素值的 log likelihoods(对数似然),这就好比是为模型提供了一种将生成的数据转换为最终图像的“解码方式”。
通过以上对扩散模型的详细探讨和分析,我们可以看到,扩散模型作为一种新兴的生成模型,不仅在理论上具有深厚的基础,而且在实际应用中也展现出了强大的能力和潜力。它通过独特的扩散和去噪过程,能够生成高质量、多样化的图像数据,为图像生成领域带来了新的突破和发展。