变分自编码器数学原理小结




本文针对变分自编码器的数学原理进行一个详细的推导和总结。变分自编码器作为生成模型的一种代表,其代码实现非常的简单,但更有意义的是其背后利用神经网络进行变分贝叶斯推断的数学原理。所谓变分自编码器不过是林中一隅。



一、生成模型

首先变分自编码器(以下简称VAE)是什么?变分自编码器(VAE)实质上是一个基于神经网络的生成模型,用来对样本进行建模。

那生成模型又是什么?生成模型可以理解为给定样本的概率分布。这个分布可以通过学习训练得到。通过这个模型我们能够从一个有穷样本集推断出无穷的样本。

为了理解这样一个模型,我们与曲线拟合进行类比。假设现在有一组离散数据样本 (x1, y1),  (x2, y2) ... 经过多次试验,我们最终用某种形式的曲线拟合了这组数据,也就是说我们用曲线对样本数据进行了建模。之后我们便可以利用这条曲线来预测不在样本中的点。这条曲线就可以理解为一个最简单的生成模型。同样将这组样本输入VAE,VAE也可以拟合出一条曲线(准确的说是均值在一条曲线上的概率分布)。与曲线拟合不同的是,曲线拟合方法得到的是曲线的解析表达式,而VAE得到的是网络权重参数。在实际应用中,我们的数据样本(x1,x2,..xn)通常远不止2维。例如要对MNIST手写数字数据进行建模,每张图片大小为28x28,以一个像素为一个维度,我们的样本数据为28x28 = 784维。要对样本数据建模,我们需要求得一个能够拟合样本数据的超平面,这个超平面上每个点都是不同的28x28的手写数字图片。显然我们无法在如此高的维度用表达式对样本建模。在这种情况下,具有大量权重参数的神经网络则很合适完成这个任务。如何利用神经网络拟合这样一个超平面(准确的说是均值在一个超平面上的概率分布)就是VAE的核心问题。(注:利用神经网络拟合样本的生成模型不只有VAE,最近火热的GAN、pixelCNN等都是为了完成这个目标而诞生的模型)


二、隐变量模型

一个高维样本的维度之间通常不是相互独立的。仍以MNIST数据集为例,虽然图片有784个像素,但每个像素点的取值并不是随机的,而是共同取决于样本表示哪个数字、笔画粗细、大小、转折等因素。由于这些因素隐藏在像素信息之中,故称这些因素为隐变量。也就是说,虽然每个图片样本被看作784维空间X中的一个点,但影响样本的因素仅仅只有若干隐变量。这使得我们可以将样本从X空间投影到一个隐变量组成的低维空间Z,这个低维空间Z就称为隐状态空间。同时我们定义向量θ表达隐状态与高维数据的映射关系。令z为隐状态空间的一个随机采样,存在函数f(z;θ)值域为X空间,这样对于每个隐状态z我们都可以通过向量θ重建出高维数据。在VAE模型中,假设隐变量z = {z1,z2...}服从标准高斯分布,θ为需要学习的参数。我们使f(z;θ)得到的x与样本中的x尽可能相似的原则来优化θ。

那么有了这个优化原则,具体应该如何优化θ呢?这里我们使用极大似然的原则,即最大化样本集中每个X产生的概率P(X)。又由边缘分布公式得P(X) = ∫P(X|Z,θ)*P(Z)dZ,我们的目标就变成了最大化等式的右边,其中P(X|Z,θ)为均值是f(z;θ)方差是超参数σ的高斯分布。由于高斯函数连续可导,故我们可以用梯度下降法进行优化。如此优化得到的θ就能够将隐状态空间中的某个采样z重建成与样本集相似的高维数据x。VAE中的隐状态模型可由下图表示:



三、变分

有了上述隐变量模型,我们还要解决两个问题。1.如何定义这些隐变量z? 2.如何计算他们的积分?VAE给出了上面两个问题的答案。

1.对于第一个问题,如何定义隐变量z。仍以MNIST数据集为例,虽然我们可以猜到隐变量与图片表达的数字、笔画粗细,字体大小等因素有关(这些隐变量也可能互相相关),但我们并不应该手动地去设置这些隐变量,而应当让模型自己学习来得到。VAE采用的方法是假设隐变量相互独立且服从标准高斯分布。这个假设粗看起来很奇怪,为何能够假设隐变量全部服从标准高斯分布呢?回顾一下上一节,上一节提到隐变量为高维数据在隐空间的投影,而隐空间又有些什么约束?实际上对于一个高维空间存在无数对应的隐空间,只要存在映射关系的隐空间,我们就可以认为是等价的。如对于某个隐空间Z2 = f(Z1),存在θ2 = f(θ1),使得P(X) = ∫P(X|Z1,θ1)*P(Z1)dZ1 = ∫P(X|Z2,θ2)*P(Z2)dZ2。式中P(X)是我们模型的学习目标,也就是说通过这两个隐空间学习得到的P(X)是相同的。VAE使用了隐变量相互独立且服从高斯分布的这样一个隐空间。只要存在一个映射可以将VAE的隐空间映射到我们总结的隐变量(数字、笔画粗细等)空间,那么他们就是等价的。后面的章节会证明这样的映射是存在的。

2.如何计算他们的积分?对于积分问题通常可以随机采样求和的方法。但完全随机采样的效率非常低。关于采样这一块原理是机器学习中的一个重要问题,这里先不谈。为了提高采样的效率VAE采用了贝叶斯变分的方法。变分是泛函中的概念,我们有一个函数的函数q,我们的目标是求这个函数的函数q(x|z)逼近P(x|z)的极大值。



(未完)


你可能感兴趣的:(神经网络,变分自编码器,生成模型,算法,深度学习)