玻尔兹曼机是一种随机网络,它基于能量模型进行建模。
我们一般认为物体的能量越高越不稳定,能量越低越趋于稳定。比如说,斜坡上的一个箱子,它位于越高的位置,则拥有更高的重力势能。能量模型把箱子停在哪个位置定义为一种状态,每个状态对应着一个能量。这个能量由能量函数来定义,箱子位于某个位置(某个位置)的概率。比如箱子位于斜坡1/2高度上的概率为p,它可以用E表示成 p=f(E) 。
能量概率模型定义通过能量函数一个概率分布:
一个能量模型可以通过随机梯度下降来极小负似然来学习,似然为:
上图的RBM网络中有m个可视节点,n个隐藏节点,其中每个可视节点与每个隐藏节点相互关联。可视节点之间和隐藏节点之间是相互独立的。这就是RBM的概率图模型。
该网络的参数为 c,W,b : b 为可以可视节点的偏移量, c 为隐藏节点的偏移量, W 为可视层与隐藏层之间的权重矩阵 Wx×m 。
这里为了简单描述,假设每个节点的取值为{0,1}。
一个样本 x=(x1,x2,…,xm) 进入,经过RBM网络编码,得到这个样本的m维编码后的样本 y=(y1,y2,…,yn) ,意义为抽取了样本的n个特征。该生成的规则为:
1. 根据模型可以计算出隐藏层节点i取值为1的条件概率 p(hi=1|v)
2. 根据 p(hi=1|v) 这个概率来随机选择 hi 的取值为1还是0。
3. 对每个隐层节点执行上述操作。
与编码过程同理,生成规则为:
1. 根据模型可以计算出可视层节点i取值为1的条件概率 p(vi=1|h)
2. 根据 p(vi=1|h) 这个概率来随机选择 vi 的取值为1还是0。
3. 对每个隐层节点执行上述操作。
能量模型需要定义一个能量函数,RBM的能量函数为:
为了引入概率,定义可视节点和隐藏节点的联合概率:
有了联合概率,就可以得到条件概率和边缘概率:
上面得到了一个样本和其对应编码的联合概率,也就得到了Gibbs分布的概率密度函数。
RBM求解的目标就是——让RBM网络表示的Gibbs分布最大可能的拟合训练数据(分布)。
似然函数为:
为什么可以转化为极大似然来求解?
意义就是:当RBM网络训练完成后,如果让这个RBM网络随机发生若干次状态(当然一个状态是由(v,h)组成的),这若干次状态中,可视节点部分(就是v)出现训练样本的概率要最大。即在反编码(从隐藏节点到可视节点的编码过程)过程中,能使训练样本出现的概率最大,也就是使得反编码的误差尽最大的可能最小。
如,一个样本(1,0,1,0,1)编码到(0,1,1),那么,(0,1,1)从隐藏节点反编码到可视节点的时候也要大概率地编码到(1,0,1,0,1)。
这就可以准确地将样本数据映射到n维的特征中而尽可能地减少损失。
求解极大似然的方法一般为梯度上升,这里也不例外。
梯度可写为:
对于每个 lnp(v) :
下面对参数 c,W,b 分别求导:
其中 p(v,h)=p(h|v)p(v) ,条件概率:
对每个训练样本x,都用某种抽样方法抽取一个它对应的符合RBM网络表示的Gibbs分布的样本(对应的意思就是符合参数确定的Gibbs分布p(x)的),假如叫y;那么,对于整个的训练集 {x1,x2,…xl} 来说,就得到了一组符合RBM网络表示的Gibbs分布的样本 {y1,y2,…,yl} ,然后拿这组样本去估算第二项,那么梯度就可以用下面的公式来近似了:
这样梯度就出来了。
为什么需要抽样得到符合模型Gibbs分布的样本?因为公式中需要用到关于模型的期望,不能直接用训练样本,因为训练样本的分布不一定符合模型Gibbs分布,只有符合这个分布的样本才能拿来算期望。
在Hinton教授还没提取CD-k之前,RBM的抽样问题是用Gibbs采样解决的。
我们有了上面的条件概率,我们就可以交替地进行下面的采样:
h0∼p(h|v0) v1∼p(v|h0)
h1∼p(h|v1) v2∼p(v|h1)
……, vk+1∼p(v|hk)
在抽样步数k足够大的情况下,就可以获得符合RBM模型Gibbs分布的样本,得到这些样本就可以计算梯度的第二项了。
但是每个样本都进行k步的抽样,计算量会很大,所以Hinton教授提出了一个简化的版本,叫做CD-k(对比散度)。与Gibbs抽样不同,Hinton教授指出当使用训练样本初始化 v0 的时候,仅需要较少的抽样步数(一般就一步)就可以得到足够好的近似。
http://blog.csdn.net/mytestmy/article/details/9150213/
http://deeplearning.net/tutorial/rbm.html