扩散损失:每一步解释

原文:towardsdatascience.com/diffusion-loss-every-step-explained-8c19c5e1349b

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/154e1c97bfd0df47dbbaefab11a17680.png

使用 DALLE-3 生成(作者)

在我们处于使用扩散模型进行图像生成的激动人心的时代,本文将专注于稳定扩散模型背后的数学和隐藏的直觉。

本文旨在揭示损失函数是如何在去噪扩散概率模型论文中简化为真实噪声与预测噪声之间的平方差项的。

如果你想回顾变分贝叶斯方法中证据下界(ELBO)的概念和步骤,请查看关于潜在变量模型概率主成分分析的先前详细文章。

不加延迟,让我们开始吧!


符号与定义:

让我们从我们将多次使用的几个符号开始。

_x0: 这将表示在时间步 0 的图像,即过程的开始时的原始图像。有时它也指在去噪过程的最后一步恢复的图像。

_xT: 这将是最终时间步的图像。此时,图像只是一个各向同性的高斯噪声。

正向过程:这是一个多步过程,在每一步中,输入图像被低级高斯噪声所破坏。在每个时间步 _x_1, x_2, …., xT 获得的噪声版本是通过马尔可夫过程获得的。

q(_xt | x{t_−1}) ≡ 正向过程;给定时间步 t−1 的图像,返回当前图像

马尔可夫链 (MC):指一个随机过程(“无记忆”),描述不同状态之间的转换,其中转换到任何特定状态的概率仅取决于当前状态和经过的时间。以下给出一个概率定义:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/80a5bb1171a517f6dbed416e2b2cee58.png

方程 1:马尔可夫链的定义:当前状态仅取决于最后的状态。

对于任何正整数 n 和随机变量 _X1, _X__2, _X3,… 的可能状态 _x0, _x__1, _x2,…,马尔可夫性质表明,当前状态在步骤 n (_xn) 的概率仅取决于之前的 n-1 状态。


正向过程与马尔可夫链:

形式上,给定数据分布 _x_0∼q(_x_0),正向马尔可夫过程生成一系列随机变量 _x_1,_x_2,…,xT,其转移核为 q(_xt | x{t_−1})。使用概率的链式法则和马尔可夫性质,我们可以写出:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/787bd754c5074ff614012b315a485538.png

式 2:扩散过程中的前向过程作为 MC 过程,我们逐步添加高斯噪声

在这里,β 是介于 0 和 1 之间的某些数字,即 β∈(0,1)。在 DDPM 论文(参考文献 1)中,噪声调度是线性的。这被证明对于高分辨率图像是可行的,但在参考文献 3 中,作者提出了一个改进的学习调度³,它也适用于子最优分辨率,如 32×32。一般来说,β1 < β2 < β3 < … < βT,并且随着我们通过每个时间步,新的高斯噪声的均值将接近 0。因此 q(_xT* | _x__0) ≈ _𝒩(0,I). TL;DR: 前向过程缓慢地将噪声注入数据,直到所有结构都丢失。

给定前向过程的单步定义,我们可以重复这个过程 100 次,以达到第 100 个时间步的图像。但如果不是重复应用噪声,而是我们可以使用单步来采样任何给定时间步的数据点,那会怎么样?也就是说,如果 q(_xt | x{t_−1}) 是已知的,我们能否找到一个表达式来表示 q(_xt | _x0)?然后从原始图像 _x0 开始,我们可以采样给定时间步 t 的噪声图像 _xt

这是通过重新参数化技巧实现的。

重新参数化技巧: 主要思想源于所有正态分布都是 𝒩(*0, I) 的缩放和平移版本的事实。给定一个正态随机变量 X,从一个任意 μ __ & σ 的分布中,我们可以写出:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/533f2b1007f3f4d18f0fb6568d4ebc9b.png

重新参数化技巧

这个技巧的证明非常简单,如果你感兴趣,稍后可以查看我的笔记本。使用式 2 中的重新参数化技巧,我们现在可以思考在时间步 t 的图像:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c2ef778557478b6f3e87988d808e3c09.png

式 3:在式 2 中应用重新参数化技巧的单步前向过程;

如果我们知道 _xt(比如说时间 t 的图像),我们能否估计出在时间步 t-1t-2 以及更早时的图像?让我们开始吧:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5cb334c402088ca759114efc6f088d12.png

式 4:将式 3 推广的步骤,其中我们希望用 xt 来表示 x{t-2}

在式 4 中,首先,我们将式 3 中的 t 改为 t-1(第二行)。然后将第一行中的 x_{t-1} 替换为这个新定义。我们能否稍微简化这个表达式?是的!为此,我们需要应用正态分布的两个性质来达到第三行;这些性质是:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f6b2ecb8f665c3cbd88b3cff782e94fc.png

在式 4 中(从第二行到第三行)使用了正态分布的两种简单性质;

将这两个性质应用于方程式 4 的最后一行,我们可以重新写成:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2a0c2bbf159a27ceda7653f7e9cdb9c1.png

方程式 5:使用正态分布的上述性质简化方程式 4 的最后一行;

我们能否在方程式 5 中逐步降低时间步,其中可以将 _xt(即时间步 t 的噪声图像)用 _x0(即原始图像)来表示?答案是肯定的;以下是我们的做法;

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/651f9372e17120d46e14076838611c30.png

方程式 6:将方程式 5 转换为更通用的形式,并最终将正向过程写成单步

我们通过简单的数学在这里所取得的成就是一点特殊表达式:从方程式 3,其中在时间步 t 的采样过程需要知道 t-1 时刻的数据,到这里的方程式 6,我们可以使用仅 1 步和初始输入图像来采样任何给定步骤的数据点。因此,正向过程已经被大大简化,任何时间步 t 的噪声图像都与原始图像通过噪声调度器 α 直接相关。

关于 VAE,我们也可以将正向过程视为数据编码步骤;然而,与 VAE 的不同之处在于,在扩散模型中,它是一个“固定”的过程,没有涉及神经网络;在数据空间方面,我们将正向过程视为将数据点从原始数据分布推向各向同性高斯噪声,而反向过程则试图实现相反的效果;让我们更详细地探讨反向过程;


反向过程:

正向过程完成后,我们有一个潜在变量 xT,它是一个各向同性的高斯分布。如果我们知道确切的反向分布 q(x{t-1}|x_t),我们可以从各向同性高斯噪声 x_T ∼ 𝒩(0, I) 中开始采样,然后我们可以反转过程(去噪);

_ 但是 q(x__{t-1}|x_t) 的估计很复杂,我们可以用贝叶斯定理来验证;

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5adbbdb0db4b45b4a4607ecbb2ab45e7.png

方程式 7:反向过程难以计算,因为我们不知道比率 q(x_{t-1})/q(x_t);

如我们所知,正向过程 q(_xt|x{t_−1}),为了计算反向步骤,我们需要知道比率 q(x{t_−1})/q(_xt); 由于这很困难,我们用神经网络来近似 q(x{t_−1} | _xt). 每次当我们考虑用一个分布来近似另一个分布时,你的思维应该已经指向 KL 散度,以及可能的变分下界(证据下界/ELBO)

反向过程定义为具有LEARNED高斯转换的MC以及反向过程的单步,那么反向过程可以写成:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1d30da75757a3ed5756113489f5fb622.png

公式 8:反向过程中的一个步骤:学习到的(μ, Σ最初是未知的)正态分布。

在这里,μ 和 Σ,即均值和方差(对于多元正态分布是协方差矩阵)被参数化和学习(这里引入神经网络)。DDPM 论文的作者假设协方差矩阵被固定到一个特定的方差计划,如下所示:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a328553da355b4ad0c007ab72c593bd9.png

公式 9:在学习的 MC(公式 7)正态分布中,Σ被固定为噪声调度参数。

方程式上方的方差计划给出了相似的结果。因此,我们剩下的是训练参数化的均值 (μ),这在进行扩散模型时完成;完整的反向过程也可以定义为同质高斯噪声 𝒩(0, I) ≡ p_(xT)(这是反向过程的起点)和通过 1 到 T 的单步反向过程的乘积,如下所示:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e59e50b760b97c4292f090697aa701f5.png

公式 10:通过时间步 0 到 T 的反向过程作为联合分布

_x_1,…xT 是与数据相同维度的潜在变量,即 在应用噪声之前 和之后,图像的大小保持不变。在这里,我们再次可以将扩散模型与 VAE 进行比较,其中正向过程可以与编码相提并论,反向过程可以与解码相提并论。但在扩散中,根据定义,正向过程是固定的,所以我们只需要训练一个网络;而在 VAE 中,我们需要联合训练编码器和解码器。这也与损失函数的推导阶段非常吻合,这也与 VAE 相似;之前在高斯混合模型背景下讨论的潜在变量模型(LVMs),通常与证据下界(ELBO)相伴。

我们想要最小化的将是 −log _pθ (_x__0);_pθ 是参数化分布,_x0 是时间步 0 的图像。


扩散作为潜在变量模型 & ELBO:

最小化 −log _pθ (_x__0) 并不是一个容易计算的量,原因在于 _x__0 会依赖于所有其他时间步 _x_1,_x_2,…xT,非常具体地说,我们需要执行一个 难以处理的积分

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/787a9ecd0c0d9a939b812e357c5a469b.png

通过反向过程获得的时间步 0(原始图像)依赖于所有其他时间步。

要获得 _pθ (x__0),我们需要对所有其他时间步进行边缘化,即到达去噪图像的所有可能方式。这根本不可能(可能有无限种方式);在这里,我们可以使用证据下界来获得对数似然的下界。由于我已经在LVMs概率 PCA的上下文中讨论了 ELBO,让我们在这里使用这个定义:在计算似然(log p(x))的过程中,如果我们需要计算后验 p(z|x),其中 z 是一个难以计算的潜在变量,可以通过另一个简单的参数化分布 q(z|x) 来近似,那么:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/dd0bae86d9abd9db4ae554c941f38e14.png

公式 11:证据下界的定义,其中 q(z|x) 是一个灵活的近似变分分布。

也可以通过少量的数学操作(查看我的笔记,见参考文献中的链接)使用 KL 散度重写上述表达式,如下所示:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f1cc9efcda6a91540e0e1ad9cb8bd0cb.png

公式 12:包含 KL 散度项的公式 9。

我们将使用这个表达式(公式 12)来推导损失函数;在扩散模型中,_x_0(第 0 时间步的图像)将代表真实数据,而 _x_1,…xT 是潜在变量,即 x{_1:*T};让我们将其应用于公式 10:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7e0e98f542dc8c9fbf4f2c7bdfd0eda8.png

公式 13:将不同时间步的图像 x_1 到 x_T 作为公式 10 中的潜在变量。

在上述公式中,我将q(x{1:T}|x0)简写为q作为简记。此外,我在第二步使用了KL 散度的定义。由于上述 ELBO 表达式包含两个分布的比率的对数,这两个分布我们之前已经知道(公式 2 和公式 9),所以我们在这里直接使用它们:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9e3ab556f27f33ff61f19d109515df20.png

公式 14:使用公式 12 中的公式 2 和公式 9 的定义。

这里(公式 14)发生的事情是,我们使用了正向和反向过程的定义,并分离了 3 个不同的项;为什么我们将 t=1 的项分离并组合所有 t≥ 2 的项,很快就会变得清楚。

如果我们看求和项,分子指的是反向过程,但分母仍然是正向过程;为了将其转换为反向过程,我们可以在这里使用贝叶斯定理(方程 7)并稍作修改;方程 7 右侧的项具有高方差,因为很难知道原始图像实际上是什么,因为反向过程是从各向同性高斯噪声开始的。因此,作者将这些分布也条件化到原始图像(_x0)上:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ababb681ae2556a41f0df14130ba1acc.png

方程 15:从方程 7 修改的贝叶斯定理

我们现在可以用这个结果替换方程 14 中的求和项的分母:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b25a9d51a68bb3e62cd02f3c1753377b.png

方程 16:在方程 14 中使用方程 15 并简化

尤其是我们关注期望值中的第二个求和项(正向过程的比率),这将导致简化;为了看到这一点,让我们只考虑到T=5的求和:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/dae7455f649d8555817c1c0e78b5c517.png

方程 17:简化方程 16 中的一个求和项。

这很好,它告诉我们这个项最终将归结为log q(_x__1 | _x**0)/q(_xT* | _x**0);使用这个,我们可以再次回到方程 16:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c2e85ae759da6d8a735565e2d22cd6dc.png

方程 18:将方程 17 的逻辑带回到方程 16。

在这个阶段,我们可以进一步使用对数乘积和加法规则的基本原理简化表达式;

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/37d622c68770c55db2dfc600516dcd82.png

方程 19:使用对数和积规则修改方程 18;

让我们看看第一项;它比较了p(_xT)和q(_xT|_x0);根据定义,正向过程是预先定义的,最终 _xT是一个纯高斯分布;所以这个项本质上是无参数的;我们可以完全忽略它。此外,这个项接近于零,因为q(_xT|x0) ≈ 𝒩(0, I)=p(xT).

第二项,我们比较真实的反向过程,即q(x{t_−1}|_xt, _x__0)(在 _x__0 的条件下)和参数化的一个 _pθ(x{t_−1}|_xt)有一个注意事项。首先,我们在每个时间步都这样做。其次,在Lilian 的博客²中广泛展示了q(x{t−1}|x_t, x0)当它在原始数据点上条件化并且是一个高斯分布时是可处理的。所以,我们确实有q(x*{t−1}|x_t, x*0)*的定义,它是关于正态分布的,如下所示:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3e198632d722caeebe7fce2e4c2da919.png

等式 20:条件反向过程是高斯分布,我们可以推导出均值和方差。

因此,在第二个项中,分母是高斯分布,而分子根据定义(等式 8)也是一个高斯分布,因此我们正在比较两个高斯分布。

让我们看看β项,它只取决于学习率计划,而不是输入图像。因此,我们现在的焦点转向*μ*

我们希望我们的网络能够从等式 8 预测μθ(_xt, t),使其尽可能接近μ。让我们进一步简化*μ*项,以消除对原始图像 _x_0 的依赖。为此,我们从等式 6 开始,将x0替换为xt

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6573e4b8e00ba19a5cd6c3cbbdadb708.png

等式 21:将等式 6 用 x0 表示

一旦我们将这个x0重新代入等式 20 来计算μ~,我们就会得到:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/26966a6b02569fcb46ffa0d8ef760315.png

等式 22:将μ~用 x_t 表示

达到这里的步骤需要一些仔细的考虑,以下是一些详细的步骤(我建议你自己试一试,然后检查笔记本)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/054e3e88b5fa5297e05fc6b337bb9321.png

如果我们只是将等式 20 中的 x0 替换为 xt,达到等式 22 可能并不那么简单


等式 22 中的表达式真的很酷!因为我们的网络正在尝试从等式 8 预测μθ(_xt, t),使其尽可能接近μ,*μ大约是减去当前步骤(等式 22)图像中的噪声(随机缩放)!!哇!!!

我们已经讨论过,作者将参数化正态分布的协方差(_pθ(x{t_−1} | _xt))固定为β~。如果我们以指数形式写出正态分布,并取这两个分布的比率的对数(这也是 KL 散度的定义),如等式 19 所示,那么我们就会得到一个均方误差项,对于特定的时间步t,我们可以写成以下形式:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f016938317929bbf46b88de47426dae7.png

等式 23:从等式 19 进一步简化

在文献中,这个项被称为去噪匹配项。我们将所需的去噪转换步骤作为一个近似,来逼近可处理的、真实去噪转换步骤。在这里,C是一个常数项,与参数θ无关。再次强调:我们的网络正在尝试预测前向过程的后验均值。直接引用论文¹:__ 因此,我们看到µθ最直接的参数化是一个预测µ˜(前向过程的后验均值)的模型。" 这非常重要*。***

我们可以将等式 23 进一步简化,以得出更有意义的结论;由于前向过程的后验均值具有等式 22 中给出的形式,并且 _xt在训练期间是可用的,我们只关注噪声项ϵ。首先,我们将μθ参数化为*μ~*的形式

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/78c3eb1313418807812fbd109959be49.png

公式 24:以与公式 22 类似的形式参数化均值。

如果我们将公式 24 和公式 22 中的 μθ 和 μ~ 的表达式用于公式 23,我们得到:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8a83043b43cbbd55537fda2b944f98f6.png

公式 25:使用公式 22 和公式 24 简化公式 23。

在这里,一切归结为寻找预测噪声在时间 t 与实际噪声之间的平方差。

引用论文¹:

总结来说,我们可以训练反向过程均值函数逼近器 µθ 来预测 µ˜,或者通过修改其参数化,我们可以训练它来预测 ϵ。(也有预测 x0 的可能性,但我们在实验初期发现这会导致样本质量更差。)

作者还发现,如果我们完全忽略权重项,训练效果会更好。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/476d7dbedf56110f5327f25707a5bd3c.png

公式 26:为了进一步简化,忽略公式 25 中的权重项。

由于我们在公式 24 中有这种参数化 μθ 的定义,*我们可以将其用于公式 8 中,得到:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/302fab9e1e3edc065fee5cedc2fdb300.png

公式 27:在反向过程的单步中使用 μθ 的定义。

现在,我们可以使用重新参数化技巧的定义(见上文)来描述如何从公式 27 中的正态分布中采样 x{t-1}_:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/280dd86cffa8cb1129635ee29c49bd28.png

公式 28:从公式 27 中在时间步 t-1 处采样去噪图像;


我们仍然剩下 ELBO 的另一个项,即公式 19 中的最终项 log _pθ(x_0 | x1);关于这个项怎么办? 作者最终忽略了这一项,但让我们构建关于论文中提出的方程(即下文的公式 29)的直觉。作者将图像(像素值在 [0, 1] 之间)缩放到 [-1, 1],以便与反向过程 p(_xT*) 的非常早期步骤保持一致,其中采样从均值为零、方差为 1 的均匀高斯分布开始。然后,作者定义:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a65d1240a09900563479da74f45d5f09.png

公式 29:关注公式 19 的最后一项

在这里,D 是数据维度(给定一个图像,D 是该图像中像素的总数)。δ+、δ- 表示我们在原始像素值(xᶦ_0)的范围周围进行积分。如果 μᶦ_θ 接近像素的平均值,则积分结果会很大(假设对其他所有像素的预测都是好的)。

下面是一个代码块:我们知道一开始 β 非常低(0.0001),假设在一个图像(x0)中,像素值是 87/255,我们在第一步添加噪声后,像素值现在是 89/255,我们的去噪网络试图撤销这个过程,并预测像素值为 μ*{x1, 1} = 88/255 如果它做得好,或者 μ*{x1, 1} = 93/255 如果它做得不好。所以首先我们考虑一个以预测值 μ_{x1, 1} 为均值的正态分布,我们的积分界限将围绕真实像素值 i.e. 87/255,即:[87/255 − 1/255, 87/255 + 1/255](请参阅上方方程中 δ+,δ− 的定义)。

当预测良好时,我们知道概率质量函数(PMF)将很高,而当预测与真相相差甚远时,我们知道 PMF 将很低。因此,这个项只有在网络预测对所有像素都良好时才有所贡献(因为它是一个乘积项)。让我们编写代码并绘制结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值