我们有一堆数据X,我们想要用某个latent space Z中的latent variable对X中的个体进行建模,即,当我们从Z中sample一个z出来的时候,我们希望存在某个确定的f(我们可能还不知道),能够将这个z映射到X空间上去,并且这个x将以很大概率落到X空间上。

用数学语言来说,即我们希望最大化这个似然概率:

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

其中P(x|z)与f相关。即对任意的z属于Z,我们希望最大化它经过f映射后的x属于X的概率最大。

那P(x|z)怎么算呢?我们不知道啊,但我们知道它的含义是什么,即给定一个z,出现某个x的概率。那么我们就可以进行假设了,我们可以用先验知识,假设P(x|z)服从某种分布,但这个分布函数有些参数未知,然后我们可以用梯度下降法取拟合出这些参数值来,这是VAE的做法。又或者,我们可以连先验也不用,我们直接用神经网络直接对P(x|z)进行拟合,这就是传统autoencoder的做法(?)。

关于P(x|z)分布的取法,我们可以随便取,只要保证它是可以计算的,并且在$\theta$空间连续,这样我们就可以用梯度下降法去拟合出来这个分布函数的未知参数。

在VAE中,P(x|z)取的是高斯分布,即$P(X \mid z ; \theta)=\mathcal{N}\left(X \mid f(z ; \theta), \sigma^{2} * I\right)$

在确定了P(x|z)的分布形式后,我们还需要确定P(z)的分布形式

一般来说,z这个latent variable的真实分布是很复杂的,不同维的信息可能代表不同含义,不同维也可能互相关联。我们很难说用先验,我们也不想要(太复杂了)去手工定义z的分布形式。

对于P(Z),VAE的做法是“先从一个简单的分布中对z进行取样,比如说标准正态分布$\mathcal{N}(0, I)$,然后通过一个足够复杂的函数(可以用神经网络表示)将这个正态分布映射到其他任何分布。

<aside> 💡 any distribution in d dimensions can be generated by taking a set of d variables that are normally distributed and mapping them through a sufficiently complicated function

Doersch - 2016 - Tutorial on Variational Autoencoders.pdf

</aside>