Variational Autoencoder (VAE)
变分自动编码器(Variational Autoencoder, VA)是一种非线性潜变量模型,具有基于变分原理的高效梯度训练程序。在潜变量模型中,我们假定观察到的 是由一些潜变量(未观察到的) 生成的;这些潜变量捕捉到了观察数据中的一些 "有趣 "结构,而这些结构并不能从观察数据本身立即看出。例如,一种称为独立成分分析的潜变量模型可用于将人们同时说话的录音中的单独语音信号分离出来。更正式地说,我们可以把潜变量模型看作是一个概率分布 ,它描述了生成过程(即 是如何从 生成的)以及关于潜变量 的先验值 。这相当于以下简单的图形模型
潜变量模型中的学习
我们在这种模型中的目的是学习生成过程,即 (我们假设 是已知的)。一个好的 会给观测到的 赋以高概率;因此,我们可以通过最大化观测数据的概率(即)来学习一个好的。假设 的参数为 ,我们需要解决以下优化问题
其中, 。这是一个很难的优化问题,因为它涉及 的积分,但却有可能没有解析解。
潜变量模型的后验推断
目前,我们暂时抛开这个关于学习的问题,重点讨论另一个问题:潜变量模型的后验推断 。 我们很快就会看到,这个问题与学习问题密切相关,而且事实上还引出了解决这个问题的方法。给定 和 , 我们希望推断出后验分布 。 这通常相当困难,因为它涉及到对 的积分, 。对于大多数潜变量模型来说,这个积分无法求出, 因此需要对 进行近似。例如,我们可以使用马尔科夫链蒙特卡洛技术对后验进行采样。不过,在这里我们将研究另一种基于变异推理的技术。变异推理将后验推理问题转化为优化问题, 变异推理将后验推理问题转化为优化问题,即找到一个尽可能接近 的近似概率分布 。这可以形式化为解决以下优化问题
其中, 表示近似值。 和 表示 and 之间的Kullback-Leibler发散,其值为 ${\rm KL}(q||p) = \int_xq(x) {\rm log} \frac{q(x)}{p(x)} $ 。然而,这个优化问题并不比我们原来的问题简单,因为它仍然要求我们估计 。让我们看看能否解决这个问题。根据 KL 的定义,我们可以写出
其中我们定义了
由于 与 无关,最小化 等于最大化 。请注意,优化 要容易得多,因为它只涉及 ,不涉及任何难解的积分。因此,我们可以通过求解下面的优化问题,对潜变量模型的后验进行变分推断
回到学习问题
上面的推导也提出了学习生成模型 的方法。我们可以看到, 实际上是观测数据 的对数概率的下限
其中我们使用了 KL 从不为负这一事实。现在,假设我们不做后验推断,而是固定 ,并学习生成模型 。那么 $ \mathcal{L}$ 现在是 的函数, 。由于 $ \mathcal{L}$ 是 的下限,我们可以最大化 $ \mathcal{L}$ 作为最大化 的近似。事实上,如果 ,则 KL 项为零, ,即最大化 $ \mathcal{L}$ 等于最大化 。这表明我们可以同时改变 和 来最大化 $ \mathcal{L}$ , 以达到同时学习 和 的目的:
在这里
关于期望最大化( expectation maximization, EM)的简单介绍
EM 可以看作是解决上述公式(6)中最大化问题的一种特殊策略。在 EM 中,E 步包括根据当前的 (即后验 )计算最优 。在 M 步中,我们将最优 插入 ,并相对于 使其最大化。换句话说,EM 可以看作是一个坐标上升过程,它相对于 和 交替使 最大化。
解决公式 (6) 中的最大化问题
我们可以使用多种技术来解决上述最大化问题。在此,我们将重点讨论随机梯度上升,因为变分自动编码器使用了这种技术。在基于梯度的方法中,我们评估目标相对于模型参数的梯度,并沿着梯度方向迈出一小步。因此,我们需要估计 的梯度。假设我们有一组样本 ,我们可以对 进行如下蒙特卡罗估计
并且 。与 有关的导数很容易估算,因为 只出现在总和(sum)的内部。
相对而言, 的导数更难估算。我们不能简单地将梯度算子推入总和,因为用于估计 $ \mathcal{L}$ 的样本来自 ,而 取决于 。只要注意到 就可以意识到这点, 其中 。实际上,这种期望梯度的标准估计值方差过大,无法发挥作用(详见附录)。VA的一个主要贡献是对 进行了更有效的估计,这依赖于所谓的重参化技巧。
重参化技巧
我们想估计 形式的期望梯度。问题在于,相对于 的梯度难以估计,因为 出现在期望的分布中。如果我们能以某种方式重写这个期望,使 只出现在期望内部,我们就能简单地将梯度算子推入期望中。假设我们可以从噪声分布 中采样,并通过可微变换 得到 的样本。
那么,我们可以将期望值改写如下
假设我们有一组来自 的样本 ,我们可以对 进行蒙特卡罗估计
现在, 只出现在总和的内部,而$ \mathcal{L}$ 相对于 的导数可以用估计 的相同方法来估计。这实质上就是重参化的技巧,它大大降低了 估计值的方差,使得训练大型潜变量模型变得可行。我们可以为多种近似后验选择找到一个合适的噪声分布 和一个可变的变换 (有关的方法,请参见原始论文[1])。我们将在下文讨论VA时看到多元高斯分布的例子。
变分自动编码器(Variational Autoencoder, VA)
以上关于潜变量模型的讨论是一般性的,上述变异方法可以应用于任何潜变量模型。我们可以把VA看作是一种潜变量模型,它使用神经网络(特别是多层感知器)对近似后验 和生成模型 进行建模。更具体地说,我们假设近似后验是一个多变量高斯分布,具有对角协方差矩阵。这个高斯分布的参数由一个以 为输入的多层感知器(Multilayer Perceptron, MLP)计算得出。我们用两个非线性函数 和 来表示这个 MLP,它们分别从 映射到均值向量和标准偏差向量。
对于生成模型 ,我们假设 固定为单位多元高斯,即 。 的形式取决于建模数据的性质。例如,对于实数 ,我们可以使用多元高斯分布;对于二元 ,我们可以使用伯努利分布。这里,我们假设 是实数,是高斯分布。同样,我们假设 的参数由 MLP 计算得出。用两个非线性函数 和 表示这个 MLP,它们分别从 映射到均值向量和标准偏差向量。
看看这个模型的网络结构,我们就知道为什么它被称为自动编码器了。
编码器 将输入 以概率方式映射到代码 ,解码器 又将代码 以概率方式映射回输入空间。
为了学习 和 ,VA采用了上述变异方法。我们从 采样了 ,并利用这些样本获得变分下限 的蒙特卡罗估计值,如公式 (8) 所示。然后,我们求出该下限相对于参数的导数,并在随机梯度上升过程中使用这些导数来学习 和 。如上所述,为了减小梯度估计值的方差,我们采用了重参化的技巧。我们希望使用噪声分布 和可微变换 对多元高斯分布 进行重参化。我们假设从多元单位高斯中采样,即 。那么,如果我们让 , 将具有所需的分布 $q\phi(z|x) ∼ \mathcal{N}(z; \mu\phi(x), \sigma\phi(x)) $(表示元素相乘)。因此,我们可以利用 $q\phi$ 的这种重参化将变分下界重写如下
我们还可以做一个简化。将 , 明确写成 ,我们可以看到
由于 和 都是高斯分布,因此 KL 项有一个封闭的表达式。将其插入,我们就得到了下面的变分下界表达式。
这里我们假设 有 维,并用 和 表示 的均值向量和标准偏差向量的第 维。假设我们有一个包含 个数据点的数据集,并随机抽取了 个数据点。对每一个, 小批量 的变分下界估计值是 的简单平均值。
其中 在公式 21 中给出。为了学习 和 ,我们可以求出上述表达式的导数,并将其用于随机梯度上升过程。
附录
估计
估计这种期望值梯度的一个常用方法是利用特征
这种估计器在文献中有多种名称,如 REINFORCE algorithm、score function estimator 或者likelihood ratio trick。给定来自 的样本 时,我们可以使用该估计器对 相对于 的梯度进行无偏蒙特卡罗估计。然而,在实际应用中,它的方差过大,无法发挥作用。