Midjourney和其他扩散模型如何从随机噪声中创造出图像

每当机器学习 (ML) 领域取得进展,甚至出现最细微的变化时,就会出现巨大的炒作。当涉及到人工智能时,这种热潮最终总是不成比例地增长,疯狂的说法也总是随之而来。你可能已经注意到了这一点,最近越来越多的人开始使用 Midjourney、ChatGPT、Copilot 等等。

然而,这些系统的真相总是更加平淡无奇。机器学习是数学,而ML模型的真正意义并不像一些博主让你相信的那样深刻。它们可能是有益的,在某些情况下,可以改变特定领域的大部分工作流程,但前提是用户,无论是组织还是个人,对其内部运作、限制、能力和潜力有足够的了解。

本文希望能阐明一些扩散模型的工作原理,如备受欢迎的 Midjourney、DALL-E 2 和 Stable Diffusion,特别是它们的训练方法。这篇文章包括数学表达式,但它也以易懂的方式描述了每个变量所代表的内容。

正向扩散

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

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

时间步长的数量(范围从几百到一千或更多)以及每步要应用的噪声级别必须预先确定;这被称为噪声时间表。在数学上,这种噪声或前向扩散过程表示为:

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)

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

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

是的,我们可以。

这是可能的,因为我们使用简单的高斯核来扩散数据。为此,我们计算标量值 αt,它等于 1 – βt,我们将变量 ᾱt 定义为从 t1t 的 α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 可以被视为变分自动编码器,一种通过将数据编码到潜在空间*然后返回输入空间来近似数据分布的模型,我们可以使用变分上限 (ELBO)目标函数来训练它。它最小化关于 x0 的负对数似然。这里,变分下界是每个时间步长的损失之和,损失的每一项是两个高斯分布之间的 KL 散度**。

*Latent空间是一个压缩的空间,在这个空间中,输入特征由独立的维度表示;它帮助模型容易找到数据对象之间的模式和相似性。

**KL发散是对两个分布之间距离的一种测量。它基本上告诉你,如果你用一个模型分布来近似目标分布,你会损失多少信息。

你还记得,我们可以在以 x0 为条件的任何噪声级别对 xt 进行采样。由于 q(xt|x0) = N(xt;√(α̅t)x0, (1-α̅t)I),我们能够向 x0 添加噪声并按比例缩放噪声以获得任何 xt。此外,由于 α̅t是预定方差βt 的函数,我们可以在训练期间轻松优化损失函数的随机项。

此属性的另一个重要好处是我们可以将我们的网络变成噪声预测器而不是均值预测器。具体来说,可以使用KL 散度项中的 εθ(xt, t) 重新参数化均值,使模型近似于步骤 t 处添加的噪声。如下: 

μθ(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 和 Stable Diffusion。

Midjourney和其他扩散模型如何从随机噪声中创造出图像

来自原始论文:https://arxiv.org/pdf/2006.11239.pdf。

作者:Rostyslav Demush
原文:https://dzone.com/articles/how-midjourney-and-other-diffusion-models-create-i
实时互动网nxrte.com编译整理,仅供参考

本文为原创稿件,版权归作者所有,如需转载,请注明出处:https://www.nxrte.com/jishu/22398.html

(0)

相关推荐

发表回复

登录后才能评论