这里简单概括一下RBM模型构建、求解以及评估的基本思路,希望能给想了解RBM模型的同学一点帮助。
Restricted Boltzmann Machine 是一个基于能量表示而定义的模型,其结构就是两层的神经网络,一个可见层V和一个隐层H,同一层之间的单元不存在连接,层之间全连接。
根据RBM的网络结构,可以定义出系统中的能量函数,我们称为E。在物理中,一个系统的能量越小,那么其稳定的概率越大。因此有了能量函数之后,就能定义该系统稳定的概率了,这里我们称为P,这个P是V和H的联合概率。
在RBM中,已知其中一层的状态,另外一层的状态是条件独立的。我们常用RBM中每个单元的取值是二元的,即非0及1。
那么通过上面的描述,一个模型就构建完成了。现在给定训练数据,我们需要用这个模型来拟合训练数据,并且求解这个模型中的参数。
在模型中,我们已经可以表示出可见层和隐层的联合概率分布了,那么边缘概率分布也能表示出来。边缘分布就可以用来表示样本的分布了,我们希望在这个RBM表示的边缘分布下,样本的似然函数最大,这就是我们的目标函数。
在目标函数确定的情况下,最简单的优化方法就是梯度法咯。我们通过将目标函数对各参数进行求导,就能得到梯度了。但是求导之后发现,梯度中带有\sum_V的项,也就是相当于有对P(V)的期望项。这下糟了,如果说可见层有n个单元,那么V的状态为2^n种,显然这是不可枚举的。
于是你想到了使用MCMC的Gibbs方法进行采样来近似这个期望,但是在Gibbs中,需要进行多次的采样才能逼近真正的分布,这下复杂度又觉得略高了。既然我们RBM模型的最终目的是要拟合训练数据的分布,那么我们可不可以在Gibbs的一开始就从样本开始,然后进过K步进行sampling,这样是不是能更快的收敛到目标分布呢?基于这个想法,Hinton就在2002年发明了 Contrastive Divergence 算法,这个算法通常在进行1次迭代的时候就能取得好的效果,因此RBM的优化问题的复杂度就降下来了。
最后,我们如何评价RBM模型的好坏呢?比如说我们在分类问题中,需要使用正确率或者错误率来判断模型的优劣,那么我们如何判断RBM模型的优劣呢?你肯定会想,我们就是用模型对训练数据的似然表示评价该模型呗,但是要知道通过能量函数到概率那一步,存在一个归一化因子,这个归一化因子要枚举是非常困难的。
因此我们考虑使用重构误差来评价模型,所谓重构误差就是样本根据RBM的分布,经过一次Gibbs采样得到的V‘,我们计算V和V‘之间的差异,这个差异可以是1范数也可以是2范数。
以上就是RBM模型整体思路的简单概括了,希望能给想了解RBM模型的初学者一点帮助。