一、概述
对于有向概率图模型来说,由于图中存在天然的拓扑排序关系,所以有向概率图的因式分解的形式很容易写出来。而对于无向图来说就需要根据它图中的最大团来写成一个因式分解的形式,无向图模型在局部并没有表现出是一个概率模型,在整体上才表现地是一个概率模型,由此我们也就遇到了配分函数。在无向图模型的学习和评估问题中,我们会面对概率公式中的配分函数(Partition Function),往往这个配分函数是很难处理的。
对于连续或离散的高维随机变量,它可以表示成一个无向概率图,模型参数为,它的概率公式也就可以写成以下形式:
其中也就是配分函数,可以表示为:
对于这个概率模型的参数估计,可以采用极大似然估计的方法,首先,我们有一些样本,表示为,然后使用这些样本来做极大似然估计:
这里我们也就得到了目标函数:
接下来使用梯度上升的方法来求解参数,因此也就需要对求导:
这里我们首先看一下②这一项的求导:
注意这里的之所以能够放到积分号里面,是因为对于任意来说都是个常数。
上面式子之所以这么变换的目的也就是要将这个导数写成关于的期望的形式,然而正是我们要求解的分布,是一个未知的分布,因此没办法精确求解,也就没办法计算这个梯度,只能近似采样。如果没有②这一项,就可以采用梯度上升,但是由于存在配分函数就无法直接采用梯度上升了。以上就是问题所在。
二、随机最大似然(Stochastic Maximum Likelihood)
现在我们可以把下面的形式:
对于我们的训练数据,我们可以把它们看做服从一个分布,这个分布也就是训练数据的真实分布,是我们要去拟合的分布,然而也是一个我们永远不可能真正精确得到的分布,因为我们能够拿到的只有这个分布的若干样本(也就是训练数据)。有了这个定义以后,我们也可以把上面梯度中减号左边的一项写成期望的形式:
我们的目的也就是要让尽可能地逼近,这个也就是我们的模型,所以我们把这个分布记作,现在我们就有了两个定义的分布,即数据的真实分布和用来拟合的:
现在就可以写成关于和的期望的形式:
这里分别定义等号左边和右边的部分为正相(positive phase)和负相(negative phase)。
我们期待使用梯度上升法来迭代地求解最优的:
对于负相来说,我们无法对这个期望值积分,因此只能采用近似的方法,也就是在每次迭代时利用MCMC的方法(比如吉布斯采样)从里采样得到样本,然后利用这些样本来近似计算负相这个积分值。这里采样得到的个样本记作,这些样本叫做幻想粒子(fantacy particles):
有了这些样本就可以计算负相,也就是说现在就可以用梯度上升的方法来迭代求解参数了,以下就是迭代求解的公式(这里也会从训练集中抽个样本):
这个方法就叫做Gradient Ascent based on MCMC。
上面介绍的内容中引入了几个不容易理解的名词:正相、负相和幻想粒子,现在可以直观地解释一下这几个名词的含义。中存在正相和负相,对比目标函数的表达式可以直观地理解这样命名的用意。
正相的作用是让模型分布在训练样本处概率增大,也就是从中采样,然后让这些样本在中的概率增大。负相的作用是让的值变小,也就是说要让从中采样出来的幻想粒子在中的概率减小,这些样本可以认为我们是不信任它的,称它们是fantasy的,因此要让它们的概率减小。正相和负相共同作用,最终结果就会让逼近,这个过程可以由下图表示:
可以想象如果已经非常逼近,那么采样得到的幻想粒子和从数据集中采样的样本就会非常一致,这时对这些样本既要增大它们的概率也要压低它们的概率,此时正相和负相的作用就会抵消,也就不会再产生梯度,训练也就必须停止。
三、对比散度
对于MCMC的方法,可以参考这两个链接:
①MCMC-1|机器学习推导系列(十五)
②MCMC-2|机器学习推导系列(十六)
上面的目标函数需要从和里面都采样个样本,从里面采样是很容易的,只需要从训练数据中抽取个训练数据,而从中采样就要采用MCMC的方法,具体的操作就是使用一个初始分布初始化马尔可夫链,然后等马尔可夫链随机游走到达平稳分布时进行采样,这里可以构建一条马尔可夫链然后从中采集个样本,也可以构建条马尔可夫链然后从每条马尔可夫链中采集一个样本(只不过这样比较消耗资源)。上述MCMC方法的问题是对于高维数据分布,很可能马尔可夫链的混合时间(或者叫燃烧期)会非常地长。
下图展示了采样多条马尔可夫链的吉布斯采样方法的过程,假设燃烧期是,由于数据维度过高,很可能就会非常大,我们可以认为是无穷大。这里也要注意,吉布斯采样的过程是对高维随机变量的每一维依次采样,因此这里的图中的每个step其实都表示高维随机变量每一维采样的过程:
对比散度(Contrastive Divergence)的方法可以避免燃烧期过长的问题,在上面的抽样过程中需要为0-step的按照一个初始化分布进行初始化,而对比散度的方法就是使用这个分布来作为初始化分布,具体的做法也就是从训练数据中抽取个样本来初始化这条马尔可夫链,也就是:
使用初始化马尔可夫链以后只需要经过很短的几步就可以采集样本了,比如经过步就开始采样,即使也是可以的。总之,对比散度的方法与普通的直接MCMC采样的方法的区别就在于使用了初始化马尔可夫链,然后不用等漫长的混合时间,只需要步就可以采样了,无论步时有没有达到平稳分布,而等很小的数字也是可以的。这种对比散度的方法就叫做CD Learning,之前的方法叫做ML Learning。
接下来来看看对比散度这个名字的由来。首先,先看这个式子:
可以看到,原来的极大似然估计的方法其实是在最小化和的KL散度。而现在在对比散度的方法中,我们用作为第步的初始化分布,而在经过很长的步数后才能达到平稳分布,我们现在把第步的分布记作,最终的平稳分布记作,而中间的第步的马尔可夫链的分布记作。由于现在采样的样本来自而非,所以通过这些样本进行的参数估计就不是在最小化(也就是)了,而是在按照下面式子中的目标函数进行参数估计:
这个目标函数就是对比散度。使用CD-Learning的方法的算法如下:
时刻:
①为正相从中采样,是采样的数据,也就是训练数据;
②为负相从中采样,使用为正相采样的数据初始化马尔可夫链:
然后使用吉布斯采样从马尔可夫链中第步的分布抽取个样本,可以是很小的数字,甚至是:
四、受限玻尔兹曼机的学习
- 表示
受限玻尔兹曼机在前一篇介绍了它的表示和推断问题,参考链接如下:受限玻尔兹曼机|机器学习推导系列(二十五)。
它的概率模型如下:
其中:
- 具有隐变量的能量模型
对于具有隐变量的能量模型来说,我们有的数据是观测变量的数据,假设数据集是,的规模是,即,另外用表示参数,那么数据的似然就是:
对于概率,来求它对的梯度,首先对这个概率做一些变换:
接下来看①和②这两项对参数的导数:
那么最终对参数的梯度为:
- RBM的似然梯度
接下来以求解为例来看RBM的参数学习方法。上面有了对参数的梯度,类似地对参数的梯度为:
然后观察一下能量函数:
那么也就很容易写出来:
代入就有:
有一点要回忆一下,就是RBM无论隐变量还是观测变量都是二值的,取值只能是或。接下来对①和②继续进行变换,需要利用这一点:
因此也就有:
对于上面式子中的这个条件概率,我们是可以直接写出来的,这个概率在上一篇的推断问题中已经推导过了,可以参照本节开头的链接。
- RBM的CD-k方法
所有样本的似然对的梯度现在就可以表示为:
这里红色的项需要对进行积分,是untrackable的,这一项其实也就是关于的期望,因此需要借助MCMC(这里指CD-k的方法,因为RBM里的随机变量也是高维的,只用MCMC也会面临燃烧期过长的问题)的方法。
使用的采样方法还是吉布斯采样,这里具体的采样过程如下图所示,首先使用训练数据来初始化,然后固定来依次采样的每一维,然后固定再来依次采样的每一维,按照如此流程进行步,最终采样得到这一个样本,这种固定一部分来采另一部分的方法叫做块吉布斯采样(block Gibbs Sampling):
需要注意的是虽然按照吉布斯采样的方法需要依次采集每一个维度,但在RBM中由于模型的特殊性,在固定或者时,其余的随机变量都是相互独立的,因此实际操作中并行采每一维也是可以的。
另外我们一共有个训练数据,因此使用每个训练数据初始化一次都可以采集到一个,因此最终采集到的一共有个。
具体的CD-k for RBM算法为:
for each :
for :
for :sample
for :sample
for ,:
这里的初始化为,这里的也就是:
也就是说用每个训练数据采样得到的样本对应的来代替期望,并且将所有训练数据计算得到的累计起来得到的作为的近似值,即:
最后进行梯度上升迭代求解就可以了。