关于RBM那点事

什么是RBM?
RBM全称受限玻尔兹曼机(Restred Bolzmann Machine)是一种基于能量和能量分布的算法,其本身是由玻尔兹曼机这一神经网络演化而来,对于RBM来说,本身的显层和隐层在计算过程中不重视谁先谁后,显层可以计算传递给隐层,隐层也可以计算传递给显层,作为一种双向传播的网络,我们可以用下面免得示意图进行标识

关于RBM那点事
RBM到底怎么理解:我们不妨理解RBM是一个编码和解码的过程,我们第一次向显层输入我们的样本总量,显层这个时候显示的是原始的数据情况,显层再通过**函数传递给隐层,这时我们可以视为是编码的过程,那么根据Gibbs的情况,我们肯定有一些计算结果进入到隐层后是不符合或者不合法的,没关系,即使我们得到的是空输入,也不影响,因为对于显层和隐层来说,他们的结果不是由任意一个输入去决定的。说完了编码,我们回到解码问题,解码问题其实就是隐层通过**函数再传递给显层,这个时候我们已经得到了一个从输入到显层,再从显层到隐层,再从隐层到显层,这时我们需要计算一次整个系统的能量,也就是下方附的能量函数,通过能量函数的计算,我们就得出了整个系统的能量总和,分别是隐层能量和显层能量以及链接显隐层的能量,那么我们就完成了一次编码到解码的过程,但是我们要清楚,RBM是关于能量的模型,也就是代表了,该模型每次运行时都会有能量的变化,可能是飙高,也可能是降低,这时候我们是需要一个损失函数去控制其变化,常见的损失函数是对数损失函数即最小期待。

关于能量的表达,我们给定及确定一个表达式
关于RBM那点事
其中系数a,b分别为显层和隐层的偏置系数,W为显层和隐层的链接权重,这样的情况下我们就得到了关于能量和显层以及隐层之间的关系,以及整个能量网络的评估价值
对于神经网络,我们一定会了解到一个关键的术语:**函数,在此我们先不着急引出这个概念,我们来继续说说什么是能量的概率分布

说了什么是能量,我们来理解一下什么是能量分布,能量分布从模型上来看,分别分为隐层的能量分布和显层的能量分布以及连接显隐层的能量分布,在这里我们可以这么看待,对于一个显层神经元和与之相连接的隐层神经元,我们可以用关于能量的函数去计算出处于该状态下某个神经元的结果,对于显层可以这样表示,那么反过来也可以这么表示,这个时候有个冲突,如果显层和隐层一直在变化,我们怎么去计算这个对于单个神经点的概率呢,这个时候我们就需要先验概率来帮助我们,当我们计算显层的时候,隐层已经不变,当我们计算隐层的时候显层也是不变的。

关于RBM那点事
Tip:Z是归一化因子,也就是我们说的总的概率情况
关于RBM那点事
通过上述方法,我们也就分别的能得出关于显层隐层的情况了,这个时候我们反过来看,有了概率分布,是不是可以把**函数提上日程了,对的,**函数是将隐层或者显层的结果传播给另外的层数,是不是和我们的概率分布很像我们这个时候就可以给出**函数的表达了。

RBM的**函数
关于RBM那点事
对应的实现
关于RBM那点事

根据网上的思路,我采用的是Gibbs采样方法,因为RBM是一种双层网络的神经网络算法,并且是双向传播,这里面我们就需要先固定一个层,采用**函数去传递到另一个层,这里面主要还是采用了上述的**函数,那么对于一开始的时候我们的隐含层和可见层其实可以先将输入作为**函数的计算值,先对隐层进行一次计算,再对显层进行计算,这里面用的都是我们的**函数,这样的的情况下,我们会存在一个情况,能量如果一直达不到稳定,那么我们的显层和隐层就会一直的相互**下去。这样的情况,我们需要对于隐层和显层做一个概率采样。这就是前文提到的关于能量的分布。

关于RBM那点事
什么是Gibbs采样,我们可以近似理解为,Gibbs采样是一种排列组合,通过排列组合创建各种各样的情况,然后我们设定一个条件,通过条件去筛选一些不合理的情况,从而达到可信度较高的采样,在RBM的环境中,我们只需要考虑显层和隐层的状态,所以整个采样其实考虑的情况也只有四种,分别是:先从输入得到当前层的结果,相当于得到了当前层的总概率(此时已经更新了当前层)再将当前层得到结果作为输入传入另一层,所以我们只有四种情况,分别是显层的计算结果,以显层计算结果进行采样的隐层结果,隐层的计算结果和以隐层计算结果进行采样的显层结果,但是我们需要在这里理清楚一个事,就是根据我们上述的概率分布,可以得出,每次更新的时候Gibbs采样只会产生两个结果,要是么隐层对显层,要么是显层对隐层

关于RBM那点事

说了这么多,我们应该开始讨论一下怎么训练我们的模型,在这里我们首先要提出两个要点:(1)一个是我们的参数应该如何确定及初始化。
(2)另一个是我们应该如何终止我们的模型训练
回到我们最开始的设定,即RBM的能量表达:

由上表达式我们可以知道,模型的参数主要由偏置系数:a,b以及W组成,确定了整个模型的前提是求得参数的最优解,那么我们就可以明了的确定我们的求解问题的步骤:求解三个参数的最优解,结合我们上面说过的采样方法(必须要由初始化输入,不然求解都没办法)
可以得出以下步骤
(1)初始化三个参数(可以随机产生,也可以置零)
(2)将原始数据作为输入进行计算
(3)采用**函数分别获得显层和隐层的结果
(4)采用Gibbs采样方法获得隐层和显层的情况

问题回到,我们如何终止我们的模型训练,目前来说,如果采用指数方法,也不一定能获得最优解,但是回到问题本身,RBM是从物理领域提取的方法,不妨我们设定,当能量趋于稳定值以后,就不再进行计算,这样的情况,我们是可以接受的,但是目前来看,这个也不是最优解,因为识别度还是不高,这个问题有待解决。