什么是扩散模型?

2024 年 8 月 21 日

作者

Dave Bergmann

Senior Writer, AI Models, IBM

Cole Stryker

Editorial Lead, AI Models

什么是扩散模型?

扩散模型是一种生成模型,主要用于图像生成和其他计算机视觉任务。基于扩散的神经网络经过深度学习训练,逐渐利用随机噪声“扩散”样本,然后反向操作该扩散过程以生成高质量图像。

扩散模型是神经网络架构之一,处于生成式 AI 最前沿,最显著的代表是流行的文本转图像模型,包括 Stability AI 的 Stable Diffusion、OpenAI 的 DALL-E(从 DALL-E-2 开始)、Midjourney 和 Google 的 Imagen。它们改善了用于图像合成的其他机器学习架构的性能和稳定性,例如变分自动编码器 (VAE)、生成式对抗网络 (GAN) 和自回归模型(如 PixelCNN)。

扩散模型的灵感源自物理学,将像素视为一滴墨水的分子,随着时间的推移在一杯水中扩散。就像墨水分子的随机运动最终导致它们在玻璃杯中均匀分散一样,在图像中随机引入噪声最终产生看起来像电视静电的效果。通过对扩散过程进行建模,然后以某种方式学习反向操作扩散过程,人工智能模型就可以通过对随机噪声样本进行简单的“去噪”处理来生成新图像。

扩散模型与图像生成和其他图像处理任务(例如修复和超分辨率)最密切相关,但它们的应用可以扩展到其他领域,包括音频生成、药物设计和分子生成。为简单起见,本文将重点介绍图像生成。

小球在轨道上滚动的三维设计

最新的 AI 新闻 + 洞察分析

在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。 

扩散模型的历史和理论

要解释和理解扩散模型,首先必须注意,现在称为“扩散”的生成过程是通过两种不同的数学方法在两个不同的场合独立发现的。简而言之,扩散模型的概念非常简单,但数学原理却非常复杂,并且存在多种“工作”方式。

随后的发展借鉴这两种方法的思想,融合每种方法的优势,最终产生目前在图像生成领域占据主导地位的现代扩散模型。因此,对扩散模型的历史和理论的简要回顾不仅有助于理解扩散模型的工作原理,还有助于了解背后的原因

灵感源自热力学的深度学习模型

Sohl-Dickstein 等人 在 2015 年的论文《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》中首次引入了灵感源自物理学的扩散模型。他们的算法应用了 Langevin 动力学(一种对分子系统运动进行建模的方法)来支撑扩散模型的基本前提:将数据转化为噪声,以便将噪声转化为数据。

关于概率密度函数的注释

与变分自编码器 (VAE) 等大多数生成式模型一样,Sohl-Dickstein 的算法可对概率密度进行建模:随机采样变量 x 落入特定值范围的相对似然。本质上,为训练数据集进行概率密度函数建模允许算法生成高度可能适合训练数据分布的样本。在生成新图像时,模型会根据从训练数据模式中学到的概率分布,假设像素值以这种特定方式分布的概率很高

从逻辑上讲,概率密度函数要求所有可能性的似然总和为 1。换句话说,所有可能性的百分比概率总和必须正好为 100%。在实践中,这通常需要一个归一化常数:概率函数中包含的一个值,它可将总概率降至 1。

计算适用于所有可能变量值的归一化常数通常很困难:技术上可以求解,但需要无限的时间来计算。在这种情况下,基于似然的模型必须仅限于特定模型架构,或者开发巧妙的解决方法,以易于处理的方式近似归一化常数。

基于分数的生成模型

与 Sohl-Dickstein 的论文无关,Yang Song 和 Stefano Ermon 在他们 2019 年发表的论文《Generative Modeling by Estimating Gradients of the Data Distribution》中开发了一种基于能量的模型,而该模型被称为噪声条件分数网络。他们的算法对对数 (log) 概率密度函数 p(x) 的梯度 (∇x)log进行了建模。 p(X)对数概率密度函数的梯度写为 Xlogp(X),该函数称为 Stein 分数或简称为“分数函数”。

与传统的概率密度函数不同,分数函数不需要归一化常数,因为它们不直接进行概率密度建模(因此不必将总概率归一化为 1)。相反,它们通过分数匹配进行训练:学习模型参数 θ,从而生成模型 pθ(x),其分数(换句话说,其梯度)与训练数据的数据分布 q(x) 相匹配。

这种基于分数的生成模型 (SGM) 的另一个优点是,与基于似然的模型不同,它们不会对 pθ(x) 的模型架构施加太多限制。

在探索提高模型性能的方法时,Song 和 Ermon 不约而同地采用了与 Sohl-Dickstein 等人相同的技术。他们的论文指出,“用随机高斯噪声扰动数据使得数据分布更适合基于分数的生成建模。”他们的模型使用U-Net 架构(最初为图像分割开发)构建而成,同样应用了朗之万动力学来生成样本。

去噪扩散概率模型 (DDPM)

2020 年,Ho 等人在他们的开创性论文《Denoising diffusion probabilistic models》(DDPM) 中提议利用 Sohl-Dickstein 的方法并通过使用变分推理来生成高质量图像。他们的论文表明,最大化证据下限 (ELBO)(一种将基于概率的优化问题重写为易于处理的方法)来训练扩散模型本质上等同于用于训练 SGM 的分数匹配目标的组合。

Ho 等人利用分数匹配实施 Sohl-Dickstein 的方法,证明了扩散概率模型可以获得与 GAN(当时最先进的模型)相媲美的图像质量。Song、Ermon、Sohl-Dickstein 等人(包括 VAE 的发明者 Diederik P. Kingma)在他们 2021 年论文《Score-Based Generative Modeling through Stochastic Differential Equations》中进一步探讨了这些联系。

同年晚些时候,Dhariwal 和 Nichol 利用前述论文中的洞察分析,发表了《Diffusion Models Beat GANs on Image Synthesis》一文,牢固地确立了扩散模型作为新的最先进技术的地位。

DDPM(而不是 SGM)通常仍然是扩散模型的主要模式,不过在随后的研究中有所改进。例如,2022 年颇具影响力的论文《High-Resolution Image Synthesis with Latent Diffusion Models》标志着效率和成本效益方面的重要进步。

专家荟萃 | 播客

解码 AI:每周新闻摘要

加入我们的世界级专家团队,包括工程师、研究人员、产品负责人等,他们将穿透 AI 的喧嚣,为您带来最新的 AI 新闻和见解。

扩散模型如何工作?

在训练过程中,扩散模型利用随机噪声逐步扩散数据点,直到数据点被破坏,然后学习反向操作扩散过程,重建原始数据分布。

然后,经过训练的扩散模型可以仅通过对纯噪声的随机初始样本去噪,生成类似于训练数据的新数据点。从概念上讲,这类似于去噪自动编码器,其中噪声图像会充当潜在变量。

直接将随机噪声转换为相干图像极其困难和复杂,但是将噪声图像转换为噪声稍小的图像相对容易和直接。因此,扩散模型将反向扩散过程定义为从简单分布(如高斯噪声)到较复杂分布(如相干图像)的逐步渐进转换。

先训练然后部署扩散的过程可以分解为三个关键阶段:

  • 前向扩散过程,是指将训练数据集中的图像转换为纯噪声 – 通常是高斯分布。
  • 反向扩散过程,是指模型学习执行原始前向扩散过程中每个先前步长的反向过程。
  • 图像生成,是指经过训练的模型对随机噪声分布进行采样,并使用学习的反向扩散过程将其转换为高质量输出,以对高斯噪声的随机样本进行去噪。

前向扩散过程

前向扩散过程的目的是将训练数据集中的干净数据(例如图像或音频样本)转换为纯噪声。最常见的方法是迭代注入高斯噪声,直到整个数据分布都是高斯分布。

从数学上讲,这个逐步过程可以用马尔可夫链来表达:一种随机过程(遵循某些概率规则的随机过程),用于对连续时间序列数据进行建模。在马尔可夫链中,每个时间步长的结果仅受其前一个时间步长的影响。简而言之:xt,即马尔可夫链 x 在时间步长 t 的状态,仅受 xt-1 直接影响。定义从任何 xt 转移到 xt+1 的数学函数称为转移核

在每个时间步长 t,向 xt-1 添加少量高斯噪声,然后重新缩放图像以保持恒定图像大小,但会不断注入随机像素。在此公式中,x0 是原始的干净数据点;x1 是第一个时间步长后的数据点,其中添加了少量高斯噪声;xT 是前向扩散过程的最终状态。如果 T 足够大,即经过足够多的步长后,xT 将变为纯高斯噪声。

我们将每个前向步长定义为 q(Xt|Xt-1)预测数据分布状态 q(xt),给定 q(xt-1)。在标准 DDPM 中,这个前向过程不涉及任何机器学习:马尔可夫链的最终结果始终是高斯分布,因此不需要优化。

添加噪声

在 DDPM 中,马尔可夫链中每个步长添加的高斯噪声既不是恒定的,也不是任意的。相反,噪声来自原始图像的结构,并且添加噪声的速率随着每个连续步长而稳步增加。

通过平衡两个相互竞争的优先级,改变噪声量既可以提高模型训练的稳定性,又可以增强整体性能。正如 Yang Song 在其关于基于分数的生成模型的博客中所述:

  • 通过用噪声数据填充这些区域,较大的噪声可以提高模型在训练数据“低密度”区域(训练数据中代表性较低的视觉类别和概念)中准确学习的能力。但它也会过度损坏数据,降低整体准确性。
  • 较小的噪声对原始数据分布的破坏较小,但在低密度区域的性能较差。
  • 因此,为了达到两全其美的效果,扩散模型在训练中使用多种尺度的噪声

回想一下,任何高斯(正态)分布都有一个均值 μ和方差。Σ另一个参数 β 是转移核中高斯噪声均值和方差的比例因子,它定义前向马尔科夫链的每个步长。在给定步长中改变 β 值会导致在该步长添加的高斯噪声发生变化。β1 是时间步长 1 的方差;βt 是时间步长 t 的方差,依此类推,直到 βT

每个步骤的 β 的比率值反过来取决于方差时间表

方差时间表

在每个步长 t 中,图像均与前一个步长中的迭代略有偏移(根据均值),且会将噪声添加到图像的这个偏移版本中(根据方差)。每次偏移和增加噪声的幅度都取决于 βt 值:由于 βt 会根据方差时间表增加,因此扩散速率能稳步增加。β 始终是介于 0 和 1 之间的值:因此,0 < β1 < β2 < … < βT < 1。

β 选择特定方差时间表是一个重要的考虑因素。它通常作为超参数进行手动设置,要么固定为常量值,要么根据某个公式进行,并预先确定 β 的起始值和终止值。在 DDPM 论文中,Ho 等人采用了具有 1,000 个步长的线性时间表,其中 β1 = 10 -4βT = 0.02。后来的研究发现,使用余弦时间表等其他类型的时间表,[1] 或将时间表本身作为另一个学习参数,[2]可以提高性能和效率。

βt 值决定在步长 t 添加的高斯噪声的均值和方差。

  • 高斯噪声的均值 μ 在时间步长 t 添加,即μt,计算公式为 μt=(1-βt)Xt-1。通俗地说,在每个步长 t 中添加的噪声的均值只是前一个步长 xt-1 中图像的缩放版本。βt 的大小决定该均值与前一个步长的偏差程度:当 βt 非常小时,此偏移非常小,因为 (1-βt)(1-0)1因此添加的噪声将与原始图像非常相似。随着 βt 值的增加,这种偏移变得更加明显。

  • 在时间步长 t 添加的高斯噪声的方差计算公式为 Σt=βtI,其中 I单位矩阵βt 越大,噪声越多。βt 非常小时,噪声可以忽略不计。

总之,在每个步长 t 中,图像与前一个步长中的迭代略有偏移(根据均值),并且将噪声添加到图像的这个偏移版本中(根据方差)。每次偏移和增加噪声的幅度都取决于 βt 值:由于 βt 根据方差时间表增加,因此扩散速率稳步增加。

因为高斯噪声的添加是逐渐开始的,并且噪声本身始终来自前一个步长中原始图像的基本结构,所以在许多步长中都保留原始图像的基本特性。这使模型能够在反向扩散过程中有意义地学习原始数据分布的模式和结构。

重新参数化技巧

这种逐步过程的一个缺点是它很麻烦并且计算成本高:对于可能包含数千或数百万张图像的训练数据集中的每一张图像,前向过程需要数十或数百个单独步长。

无需反复添加噪声,只需重新参数化表达式  1βt 作为新参数  αt,即可巧妙地重写前向过程的公式。通过马尔可夫链的“良好特性”,这个新参数可以进一步扩展为一个附加参数 α¯t,在马尔可夫链中 αt 每个渐进步长直到该点,由迭代乘法计算得出。这个附加参数基本上反映 xt 的信噪比 (SNR):换句话说,在时间步长 t 保留多少原始图像。

例如,在 x1一次添加了少量噪声。 α¯t 值接近 1,这意味着图像仍保留大部分原始“信号”。在后续步长中,例如 x50,多次添加了噪声。因为 αt=1βtαt 值始终小于 1。因为 α¯50=α1α2α49α50α¯t 值在第 50 个步长时将更接近 0,这意味着更多的原始图像已被噪声取代。在时间步长 TxT 完全是噪声,且α¯t 值接近 0。

虽然该等式的复杂推导超出本文的范围,但有两个重要要点有助于理解此重新参数化技巧的重要性:

  • x 在任意时间步长 t 的状态现在可以定义为 Xt=α¯tX0+1-α¯tε0,其中 ε0 是第 1 个步长中添加的噪声。随着 α¯t 值在每个步长的减小,x0 的影响减小,而 ε0 的影响增加。

  • 因为 α¯t 是从 1βt 推导得出,而 βt 值由方差时间表决定,所以以这种方式重写公式允许在任何时间步长 t 直接计算 xt,而无需经历整个逐步前向过程。

反向扩散过程

在扩散模型中,反向扩散过程才是真正的机器学习过程。在学习执行前向过程的噪声逐步的反向操作时,该模型本质上是学习将纯高斯噪声去噪为干净的图像。神经网络经过训练后,即可利用这种能力通过逐步反向扩散从高斯噪声中生成新图像。

从理论上讲,该模型的任务可以看作是前向扩散的简单逆转。前向过程从训练数据集的真实数据分布 q(x) 中采样的数据点 x0 开始,定义为 q(Xt|Xt-1):即,给定 q(Xt-1),计算  q(Xt)。与之相反,反向扩散定义为 q(Xt-1|Xt)。但实际上,计算 q(Xt-1|Xt) 很难。

相反,通过两种解决方法来制定训练任务:

  • 如前所述,q(x) 由构成实际扩散模型本身的神经网络 pθ(x) 进行近似。训练的目的是学习模型参数 θ ,以得出 pθXt-1|Xt ) 输出,匹配 qXt-1|Xt ) 输出。

  • 此模型 pθ(x) 并不直接预测 Xt-1,甚至也不直接预测 xt-1xt 之间添加的特定噪声。相反,它预测 xt 中存在的整个噪声,然后去除该噪声的一部分(基于该步长方差时间表的状态),以得出 xt-1。原始 DDPM 论文通过仅估计高斯噪声的均值,进一步简化这一过程,不过后来的模型通常也预测方差。

再次回顾一下,在前向扩散中添加的高斯噪声的均值不是任意的:尽管该噪声确实是随机的,但其结构最初源自原始图像 x0的结构。因此,该模型能够学习通过反向扩散准确预测噪声,从而不仅能学会图像去噪,还能以隐式方式学习 x0 的结构。

用于扩散模型训练的损失函数

用于扩散模型的特定训练目标与用于优化变分自编码器 (VAE) 的重建损失项密切相关。与 VAE 一样,扩散模型通过最大化多个损失项组合的变分下限 (VLB)(也称为证据下限 (ELBO))来进行优化。

最大化 VLB 用于变分推理,以近似难以处理的分数函数 Xlog(p(X)):它并不直接最小化误差,而是将等式重新表述为最大化模型预测准确性的最小估计值(或下限)。

所用的损失项均反映前向扩散步长 q 的结果与 pθ 预测的反向步长之间的 Kullback-Leibler 散度(或“KL 散度”,通常表示为 DKL)。KL 散度用于衡量两个概率分布之间的差异,例如,一个图像中像素值分布与另一个图像中像素值分布之间的差异。

具体而言,扩散模型的损失函数结合三个损失项:LTLt L0

  •  LT 反映 q(XT|X0) 和 pθ(xT) 之间的 KL 散度。换句话说,即前向过程 q 的完全噪声化最终结果与反向过程的起点之间的差异。该项通常可以忽略,因为 xT 是高斯函数参数,而 q 没有可学习的参数。

  • Lt 反映 q(Xt-1|Xt,X0) 和 pθ(Xt-1|Xt) 之间在每个步长的 KL 散度。换句话说,即与原始图像 x0 前向扩散过程中每个相应的噪声步长相比,反向扩散过程中每个 pθ 的去噪预测的准确性。

  • L0 衡量 -logpθ(X0|X1)。换句话说,L0 反映模型对完全去噪图像 x0 预测的负对数似然L0 的梯度是本文前面描述的分数匹配项。损失项为负值,因此最小化损失函数相当于最大化模型预测的似然。

尽管复杂的数学推导超出了本文的范围,但 VLB 最终可以简化为均方误差 (MSE)即在模型 εθ 预测的噪声以及前向过程 ε中在每个时间步长添加的真实噪声。这就解释了为什么模型的输出是每个步长的噪声预测,而不是去噪图像本身。

通过计算损失函数反向传播期间的损失函数梯度,然后调整模型权重以通过梯度下降来最小化损失函数,模型在整个训练数据集中的预测将变得更加准确。

利用扩散模型生成图像

扩散模型学会准确估算每一个步长要减去的噪声后,即可通过从随机噪声图像 xT 中采样来生成新图像,从其学习的数据分布中提取特征,并进行去噪 T 个步长。与 VAE 类似,在采样过程中引入少量随机性元素使扩散模型能够生成类似于训练数据的图像,而不是直接复制训练图像。

与反向扩散训练过程不同,生成过程中的步长数不必与前向过程中使用的步长数相匹配。之所以能够做到这一点,是因为模型经过训练,能够预测每个图像步长的全部噪声,而不是该步长中要去除的特定噪声量。

步长数越少,速度越快,计算需求越低,但可能会在细节上有所权衡;步长数越多通常可以提高准确性,但代价是速度降低、计算成本增加。

引导型扩散模型

虽然标准扩散模型可以随机生成高质量训练图像,但图像生成模型的大多数实际用途都需要对模型输出进行某种控制。引导型扩散模型允许用户在特定引导下调节生成的图像。

最常见的引导型扩散模型是文本转图像扩散模型,它允许用户使用文本提示调节输出,例如“a giraffe wearing a top hat”。这需要将扩散模型与单独的大型语言模型 (LLM) 配对来解读文本提示,该理论由 Google 在论文《Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding》中首次提出。

标准扩散模型旨在预测无条件评分函数 ∇xlogp(x):换句话说,模型 p 生成的图像 x 与训练数据 x 拟合的可能性的对数梯度。引导扩散模型引入了特定的视觉类别 y(例如,“长颈鹿”),并预测条件评分函数 ∇xlogp(x|y):换句话说,必须拟合类别 y 的图像 x 的可能性。

引导型扩散的方法可以分为两个类别:

  • 分类器引导型扩散需要单独的分类器模型学习训练扩散模型以生成视觉效果的每个类别 y向量嵌入。然后,利用该向量嵌入调节每个步长 t 的输出。扩散模型不需要额外训练,但只能将分类器学到的特定类别作为输出条件。

  • 无分类器引导不需要单独的模型,但需要专门为条件引导训练两阶段扩散模型。这通常需要一个两阶段模型:在第一阶段,CLIP 等嵌入算法会为提示生成嵌入 y。在第二阶段,扩散模型会使用该嵌入来调节输出。尽管增加了额外的训练开销,但这有利于为未知图像类别提供零样本指导。

潜在扩散模型

尽管传统扩散模型具有生成高质量图像的最先进能力,但它们有两个值得注意的弊端:速度慢且计算成本高。从稳定扩散模型开始,潜在扩散模型的出现大大减少了这些弊端。

隐式扩散模型背后的前提非常简单,再次利用了与变分自编码器 (VAE) 的联系。该模型能够不在高维像素空间中应用扩散过程(即直接应用于输入图像),而是先将输入投影到低维隐式空间然后在该空间中应用扩散过程。

从本质上讲,潜在扩散模型采用类似 VAE 的自动编码器架构来训练编码器输出输入数据 x 的潜在表示 z。然后将这些潜在表示用作标准扩散模型的输入,通常使用 U-Net 架构。由于扩散模型处理的是低维数据,因此会将输出输入解码器网络,对所需最终图像大小进行上采样。

相关解决方案
IBM watsonx.ai

使用面向 AI 构建器的新一代企业级开发平台 IBM watsonx.ai,可以训练、验证、调整和部署生成式 AI、基础模型和机器学习功能。使用一小部分数据,即可在很短的时间内构建 AI 应用程序。

了解 watsonx.ai
人工智能 (AI) 解决方案

借助 IBM 业界领先的人工智能专业知识和解决方案组合,让人工智能在您的业务中发挥作用。

深入了解 AI 解决方案
人工智能服务

通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策和商业价值。

深入了解人工智能服务
采取后续步骤

一站式访问跨越 AI 开发生命周期的功能。利用用户友好型界面、工作流并访问行业标准 API 和 SDK,生成功能强大的 AI 解决方案。

深入了解 watsonx.ai 预约实时演示
脚注

注意:所有链接均为 ibm.com 外部链接。

[1]“Improved Denoising Diffusion Probabilistic Models”,arXiv,2021 年 2 月 18 日
[2]“Variational Diffusion Models”,arXiv,最后修订日期为 2023 年 4 月 14 日