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

发布于:2024-05-04 ⋅ 阅读:(28) ⋅ 点赞:(0)

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) 

您只需要了解以下摘要:

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


网站公告

今日签到

点亮在社区的每一天
去签到