受限玻尔兹曼机(restricted Boltzmann machine, RBM)

本来在知乎开了个专栏想写点机器学习有关的笔记,但有的时候文章写的比较随意,一般就发布到博客上,刚刚想发一两篇文章到专栏,结果知乎不支持Markdown中数学公式,实在是太绝望了,所以以后就把自己觉得还行的内容放在里。话不多说,进入正题。


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

受限玻尔兹曼机介绍

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

受限玻尔兹曼机(restricted Boltzmann machine, RBM)_第1张图片
2018092701.png

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

受限玻尔兹曼机模型

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

其中是能量函数,定义如下:

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

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

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

如果,因为,那么要使得能量最小,我们更希望;反之如果,我们更希望。用同样的方式对进行分析,总结如下:

系数的情形 我们倾向的选择

算法

条件独立性

接着考虑如何最大化,这个式子中有,而是指数的求和,不大好处理,所以我们不优化这个式子,考虑条件概率
\begin{aligned} p(h|v) &=\frac{p(h,v)}{p(v)}\\ &= \frac{ \frac 1 Z \exp\Big(-E (v,h)\Big)}{ \sum_h \frac 1 Z \exp\Big(-E (v,h)\Big)}\\ &=\frac{ \exp\Big(-E (v,h)\Big)}{ \sum_h \exp\Big(-E (v,h)\Big)}\\ &=\frac{ \exp\Big( b^Tv + c^Th +v^TWh \Big)}{ \sum_h \exp\Big( b^Tv + c^Th +v^TWh \Big)} \\ &= \frac{\exp \Big( b^Tv \Big)\exp\Big( c^Th +v^TWh \Big)}{\exp \Big( b^Tv \Big) \sum_h \exp\Big( c^Th +v^TWh \Big)}\\ &= \frac{\exp\Big( c^Th +v^TWh \Big)}{\sum_h \exp\Big( c^Th +v^TWh \Big)}\\ &= \frac{\exp\Big( \sum_j c_jh_j +\sum_j v^T W_{:j}h_j \Big)}{Z^{'}}\\ &= \frac{1}{Z^{'}} \prod_{j=1}^n \exp \Big( c_jh_j +v^T W_{:j}h_j \Big) \end{aligned}\\ 这里Z^{'}=\sum_h \exp\Big( c^Th +v^TWh \Big),W_{:j}是W的第j列
注意是常数,上式将概率分解为有关项的乘积,所以这个式子告诉我们条件独立:

并且

我们利用上式计算
\begin{aligned} p(h_j=1|v) &= \frac{p(h_j=1,v)}{p(v)}\\ &= \frac{p(h_j=1,v)}{p(h_j=0,v)+p(h_j=1,v)}\\ &= \frac{ \exp \Big( c_j +v^T W_{:j} \Big)}{\exp(0)+\exp \Big( c_j +v^T W_{:j} \Big) }\\ &= \text{sigmoid} (c_j +v^TW_{:j}) \end{aligned}

其中

由的对称性,同理可得

RBM Gibbs Sampling

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

Step 1:取样

由条件独立性,我们可以在给定的条件下同时并且独立的对中的每个元素取样。

Step 2:取样

由条件独立性,我们可以在给定的条件下同时并且独立的对中的每个元素取样。

这种取样方法叫做Gibbs Sampling

训练受限玻尔兹曼机

这里考虑如何训练受限玻尔兹曼机,我们的目标肯定是极大化概率似然函数,或者等价地,极大化对数概率似然函数,我们进行如下处理:
\begin{aligned} \ell (W,b,c) &= \sum_{t=1}^n \log P(v^{(t)})\\ &= \sum_{t=1}^n \log \sum _h P(v^{(t)},h)\\ &= \sum_{t=1}^n \log \sum _h \frac 1 Z \exp\Big(-E (v^{(t)},h)\Big)\\ &= \sum_{t=1}^n \log \frac 1 Z \sum _h \exp\Big(-E (v^{(t)},h)\Big)\\ &= \sum_{t=1}^n \log \sum _h \exp\Big(-E (v^{(t)},h)\Big) - \sum_{t=1}^n \log Z\\ &= \sum_{t=1}^n \log \sum _h \exp\Big(-E (v^{(t)},h)\Big) - n \log Z\\ &= \sum_{t=1}^n \log \sum _h \exp\Big(-E (v^{(t)},h)\Big) - n \log \sum _{v,h} \exp\Big(-E (v,h)\Big)\\ \end{aligned}
令,我们来对上式关于求梯度

\begin{aligned} \nabla_\theta \ell (W,b,c) &=\nabla_\theta\sum_{t=1}^n \log \sum _h \exp\Big(-E (v^{(t)},h)\Big) - n \nabla_\theta\log \sum _{v,h} \exp\Big(-E (v,h)\Big)\\ &=\sum_{t=1}^n \frac{\nabla_\theta \sum _h \exp\Big(-E (v^{(t)},h)\Big)}{ \sum _h \exp\Big(-E (v^{(t)},h)\Big)} - n\frac{\nabla_\theta \sum _{v,h} \exp\Big(-E (v,h)\Big)}{ \sum _{v,h} \exp\Big(-E (v,h)\Big)}\\ &=\sum_{t=1}^n \frac{ \sum _h \exp\Big(-E (v^{(t)},h)\Big) \nabla_\theta \Big( -E (v^{(t)},h)\Big)}{ \sum _h \exp\Big(-E (v^{(t)},h)\Big)}- n\frac{ \sum _{v,h}\exp\Big(-E (v,h)\Big)\nabla_\theta \Big( -E (v,h)\Big)}{ \sum _{v,h}\exp\Big(-E (v,h)\Big)}\ \end{aligned}

注意,所以上述两项都可以看成随机变量的期望,所以可以写成如下形式:

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

我们利用能量的定义分别对上式再进行处理
\begin{aligned} \nabla_W \Big( -E (v,h)\Big) &= \frac{\partial}{\partial W} \Big(b^Tv + c^Th +v^TWh\Big)\\ &= hv^T \end{aligned}\\ \begin{aligned} \nabla_b \Big( -E (v,h)\Big) &= \frac{\partial}{\partial b} \Big(b^Tv + c^Th +v^TWh\Big)\\ &= v \end{aligned}\\ \begin{aligned} \nabla_c \Big( -E (v,h)\Big) &= \frac{\partial}{\partial c} \Big(b^Tv + c^Th +v^TWh\Big)\\ &=h \end{aligned}


带入上式可得
\nabla_W \ell (W,b,c) = \sum_{t=1}^n \hat h^{(t)}{v^{(t)}}^T - n \mathbb E_{P(h,v)}[ hv^T] \\ \nabla_b \ell (W,b,c) = \sum_{t=1}^n {v^{(t)}}^T - n \mathbb E_{P(h,v)}[ v] \\ \nabla_c \ell (W,b,c) = \sum_{t=1}^n \hat h^{(t)} - n \mathbb E_{P(h,v)}[ h]
但是注意依旧涉及到,非常难计算,所以实际上我们会用如下近似:

对上述式子运用此近似可得
\nabla_W \ell (W,b,c) \approx \sum_{t=1}^n h(v^{(t)}){v^{(t)}}^T - n h(\tilde v ) \tilde v ^T \\ \nabla_b \ell (W,b,c) \approx \sum_{t=1}^n {v^{(t)}}^T - n \tilde v \\ \nabla_c \ell (W,b,c) \approx \sum_{t=1}^n h(v^{(t)}) - n h(\tilde v )
实际中我们会使用随机梯度,所以更新式如下

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

算法总结

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

  1. 对每个训练数据

    i.从开始使用步Gibbs Sampling生成样本

    ii.更新参数

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

你可能感兴趣的:(受限玻尔兹曼机(restricted Boltzmann machine, RBM))