美文网首页呆鸟的Python数据分析
受限玻尔兹曼机(restricted Boltzmann mac

受限玻尔兹曼机(restricted Boltzmann mac

作者: 蓝色的狸猫 | 来源:发表于2018-10-07 23:10 被阅读21次

    本来在知乎开了个专栏想写点机器学习有关的笔记,但有的时候文章写的比较随意,一般就发布到博客上,刚刚想发一两篇文章到专栏,结果知乎不支持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

    受限玻尔兹曼机介绍

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

    2018092701.png

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

    受限玻尔兹曼机模型

    接下来我们来看具体模型:
    p(v,h) = \frac 1 Z \exp\Big(-E (v,h)\Big)
    其中E (v,h)是能量函数,定义如下:
    E (v,h) = -b^Tv - c^Th -v^TWh
    Z为正规化函数(使得概率和为1),定义如下:
    Z = \sum_v \sum_h \exp\Big(-E (v,h)\Big)
    我们先来从直观上理解下这部分的内容,我们的目的肯定是极大化概率似然函数\prod p(v,h),而概率有如下定义:
    p(v,h) = \frac 1 Z \exp\Big(-E (v,h)\Big)
    所以我们希望-E (v,h)尽可能地大,换句话说,我们希望能量E (v,h)尽可能地小,将能量中的点积写成求和式:
    \begin{aligned} E (v,h)& = -b^Tv - c^Th -v^TWh\\ &= -\sum_k b_kv_k - \sum_j c_jh_j -\sum_j \sum_k W_{jk}h_jv_k \end{aligned}
    如果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)
    \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列
    注意Z^{'}是常数,上式将概率分解为有关h_1,...,h_n项的乘积,所以这个式子告诉我们p(h_1|v),...,p(h_n|v)条件独立:
    p(h|v) =\prod _{j=1}^n p(h_j|v)
    并且
    p(h_j|v) \propto \exp \Big( c_jh_j +v^T W_{:j}h_j \Big)
    我们利用上式计算p(h_j=1|v),p(h_j=0|v)
    \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}

    \begin{aligned} p(h_j=0|v) &= 1-p(h_j=1|v) \\ &= 1 - \text{sigmoid} (c_j +v^TW_{:j}) \end{aligned}

    其中
    \text{sigmoid}(z) = \frac{1}{1+e^{-z}}
    v,h的对称性,同理可得
    p(v|h) = \prod _{i=1}^n p(v_i|h)\\ p(v_i=1|h) = \text{sigmoid} (b_i +W_{i:}h) \\ p(v_i=0|h) =1- \text{sigmoid} (b_i +W_{i:}h)\\ 其中W_{i:}表示W的第i行

    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

    训练受限玻尔兹曼机

    这里考虑如何训练受限玻尔兹曼机,我们的目标肯定是极大化概率似然函数,或者等价地,极大化对数概率似然函数,我们进行如下处理:
    \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}
    \theta =\{b,c,W\},我们来对上式关于\theta求梯度

    \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}

    注意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)},所以上述两项都可以看成随机变量的期望,所以可以写成如下形式:

    \begin{aligned} \nabla_\theta \ell (W,b,c) &= \sum_{t=1}^n \mathbb E_{P(h|v^{(t)})}\Big[ \nabla_\theta \Big( -E (v^{(t)},h)\Big)\Big] - n \mathbb E_{P(h,v)}\Big[ \nabla_\theta \Big( -E (v,h)\Big)\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}

    \hat h^{(t)} = \mathbb E_{P(h|v^{(t)})}[h] =P(h=1|v^{(t)})= \text{sigmoid}(c+{v^{(t)}}^TW)
    带入上式可得
    \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]
    但是注意\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),非常难计算,所以实际上我们会用如下近似:
    \mathbb E_{P(h,v)}\Big[ \nabla_\theta \Big( -E (v,h)\Big)\Big] \approx \nabla_\theta \Big( -E (v,h)\Big) \Big| _{v=\hat v ,h=\hat 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 )
    实际中我们会使用随机梯度,所以更新式如下
    W = W+ \alpha \Big( h(v^{(t)}){v^{(t)}}^T - h(\tilde v ) \tilde v ^T\Big) \\ b= b+ \alpha \Big( h(v^{(t)}) - h(\tilde v )\Big) \\ c = c+ \alpha \Big( v^{(t)} -\tilde v\Big)
    注意这里之所以使用加号是因为这里要最大化目标和函数,所以使用梯度上升。

    算法总结

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

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

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

      ii.更新参数
      W = W+ \alpha \Big( h(v^{(t)}){v^{(t)}}^T - h(\tilde v ) \tilde v ^T\Big) \\ b= b+ \alpha \Big( h(v^{(t)}) - h(\tilde v )\Big) \\ c = c+ \alpha \Big( v^{(t)} -\tilde v\Big)

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

    相关文章

      网友评论

        本文标题:受限玻尔兹曼机(restricted Boltzmann mac

        本文链接:https://www.haomeiwen.com/subject/kywraftx.html