受限玻尔兹曼机(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)$,非常难计算,所以实际上我们会用如下近似:
对上述式子运用此近似可得
实际中我们会使用随机梯度,所以更新式如下
注意这里之所以使用加号是因为这里要最大化目标和函数,所以使用梯度上升。
算法总结
把上述内容总结起来,就可以得到如下算法:
对每个训练数据$v^{(t)}$
i.从$v^{(t)}$开始使用$k$步Gibbs Sampling生成样本$\tilde v$
ii.更新参数
返回至1直至停止条件满足