Auto-Encoding Variational Bayes Diederik P Kingma, Max Welling [
ICLR 2014
] (Universiteit van Amsterdam
)
我们先从 AutoEncoder(AE) 讲起,它的基本结构我们可以用下图来表示。
背景介绍,VAE是属于【基于似然函数】的一类方法,还包括了有normalizing flows,EBM
VAEs maximize the mutual information between the input and latent variables,
首先我们有一批数据样本
而对于一批任意数据(生成模型中主要是图像,一幅图像也可以看成是从一个分布中采样的结果),但现在我们甚至都不知道这个分布的参数化形式,因此直接对它估计是几乎不可能的。
我们先对这个问题进行数学建模,将数据分布记作:$p(x;\theta) \text{ or } p_\theta(x)$,其中
那么很自然,我们可以用极大似然估计来求解(参考):
$$
p(x;\theta) = \prod_{i=1}^{n} p\left(x_{i} ; \theta\right) \tag{1}
$$
一般实际使用的是求解一个极小化负的对数似然的问题:
$$
\theta^* = \arg\min_\theta -\sum_{i=1}^n \log p (x_i;\theta) \tag{2}
$$
但是这里的
通过式子()我们可以发现,现在我们想得到
借由贝叶斯定理,我们将所有定义写出来
-
先验分布
$p(z)$ -
后验分布
$p(z|x)$ -
似然分布
$p(x|z)$ -
证据分布
$p(x)$
$$ \begin{aligned} K L\left(q\left(x, z\right) | p\left(x, z\right)\right) &=\iint q(x,z) \log \frac{q(x,z)}{p(x,z)} dzdx\ &=\iint q(z|x)p(x) \log \frac{q(z|x)p(x)}{p(x|z)p(z)} dzdx\ &=\int p(x)\left[\int q(z|x) \log \frac{q(z|x)p(x)}{p(x|z)p(z)} d z\right] d x \ &=\mathbb{E}{x \sim p(x)}\left[\int q(z|x) \log \frac{q(z|x)p(x)}{p(x|z)p(z)} d z\right]\ &=\mathbb{E}{x \sim p(x)}\left[\int q(z|x) \left(\log p(x) + \log \frac{q(z|x)}{p(x|z)p(z)} \right)dz\right]\ &=\mathbb{E}{x \sim p(x)}\left[\int q(z|x) \log p(x) dz\right] + \mathbb{E}{x \sim p(x)}\left[\int q(z|x)\log \frac{q(z|x)}{p(x|z)p(z)} dz\right]\ &=\mathbb{E}{x \sim p(x)}\left[\log p(x) \int q(z|x) dz\right] + \mathbb{E}{x \sim p(x)}\left[\int q(z|x)\log \frac{q(z|x)}{p(x|z)p(z)} dz\right]\ &=\mathbb{E}{x \sim p(x)}\left[\log p(x) \right] + \mathbb{E}{x \sim p(x)}\left[\int q(z|x) \log \frac{q(z|x)}{p(z)} dz -\int q(z|x)\log p(x | z)dz \right]\ &=\mathbb{E}{x \sim p(x)}\left[\log p(x) \right] + \mathbb{E}{x \sim p(x)}\left[KL\left(q(z|x) | p(z)\right) - \mathbb{E}_{z \sim q(z|x)}[\log p(x | z)]\right] \end{aligned} \tag{10} $$
像GAN一样(假设你已经很熟悉GAN了),VAE也是想要学习一个生成模型以VAE的优化目标是最大化数据集数据的似然: $$ \log p(X) = \sum_{i=1}^N \log \int p\left(x_{i}, z\right) dz $$
但这个目标很难去优化,因此采用最大化每个样本点边际似然的证据下界的方式:
$$
\log p(x_i) \ge \mathcal{L}(x_i) = \mathbb{E}{z\sim q\phi(z|x_i)} [-\log q_\phi(z|x_i) + \log p_\theta(x_i, z)]
$$
其中
利用重参数化的方式,将随机隐式变量
关于似然
我们要得到的结果是
我们想借助隐变量
因为
$p(x)$ 通常被称为 evidence,
是需要被最大化的 $$ ELBO = \mathbb{E}{x \sim p(x)}\left[\mathbb{E}{z \sim p(z \mid x)}[\ln q(x \mid z)] - KL\left(p(z \mid x) | q(z)\right)\right] $$ 最终要优化的是两个网络的参数,
当我们希望$p(z|x)$ 是服从标准正态分布$\mathcal{N}(0, I)$时
KL实现,如果没有这一项,网络会倾向于使得方差为0,
我们假设后验分布也是服从高斯的,encoder网络预测的就是高斯分布的均值和方差,(实际中预测的是 log )
现在我们有
-
$q(z)$ :我们直接假设$z \sim N(0, I)$ -
$p(z|x)$ :也假设是正态分布,均值和方差是可学习的参数。 -
$q(x|z)$ : 也假设是正态分布,均值和方差是可学习的参数。
因为要计算 $\mathbb{E}{z \sim p(z \mid x)}[-\ln q(x \mid z)]$,就需要对 $z \sim p(z|x)$ 进行采样,VAE论文说只需要每次采样一个就够了,每个循环都是随机的,因此采样是足够充分的。所以最终 $\mathcal{L}$ 变成了: $$ \mathcal{L}=\mathbb{E}{x \sim p(x)}[-\ln q(x \mid z)+K L(p(z \mid x) | q(z))], \quad z \sim p(z \mid x) $$ MSE,
$$ \begin{gathered} D_{K L}(q(Z \mid X) | p(Z \mid X))=\mathbb{E}[\log (q(Z \mid X))-\log (p(Z \mid X))] \ =\mathbb{E}\left[\log (q(Z \mid X))-\log \left(\frac{p(X \mid Z) p(Z)}{p(X)}\right)\right] \ =\mathbb{E}[\log (q(Z \mid X))-\log (p(X \mid Z)-\log (p(Z)))]+\log (p(X)) \ =\mathbb{E}\left[\log \left(\frac{q(Z \mid X)}{p(Z)}\right)-\log (p(X \mid Z))\right]+\log (p(X)) \ =D_{K L}[q(Z \mid X)|| p(Z)]-\mathbb{E}[\log (p(X \mid Z))]+\log (p(X)) \end{gathered} $$ 等号右边第一项不就是似然值吗?第二项只要实现把先验概率$p(Z)$定义好之后,也可以进行计算。
因为
重参数化的作用
从
如果直接从多元正态分布去采样,破坏了连续性,
提到
我们可以统一VAE以及变种的模型,第一项保证重建的准确率高,第二项保证编码到的latent 分布和先验的是一致的。
$$
L_{\text{VAE}} (\theta, \phi) = L_{\text{recons}}(\theta, \phi) + L_{\text{KLD}}(\theta, \phi)
$$
The reconstruction loss is:
$$
L_{\text{recons}}(\theta, \phi) = \frac{1}{N} \sum_{i=1}^N | \hat{\mathbf{x}i} - \mathbf{x}i |2^2
$$
The regularization loss is:
$$
L{\text{KLD}}(\theta, \phi) = D{\text{KL}} \left(q\phi(\mathbf{z}|\mathbf{x}) | p(\mathbf{z}) \right)
$$
another
Auto-encoding variational bayes
Multi-level variational autoencoder: Learning disentangled representations from grouped observations
Extracting and composing robust features with denoising autoencoders
Semantic facial expression editing using autoencoded flow
betavae: Learning basic visual concepts with a constrained variational framework
VAE有一个总体指标,这个总指标越小效果就越好
两个多元高斯分布的KL散度计算: $$ KL(p_1 | p_2) = \frac{1}{2}\left(\operatorname{tr}\left(\boldsymbol{\Sigma}{2}^{-1} \boldsymbol{\Sigma}{1}\right)+\left(\boldsymbol{\mu}{\mathbf{2}}-\boldsymbol{\mu}{\mathbf{1}}\right)^{\top} \boldsymbol{\Sigma}{1}^{-1}\left(\boldsymbol{\mu}{\mathbf{2}}-\boldsymbol{\mu}{\mathbf{1}}\right)-n+\log \frac{\operatorname{det}\left(\boldsymbol{\Sigma}{\mathbf{2}}\right)}{\operatorname{det}\left(\boldsymbol{\Sigma}_{\mathbf{1}}\right)}\right) $$