RBM如何训练?

时间:2022-01-26 05:37:53

RBM(Restricted Boltzman Machine,受限玻尔兹曼机)是深度学习的基础,虽然原理比较简单,但实际训练中用到了很多trick,在参考文献中,Hinton为我们披露了几个训练的细节。

第一,输入为实值向量:

当RBM的输入v是实值向量时,计算隐含层输出h的公式与二值向量是一致的,即 p(h=1|v) = sigm(b+v*w) ,注意,这个公式给出的是h=1的概率,我们真正得到的隐含层输出并不是这个概率,而是二值向量h本身,所以需要对这个概率做二值化处理,h = p(h=1|v) > randn(h)。

在得到了第一轮的隐含层输出h之后,需要重构第二轮的输入v',因为v'是实值向量,因此这里采用的计算公式是 v' = N(c+h*w') ,注意,这里得到的不再是p(v‘=1|h),而是直接计算v',因为输入变量是实值向量,不需要二值化处理。

最后,我们要计算第二轮的隐含层输出h',所用公式为 p(h'=1|v') = sigm(b+v'*w),同上,这里我们仍然需要做二值化处理,得到真正的h'。

以上是理论上的计算过程,但是在真实计算中,Hinton做了细节的处理,主要表现在:1. h是二值化的,2. v'和h'都是实值的。对于第一点,Hinton的解释是为了防止过拟合,对于第二点,Hinton的解释是为了减少噪声;

  第二,输入为二值向量:

  根据上面的分析很容易得到,仅列出公式, p(h=1|v) = sigm(b+v*w),p(v'=1|h) = sigm(c+h*w'),p(h'=1|v') = sigm(b+v'*w)。

  同样,为了防止过拟合、减少噪声,h是二值化的,而v'和h'都是实值的。

  第三,关于输出:

  RBM的输出都是二值化的向量,并且前一层的输出即是后一层的输入。

参考文献:

Krizhevsky A, Hinton G E. Using very deep autoencoders for content-based image retrieval[C]//ESANN. 2011.