受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)

Coursera上Hinton课程第12周内容为受限玻尔兹曼机,这一讲可以说是完全没听懂,网上中文的资料不够详尽,所以决定自己整理一份,主要是根据Youtube上一个视频及其课件整理。

参考资料如下:

视频地址:

https://www.youtube.com/watch?v=FJ0z3Ubagt4

课件地址:

https://uwaterloo.ca/data-analytics/sites/ca.data-analytics/files/uploads/files/dbn2.pdf

课程主页:

https://uwaterloo.ca/data-analytics/deep-learning

受限玻尔兹曼机介绍

受限玻尔兹曼机是非监督学习算法,它是最常见的一些深度概率模型的构建块,包含一层可观察变量以及一层潜在变量的无向的的概率图形模型,可以用下图表示:

上图$v$为可见层(输入层),$h$为隐藏层,输入层一般是二进制数,我们后面只讨论二进制的输入,而之所以叫它“受限”玻尔兹曼机,是因为可见层内部以及隐藏层内部之间的节点没有连接。

受限玻尔兹曼机模型

接下来我们来看具体模型:

其中$E (v,h)$是能量函数,定义如下:

$Z$为正规化函数(使得概率和为$1$),定义如下:

我们先来从直观上理解下这部分的内容,我们的目的肯定是极大化概率似然函数$\prod p(v,h)$,而概率有如下定义:

所以我们希望$-E (v,h)$尽可能地大,换句话说,我们希望能量$E (v,h)$尽可能地小,将能量中的点积写成求和式:

如果$b_k>0$,因为$v_k \in \{0,1\}$,那么要使得能量最小,我们更希望$v_k=1$;反之如果$b_k<0$,我们更希望$v_k=0$。用同样的方式对$b_j,W_{jk}$进行分析,总结如下:

系数的情形 我们倾向的选择
$b_k>0$ $v_k=1$
$b_k<0$ $v_k=0$
$c_j>0$ $h_j =1$
$c_j<0$ $h_j =0$
$W_{jk} > 0$ $h_jv_k =1$
$W_{jk} < 0$ $h_jv_k =0$

算法

条件独立性

接着考虑如何最大化$\prod p(v,h)$,这个式子中有$Z$,而$Z$是指数的求和,不大好处理,所以我们不优化这个式子,考虑条件概率$p(h|v)$

注意$Z^{‘}$是常数,上式将概率分解为有关$h_1,…,h_n$项的乘积,所以这个式子告诉我们$p(h_1|v),…,p(h_n|v)$条件独立:

并且

我们利用上式计算$p(h_j=1|v),p(h_j=0|v)$

其中

由$v,h$的对称性,同理可得

RBM Gibbs Sampling

根据条件独立性,可以得到如下取样的方法:

Step 1:取样$h^{(l)} ∼ P(h|v^{(l)} )$

由条件独立性,我们可以在给定$v^{(l)}$的条件下同时并且独立的对$h^{(l)}$中的每个元素取样。

Step 2:取样$v^{(l+1)} ∼ P(v|h^{(l)} )$

由条件独立性,我们可以在给定$h^{(l)}$的条件下同时并且独立的对$v^{(l+1)}$中的每个元素取样。

这种取样方法叫做Gibbs Sampling

训练受限玻尔兹曼机

这里考虑如何训练受限玻尔兹曼机,我们的目标肯定是极大化概率似然函数,或者等价地,极大化对数概率似然函数,我们进行如下处理:

令$\theta =\{b,c,W\}$,我们来对上式关于$\theta $求梯度

注意$ P(h|v^{(t)})=\frac{ \exp\Big(-E (v^{(t)},h)\Big) }{ \sum _h \exp\Big(-E (v^{(t)},h)\Big)},P(h,v) = \frac{ \exp\Big(-E (v,h)\Big)}{ \sum _{v,h}\exp\Big(-E (v,h)\Big)}$,所以上述两项都可以看成随机变量的期望,所以可以写成如下形式:

第一项可以理解关于data的,第二项可以理解为关于model的。

我们利用能量的定义分别对上式再进行处理

带入上式可得

但是注意$\mathbb E_{P(h,v)}\Big[ \nabla_\theta \Big( -E (v,h)\Big)\Big]$依旧涉及到$Z = \sum_v \sum_h \exp\Big(-E (v,h)\Big)$,非常难计算,所以实际上我们会用如下近似:

对上述式子运用此近似可得

实际中我们会使用随机梯度,所以更新式如下

注意这里之所以使用加号是因为这里要最大化目标和函数,所以使用梯度上升。

算法总结

把上述内容总结起来,就可以得到如下算法:

  1. 对每个训练数据$v^{(t)}$

    i.从$v^{(t)}$开始使用$k$步Gibbs Sampling生成样本$\tilde v$

    ii.更新参数

  2. 返回至1直至停止条件满足