Auto-Encoding Variational Bayes (VAE原文)、变分推理

  变分自动编码器大体概念已经理解了快一年多了,用Pytorch写个模型也是手到擒来的事。但因为其数学原理仍是没有搞懂,在看到相关的变体时,总会被数学公式卡住,这对搞学术是致命的。下决心搞懂后,在此记录下个人理解。函数

公式推导——变分下界

  这篇文章提出一种拟合数据集分布的方法,拟合分布最多见的应用就是生成模型。该方法遵循极大似然策略,即对于数据集$X = \{x^{(i)}\}^N_{i=1}$,对生成模型$p_{\theta}(x)$(注意!这里的$p_{\theta}(x)$既表明生成模型自己,又表明模型生成数据$x$的边缘几率,下面相似)完成以下优化:优化

\begin{align}\displaystyle \max\limits_{\theta}L = \sum\limits_{i=1}^N\log p_{\theta}(x^{(i)})\end{align}编码

  可是,模型不可能凭空产生数据,必需要有输入才能有输出,因此做者对数据的生成过程进行了假设,假设数据集$X = \{x^{(i)}\}^N_{i=1}$的生成过程由如下两步组成:blog

  一、经过某个先验分布$p_{\theta^*}(z)$,抽样得到隐变量$z^{(i)}$ 。数学

  二、再经过某个条件分布$p_{\theta^*}(x|z)$,抽样生成$x^{(i)}$。it

  显然,以上参数$\theta^*$的值、个数,甚至是计算推演的过程,都是未知的。为了使优化得以进行,就要对参数的个数和计算流程进行约束,一般专家会根据经验来给予特定数据集特定的计算过程。不失通常性,做者假设先验分布$p_{\theta^*}(z)$和似然函数$p_{\theta^*}(x|z)$来自于参数族$p_{\theta}(z)$和$p_{\theta}(x|z)$,而且它们的几率分布函数(PDFs)几乎到处可微。变量

  尽管有如上假设,因为$x^{(i)}$与$z$之间的关系未知,咱们不能直接使用梯度降低等方式对$p_{\theta}(x|z)$进行拟合。做者采用一种迂回的方式,让模型本身学会$z$与$x$之间的关系。做者使用自动编码器的机制,与生成模型同时训练一个后验分布模型$q_{\phi}(z|x)$,用来模拟其后验分布$p_{\theta}(z|x)$,称为编码器,并称$p_{\theta}(x|z)$为解码器。几率图以下:原理

  其中$\theta$表示生成模型$p_{\theta}(z)p_{\theta}(x|z)$的待优化参数,$\phi$表示用于估计$p_{\theta}(z|x)$的模型的参数。重构

  有了$q_\phi(z|x)$做为辅助后,针对每一数据集样本,待优化式可转换以下:方法

\begin{align} &\log p_{\theta}(x)\\ =&  \text{E}_{q_{\phi}(z|x)}\log p_{\theta}(x)\\ =&  \text{E}_{q_{\phi}(z|x)}\log \frac{p_{\theta}(x,z)}{p_{\theta}(z|x)}\\ =&  \text{E}_{q_{\phi}(z|x)}\left[ \log p_{\theta}(x,z) - \log p_{\theta}(z|x)+\log q_{\phi}(z|x)-\log q_{\phi}(z|x) \right]\\ =&  \text{E}_{q_{\phi}(z|x)}\left[ \log \frac{q_{\phi}(z|x)}{ p_{\theta}(z|x)} + \log p_{\theta}(x,z) -\log q_{\phi}(z|x) \right]\\ =& \text{KL} \left[ q_{\phi}(z|x) || p_{\theta}(z|x) \right]+ \text{E}_{q_{\phi}(z|x)}\left[ \log p_{\theta}(x,z) -\log q_{\phi}(z|x) \right] \\ =& \text{KL} \left[ q_{\phi}(z|x) || p_{\theta}(z|x) \right]+ \mathcal{L}(\theta,\phi)        \\ \end{align}

  容易看出,因为$(8)$式第一项是相对熵非负,第二项即为待优化式$(2)$的下界,称之为变分下界。所以,咱们只需对第二项进行优化,原式天然变大。将$\mathcal{L}(\theta,\phi)$进行变换以下:

\begin{align} \mathcal{L}(\theta,\phi) &= \text{E}_{q_{\phi}(z|x)}\left[ \log p_{\theta}(x,z) -\log q_{\phi}(z|x) + \log_{\theta}(z) - \log_{\theta}(z) \right] \\ &= \text{E}_{q_{\phi}(z|x)}\left[ -\log q_{\phi}(z|x) + \log_{\theta}(z) + \log p_{\theta}(x,z) - \log_{\theta}(z) \right] \\ &= \text{E}_{q_{\phi}(z|x)}\left[ -\log\frac{q_{\phi}(z|x)}{p_{\theta}(z)} + \log \frac{p_{\theta}(x,z)}{p_{\theta}(z)} \right] \\ &= -\text{KL}\left[q_{\phi}(z|x)||p_{\theta}(z)\right]+ \text{E}_{q_{\phi}(z|x)}\left[ \log p_{\theta}(x|z) \right] \\ \end{align}

  对于以上两项,咱们能够把第一项理解为正则项,也就是说拟合的后验分布应该和生成模型先验分布比较接近才好;第二项理解为重构损失,就是自编码器的损失。同时对这两项进行优化,就可使生成模型向目标靠近。

重参数化

  在以上优化式中包含随机采样过程,做者提出使用重参数化来创建可反向传播的采样。实际上就是给模型额外添加一个已知的随机变量做为输入,从而使模型的抽样过程可微。将做者于文中对以上推导的举例——变分自动编码器(VAE),拿来与$(12)$式作对比,推导的式子以及重参数化的意义就一目了然了。其中VAE的$p_{\theta}(z)$定义为相互独立的多维高斯分布。

相关文章
相关标签/搜索