VAE学习

Auto-Encoding Variational Bayes

  1. 论文主要贡献:

    • 利用重参数技巧得到变分下界的一个估计,该估计可以直接用标准梯度下降方法进行优化。
    • 上述变分下界可以用来推断某些后验分布。
  2. 问题背景:

    假设某个独立同分布的数据集中的每个数据点都是有一个随机过程产生的,且该随机过程涉及到某个隐变量。更具体地,的生成过程为:

    ​ ①从某个分布 中随机采样一个

    ​ ②利用得到一个条件概率,从该分布中采样得到

    我们感兴趣的是:

    • 条件概率,因为如果能得到该条件分布,那么就能利用得到的分布,从而可以生成与原数据集中相似的数据。
    • 后验概率,因为如果能得到这个后验分布,那么对于给定的,我们能够得到对应的,我们相信是对的一个好的表示。
  3. 一个自然的思路是最大化的似然:

    但是这一后验概率很难求,为此引入作为对其的变分近似。对上面的式子进行变形:
    \begin{array}{lcl} \log p_{\theta}(\boldsymbol{x}) & = & \log p_{\theta}(\boldsymbol{x}, \boldsymbol{z}) - \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) + \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) - \log p_{\theta}(\boldsymbol{z}|\boldsymbol{x}) \\ & = & \log p_{\theta}(\boldsymbol{x}, \boldsymbol{z}) - \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) + \log \frac{q_{\phi}(\boldsymbol{z}|\boldsymbol{x})}{p_{\theta}(\boldsymbol{z}|\boldsymbol{x})} \end{array}
    两边关于求期望:
    \begin{array}{lcl} \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{x}) \rm{d}\boldsymbol{z} & = & \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{x}, \boldsymbol{z})\rm{d}\boldsymbol{z} - \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x})\rm{d}\boldsymbol{z} + \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot\log \frac{q_{\phi}(\boldsymbol{z}|\boldsymbol{x})}{p_{\theta}(\boldsymbol{z}|\boldsymbol{x})}\rm{d}\boldsymbol{z} \end{array}
    化简得到:
    \begin{array}{lcl} \log p_{\theta}(\boldsymbol{x}) = \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{x}, \boldsymbol{z})\rm{d}\boldsymbol{z} - \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x})\rm{d}\boldsymbol{z} + D_{KL}(q_{\phi}(\boldsymbol{z}|\boldsymbol{x})||p_{\theta}(\boldsymbol{z}|\boldsymbol{x})) \end{array}
    由于 ,所以:
    \log p_{\theta}(\boldsymbol{x}) \ge \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{x}, \boldsymbol{z})\rm{d}\boldsymbol{z} - \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x})\rm{d}\boldsymbol{z}
    为了最大化可以最大化其下界\int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{x}, \boldsymbol{z})\rm{d}\boldsymbol{z} - \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x})\rm{d}\boldsymbol{z},将此下界化简得到:
    \begin{array}{lcl} \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{x}| \boldsymbol{z})\rm{d}\boldsymbol{z} + \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{z})\rm{d}\boldsymbol{z} - \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x})\rm{d}\boldsymbol{z} \end{array}
    考虑上面式子中的后面两项:
    \begin{array}{lcl} \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{z})\rm{d}\boldsymbol{z} - \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log q_{\phi}(\boldsymbol{z}|\boldsymbol{x})\rm{d}\boldsymbol{z} & = & - \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log \frac{q_{\phi}(\boldsymbol{z}|\boldsymbol{x})}{p_{\theta}(\boldsymbol{z})}\rm{d}\boldsymbol{z} \\ & = & -D_{KL}(q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) || p_{\theta}(\boldsymbol{z})) \end{array}
    最终下界可以写成:
    \int q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) \cdot \log p_{\theta}(\boldsymbol{x}| \boldsymbol{z})\rm{d}\boldsymbol{z} - D_{KL}(q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) || p_{\theta}(\boldsymbol{z})) = \mathbb{E}_{q_{\phi}(\boldsymbol{z}|\boldsymbol{x})}[\log p_{\theta}(\boldsymbol{x}| \boldsymbol{z})] - D_{KL}(q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) || p_{\theta}(\boldsymbol{z}))
    所以最终我们的目标就是优化,使其达到最大值

  4. 重参数技巧

    的一个问题是其对的导数不好求,所以不便于采用梯度下降方法优化,通过引入重参数技巧获得的一个近似,而且该下界可以直接使用梯度下降算法优化。

    将,变为,其中,我们可以得到的一个近似:

    其中, 。

  5. VAE

    变分自编码器是论文所讨论模型的一个特例,其结构如下:

    感谢苏剑林先生的图

    该模型的几个假设是:

    • 先验概率
    • 后验概率是一个多值高斯分布,其协方差矩阵为对角矩阵
    • 后验概率的近似简单起见取为协方差矩阵为对角矩阵的多值高斯分布

    模型主要要学习的就是,又由于我们取为协方差矩阵为对角矩阵的多值高斯分布,所以只要利用两个网络分别估计该高斯分布的均值和标准差(实际操作时网络一般估计的是,不用加激活函数)即可。VAE的训练过程在上面的结构图中也有体现:

    ​ ①输入

    ​ ②神经网络输出该对应的的和

    ​ ③从中采样某个,将其送入表示的decoder,得到输出

    ​ ④计算loss,并优化

  6. VAE loss

    有前面的推导可知,我们希望优化的目标是最大化下式:

    在训练VAE时,我们可以将作为loss,这样最小化loss即最大化。

    由于我们假设 和 是协方差矩阵为对角矩阵的多值高斯分布,所以我们可以计算:

    令的维度是,和是的均值和标准差,和是和的第个元素,那么:

    对于,根据所选的decoder类型不同可以分为:

    • Bernoulli MLP

      其中,即decoder的输出。

    • Gaussian MLP

      其中:

综上,最后我们需要最小化的loss是:
\begin{array}{lcl} \mathcal{L} & = & -\tilde{\mathcal{L}}(\theta, \phi;\boldsymbol{x}) \\ & = & D_{KL}(q_{\phi}(\boldsymbol{z}|\boldsymbol{x}) || p_{\theta}(\boldsymbol{z})) - \frac{1}{L}\sum_{l=1}^{L}(\log p_{\theta}(\boldsymbol{x}|\boldsymbol{z}^{(l)})) \\ & = & -\frac{1}{2}\sum_{j=1}^{J}(1 + \log((\sigma_j)^2) - (\mu_j)^2 - (\sigma_j)^2) - \frac{1}{L}\sum_{l=1}^{L}(\log p_{\theta}(\boldsymbol{x}|\boldsymbol{z}^{(l)})) \end{array}

你可能感兴趣的:(VAE学习)