上述思路只是直观上的想法,仍需要严谨的数学推导去证明其可行性以及明确优化目标。其实说不好VAE的产生到底是由理论推动的还是由直观思路推动的,其实是相辅相成的,总之VAE是一个从各个角度解释都很漂亮的模型。
我们的目标是根据x的某些特征z生成一个x。x是可观测的变量,而z是隐变量,所以我们需要反过来根据x去找出z的分布,也就是去求
[p(z \vert x) = \frac{p(x \vert z)p(z)}{p(x) } \ p(x) = \int p(x \vert z)p(z)dz]
显然在高维情况下这个积分没有解析形式,$p(x)$ 是求不出来的。而且如果能把
VAE就是采用了变分推断的**去估计
[\begin{align*} KL(q(z \vert x) \parallel p(z \vert x)) & = -\sum q(z \vert x) \log \frac{p(z \vert x)}{q(z \vert x)}\ & = -\sum q(z \vert x) \log \frac{\frac{p(x,z)}{p(x)}}{q(z \vert x)}\ & = -\sum q(z \vert x) \left[\log \frac{p(x,z)}{q(z \vert x)} - \log p(x) \right]\ & = -\sum q(z \vert x) \log \frac{p(x,z)}{q(z \vert x)} + \sum q(z \vert x) \log p(x)\ & = -\sum q(z \vert x) \log \frac{p(x,z)}{q(z \vert x)} + \log p(x) \sum_z q(z \vert x) \ & = -\sum q(z \vert x) \log \frac{p(x,z)}{q(z \vert x)} + \log p(x) \cdot 1 \ \end{align*}] 最终得到
[\log p(x) = KL(q(z \vert x) \parallel p(z \vert x)) + \sum q(z \vert x) \log \frac{p(x,z)}{q(z \vert x)}] 因为x是给定的观测值,所以这个等式的左边是一个常数。我们的目标是最小化右边第一项的KL散度,所以就变成了要最大化右边的第二项。我们称这项为变分下界,一般的变分推断的目标都是去最大化这个变分下界。通常情况下,这个变分下界都是很难去最大化的,而VAE通过巧妙的变化,把它变得易于理解。那么继续来看一下这个变分下界是什么。
[\begin{align*} \sum q(z \vert x) \log \frac{p(x,z)}{q(z \vert x)} & = \sum q(z \vert x) \log \frac{p(x \vert z)p(z)}{q(z \vert x)}\ & = \sum q(z \vert x) \left[ \log p(x \vert z) + \log \frac{p(z)}{q(z \vert x)}\right]\ & = \sum q(z \vert x) \log p(x \vert z) + \sum q(z \vert x)\log \frac{p(z)}{q(z \vert x)}\ & = E_{q(z \vert x)} \log p(x \vert z) - KL(q(z \vert x) \parallel p(z)) \end{align*}] 最终我们的目标变成了最大化下面的式子(变分下界)。
[E_{q(z \vert x)} \log p(x \vert z) - KL(q(z \vert x) \parallel p(z))]
先看第一项,最大化变分下界需要最大化第一项,而最大化第一项其实就是最小化重建误差。为什么呢?设
再看第二项,最大化变分下界需要最小化第二项。这个KL散度的意义也很明显,就是让我们假设的分布q近似于z的真实分布,与我们最初的目标相符合。由于我们假设z每个维度的分布都是独立的标准正态分布,所以也可以分开写成
最终我们得到的最小化目标,也就是损失函数为
[\mathcal{L}(x, \hat x) + \sum_j{}KL(q_j(z \vert x) \parallel p(z))]
我们知道