# [受限玻尔兹曼机] 原理、求解、深度信念网络

### 一、受限玻尔兹曼机

#### 1、简介玻尔兹曼机结构

①网络节点全部由可见单元构成。
②网络节点由可见单元和隐藏单元共同组成。

#### 2、受限玻尔兹曼机

**受限玻尔兹曼机的目的：**通过求取连接权重和偏置项，使得重构的$\widetilde{v}$$v$误差最小。利用这些连接权重和偏置项我们可以进行分类或者进行生成。

$E(v,h,\theta) = -\sum_{i=1}^nb_iv_i- \sum_{j=1}^mc_jh_j-\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j$

$p(\red{v},h|\theta)=\frac{1}{Z}exp\{-E(\red{v},h,\theta)\} \\ Z=\sum_{v,h}exp\{-E(v,h,\theta)\}$

$\begin{array}{lcl} logL(\theta|\red{v}) &=& log\frac{1}{Z}\sum_{h}exp\{-E(\red{v},h,\theta)\} \\ &=& log\sum_hexp\{-E(\red{v},h,\theta)\}-log\sum_{v,h}exp\{-E(v,h,\theta)\} \end{array}$

$\begin{array}{lcl} \frac{\partial logL(\theta|v)}{\partial \theta} &=& \frac{\partial (log\sum_h exp\{-E(\red{v},h,\theta)\})}{\partial \theta}-\frac{\partial (log\sum_{v,h}exp\{-E(v,h,\theta)\})}{\partial \theta} \\ &=& -\frac{1}{\sum_h exp\{-E(\red{v},h,\theta)\}}\sum_h (exp\{-E(\red{v},h,\theta)\}\frac{ \partial E(\red{v},h,\theta)}{\partial \theta}) \\ &+& \frac{1}{\sum_{v,h} exp\{-E(v,h,\theta)\}}\sum_{v,h} (exp\{-E(v,h,\theta)\}\frac{ \partial E(v,h,\theta)}{\partial \theta}) \\ &=& -\sum_h (p(h|\red{v})\frac{ \partial E(\red{v},h,\theta)}{\partial \theta})+\sum_{v,h} (p(v,h)\frac{ \partial E(v,h,\theta)}{\partial \theta}) \end{array}$

##### （1）求对$w_{ij}$的梯度

$\begin{array}{lcl} \frac{\partial log L(\theta|v)}{\partial w_{ij}} &=& -\sum_h (p(h|\red{v})\frac{ \partial E(v,h,\theta)}{\partial w_{ij}})+\sum_{v,h}p(v,h) (\frac{ \partial E(v,h,\theta)}{\partial w_{ij}} ) \\ &=& \sum_{h_j} (p(h_j|\red{v})v_ih_j)-\sum_{v_i,h_j}p(v_i,h_j)v_ih_j \\ &=& \sum_{h_j} (p(h_j|\red{v})v_ih_j)- \sum_{v_i} (p(v_i)\sum_{h_j}p(h_j|v_i)v_ih_j) \\ &=& p(h_j=0|\red{v})v_i \cdot 0 +p(h_j=1|\red{v})v_i \cdot 1 \\ &-& (\sum_{v_i}p(v_i)p(h_j=0|v_i)v_i \cdot 0 + \sum_{v_i}p(v_i)p(h_j=1|v_i)v_i \cdot 1) \\ &=& p(h_j=1|\red{v})v_i - \sum_{v_i}(p(v_i)p(h_j=1|v_i)v_i) \end{array}$

##### （2）求对$b_{i}$的梯度

$\begin{array}{lcl} \frac{\partial log L(\theta|v)}{\partial b_{i}} &=& -\sum_h (p(h|\red{v})\frac{ \partial E(v,h,\theta)}{\partial b_{i}})+\sum_{v,h}p(v,h) (\frac{ \partial E(v,h,\theta)}{\partial b_{i}} ) \\ &=& \sum_{h} (p(h|\red{v})v_i)-\sum_{v_i,h}p(v_i,h)v_i \\ &=& \sum_{h} (p(h|\red{v})v_i)- \sum_{v_i} (p(v_i)\sum_{h}p(h|v_i)v_i) \\ &=& v_i - \sum_{v_i}(p(v_i)v_i) \end{array}$

##### （3）求对$c_{j}$的梯度

$\begin{array}{lcl} \frac{\partial log L(\theta|v)}{\partial c_{j}} &=& -\sum_h (p(h|\red{v})\frac{ \partial E(v,h,\theta)}{\partial c_{j}})+\sum_{v,h}p(v,h) (\frac{ \partial E(v,h,\theta)}{\partial c_{j}} ) \\ &=& \sum_{h_j} (p(h_j|\red{v})h_j)-\sum_{v,h_j}p(v,h_j)h_j \\ &=& \sum_{h_j} (p(h_j|\red{v})h_j)- \sum_{v} (p(v)\sum_{h_j}p(h_j|v)h_j) \\ &=& p(h_j=0|\red{v}) \cdot 0 +p(h_j=1|\red{v})\cdot 1 \\ &-& (\sum_{v}p(v)p(h_j=0|v) \cdot 0 + \sum_{v}p(v)p(h_j=1|v)\cdot 1) \\ &=& p(h_j=1|\red{v})- \sum_{v}(p(v)p(h_j=1|v)) \end{array}$

##### （4）更新方程

$w_{ij}$$b_i$$c_j$求完梯度之后，可以按照如下方程更新参数：
$\begin{array}{lcl} w_{ij} &\leftarrow& w_{ij}-\frac{\partial (log L(\theta|v))}{\partial w_{ij}} \\ b_{i} &\leftarrow& b_{i}-\frac{\partial (log L(\theta|v))}{\partial b_{i}} \\ c_{j} &\leftarrow& c_{j}-\frac{\partial (log L(\theta|v))}{\partial c_{j}} \end{array}$

### 二、受限玻尔兹曼机的求解

Gibbs采样求解和CD算法求解都是近似求解模型，我们希望$p(v)=p_{train}(v)$（数据的真实、底层分布）。所以我们通过近似算法， 迭若干次之后，使得马尔科夫链拟合最终的$v$的分布。

#### 1、Gibbs采样

Gibbs采样的思想是虽然我们不知道样本数据$v_1,v_2,...,v_{n_v}$的联合概率，但是我们知道样本的条件概率$p(v_i|v_{-i})$，则我们可以先求出每个数据的条件概率值，得到$v$的任一状态$[v_1(0), v_2(0), ..., v_{n_v}(0)]$，然后，用条件概率公式迭代对每一个数据求条件概率。最终，迭代$k$次的时候，$v$的某一个状态$[v_1(k), v_2(k), ..., v_{n_v}(k)]$将收敛于$v$的联合概率分布$p(v)$，其过程图如下（图片来自参考博客）：

$\begin{array}{lcl} h_0 \sim p(h|v_0) \\ v_1 \sim p(v|h_0)\\ h_1 \sim p(h|v_1)\\ v_2 \sim p(v|h_1)\\ ...\\ v_{k+1} \sim p(v|h_k) \end{array}$

#### 2、CD对比散度算法

##### （1）CD算法的算法流程图

（图片来源:受限玻尔兹曼机(RBM)+对比散度算法(CD-k)

##### （2）条件分布$P(h|v)$和$P(v|h)$

CD算法的能量函数为：
$E(v,h,\theta) = -\sum_{i=1}^nb_iv_i- \sum_{j=1}^mc_jh_j-\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j$

$\begin{array}{lcl} P(v,h) = \frac{1}{Z}e^{-E(v,h)} \\ Z = \sum_{v,h}e^{-E(v,h)} \end{array}$

$\begin{array}{lcl} P(h|v) &=& \frac{P(h,v)}{P(v)} \\ &=& \frac{1}{P(v)}\frac{1}{Z}exp\{\sum_{i=1}^nb_iv_i+ \sum_{j=1}^mc_jh_j+\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j\} \\ &=& \frac{1}{{Z}'}exp\{\sum_{j=1}^mc_jh_j+\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j\} \\ &=& \frac{1}{{Z}'}\prod_{j=1}^{n_h}exp\{c_jh_j +w_{ij}v_ih_j \} \end{array}$

$\frac{1}{{Z}'} = \frac{1}{P(v)}\frac{1}{Z}exp\{\sum_{i=1}^nb_iv_i\}$

$\begin{array}{lcl} P(h_j=1|v) &=& \frac{P(h_j=1|v) }{P(h_j=0|v) +P(h_j=1|v) } \\ &=& \frac{exp\{c_j +w_{ij}v_i\}}{1+exp\{c_j +w_{ij}v_i\}} \\ &=& \frac{1}{1+exp\{-(c_j +w_{ij}v_i)\}} \\ &=& \sigma (c_j +w_{ij}v_i) \end{array}$

$P(v_i=1|h) = \sigma (b_i +w_{ij}h_i)$

##### （3）CD算法求解举例

(A)如上图(a)所示，$v_1^{(0)}, v_2^{(0)},v_i^{(0)},v_n^{(0)}$的取值分别为$1, 0, 1, 1$

(B) 我们根据公式$P(h_j=1|v)= \sigma (c_j +w_{ij}v_i)$可以求出$h_1^{(0)},h_j^{(0)},h_m^{(0)}$的概率分别为$0.8,0.5,0.9$

(C ) $h_1^{(0)},h_j^{(0)},h_m^{(0)}$的概率分别为$0.8,0.5,0.9$，根据上述判断结果是0还是1的方法，$h_1^{(0)},h_j^{(0)},h_m^{(0)}$的取值分别为$0,1,1$

(D) $h_1^{(0)},h_j^{(0)},h_m^{(0)}$的取值分别为$0,1,1$，根据$P(v_i=1|h) = \sigma (b_i +w_{ij}h_i)$我们求得$v_1^{(1)}, v_2^{(1)},v_i^{(1)},v_n^{(1)}$的概率分别为$0.7, 0.2, 0.8, 0.6$

(E)$v_1^{(1)}, v_2^{(1)},v_i^{(1)},v_n^{(1)}$的概率分别为$0.7, 0.2, 0.8, 0.6$，根据上述判断结果是0还是1的方法，$v_1^{(1)},v_2^{(1)},v_i^{(1)},v_n^{(1)}$的取值分别为$1,1, 0, 1$

(F)梯度的更新公式为：
$\begin{array}{lcl} w_{ij} \leftarrow w_{ij}+\eta [p(h_j^{(0)}=1|v^{(0)})v_i^{(0)} - p(h_j^{(1)}=1|v^{(1)})v_i^{(1)}] \\ b_i\leftarrow b_i+\eta (v_i^{(0)} -v_i^{(1)}) \\ c_j \leftarrow c_j+\eta[p(h_j^{(0)}=1|v^{(0)})-p(h_j^{(1)}=1|v^{(1)})] \end{array}$

### 三、深度信念网络

1）神经网络的权重是先使用前向传播求得网络目标结果，再根据反向传播算法，把误差传播到下一层，调整所有的连接权重和偏置。
2）深度信念网络是逐层来调整连接权重和偏置项。具体做法是受限调整输入层和隐藏层之间的参数，把训练后得到的参数作为下一层的输入，再调整该层与下一个隐藏层之间的参数。不断迭代。

### 四、应用

1、预训练

2、生成模型和分类模型
DBN可以当做生成模型来使用，除此之外，也可以当做分类模型，在DBN的最顶层增加一层softmax层，即可变成分类模型。
3、降维

4、和自编码器关系

[1] 深度学习读书笔记之RBM（限制波尔兹曼机）
[2] 受限玻尔兹曼机和深度置信网络
[3] 受限玻尔兹曼机（RBM）原理总结
[4] 受限玻尔兹曼机基础教程
[5] 深度信念网络
[6] Hinton G E, Osindero S. A Fast Learning Algorithm for Deep Belief Nets[J].
[7] 深度学习（书）
[8] 图解深度学习（书）
[9] 受限玻尔兹曼机（RBM）学习笔记（六）对比散度算法

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120