变分推断的一些知识

背景综述

变分推断是一种近似推断,主要针对后验分布$p(z|x)$比较难求而提出。该后验分布的作用在于可以探究隐藏在数据分布$x$之后的隐变量$z$,在变分推断中利用$q(z;x)$近似分布。

$q(z;\theta)$和$q(z|x)$的区别在于后者是一个可以学习的参数,而不是固定的某个变量。

KL散度是用来度量两种分布之间的“距离”的方法。定义:
$\mathcal{KL}(P||Q) = \Sigma_{x\in X} p(x)\log\frac{p(x)}{q(x)}$。
同时$\mathcal{KL}(P||Q) = \Sigma_x p(x)\log{p(x)}-\Sigma_x p(x)\log q(x)$,在信息学上的理解为:对于满足$P$分布的$x$使用$Q$分布编码(交叉熵定义:$-\Sigma_x p(x)\log q(x)$)的长度之差。KL散度是一个非负值,而且P和Q是非对称的。

熵($H_q$)与KL散度$D_q$,交叉熵$H$的关系)

熵$H_q$与KL散度$D_q$,交叉熵$H$的关系

P.S. 从这里可以看出交叉熵作为loss其实就是当前神经网络编码结果同标签真是分布之间的差距。

以下部分参考自苏剑林的paper《Variatiaonal Inference: A Unified Framework of Generative Models and Some Revelations》中。

在生成模型中,一般需要最小化交叉熵$\Sigma_x-p(x)\log q(x)$,等价于最小化KL散度$KL(\widetilde{p}(x)|| q(x))$。表示最小化生成模型分布$q(x)$和真实分布$p(x)$。
变分推断利用联合分布$p(x,z)$和$q(x,z)$代替原先的边界分布。并可以证明该替代是一种上界。
$$\begin{aligned}KL(p(x,z)||q(x,z))=& \iint p(x,z)\log \frac{p(x,z)}{q(x,z)}dx dz\\
=&\iint p(x,z)(\log p(x,z)-\log q(x,z))dxdz\\
=&\iint p(x)p(z|x)(\log p(x)+\log p(z|x))\\&-p(x)p(z|x)(\log q(x)+\log q(z|x)) dxdz\\
=&\iint p(x)p(z|x)\log \frac{p(x)}{q(x)} + p(x)p(z|x)log\frac{p(z|x)}{q(z|x)} dxdz\\
=& KL(p(x)||q(x)) + \int p(x)KL(p(z|x)||q(z|x))dx\\
\geq & KL(p(x)||q(x))
\end{aligned}$$

这里可以有一种几何解释:

如图,即P和Q两种分布条件下,在指定z后比单独指定x可能KL距离更远。当然KL散度不能直接当成一种距离来看。

接着当前的GAN和VAE乃至EM算法都可以被归纳为当前框架中。

VAE框架

传统VAE推导

变分框架下的VAE

在该框架下,优化的目标是:
$$\begin{aligned}
KL(p(x,z)||q(x,z)) =& \iint p(x)p(z|x)\log\frac{p(x)p(z|x)}{q(x|z)q(z)}dxdz \\
&(p(x)\text{ has nothing to do with optimization.}) \\
=& \mathbb{E}_{x\sim p(x)} \left[-\int p(z|x)\log q(x|z)dz + KL(p(z|x)||q(z)) \right]\\
&(\text{reparameterization trick})\\
=&\mathbb{E}_{x\sim p(x)} \left[ -\log q(x|z)+KL(p(z|x)||q(z)) \right]
\end{aligned}$$

其中利用重采样技巧, 通过采样一个点完成对$\int p(z|x)\log q(x|z)dz$的估算。可以看到最后的结果中,第一项是重建误差,第二项是KL散度。

EM算法

传统EM算法推导

为了最大化$\log p(x)$可以有如下优化策略:
$$
\begin{aligned}
\log p(x) =& \log \int p(x,z) dz\\
=&\log \int q(z|x)\frac{p(x,z)}{q(z|x)}dz\\
\geq& \int q(z|x)\log\frac{p(x,z)}{q(z|x)}dz \text{ (Jasen’s inequality)}\\
= &\mathbb{H}(q(z|x)) + \int q(z|x)\log p(z)p(x|z)dz
\end{aligned}$$

该不等式的结果是一个下界,因此不断的优化该下界,可以使$\log p(x)$最大。
而对EM算法而言,$q(z|x)$是E步,用来猜测隐变量,而$\log p(x,z)$ 是M步,用来在给定$z$的条件下最大化$x$的概率条件下更新模型。

变分框架下的EM算法

最小化优化目标如下:
$$\begin{aligned}
KL(q(x,z) || p(x,z)) = & \iint q(x,z)\log \frac{q(x,z)}{p(x,z)}dxdz\\
=& \iint q(z|x)q(x)\log \frac{q(z|x)q(x)}{p(x,z)}dxdz\\
\sim& \mathbb{E}_{x\sim q(x)}\int q(z|x)\log \frac{q(z|x)}{p(x,z)}dz\\
\end{aligned}
$$

在优化过程中,首先固定$q(z|x)$,优化$p(x|z)$ (M step)。之后固定$p(x,z)$,更新$q(z|x)$.这一步就是E-step。并且证明了在E步存在最优解。

GAN

传统GAN框架loss公式

最简单的GAN框架即一个最大最小化损失函数:
$$ \min_G \max_D \mathbb{E}_{x\sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z\sim p_z(z)} \log (1-D(G(z)))$$

我对这个式子的理解仅仅局限于一种人造的极大极小博弈过程。背后是否有具体数学推导过程不是很了解。

变分框架下的GAN模型

不同于VAE中将q(x|z)选择为高斯分布,GAN的选择是:
$$
q(x|z) = \delta (x-G(z)), q(x) =\int q(x|z)q(z)dz
$$
即,在GAN中认为z和x是一一对应的关系。
在GAN中引入了一个二元隐变量$y$来构成联合分布。
$$q(x,y) =
\begin{cases}
\tilde{p}(x)p_1,y=1\\
q(x)p_0, y=0
\end{cases}$$
这里可以直接取$p_1=p_2=0.5$。优化目标是:
$$
\begin{aligned}
KL(q(x,y)||p(x,y)) =
& \int p(x)p_1\log \frac{p(x)p_1}{p(1|x)p(x)}dx +
\int q(x)p_0\log \frac{q(x)p_0}{p(0|x)p(x)}dx\\
\sim & \int p(x)\log \frac{1}{p(1|x)}dx+\int q(x)\log \frac{q(x)}{p(0|x)p(x)}dx
\end{aligned}
$$

优化成功后:
$$
q(x,y) \to p(x,y)\
q(x) = \Sigma_y q(x,y) \to \Sigma_y p(x,y)=p(x)
$$
即得到生成模型。

设$p(1|x) = D(x)$,即判别器。
此时交替训练优化对象$p(y|x)$和$q(x)$:

首先固定$G(z)$,即$q(x)$,优化目标为
$$
D = {\arg\min}_D -\mathbb{E}_{x\sim p(x)}[\log D(x)]-\mathbb{E}_{x\sim q(x)}[\log(1-D(x))].$$
$$=\arg\min_D \int p(x)\log D(x)+q(x)\log (1-D(x))dx
$$
假设D(x)可以被优化到最优点,则对上式子求导可得:
$D(x)= \frac{p(x)}{q^0(x)+p(x)}$. $q^0(x)$是被固定的生成器。

之后固定$D(x)$优化$G(x)$,优化目标为:
$$G=\arg\min_G \int q(x)\log \frac{q(x)}{(1-D(x))p(x)}dx$$

将$p(x)$带入loss可以得到
$$\int q(x)\log \frac{q(x)}{D(x)q^0(x)}dx=-\mathbb{E}_{x\sim q(x)} \log D(x)+KL(q(x)||q^0(x))$$
$$=-\mathbb{E}_{z\sim q(z)} \log D(G(z))+KL(q(x)||q^0(x))$$

第一项是传统GAN的loss。而第二项则要求生成器的分布更新不宜太剧烈。