其乐融融的IT技术小站

Midjourney和Other Diffusion模型如何从随机噪声生成图像

译者 | 朱钢

审核 | 重楼

扩散模型(如Midjourney和DALL-E 2)可以生成令人惊叹的图像,但它们的训练始终从完全的噪声开始。

每当机器学习(ML)领域取得进展或发生微小变化时,就会引起巨大的炒作。当涉及到人工智能时,炒作往往会失去控制,并伴随着各种荒谬的信息。最近,你可能已经注意到越来越多的人开始使用Midjourney、ChatGPT、Copilot等技术。

然而,这些系统的真相往往平淡无奇。机器学习是一门数学科学,ML模型的真实影响并不像一些博主所声称的那样深远。它们可能对某些领域的工作流程产生益处,甚至在某些情况下能够彻底改变其中的大部分,但前提是用户(无论是组织还是个人)必须对其内部运作、限制、能力和潜力有足够的理解。只有在这种情况下,它们才能发挥作用。

本文希望对扩散模型的工作原理进行一些阐述,例如备受欢迎的Midjourney、DALL-E 2和Stable Diffusion,尤其是它们的训练过程。本文包含数学表达式,但也以易理解的方式描述了每个变量代表的含义。

前向扩散

所有的扩散模型,包括Midjourney(虽然我们还没有一篇描述它的论文),都是由多个元素组成的神经网络,通过随机性生成图像。最初,它们被训练成逐渐将图像转变为噪声。这种方法建立了一个由时间步组成的马尔可夫链,在这个链中,图像经过一系列的转换,在t=0时从一个初始纯净状态逐渐演化为t=T时的完全噪声,即最后一步。

*马尔可夫链是一系列变量的序列,其中一个变量的状态仅取决于前一个变量的状态。

在每个步骤中应用的时间步数可以从几百到一千甚至更多,并且必须事先确定每个步骤中要应用的噪声水平;这被称为noising schedule在数学上,这种噪声或前向扩散过程表示为:

q(xt|xt-1) = N(xt; √(1-βt) xt-1, βtI)

q(x0)是我们的实分布,而q(xt∣xt−1)表示的是前向扩散过程,其中xt始终在xt-1的条件下进行。符号N代表高斯分布或正态分布,由均值μ和方差σ^2定义。在这种情况下,均值由√(1-βt)xt-1表示,其中βt是我们的方差。噪声在每个步骤中从正态分布中采样,即ϵ∼N(0,I),而方差计划是预先确定的。

简单来说,我们在当前步骤上有一个正态分布,其中的均值由√(1-βt)乘以上一步骤的图像xt-1表示。除了这种重新缩放之外,我们还在每次迭代中向图像添加了一个小的噪声βtI。将β视为一个很小的正标量值,例如0.001,它被有意设置得很小。

在每个时间步骤中,我们会执行上述的操作。但是,我们还可以为将在xt、x2、x3、...、xT序列中生成的所有样本定义一个联合分布。它的形式如下所示:

q(x1:T|x0) = ∏t=1:T q(xt|xt-1)

正如你所看到的,这个联合分布由在时间步骤1到T中创建的条件分布q(xt|xt-1)的乘积∏表示,并给定初始图像x0。

好的,但是我们可以跳过链中的链接来生成任何 xt 而不完成前面的所有步骤吗?

是的,我们可以这样做。

这是因为我们使用一个简单的高斯核来扩散数据。为了做到这一点,我们计算标量值αt,它等于1 - βt,并且我们将变量ᾱt定义为从t1到t的αs的乘积。前向扩散方差βt对于整个过程是至关重要的。它们可以通过重新参数化学习,也可以作为超参数保持不变,但它们总是被设计成使得ᾱt在最后一步T上趋近于0。这确保了扩散后的数据具有正态分布,这对于逆向生成过程至关重要。

在我们拥有了核函数之后,我们可以随机采样任何xt,因为:xt = √ᾱt x0 + √(1 - ᾱt),其中ε(噪声)是从均值为0,协方差矩阵为单位矩阵I的正态分布中得到的。

简单来说,如果我们需要生成表示马尔可夫链中的一个随机步骤的xt,只要我们有x0、ᾱt和噪声项ε,我们就可以毫无问题地生成它。

生成过程

让我们现在深入探讨逆向过程,即模型生成新样本的过程。首先要理解的是,我们无法直接计算去噪分布q(xt-1|xt),因为这将需要知道数据集中所有图像的分布。然而,我们可以使用贝叶斯定理来显示该分布与边缘数据分布q(xt-1)和在步骤t上的扩散核q(xt|xt-1)的乘积成正比:

q(xt-1|xt) ∝ q(xt-1) q(xt|xt-1)

然而,乘积和分布仍然是难以处理的。因此,我们需要对条件概率分布进行近似。幸运的是,由于在前向过程中噪声注入βt很小,我们可以使用正态分布来进行近似。

我们可以将对条件概率分布的近似表示为pθ(xt−1∣xt),其中θ是模型的参数,通过梯度下降进行迭代优化。

当我们记住马尔可夫链的终点是一个正态分布时,我们可以假设逆向过程也是高斯分布。因此,它必须由均值μθ和方差Σθ参数化,这是我们的神经网络需要计算的。

这是过程的参数化表示:pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))

在原始论文《Denoising Diffusion Probabilistic Models》中,研究人员发现将方差固定为Σθ(xt, t) = σ^2tI是在样本质量方面的最佳选择。特别是,他们发现将方差固定为β与将方差固定为βt的结果几乎相同,因为当我们在过程中添加扩散步骤时,β和βt保持接近,因此实际上是均值而不是方差决定了分布。

注:在稍后发布的论文《Improved Denoising Diffusion Probabilistic Models》中,研究人员确实对方差进行了参数化。这有助于提高对数似然,但并没有提高样本效率。

那么,我们如何确定目标函数来推导均值呢?

由于q和pθ可以被视为变分自动编码器(Variational Autoencoder),它是一种通过将数据编码成潜在空间然后再解码回输入空间来近似数据分布的模型,因此我们可以使用变分上界(ELBO)目标函数来训练它。它最小化了相对于x0的负对数似然。在这里,变分下界是每个时间步骤上损失的总和,而每个损失项是两个高斯分布之间的KL散度(KL divergence)。

*潜在空间是一个压缩空间,在其中输入特征由不同的维度表示;它有助于模型轻松地发现数据对象之间的模式和相似性。

**KL散度是衡量两个分布之间距离的度量。它基本上告诉你,如果用模型分布来近似目标分布,你将会失去多少信息。

正如您所记得的,我们可以在任何以x0为条件的噪声水平上对xt进行采样。由于q(xt|x0) = N(xt;√(α̅t)x0, (1-α̅t)I),我们可以通过向x0添加和缩放噪声来得到任何xt。此外,由于α̅t是βt(预设的方差)的函数,我们可以在训练过程中轻松优化损失函数L中的随机项。

这一属性的另一个重要优点是,我们可以将网络转变为噪声预测器而不是均值预测器。具体来说,可以对均值进行重新参数化,使模型使用εθ(xt, t)在KL散度项中近似添加的噪声。例如:

μθ(xt, t) = (1/√αt) (xt - (βt/√(1-α¯t)) εθ(xt, t))

最后,我们得到了损失函数Lt的目标方程(在随机的时间步骤上,假设噪声是从随机分布N(0, I)中采样得到的):

||ε - εθ(xt, t)||^2 = ||ε - εθ(√α¯t x0 + √(1-α¯t)ε, t)||^2

其中,x0是未经破坏的图像,ϵ是在时间步骤t上采样得到的纯噪声,εθ(xt, t)是通过将近似值xt通过由θ参数化的神经网络传递而得到的预测噪声。

该网络通过预测噪声与真实噪声之间的均方误差进行优化。通过最小化真实误差和预测误差之间的距离,我们教导模型逐渐做出更准确的近似。总而言之,这里有一系列的训练步骤,为我们提供了模型,如Midhjourney和稳定扩散,可以从纯噪声中生成图像。

图片来自原始论文图片来自原始论文

译者介绍

朱钢,51CTO社区编辑,11年一线开发经验。目前在北京图伽健康从事医疗软件研发工作。

原文标题:How Midjourney and Other Diffusion Models Create Images from Random Noise,作者:Rostyslav Demush

赞 ()
分享到:更多 ()

相关推荐

内容页底部广告位3
留言与评论(共有 0 条评论)
   
验证码: