VAE 详解及 PyTorch 代码
paperreading
本文字数:1.2k 字 | 阅读时长 ≈ 5 min

VAE 详解及 PyTorch 代码

paperreading
本文字数:1.2k 字 | 阅读时长 ≈ 5 min

三大有名的生成模型 VAE、GAN 以及 Diffusion Model

其余两篇

看了网上的一些博客,大多都写到了重点,也就是后面的公式推导部分,可是大部分只有推导过程,很少有讲明白为什么要这么假设,我看的时候内心不断有个疑问:这些所有推导的第一个式子是怎么来的?为什么所有的推导都是要证明第一个式子?下面我们从生成模型的源头来理解这个问题,就茅塞顿开了

1. 什么是生成模型?

首先要明白什么是生成模型?比如我们有一堆数据点$X$,他的真实分布是$P_{gt}(X)$,生成模型的目的就是去学习一个模型$M$,将一些随机采样的噪声(通常为高斯噪声)输入到此模型中,使得此模型的输出为$X$中的数据,即模型$M$的分布$P$去尽可能的接近数据的真实分布$P_{gt}(X)$,或者说让模型$M$能够尽可能地生成数据点$X$中的数据

2. 生成模型要做什么

如上所述,生成模型就是要去接近数据点(数据集)$X$的真实分布,也就是说我们要最大化所建模的概率分布

$$
P(X) = \int P(X|z;\theta)P(z)dz = \int P(X|z)P(z)dz
$$

这里的$\theta$就是模型的参数,$z$就是随机采样的噪声,$P(X|z;\theta)$是$X$的后验概率分布,通常来说$P(X|z;\theta)$和$P(z)$都是高斯分布

3. VAE的目标函数

实际上,对于大多数的$z$,$P(X|z)$的取值都接近0,因此VAE的核心就是不断地进行采样,直到可能产生数据点$X$为止,这显然会让生成过程变得困难/复杂

在真正实现时,作者构建了一个新的函数$Q(z|X)$,给定数据集中的一个数据$X$,$Q(z|X)$可以给我们一个$z$的分布,这个给定的分布就更加容易产生出$X$了,在$Q(z|X)$后的$z$的范围比先验$P(z)$要小得多,因此我们将$E_{z\sim Q}P(X|z)$和$P(X)$关联起来,如下
$$
E_{z\sim Q}P(X|z) = \int P(X|z)Q(z)dz
$$
这个式子是不是和上面那个很相似?只是讲$P(z)$替换为了$Q(z)$,这种替换能够使得我们的随机采样变得不是那么的随机(即,相对于$P(z)$,$Q(z)$更加具体了采样的范围,而不是无脑采样…)

在原文中,也有提到$E_{z\sim Q}P(X|z)$是求解$P(X)$的关键: The relationship between $E_{z\sim Q}P(X|z)$ and $P(X)$ is one of the cornerstones of variational Bayesian methods.

既然上面提到了$Q(z)$的获取对生成$X$至关重要,那如何去获得呢,作者用KL散度来构建$Q(z)$和$P(z|X)$之间的关系(在文中KL散度用符号$\mathcal{D}$来表示)
$$
\mathcal{D}[Q(z)||P(z|X)] = E_{z\sim Q}[\log Q(z) - \log P(z|X)]
$$

下面用Bayes公式来化简上述式子,将$P(z|X)=\frac{P(z)P(X|z)}{P(X)}$代替
$$
\begin{aligned}
\mathcal{D}[Q(z)||P(z|X)] &= E_{z\sim Q}[\log Q(z) - \log \frac{P(z)P(X|z)}{P(X)}] \
&= E_{z\sim Q}[\log Q(z) - \log P(z) - \log P(X|z) + \log P(X)] \
&= E_{z\sim Q}[\log Q(z) - \log P(z) - \log P(X|z)] + \log P(X)
\end{aligned}
$$

因为$\log P(X)$与变量$z$无关,因此可以从期望中拿出,将上式继续整理得
$$
\begin{aligned}
\log P(X) - \mathcal{D}[Q(z)||P(z|X)] &= E_{z\sim Q}[\log P(z) + \log P(X|z) - \log Q(z)] \
&= E_{z\sim Q}[\log P(X|z)] + E_{z\sim Q}[\log P(z) - \log Q(z)] \
&= E_{z\sim Q}[\log P(X|z)] - \mathcal{D}[Q(z) || P(z)]
\end{aligned}
$$

注意到这里的$Q(z)$可以是任意的概率分布,但是为了让其有意义,使从其采样出的噪声更容易建模出$P(X)$,并最小化$\mathcal{D}[Q(z)||P(z|X)]$,我们让$Q(z)$去依赖于$X$,即得到下式
$$
\log P(X) - \mathcal{D}[Q(z|X)||P(z|X)] = E_{z\sim Q}[\log P(X|z)] - \mathcal{D}[Q(z|X) || P(z)]
$$

上式就是VAE最核心的公式了

未完…

9月 09, 2024
9月 06, 2024