【论文阅读】Tutorial on Diffusion Models for Imaging and Vision

1.The Basics: Variational Auto-Encoder

1.1 VAE Setting

自动编码器有一个输入变量x和一个潜在变量z

Example. 获得图像的潜在表现并不是一件陌生的事情。回到jpeg压缩,使用离散余弦变换(dct)基φn对图像的底层图像/块进行编码。如果你给我们一个imagex,我们会给你一个系数向量z。从z我们可以做逆变换来恢复(即解码)图像。因此,系数向量z是潜在码。编码器是dct变换,解码器是逆dct变换

变分 variational 这个名字来源于我们用概率分布来描述x和z的因子。我们更感兴趣的不是求助于将x转换为z的确定性过程,而是确保分布p(x)可以映射到所需的分布p(z),并向后返回到p(x)

  • p(x):x的分布。如果我们知道的话,我们早就成为亿万富翁了。整个星系的扩散模型都是为了找到从p(x)中提取样本的方法
  • p(z):潜在变量的分布。因为我们都很懒惰,所以让我们把它设为零均值单位方差高斯p(z)=n(0,i)
  • p(z|x):与编码器相关的条件分布,它告诉我们给定x时z的可能性,我们无法访问它。P (z|x)本身不是编码器,但编码器必须做一些事情,以便它与P (z|x)保持一致
  • p(x|z):与解码器相关的条件分布,它告诉我们在给定z的情况下得到x的后验概率,同样,我们无法访问它。

Example. 

考虑根据高斯混合模型分布的随机变量x,其中潜变量z∈{1,…,k}表示簇恒等式,使得p_Z(k)=\mathbb{P}[Z=k]=\pi_k for k=1...k.我们假设\sum_{k=1}^{K}\pi_{k}=1。那么,如果我们被告知只需要看第k个簇,给定z的x的条件分布是p_{\mathbf{X}|Z}(\mathbf{x}|k)=\mathcal{N}(\mathbf{x}|\mu_{k},\sigma_{k}^{2}\mathbf{I}).

x的边际分布可以用总概率定律找到p_{\mathbf{X}}(\mathbf{x})=\sum_{k=1}^Kp_{\mathbf{X}|Z}(\mathbf{x}|k)p_Z(k)=\sum_{k=1}^K\pi_k\mathcal{N}(\mathbf{x}|\boldsymbol{\mu}_k,\sigma_k^2\mathbf{I}).

因此,如果我们从px(x)开始,编码器的设计问题是构建一个神奇的编码器,使得对于每个样本x~px(x,潜在编码将是z∈{1,…,k},分布为z~pz(k)。为了说明编码器和解码器是如何工作的,让我们假设均值和方差是已知的并且是固定的。否则,我们将需要通过em算法来估计均值和方差。这是可行的,但繁琐的方程会破坏本说明的目的

Encoder:我们如何从x中获得z?这很容易,因为在编码器处,我们知道px(x)和z(k)。假设你只有两个类z∈{1,2}。实际上,你只是在做一个二进制决定,决定样本x应该属于哪里。有很多方法可以做二进制决定。最大后验maximum-a-posteriori:

Decoder:在解码器方面,如果我们得到一个潜在代码z∈{1,…,k},神奇的解码器只需要返回一个样本x,它是从p_{\mathbf{X}|Z}(\mathbf{x}|k)=\mathcal{N}(\mathbf{x}|\mu_{k},\sigma_{k}^{2}\mathbf{I})中提取的。不同的z将给出k个混合物组分中的一个。如果我们有足够的样本,总体分布将遵循高斯混合。

如果我们想找到神奇的编码器和解码器,我们必须有办法找到这两个条件分布

在vae的文献中,人们提出了一个考虑以下两种代替分布 proxy distributions 的想法:

  • q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x}):p(z|x)的代理。我们将使它成为高斯。为什么是高斯的?没有特别好的理由。
  • p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z}):p(x|z)的代理。信不信由你,我们也会把它变成高斯的。但这个高斯的作用与高斯q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x})略有不同。虽然我们需要估计高斯q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x})的均值和方差,但我们不需要估计高斯p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z})的任何值。相反,我们将需要一个解码器神经网络来将z转换为x。高斯p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z})将用于通知我们生成的图像x有多好。

“正向 forward ”关系由p(z|x)指定(并由qφ(z|x)近似),而“反向”关系由p(x|z)指定(且由pθ(x|z)近似)。

Example. 

假设我们有一个随机变量x和一个潜变量z:\begin{aligned}&\mathbf{x}\sim\mathcal{N}(\mathbf{x}\mid\mu,\sigma^{2}),\\&\mathbf{z}\sim\mathcal{N}(\mathbf{z}\mid0,1).\end{aligned}

我们的目标是建造一个VAE。(什么?!这个问题有一个平凡的解,其中z=(x−μ)/σ,x=μ+σz。你是绝对正确的。但请遵循我们的推导,看看VAE框架是否合理。)

我们的意思是要构造两个映射“encode”和“decode”。为了简单起见,我们假设这两个映射都是仿射变换 affine transformations:

我们懒得找出联合分布p(x,z),也懒得找出条件分布p(x|z)和p(z|x)。但我们可以构造代理分布qφ(z|x)和pθ(x|z)。既然我们可以自由选择qφ和pθ应该是什么样子,那么我们考虑下面两个高斯如何

对于qφ(z|x):如果给定x,我们当然希望编码器根据我们选择的结构对分布进行编码。由于编码器结构是ax+b,所以qφ(z|x)的自然选择是具有平均值ax+b。方差被选择为1,因为我们知道编码样本z应该是单位方差。

类似地,对于pθ(x|z):如果我们给定z,解码器必须采用cz+d的形式,因为这就是我们设置解码器的方式。方差是c,这是我们需要计算的一个参数。

1.2 Evidence Lower Bound

我们如何使用这两个代理分布来实现确定编码器和解码器的目标?如果我们将φ和θ作为优化变量,那么我们需要一个目标函数(或损失函数),以便我们可以通过训练样本来优化φ和θ。为此,我们需要建立一个关于φ和θ的损失函数。我们在这里使用的损失函数被称为证据下界 Evidence Lower BOund(ELBO)

让我们看看elbo是什么意思以及它是如何派生的

简而言之,elbo是先前分布log p(x)的下界,因为我们可以证明

其中不等式源自kl散度总是非负的事实。因此,elbo是logp(x)的有效下界。由于我们从来没有访问过logp(x),如果我们以某种方式访问过elbo,并且elbo是一个很好的下界,那么我们可以有效地最大化elbo,以实现最大化logp(x)的目标,这是黄金标准。

正如你从方程和图2中看到的,当我们的代理qφ(z|x)可以精确地匹配真实分布p(z|x)时,不等式将变成等式。因此,游戏的一部分是确保qφ(z|x)接近p(z|x)。

Proof of Eqn (3).

这里的全部技巧是使用我们的神奇代理qφ(z|x)来绕过p(x)并导出边界。

最后一个等式:\int a\times p_Z(z)dz=\mathbb{E}[a]对于任意随机变量Z和标量a,有\mathbb{E}[a]=a

我们已经得到了方程\mathbb{E}_{q_{\phi}(\mathbf{z}|\mathbf{x})}[\cdot]。只需多走几步。让我们使用bayes定理,该定理指出p(\mathbf{x},\mathbf{z})=p(\mathbf{z}|\mathbf{x})p(\mathbf{x})

 我们现在有elbo。但是这个elbo仍然不太有用,因为它涉及p(x,z),这是我们无法访问的

让我们仔细看看elbo:

其中我们不可访问的p(x|z)替换为其代理p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z})

在方程(6)中存在两个项:

  • Reconstruction  重建:关于解码器,如果我们将潜在的z馈送到解码器中,我们希望解码器产生好的图像x。因此,我们希望最大化log pθ(x|z)。它类似于最大似然,其中我们想要找到模型参数以最大化观察图像的似然。这里的期望是关于样本z(以x为条件)而取的。这并不奇怪,因为样本z用于评估解码器的质量。它不能是任意的噪声矢量,而是有意义的潜在矢量。因此,z需要从q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x})中采样
  • Prior Matching 先验匹配:第二项是编码器的kl散度。我们希望编码器将x转换为潜在向量z,这样潜在向量将遵循我们选择的分布\mathcal{N}(0,\mathbf{I})。为了更一般,我们将p(z)写为目标分布。因为kl是一个距离(当两个分布变得更不相似时它会增加),我们需要在前面加一个负号,这样当两个分布变得更相似时它就会增加

Example. 

我们从之前的推导中知道

为了确定θ和φ,我们需要最小化先验匹配误差并最大化重建项。对于先前的匹配,我们知道

使KL散度最小,因此,

对于reconstruction项,我们知道

由于e[z] = 0, var[z] = 1,因此当c = σ, d = μ时,项最大(负的项分数最小)。综上所述,编码器和解码器参数为

重构项和先验匹配项如图3所示。在这两种情况下,在训练过程中,我们假设我们可以访问z和x,其中z需要从qφ(z|x)中采样。然后,对于重建,我们估计θ以最大化pθ (x|z)。对于先验匹配,我们找到φ以最小化kl散度。优化可能具有挑战性,因为如果更新φ,分布qφ(z|x)将发生变化

1.3 Training VAE

既然我们理解了elbo的含义,我们就可以讨论如何训练vae了。为了训练vae,我们需要地面真值对(x,z)。我们知道如何得到x;它只是来自数据集的图像。但相应地,z应该是什么?

让我们来谈谈编码器。我们知道z是由分布qφ(z|x)生成的。我们还知道qφ(z|x)是高斯的。假设这个高斯有一个均值μ和一个协方差矩阵\sigma^{2}\mathrm{I}(哈!又是我们的懒惰!我们不使用一般的协方差矩阵,而是假设方差相等)。

棘手的部分是如何从输入图像x中确定μ和\sigma^{2}\mathrm{I}。我们构建了一个深度神经网络,这样

因此,样本z(ℓ)(ℓ 表示训练集中的第ℓ个训练样本)可以从高斯分布中采样

这个想法总结在图4中,我们使用神经网络来估计高斯参数并从高斯中提取样本。注意\mu_{\phi}(\mathbf{x}^{(\ell)})\sigma_{\phi}^{2}(\mathbf{x}^{(\ell)})是x的函数(ℓ). 因此,对于不同的\mathrm{x}^{(\ell)}我们将有一个不同的高斯

Remark.

对于任何高维高斯分布\mathrm{x}\sim\mathcal{N}(\mathrm{x}|\mu,\Sigma),采样过程都可以通过白噪声的变换来完成

半矩阵 half matrix \Sigma^{\frac12}可以通过特征分解或cholesky分解得到。对于对角矩阵\Sigma=\sigma^{2}\mathbf{I},以上简化为

 我们来谈谈解码器。该解码器通过神经网络实现。为简便起见,我们将其定义为decode_{\theta},其中θ表示网络参数。解码器网络的工作是取一个潜在变量z并生成一个图像\widehat{\mathrm{x}}:

现在让我们再做一个(疯狂的)假设:解码图像\widehat{\mathrm{x}}和真实图像x之间的误差是高斯分布的。(等等,又是高斯分布?!)我们假设:

那么,可以得出分布pθ (x|z)为

D是x的维数

这个方程表明,elbo中似然项的最大值实际上就是解码图像和真实图像之间的l2损失。其思想如图5所示。

1.4 Loss Function

一旦你理解了编码器和解码器的结构,损失函数就很容易理解了。我们通过蒙特卡罗模拟近似期望:

其中\mathbf{x}^{(\ell)}是训练集中的第L个样本,\mathbf{z}^{(\ell)}是从\mathbf{z}^{(\ell)}\sim q_{\phi}(\mathbf{z}|\mathbf{x}^{(\ell)})采样的,分布qθ是

Training loss of VAE:

其中\{\mathbf{x}^{(\ell)}\}_{\ell=1}^{L}为训练数据集中的地面真值图像,\mathbf{z}^{(\ell)}从式(7)中采样。

 kl散度项中的z不取决于ℓ 因为我们正在测量两个分布之间的kl散度。这里的变量z是一个伪变量。

我们需要澄清的最后一点是kl散度。由于,我们本质上得到两个高斯分布;如果你去维基百科,你可以看到两个d维高斯分布的kl散度是

通过考虑我们可以证明kl散度有一个解析表达式

其中d是向量z的维数。因此,总损失函数eqn(12)是可微的。因此,我们可以通过反向传播梯度来端到端地训练编码器和解码器

1.5 Inference with VAE

为了进行推理,我们可以简单地将潜在向量z(从p(\mathbf{z})=\mathcal{N}(0,\mathbf{I}))采样)放入解码器decode_{\theta}中,得到图像x;见图6。

2 Denoising Diffusion Probabilistic Model (DDPM) 

您只需要了解以下摘要:

扩散模型是增量更新,其中整体的组装为我们提供了编码器-解码器结构。从一种状态到另一种状态的转换是通过去噪器实现的。

扩散模型的结构如下所示。它被称为变分扩散模型[5]。变分扩散模型具有状态序列x0、x1、…,xt:

  • x0:它是原始图像,与vae中的x相同
  • xt:它是潜变量,与vae中的z相同。因为我们都很懒惰,所以我们想要\mathbf{x}_{T}\sim\mathcal{N}(0,\mathbf{I})
  • x1,xt−1:它们是中间状态。它们也是潜在变量,但它们不是白高斯的

变分扩散模型的结构如图7所示。正向和反向路径类似于单步变分自动编码器的路径。不同之处在于编码器和解码器具有相同的输入输出尺寸。所有正向构建块的组合将给我们提供编码器,所有反向构建块的组合将给我们带来解码器。

 2.1 Building Blocks

Transition Block:第t个转换块由三个状态xt−1、xt和xt+1组成。有两种可能的路径可以到达状态xt,如图8所示。

  • 从xt−1到xt的正向转换:相关联的转换分布是p(xt|xt−1)。简单地说,如果你告诉我们xt−1,我们可以根据p(xt|xt−1)告诉你xt。然而,就像vae一样,转换分布p(xt|xt−1)是不可访问的。但这没关系。像我们这样懒惰的人只会用高斯qφ(xt|xt−1)来近似它。我们稍后将讨论qφ的确切形式,但它只是一些高斯形式。
  • 反向转换从xt+1进行到xt:再说一遍,我们永远不知道p(\mathbf{x}_{t+1}|\mathbf{x}_{t}),但没关系。我们只使用另一个高斯p_{\boldsymbol{\theta}}(\mathbf{x}_{t+1}|\mathbf{x}_{t})来近似真实分布,但其平均值需要通过神经网络来估计

Initial Block:变分扩散模型的初始块集中在状态x0上。由于我们研究的所有问题都是从x0开始的,所以只有从x1到x0的反向转变,而没有从x_{-1}x_{0}。因此,我们只需要担心p(x0|x1)。但由于p(x0|x1)永远不可访问,我们用高斯pθ(x0|x1)来近似它,其中平均值是通过神经网络计算的。见图9。

Final Block:Final Block关注状态xt。请记住,xt应该是我们的最终潜在变量,它是一个白高斯噪声向量。因为它是最后一个块,所以只有从xt−1到xt的正向转换,而没有像xt+1到xt这样的转换。前向跃迁近似为qφ(xt|xt−1),它是高斯的。见图10

Understanding the Transition Distribution.

我们需要稍微绕路讨论过渡分布q_{\phi}(\mathbf{x}_{t}|\mathbf{x}_{t-1})。我们知道它是高斯的。但我们仍然需要了解它的形式定义,以及这个定义的起源。

 选择比例因子√αt是为了确保方差大小得到保留,使其在多次迭代后不会爆炸和消失。

Example. 

考虑一个高斯混合模型

给定转换概率,我们知道

对于混合模型,不难证明xt的概率分布可以通过递归计算

方差同理

下图中,我们展示了π1=0.3、π2=0.7、μ1=−2、μ2=2、σ1=0.2和σ2=1的例子。对于所有t,速率被定义为αt=0.97。我们绘制了不同t的概率分布函数。

Remark.

对于那些想了解我们如何在方程(16)中推导混合模型的概率密度的人,我们可以展示一个简单的推导。考虑一个混合模型

如果我们考虑一个新的变量\mathbf{y}={\sqrt{\alpha}}\mathbf{x}+{\sqrt{1-\alpha}}\mathbf{\epsilon}{\mathrm{~where~}}\mathbf{\epsilon}\sim{\mathcal{N}}(0,\mathbf{I}),那么y的分布可以通过使用总概率定律来导出:

p(\mathbf{y})=\sum_{k=1}^Kp(\mathbf{y}|k)p(k)=\sum_{k=1}^K\pi_kp(\mathbf{y}|k).

由于y|k是高斯随机变量x和另一个高斯随机变量ε的线性组合,因此总和y将保持为高斯。平均值是

所以:p(\mathbf{y}|k)=\mathcal{N}(\mathbf{y}|\sqrt{\alpha}\mu_{k},\alpha\sigma_{k}^{2}+(1-\alpha))

2.2 The magical scalars √αt and 1 − αt 

你可能想知道精灵(去噪扩散的作者)是如何为上述转移概率想出神奇的标量√αt和(1−αt)的。为了解开这个谜,让我们从两个不相关的标量a∈r和b∈r开始,我们将转移分布定义为

以下是经验法则:

Why √αt and 1 − αt?

我们希望选择a和b,使得当t足够大时,xt的分布将变为n(0,i)。答案是a=√α和b=√1−α。

Proof.

我们想证明a=√α和b=√1−α。对于方程(17)中所示的分布,等效采样步骤为:

如果有一个随机变量x~n(μ,σ2),那么通过定义x=μ+ση,其中η~n(0,1),可以等价地从这个高斯中提取x。我们可以进行递归来证明

上面的有限和是独立的高斯随机变量的和。

均值向量\mathbb{E}[\mathbf{w}_{t}]保持为零,因为每个向量的均值都是零。协方差矩阵(对于零均值向量)为

所以,如果我们想要\operatorname*{lim}_{t\to\infty}\mathrm{Cov}[\mathbf{w}_{t}]=\mathbf{I},使得xt的分布趋于n (0,i)那么b=\sqrt{1-a^2}。现在,如果让a =√α,那么b =√1 - α。这将给我们

或者说

2.3 Distribution q_\phi(\mathrm{x}_t|\mathrm{x}_0)

也就是说,我们想知道给定x0时,xt是如何分布的

Proof. 

我们可以重新做递归但这次我们分别使用作为均值和协方差

因此,我们有两个高斯函数的和。但由于两个高斯函数的和仍然是高斯函数,我们可以计算它的新协方差(因为平均值仍然为零)新的协方差是

回到eqn(22),我们可以证明递归被更新为xt−2和噪声向量εt−2的线性组合:

如果我们定义\overline{\alpha}_t=\prod_{i=1}^t\alpha_i,我们可以证明

也就是说,分布qφ(xt|x0)是

与链相比,新分布qφ(xt|x0)的效用是其一次性完成向前扩散。在正向扩散模型的每一步中,由于我们已经知道x0 ,我们假设所有子序列的跃迁 transitions 都是高斯的,我们将立即知道任何t的xt。这种情况可以从图11中理解。

Example.

对于一个高斯混合模型,使得,我们可以证明在时间t的分布是

如果你想知道概率分布pt是如何随时间t演变的,我们在图12中显示了分布的轨迹。你可以看到,当t=0时,初始分布是两个高斯的混合。随着我们遵循方程(26)中定义的跃迁,我们可以看到分布逐渐变为单高斯n(0,1)。 

在同一张图中,我们叠加并显示了随机样本xt的一些瞬时轨迹作为时间t的函数。我们用来生成样本的方程是

正如您所看到的,xt的轨迹或多或少遵循分布pt(x)。

2.4 Evidence Lower Bound

既然我们了解了变分扩散模型的结构,我们就可以写下elbo,从而训练模型。变分扩散模型的elbo是

  • Reconstruction.:重建项基于初始块。我们使用对数似然pθ(x0|x1)来测量与pθ相关联的神经网络从潜在变量x1恢复图像x0的效果。对于从qφ(x1|x0)提取的样本取期望值,qφ是生成x1的分布。如果你对我们为什么要从qφ(x1|x0)中提取样本感到困惑,只需想想样本x1应该来自哪里。由于它们是中间的潜在变量,它们是由正向转换qφ(x1|x0)产生的。因此,我们应该从qφ(x1|x0)生成样本。
  • Prior Matching.:基于最终块。我们使用kl散度来测量qφ(xt|xt−1)和p(xt)之间的差。第一个分布qφ(xt|xt−1)是从xt−1到xt的正向转换。这就是xt的生成方式。第二个分布是p(xt)。由于我们的懒惰,p(xt)是n(0,i)。我们希望qφ(xt|xt−1)尽可能接近n(0,i)。这里的样本是从qφ(xt−1|x0)中提取的xt−1,因为qφ(xt−1|x0)提供了前向样本生成过程。
  • Consistency:基于转换块。有两个方向。正向跃迁由分布qφ(xt|xt-1)决定,而反向跃迁由神经网络pθ(xt|xt+1)决定。一致性项使用kl散度来测量偏差。对从联合分布qφ(xt−1,xt+1|x0)中抽取的样本(xt−1,xt+1)取期望。哦,qφ(xt−1,xt+1|x0)是什么?不用担心。我们很快就会把它处理掉。

Proof of Eqn (27).

定义以下表示法:表示从t = 0到t = t的所有状态变量的集合。我们还记得先验分布p(x)是图像x0的分布。所以它等于p(x0)

现在,我们需要使用jensen不等式,它表明对于任意随机变量X和任意凹函数f,有通过认识到f(·)= log(·),我们可以证明这一点

让我们仔细看看p(x0:t)。检查图8

我们注意到,如果我们想解耦p(x0:t),我们应该对xt−1|xt进行条件反射 conditioning 。这导致:

对于qφ(x1:t|x0),图8表明我们需要对xt|xt−1进行条件反射。然而,由于顺序关系,我们可以写

将方程(29)和方程(30)代入方程(28),我们可以证明

上面的第一项可以进一步分解为两个期望:

重建项可以简化为:

我们使用了条件x1:t|x0等价于x1|x0的事实

The Prior Matching term is

其中我们注意到,条件期望可以简化为仅样本xt和xt−1,因为仅取决于xt和xt–1。

最后,我们来看乘积项。我们可以证明

通过将p(x0|x1)替换为pθ(x0|x1),将p(xt|xt+1)替换为pθ(xt|xt+1),我们完成了。

 2.5 Rewrite the Consistency Term

上述变异扩散模型的噩梦是,我们需要从联合分布qφ(xt−1,xt+1|x0)中提取样本(xt−2,xt+1)。我们不知道q_{\boldsymbol{\phi}}(\mathbf{x}_{t-1},\mathbf{x}_{t+1}|\mathbf{x}_{0})是什么!当然,它是高斯的,但我们仍然需要使用未来的样本xt+1来绘制当前的样本xt。这很奇怪,也不好玩。

检验一致性 consistency 项,我们注意到沿着两个相反的方向移动。因此,我们不可避免地需要使用xt−1和xt+1。

我们需要问的问题是:我们能想出一些办法,在检查一致性的同时,不需要处理两个相反的方向吗?这里有一个简单的技巧,叫做bayes定理

随着条件顺序的改变,我们可以通过再添加一个条件变量x0,将q(\mathbf{x}_t|\mathbf{x}_{t-1},\mathbf{x}_0)切换为q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)。方向q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)现在平行于p_{\boldsymbol{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_{t}),如图13所示。因此,如果我们想重写一致性项,一个自然的选择是计算q_{\boldsymbol{\phi}}(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)p_{\boldsymbol{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_{t})之间的kl散度。

如果我们设法通过一些(无聊的)代数推导,我们可以证明elbo现在是:

  • Reconstruction:与以前相同。我们仍在最大化对数似然
  • Prior Matching:将新的先验匹配简化为之间的kl散度。这种变化是由于我们现在以x0为条件。因此,不需要从中抽取样本并取期望值。
  • Consistency:在两个方面不同。首先,运行索引t从t=2开始,到t=T结束。以前是从t=1到t=T-1。与之相伴的是分布匹配,它现在在q_{\boldsymbol{\phi}}(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)p_{\boldsymbol{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_{t})之间。因此,我们不要求前向转换与反向转换匹配,而是使用qφ来构造反向转换,并使用它来匹配pθ。

2.6 Derivation of qφ(xt−1|xt, x0)

现在我们知道了变分扩散模型的新elbo,我们应该花一些时间讨论它的核心分量q_{\boldsymbol{\phi}}(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)。简而言之,我们想要展示的是

  • q_{\boldsymbol{\phi}}(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)并不像你想象的那么疯狂。它仍然是高斯的。
  • 由于它是高斯的,所以它完全由均值和协方差来表征。事实证明

方程(35)有趣的部分是qφ(xt−1|xt,x0)完全由xt和x0表征。不需要神经网络来估计均值和方差!如果我们知道xt和x0,则分布qφ(xt−1|xt,x0)是自动确定的。没有猜测,没有估计,什么都没有。这里的认识很重要。如果我们看一致性项,它是许多kl散度项的总和,其中第t项是

我们需要对pθ(xt−1|xt)做些什么,这样我们才能计算kl散度

如果我们想快速计算kl散度,那么显然我们需要假设pθ(xt−1|xt)也是高斯的。是的,不开玩笑。我们没有理由解释为什么它是高斯的。但由于pθ是一个我们可以选择的分布,我们当然应该选择更容易的分布。为此,我们选择

其中,我们假设平均向量可以使用神经网络来确定。对于方差,我们选择方差为\sigma_q^2(t)这与方程(37)相同!因此,如果我们将方程(35)与pθ(xt−1|xt)并排放置,我们注意到两者之间的平行关系:

因此,kl散度被简化为

其中我们使用了这样一个事实,即两个相同方差高斯之间的kl散度只是两个均值向量之间的欧氏距离平方。

如果我们回到方程(32)中elbo的定义,我们可以将其重写为

一些观察结果很有趣:

  • 我们去掉了所有的下标φ,因为只要我们知道x0,q就完全被描述了。我们只是将(不同级别的)白噪声添加到每一个x1…xt。这将给我们一个elbo,它只需要我们在θ上进行优化
  • 参数θ是通过网络实现的。它是的网络权重。
  • 的采样是根据方程(21)进行的,该方程指出q(\mathbf{x}_{t}|\mathbf{x}_{0})=\mathcal{N}(\mathbf{x}_{t}|\sqrt{\overline{\alpha}_{t}}\mathbf{x}_{0},(1-\overline{\alpha}_{t})\mathbf{I})
  • 给定,我们可以计算,它就是。因此,一旦我们知道x1,我们就可以将其发送到网络以返回平均估计。然后将使用平均估计来计算似然性

在我们进一步深入之前,让我们通过讨论方程(35)是如何确定的来完成这个故事

Proof of Eqn (35)

利用方程(31)中的bayes定理,如果我们评估下面的高斯乘积,则可以确定q(xt−1|xt,x0)

为了简单起见,我们将把矢量视为标量。那么上面的高斯乘积将变成

我们考虑以下映射: 考虑一个二次函数

我们知道,无论我们如何重新排列项,得到的函数仍然是一个二次方程。f(y)的最小值是得到的高斯值的平均值。因此,我们可以计算f的导数,并证明

类似地,对于方差,我们可以检查曲率f′′(y)

取倒数会给我们

2.7 Training and Inference 

方程(43)中的elbo表明,我们需要找到一个网络μθ,它可以以某种方式将这种损失最小化

但是“去噪”的概念是从哪里来的呢?为了看到这一点,我们从方程(36)中回忆:既然μθ是我们的设计,我们没有理由不能将其定义为更方便的东西。所以这里有一个选项将方程(51)和方程(52)代入方程(50)将得到因此elbo可以简化为

第一项是因此,神经网络的训练可以归结为一个简单的损失函数:方程(55)中定义的损失函数是非常直观的。忽略常量和期望,

这只不过是一个去噪问题,因为我们需要找到一个网络,使得去噪图像将接近基本事实x0。它之所以不是一个典型的去噪器,是因为

  • :我们不试图对任何随机噪声图像进行去噪。相反,我们正在谨慎地选择噪声图像这里,我们所说的“小心”是指我们注入图像的噪声量是经过小心控制的正向采样过程。前向采样过程最初是一个操作链。然而,如果我们假设是高斯的,那么我们可以将采样过程简化为一步数据生成
  • :我们并不是对所有步骤都相等地加权去噪损失。相反,有一个调度器来控制对每个去噪损失的相对重视。然而,为了简单起见,我们可以放弃这些。它的影响很小
  • :求和可以用均匀分布代替。

Training a Deniosing Diffusion Probabilistic Model. 

(版本:预测图像)对于训练数据集中的每个图像x0:

  • 重复以下步骤,直到收敛。
  • 选取一个随机时间戳t~uniform[1,t]。
  • 绘制一个样本,即
  • 采取梯度下降步骤

你可以分批进行,就像训练其他神经网络一样。请注意,在这里,您正在针对所有噪声条件训练一个去噪网络

 一旦训练了去噪器bxθ,我们就可以将其应用于推理。推理是关于从状态序列上的分布pθ(xt−1|xt)采样图像,由于这是一个反向扩散过程,我们需要通过以下方式递归进行:

这导致了下面的推理算法:

Inference on a Deniosing Diffusion Probabilistic Model. (Version: Predict image)

  • 你给我们一个白噪声向量xt~n(0,i)。
  • 对于重复以下步骤.
  • 我们使用我们训练的去噪器来计算
  • 根据下式更新

2.8 Derivation based on Noise Vector

 如果你熟悉去噪文献,你可能知道残差类型的算法,它预测的是噪声而不是信号。同样的精神也适用于去噪扩散,在那里我们可以学习预测噪声。为了了解为什么会出现这种情况,我们考虑方程(24)。如果我们重新安排,我们将获得

将其代入,我们可以证明 

因此,如果我们可以设计我们的均值估计器μθ,我们可以自由地选择它来匹配形式:

将方程(57)和方程(58)代入方程(50)将得到一个新的elbo

因此,如果你给我们xt,我们将返回一个预测的噪声。这将为我们提供另一种训练方案

Training a Deniosing Diffusion Probabilistic Model (Version Predict noise).

对于训练数据集中的每个图像x0:

  • 重复以下步骤,直到收敛。
  • 选择一个随机时间戳t~uniform[1,t]。
  • 绘制一个样本,即
  • 采取梯度下降步骤

因此,推理步骤可以由以下导出 

2.9 Inversion by Direct Denoising (InDI) 

如果我们看一下DDPM方程,我们会看到更新eqn(56)采用以下形式:

换句话说,第(t−1)估计是三个项的线性组合:当前估计xt,去噪版和噪声项。当前估计和噪声项很容易理解。但什么是“denoise”? delbracio和milanfar的一篇有趣的论文[6]从纯粹去噪的角度研究了生成扩散模型。事实证明,这个令人惊讶的简单视角与其他更先进的扩散模型在某些方面是一致的。

What is denoise(xt)?

去噪是从噪声图像中去除噪声的通用过程。在过去统计信号处理的好日子里,一个标准的教科书问题是推导出白噪声的最佳去噪器。

给定观测模型

你能构造一个使均方误差最小化的estimator g(·)吗?我们将跳过这个经典问题的解的推导,因为你可以在任何概率教科书中找到它。解决方案是

那么,回到我们的问题,如果我们假设

那么去噪器显然是后验分布的条件期望:

因此,如果我们给定分布pθ (xt−1|xt),那么最优去噪器就是这个分布的条件期望。这种去噪器称为最小均方误差minimum mean squared error (MMSE)去噪器。Mmse去噪不是“最好的”去噪器;它只是相对于均方误差的最优去噪器。由于均方误差从来都不是衡量图像质量的好指标,因此最小化均方误差不一定会给我们带来更好的图像。然而,人们喜欢mmse去噪器,因为它们很容易推导。

增量去噪步骤:如果您理解mmse去噪器等同于后验分布的条件期望,那么您将欣赏增量去噪。下面是它的工作原理。假设我们有一个干净的图像x0和一个噪声图像y,我们的目标是通过一个简单的方程来形成x0和y的线性组合

现在,考虑时间t之前的一个小步τ,[6]给出的结果提供了一些有用的实用工具:

如果我们将定义为左侧,用代替xt,将写成,则上式为

Eqn(64)给出了一个推理步骤。如果你告诉我们去噪器,并假设你从一个有噪声的图像y开始,那么我们可以迭代地应用eqn(64)来检索图像

Training.

迭代方案的训练需要生成的去噪器。为此,我们可以训练神经网络(其中θ表示网络权重):

这里,分布“t~uniform”指定时间步长t是从给定分布中均匀绘制的。因此,我们为所有时间步长t训练一个去噪器。当您使用来自训练数据集的一对噪声和干净的图像时,通常会满足期望(x,y)。在训练之后,我们可以通过方程(64)执行增量更新。

Connection with Denoising Score-Matching.

尽管我们还没有讨论分数匹配(将在下一节中介绍),但关于上述迭代去噪过程的一个有趣的事实是,它与去噪分数匹配有关。在高层,我们可以将迭代重写为

这是一个常微分方程。如果我们设,使得xt中的噪声水平为,那么我们可以利用文献中的几个结果来证明

因此,至少在ode确定的极限情况下,增量去噪迭代等效于去噪分数匹配

Adding Stochastic Steps 添加随机步骤

上述增量去噪迭代可以配备随机扰动。对于推理步骤,我们可以定义一个噪声水平序列,并定义

对于训练,可以通过下式训练去噪器

其中

3 Score-Matching Langevin Dynamics (SMLD)

基于分数的生成模型[8]是从期望分布生成数据的替代方法。有几个核心成分:langevin动力学 Langevin dynamics、(stein)评分函数和评分匹配损失。在本节中,我们将逐一研究这些主题。

3.1 Langevin Dynamics

我们讨论的一个有趣的起点是langevin动力学。这是一个非常物理学的话题,似乎与生成模型无关。但请不要担心。事实上,它们之间有着很好的联系。

让我们来谈谈如何使用langevin动力学从分布中提取样本。假设我们得到了一个分布p(x),并假设我们想从p(x)中提取样本。langevin动力学是一个迭代过程,允许我们根据以下方程绘制样本。

你可能会想,这个神秘的方程式到底是关于什么的?!以下是简短而快速的答案。如果忽略末尾的噪声项,则方程(68)中的langevin动力学方程实际上是梯度下降。谨慎地选择下降方向,使得xt将收敛到分布p(x)。

考虑一个分布p(x)。该分布的形状被定义并且一旦模型参数被定义就被固定。例如,如果您选择高斯,则在指定均值和方差后,高斯的形状和位置是固定的。值p(x)只不过是在数据点x上评估的概率密度。因此,从一个x到另一个x′,我们只是从一个值p(x)移动到不同的值p(x′)。高斯的基本形状没有改变。

假设我们从中的某个任意位置开始。我们想将其移动到分布的峰值之一。峰值是一个特殊的地方,因为它是概率最高的地方。因此,如果我们说样本x是从分布p(x)中提取的,那么x的“最优”位置肯定是p(x)最大化的地方。如果p(x)有多个局部极小值,它们中的任何一个都可以。因此,自然地,采样 sampling 的目标等同于解决优化问题

我们再次强调,这不是最大似然估计。在最大似然中,数据点x是固定的,但模型参数在变化。这里,模型参数是固定的,但数据点在变化。下表总结了差异。

可以通过多种方式来解决优化问题。当然,最便宜的方法是梯度下降。对于logp(x),我们看到梯度下降步骤是其中表示在xt处评估的log p(x)的梯度,τ是步长。这里我们使用“+”而不是典型的“−”,因为我们正在解决一个最大化问题。

Example.

考虑高斯分布,我们可以很容易地证明langevin动力学方程是

Example.

 考虑一个高斯混合。我们可以用数值的方法计算。为了证明,我们选择π1=0.6,μ1 = 2, σ1 = 0.5, π2 = 0.4, μ2 = −2,σ2 = 0.2. 我们初始化x0=0。我们选择τ=0.05。我们运行上述梯度下降迭代t=500次,并且我们绘制。正如我们在下图中看到的,序列{x1,x2,…,xt}简单地遵循高斯的形状并爬到其中一个峰值。

 图17显示了样本轨迹的有趣描述。从任意位置开始,数据点xt将根据langevin动力学方程进行随机行走。随机行走的方向不是完全任意的。存在一定量的预定义漂移 drift,而在每一步都存在一定程度的随机性。漂移是由决定的,其中随机性来自z

正如我们从上面的例子中看到的,噪声项的添加实际上将梯度下降改变为随机梯度下降。随机梯度下降不是为了寻找确定性最优,而是随机爬坡。由于我们使用恒定的步长√2τ,最终解将仅在峰值附近振荡。因此,我们可以将langevin动力学方程总结为:langevin动力学是随机梯度下降。

但是为什么我们要做随机梯度下降而不是梯度下降呢?关键是我们对解决优化问题不感兴趣。相反,我们更感兴趣的是从分布中采样。通过在梯度下降步骤中引入随机噪声,我们随机选取一个跟随目标函数轨迹而不停留在原地的样本。如果我们更接近峰值,我们会稍微向左和向右移动。如果我们离峰值很远,梯度方向会把我们拉向峰值。如果峰值周围的曲率很陡,我们将把大部分稳态点集中在那里。如果峰顶周围的曲率是平的,我们就会散开。因此,通过在均匀分布的位置重复初始化随机梯度下降算法,我们最终将收集遵循我们指定的分布的样本

Example.

考虑一个高斯混合。我们可以用数值的方法计算。为了证明,我们选择π1=0.6,μ1 = 2, σ1 = 0.5, π2 = 0.4, μ2 = −2,σ2 = 0.2. 假设我们初始化m=10000个均匀分布的样本。我们运行langevin更新t=100步。生成的样本的直方图如下图所示

Remark: Origin of Langevin Dynamics.

 langevin动力学这个名字当然不是源于我们“黑客”的观点。它从物理学开始。考虑将力f与质量m和速度v(t)联系起来的基本牛顿方程。牛顿第二定律说

给定力F,我们也知道它与势能u(x)有关,通过

langevin动力学的随机性来源于布朗运动。想象一下,我们有一袋分子在四处移动。它们的运动可以根据布朗运动模型来描述:

因此,将方程(71)代入方程(69),并将其等同于方程(70),我们得到

这可以等效地写成

如果设并离散上述微分方程,我们将得到

因此还有待确定能量潜力。对于我们的概率分布函数p(x),一个非常合理(也是懒惰)的选择是形式为的boltzmann分布

因此,随之而来的是

将方程(74)代入方程(73)将得到。最后,如果我们选择(没有特殊原因),我们将得到

3.2 (Stein's) Score Function 

langevin 动力学方程的第二部分是梯度。它有一个正式的名称,称为Stein's score function,表示为

我们应该小心不要将Stein's score function与普通得分函数混淆,定义为

普通得分函数是对数似然的梯度 (对于 θ)。相比之下,stein得分函数是数据点 x 的梯度。最大似然估计使用普通评分函数,而 langevin dynamics使用 stein 的评分函数。然而,由于扩散文献中的大多数人都调用斯坦的评分函数作为评分函数,我们遵循这个传统

理解score函数的方法是记住它是相对于数据x的梯度。对于任何高维分布p(x),梯度将给我们向量场 

Example.

如果p(x)是高斯的,那么

如果p(x)是一个高斯混合

上述两个例子的概率密度函数和相应的得分函数如图18所示。

 分数函数的几何解释

  • 在logp(x)变化最大的地方,矢量的幅度最强。因此,在log p(x)接近峰值的区域,梯度大多非常弱
  • 矢量域 vector field 指示数据点应当如何在等高线图中行进。在图19中,我们展示了高斯混合(具有两个高斯)的轮廓图。我们画箭头来表示矢量场。现在,如果我们考虑一个生活在空间中的数据点,langevin动力学方程基本上会将数据点沿着矢量场指向盆地的方向移动。
  • 在物理学中,分数函数相当于“drift”。这个名字暗示了扩散粒子应该如何流动到最低能量状态。

3.3 Score Matching Techniques

Langevin dynamics中最困难的问题是如何得到,因为我们没法访问p(x)。让我们回顾一下(stein’s)分数函数的定义

这里我们用下标θ表示sθ将通过网络实现。由于上面方程的右边是未知的,我们需要一些廉价和肮脏的方法来近似它。在本节中,我们简要讨论两种近似。

Explicit Score-Matching.

假设我们得到一个数据集x={x1,…,xm}。人们提出的解决方案是通过定义一个分布来考虑经典的核密度估计

其中h只是核函数k(·)的一些超参数,xm是训练集中的第m个样本。

图20说明了核密度估计的思想。在左边的卡通图中,我们展示了以不同数据点xm为中心的多个内核k(·)。所有这些单独的核的总和给出了总的核密度估计q(x)。在右边,我们展示了一个真实的直方图和相应的核密度估计。我们注意到,q(x)充其量是对真实数据分布p(x)的近似,而真实数据分布永远是未知的

由于q(x)是p(x)的近似值,而p(x)是不可接近的,所以我们可以根据q(x)来学习sθ (x)。这导致了以下损失函数的定义,可以用来训练网络。 

 通过代入核密度估计,我们可以证明损失为

因此,我们得到了一个损失函数,可以用来训练网络。一旦我们训练了网络sθ,我们可以把它代入朗格万动力学方程,得到递推式:

显式分数匹配的问题是,核密度估计是真实分布的一个相当差的非参数估计。特别是当样本数量有限且样本处于高维空间时,核密度估计的性能会很差

Denoising Score Matching.

考虑到显式分数匹配的潜在缺点,我们现在引入一种更流行的分数匹配,即去噪分数匹配denoising score matching (DSM)。在dsm中,损失函数定义如下:

这里的关键区别在于,我们用条件分布q(x|x ')代替了分布q(x)。后者需要一个近似,例如,通过核密度估计,而前者不需要。这里有一个例子。

在特殊情况下,令。这将给我们

因此,去噪分数匹配的损失函数变为

如果我们将虚拟变量x '替换为x,并且我们注意到当我们给定训练数据集时,从q(x)中采样可以被从p(x)中采样所取代,我们可以得出以下结论。

关于eqn(85)的美妙之处在于它是高度可解释的。数量是有效地将噪声σz添加到干净的图像x上,分数函数sθ应该取这个噪声图像并预测噪声预测噪声等同于去噪,因为任何去噪的图像加上预测的噪声都会得到带噪声的观测值。因此,eqn(85)是去噪步骤。图21展示了分数函数sθ (x)的训练过程。

训练步骤可以简单地描述如下:你给我们一个训练数据集,我们训练一个网络θ,目标是

这里更大的问题是为什么eqn(84)一开始就有意义。这需要通过显式分数匹配损失与去噪分数匹配损失的等价性来回答

显式分数匹配和去噪分数匹配之间的等价性是一个重要的发现。下面的证明是基于文森特2011年的原作。

Proof of Eqn (87)

我们从显式分数匹配损失函数开始

让我们放大到第二项。我们可以证明

接下来,我们通过调用来考虑条件反射。这将给我们

因此,如果我们把这个结果代入esm的定义,我们可以证明

将其与dsm的定义进行比较,我们可以观察到

因此,我们得出结论

为了进行推理,我们假设我们已经训练了分数估计器sθ。为了生成图像,我们对执行以下过程: 

4 Stochastic Differential Equation (SDE)

到目前为止,我们已经通过ddpm和smld的视角导出了扩散迭代。在本节中,我们将通过微分方程的镜头介绍第三种视角。为什么我们的迭代格式突然变成复杂的微分方程,这可能并不明显。因此,在我们推导任何方程之前,我们应该简要讨论微分方程如何与我们相关。

4.1 Motivating Examples

Example 1. Simple First-Order ODE. 

假设我们得到一个离散时间算法,其迭代由递归定义:

对于一些超参数β和步长参数∆t。这种递归并不复杂:您给我们xi−1,我们更新并返回您xi。

如果我们假设一个连续时间函数x(t)的离散化方案,让,那么我们可以将递归重写为

其中∆t时的极限→ 0,我们可以把离散方程写成常微分方程(ode)

不仅如此,我们还可以求解ode的解析解,其中解由

ode的力量在于它为我们提供了一个解析解方案。不是采用迭代方案(需要数百到数千次迭代),分析解告诉我们在任何时间t的解的行为。为了说明这一事实,我们在下图中显示了解的轨迹。这里,我们选择∆t=0.1。在同一图中,我们直接绘制任意t的连续时间解。正如你所看到的,解析解与迭代方案预测的轨迹完全相同

我们在这个激励性的例子中观察到两个有趣的事实:

  • 离散时间迭代格式可以写成一个连续的常微分方程。事实证明,对于任何有限差分方程,我们都可以将递归转化为ode
  • 对于简单的ode,我们可以用闭合形式写下解析解。更复杂的ode很难写出解析解。但是我们仍然可以使用ode工具来分析解决方案的行为。我们还可以导出极限解t→ 0.

Example 2: Gradient Descent

回想一下,(表现良好的)凸函数f的梯度下降算法是以下递归。对于i=1,2...n,有

对于步长参数βi。使用与我们之前示例中所做的相同的离散化,我们可以证明(通过让)

右边的常微分方程有一个解轨迹x(t)。这个 x(t) 被称为函数 f 的梯度流 gradient flow

为了简单起见,我们可以使β(t)=β。那么关于这个ode有两个简单的事实。首先,我们可以证明

因此,当我们从xi - 1移动到xi时,目标值f (x(t))必须下降。这与我们的期望是一致的,因为梯度下降算法应该随着迭代的进行而降低成本。第二,当t→∞时,我们知道→0。因此,意味着

因此,解轨迹x(t)将接近函数f的最小值。 

Forward and Backward Updates.

让我们使用梯度下降示例来说明ode的另一个方面。回到eqn(92),我们认识到递归可以等价地写成(假设):

当设∆t→0和∆x→0时,连续方程成立。这个等式的有趣之处在于它将更新后的∆x写成dt的形式。它说如果我们沿着时间轴移动dt,那么解x就会被dx更新。

Eqn(95)定义了变化之间的关系。如果我们考虑一个迭代序列如果我们被告知迭代的进程遵循eqn(95),那么我们可以写

我们称它为前向方程因为我们用x+∆x更新x,假设t←t +∆t。

现在,考虑一个迭代序列。如果我们被告知迭代的进程遵循eqn(95),那么时间反转迭代将是

注意反转前进方向时符号的变化。我们称之为反向方程 reverse equation。

4.2 Forward and Backward Iterations in SDE

扩散微分方程 differential equation for diffusion 的概念与上述梯度下降算法相差不远。如果我们在梯度下降算法中引入一个噪声项,则ode将成为一个随机微分方程。为此,我们只需遵循相同的离散化方案,将x(t)定义为0≤t≤1的连续函数。假设区间中有n个步骤,使得区间[0,1]可以划分为序列。离散化将给出。区间步长为,所有t的集合为。使用这些定义,我们可以编写

现在,我们定义一个随机过程w(t)使得,对于一个很小的∆t。在计算中,我们可以通过对z(t)积分来生成这样一个w(t)(这是一个Wiener process)。

Wiener过程 - 知乎 (zhihu.com)

有了w(t)的定义,我们可以写

上面的等式揭示了sde的一般形式。我们总结如下。 

f(x,t)和g(t)这两个术语具有物理意义。draft coefficient 是一个向量值函数f(x,t),定义了在没有随机效应的情况下,封闭系统中的分子如何运动。对于梯度下降算法,漂移 drift 由目标函数的负梯度定义。也就是说,我们希望解的轨迹遵循目标的梯度。

扩散系数 diffusion coefficient g(t)是描述分子如何从一个位置随机移动到另一个位置的标量函数。函数g(t)确定了随机运动的强度

Example. 

考虑这个方程其中a=0.05。迭代方案可以写成

我们可以将函数xi绘制如下。初始点x0=0被标记为红色,以指示过程在时间上向前移动

Remark.

正如你所看到的,微分被定义为维纳过程,它是一个白高斯向量。个体wi不是高斯的,但是差是高斯的。

Example. Consider the equation

其中α=1和β=0.1。这个方程可以写成

扩散方程的反方向是在时间上向后移动。根据anderson[17],反向时间sde如下所示 

其中pt(x)是x在时间t的概率分布,是时间倒流时的维纳过程。

Example.

考虑反向扩散方程

我们可以把离散时间递归写成如下。对于

在下图中,我们展示了这个逆时间过程的轨迹。请注意,用红色标记的初始点位于xn。该过程被向后追踪到x0。

4.3 Stochastic Differential Equation for DDPM 

为了建立ddpm和sde之间的联系,我们考虑了离散时间ddpm迭代。对:

我们可以证明,这个方程可以从下面的正向sde方程中推导出来。

ddpm的前向采样方程可以写成SDE

为了了解为什么会出现这种情况,我们定义一个步长,并考虑一个辅助噪声,其中。然后 

其中,我们假设在n→∞时,,它是0≤t≤1的连续时间函数。类似地,我们定义

因此,我们有

因此,当∆t→0时,我们有

因此,我们证明了DDPM前向更新迭代可以等效地写成一个SDE

能够将ddpm前向更新迭代写成sde意味着可以通过求解sde来确定ddpm估计。换句话说,对于适当定义的sde解算器,我们可以将sde放入解算器中。由适当选择的求解器返回的解将是ddpm估计。

当然,我们不需要使用sde求解器,因为ddpm迭代本身就是在求解sde。它可能不是最好的sde求解器,因为ddpm迭代只是一阶方法。然而,如果我们对使用sde解算器不感兴趣,我们仍然可以使用ddpm迭代来获得解。这里有一个例子。

Example. 

考虑βi=0.05的ddpm正向方程,对于所有i=0,n−1。我们通过从高斯混合中提取样本来初始化样本x0,例如

其中π1=π2=0.5,σ1=σ2=1,μ1=3和μ2=−3。然后,使用以下等式

可以如下绘制轨迹和分布。

通过代入适当的量f (x, t) = ,可以得到eqn(97)的反向扩散方程。这将给我们 

 

迭代更新方案可以通过考虑来编写。那么,让dt=∆t,我们可以证明 

通过对项进行分组,并假设,我们认识到

然后,按照离散化方案,设 我们可以证明

 其中,pi(x)是x在时间i的概率密度函数。为了实际实现,我们可以用估计的得分函数来代替

因此,我们已经恢复了ddpm迭代,该迭代与song和ermon在[8]中定义的迭代一致。这是一个有趣的结果,因为它允许我们使用score函数连接ddpm的迭代。song和ermon[8]将sde称为方差保持(vp)sde variance preserving (VP) SDE.

Example.

根据前面的例子,我们使用

其中。迭代的轨迹如下所示。

4.4 Stochastic Differential Equation for SMLD

 分数匹配的langevin动力学模型也可以用sde来描述。首先,我们注意到,在smld设置中,并没有真正的“正向扩散步骤”。然而,我们可以粗略地争辩说,如果我们将smld训练中的噪声尺度划分为n个级别,那么递归应该遵循马尔可夫链

 这并不难看出。如果我们假设xi−1的方差是,那么我们可以证明

因此,在给定一系列噪声水平的情况下,方程(104)将确实生成估计xi,使得噪声统计将满足期望的性质

如果我们同意eqn(104),则很容易导出与eqn(102)相关联的sde。假设在极限成为0≤t≤1的连续时间,并且变为,其中,如果我们设。那么我们有

在极限∆t→0时,方程收敛为

我们将结果总结如下

把这个映射到eqn(96),我们知道

因此,如果我们写出反方程eqn(97),我们应该有

这将给出下面的反向方程

对于离散时间迭代,我们首先定义。然后,使用与ddpm情况相同的离散化设置集discretization setups,我们可以显示

这与smld反向更新方程相同。song和ermon[8]将sde称为方差爆炸(ve)sde variance exploding (VE) SDE

4.5 Solving SDE

在这一小节中,我们简要讨论了如何用数值方法求解微分方程。为了使我们的讨论稍微容易一点,我们将把重点放在ODE上。考虑以下ODE

标量ode:

Euler Method

euler方法是求解ode的一阶数值方法。给定,euler方法通过i的迭代方案来解决问题使得:

其中α是步长。让我们考虑一个简单的例子。

Example. 

如果我们应用步长为α的euler方法,那么迭代将采用以下形式

Runge-Kutta (RK) Method. 

另一个常用的ode求解器是runge-kutta(rk)方法。经典的rk-4算法通过迭代求解ode

其中量k1、k2、k3和k4定义为

Predictor-Corrector Algorithm.

由于不同的数值求解器在近似误差方面有不同的行为,将ode(或sde)放入现成的数值求解程序将导致不同程度的误差

然而,如果我们专门试图求解反向扩散方程,则可以使用数值ode/sde求解器以外的技术来进行适当的校正,如图22所示。

让我们以ddpm为例。在ddpm中,反扩散方程由下式给出

我们可以把它看作一种求解逆扩散的euler方法。然而,如果我们已经训练了得分函数,我们可以运行得分匹配方程

进行m次校正。算法4.5总结了这一思想。(请注意,我们已将分数函数替换为估计值。)

对于smld算法,这两个方程是

我们可以像ddpm的预测校正算法的情况一样,通过重复几次校正迭代来将它们配对。

Accelerate the SDE Solver

虽然通用的ode求解器可以用来求解ode,但我们遇到的正向和反向扩散方程是非常特殊的。事实上,对于函数a(t)和b(t)的一些选择,它们的形式是

初始条件为。这不是复杂的ODE。这只是一阶ODE。在[20]中,lu等人观察到,由于ode的特殊结构(他们称之为半线性结构),可以分别处理。为了理解事物是如何运作的,我们使用如下所示的教科书结果

我们可以进一步简化上面的第二项,注意到

如在[20]中提出的,特别感兴趣的是从[8]导出的反向扩散方程:

其中

利用常数变分定理,我们可以用公式精确地求解时间t的ode

然后,通过定义,并在[20]中进行额外的简化,该方程可以简化为

为了评估这个方程,只需要对右边显示的积分运行一个数值积分器。当然,还有其他求解ode的数值加速方法,为了简洁起见,我们将跳过这些方法

你们中的一些人可能会想:为什么我们要把迭代格式映射到微分方程上?有几个原因,有些是合理的,有些是推测性的。

  • 通过将多个扩散模型统一到同一sde框架中,可以对算法进行比较。在某些情况下,可以借鉴sde文献和概率抽样文献的思想来改进数值格式。例如,[8]中的预测器-校正器方案是与马尔可夫链蒙特卡罗耦合的混合sde求解器
  • 根据[22]等一些论文,将扩散迭代映射到sde提供了更多的设计灵活性。
  • 在上下文扩散算法之外,一般的随机梯度下降算法都有相应的sde,如fokker-planck方程。人们已经证明了如何以精确闭合的形式从理论上分析估计的极限分布,这通过分析定义明确的极限分布来减轻分析随机算法的困难。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值