生成模型中的概率密度估计问题
生成模型通过学习样本数据的概率分布来生成新的样本数据,包含两个基本功能,密度估计和生成样本。
密度估计可以采用EM算法,其中的E步需要计算后验概率密度,当图模型中隐变量是一维离散变量时,后验概率密度可直接计算,若隐变量更加复杂,则需要使用变分推断,采用较为简单的分布
来近似。但有时
比较复杂时,近似效果不佳,这时又可考虑采用神经网络来近似。
变分自编码器介绍
假设一个生成模型中含有隐变量,观测变量是一个高维随机向量,隐变量是相对低维的随机向量
,生成模型可以描述为(实线为生成模型,虚线为变分近似):
这个生成模型的联合概率密度可以分解为:
其中为隐变量的先验分布的概率密度函数,
为为已知
时观测变量
的条件概率密度函数,
表示两个概率密度的参数。我们可以假设
和
为某种参数化的分布族,比如正态分布。这些分布的形式已知,只是参数
未知,可以通过最大化似然来进行估计。
给定一个样本,其对数边际似然函数可以分解为:
其中,为额外引入的变分密度函数,参数为
,
为证据下界,其表达式为:
最大化对数边际似然可以使用广义EM算法来求解,其步骤为
1.E步,固定参数,寻找一个变分密度函数
来近似后验概率密度函数
。
2.M步,固定,寻找
来最大化证据下界
。
在E步中,理论上最优的就是
,
这样,就回到了文章开头提到的后验概率密度估计的问题,更进一步,这个已知
时观测变量
的条件概率密度函数一般也比 较复杂,很难直接用已知的分布族函数进行建模。
变分自编码器是一种深度生成模型,其基本思想就是利用神经网络来近似两个复杂的概率密度函数。
1.用神经网络来估计变分密度函数 ,称为推断网络.理论上
可 以不依赖
.但由于
的目标是近似后验分布
,其和
相关,因此变分密度函数一般写为
。推断网络的输入为
,输出为变分密度函数
。
2.用神经网络来估计概率分布,称为生成网络.生成网络的输入为
,输出为概率分布
。
将推断网络和生成网络合并就得到了变分自编码器的整个网络结构。(图片来源于邱锡鹏《神经网络与深度学习》)
其中实线表示网络计算操作,虚线表示采样操作。
推断网络
为了简单起见,假设服从对角化协方差的高斯分布
其中和
是高斯分布的均值和方差,可以通过推断网络
来预测,
其中的可以是一般的全连接网络或者卷积神经网络,比如一个两层的全连接网络,
代表的是推断网络的所有网络参数
,而
,
和
是激活函数,
是
函数,而使用
是因为方差总是非负的,实际中可以采用一个线性层来预测
。
推断网络的目标是是使得
尽可能接近真实的后验
, 需要找到一组网络参数
来最小化两个分布的KL散度,即
然而,直接计算上面的KL散度是不可能的,因为一般无法计算.传统方法是利用采样或者变分法来近似推断。基于采样的方法效率很低且估计也不是很准确,所以一般使用的是变分推断方法, 即用简单的分布
去近似复杂的分布
。但是,在深度生成模型中,
通常比较复杂,很难用简单分布去近似。因此,我们需要找到一种间接计算方法。由于
因此
即目标转换为寻找一组网络参数 使得证据下界
最大,可以看作EM算法的E步。这和变分推断中的转换类似,笔者曾专门写了一篇博客讲述变分推断。
生成网络
生成模型的联合分布 可以分解为两部分:隐变量 𝒛 的先验分布
和条件概率分布
先验分布,为简单起见,一般假设隐变量
的先验分布为各向同性的标准高斯分布
。隐变量𝒛的每一维之间都是独立的。
条件概率分布, 条件概率分布
可以通过生成网络来建模。为简单起见,我们同样用参数化的分布族来表示条件概率分布
,这些分布族的参数可以用生成网络计算得到。
根据变量的类型不同,可以假设
服从不同的分布族。
1.如果 是
维的二值的向量,比如词袋向量,可以假设
服从多变量的伯努利分布,即
其中可以被定义为
,是第
维分布的参数,分布的参数
可以通过生成网络来预测。
2.如果 是
维的连续向量,可以假设
服从对角化协方差的高斯分布,即
其中同样可以用生成网络来预测。
生成网络的目标是找到一组网络参数
来最大化证据下界
,即
可以看作EM算法的M步。
汇总
推断网络和生成网络的目标都为最大化证据下界.因此,变分自编码器的总目标函数为
其中,为隐变量的先验分布,
分别为生成网络和推断网络的网络参数
分别来看公式里的两项,
1.公式的第一项期望可以使用采样的方法进行近似计算,根据每个样本,根据
采集
个
,
,这时,有
但是这样计算存在一个问题,就是期望 依赖于参数
,在上面的计算中,这个期望变得与
无关,当使用梯度下降法来学习参数时,期望
关于
的梯度为0,这种情况是由于变量
和参数
之间不是直接的确定性关 系,而是一种“采样”关系。可以通过重参数化技巧进行解决,将随机性抽离,从而找到变量
和参数
之 间的确定性函数关系,即,引入一个分布为
的随机变量
,而
,这样,我们实际上还是要对
采样,但是确保了可以对参数
进行求导,即随机变量
代表了隐变量
的随机性。笔者之前有过思考,不一定正确,即如果需要使用重参数化技巧,那么需要假设隐变量
服从的分布
属于距离尺度族分布,即两个分布之间可以通过在其图像上进行伸缩变化或位置移动来相互转换,而其参数正好规定了这些变化,比如一元高斯分布的参数
和
分别规定了概率密度函数图像最高点的x轴位置和图像的伸缩情况,
越大,图像越扁平,反之,
越小,图像越瘦高。这样,我们就可以使
服从标准正态分布,其参数可以将其变成
(假设
也服从高斯分布)。即
,而
。从而,期望
的计算可以重写为
2.公式的第二项KL散度一般可以直接计算,当和
都属于正态分布时,存在解析解。给定
维空间中的两个正态分布
和
,其KL散度为
其中表示矩阵的迹,矩阵的“迹”为主对角线(从左上方至右下方的对角线)上各个元素的总和。
表示矩阵的行列式。关于其推导,笔者打算再写一篇文章来做记录。
这样,当以及
时,
其中和
为推断网络
的输出。
训练
通过重参数化,变分自编码器可以通过梯度下降法来学习参数,给定一个数据集 ,对于每个样本
,随机采样
个变量
,
,并通过公式
计算
。变分自编码器的目标函数近似为
如果采用随机梯度方法,每次从数据集中采集一个样本 和一个对应的随机变量
,并进一步假设
服从多变量的伯努利分布
,其中
是生成网络
的输出,
为控制方差的超参数,则目标函数可以简化为
其中第一项可以近似看作输入 的重构正确性,第二项可以看作正则化项,
可以看作正则化系数。变分自编码器的训练过程如图(图片来源于邱锡鹏《神经网络与深度学习》)