写在前面
本篇文章主要写受限玻尔兹曼机、Gibbs求解方法、CD对比散度求解方法和深度信念网络。并非全部都是原创,有部分来自于书籍和网络。
一、受限玻尔兹曼机
1、简介玻尔兹曼机结构
如下图所示(图片来源:知乎),玻尔兹曼机的网络是相互连接型网络,其有两种形式:
①网络节点全部由可见单元构成。
②网络节点由可见单元和隐藏单元共同组成。

这种网络结构的训练非常复杂,因此基于此网络,辛顿等人提出了受限玻尔兹曼机。
2、受限玻尔兹曼机
受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)主要有伯努利-伯努利RBM、伯努利-高斯RBM、高斯-伯努利RBM,本文主要基于伯努利-伯努利RBM,即可观测变量服务伯努利分布,隐变量也服从伯努利分布。
在玻尔兹曼机的基础上,首先玻尔兹曼机增加了限制:层内单元之间无连接。如下图所示:

受限玻尔兹曼机是由可见层和隐藏层构成的两层结构。可见层由可见变量组成,隐藏层由隐藏变量组成。可见层和隐藏层之间相互连接,层内之间无连接。
受限玻尔兹曼机的目的: 通过求取连接权重和偏置项,使得重构的 v ~ \widetilde{v} v 与 v v v误差最小。利用这些连接权重和偏置项我们可以进行分类或者进行生成。
受限玻尔兹曼机的能量函数如下:
E
(
v
,
h
,
θ
)
=
−
∑
i
=
1
n
b
i
v
i
−
∑
j
=
1
m
c
j
h
j
−
∑
i
=
1
n
∑
j
=
1
m
w
i
j
v
i
h
j
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
E(v,h,θ)=−i=1∑nbivi−j=1∑mcjhj−i=1∑nj=1∑mwijvihj
其中,
b
i
b_i
bi是可见变量的偏置,
c
j
c_j
cj是隐藏变量的偏置,
w
i
j
w_{ij}
wij是连接权重,
θ
\theta
θ是表示所有连接权重和偏置的参数集合。状态
(
v
,
h
)
(\red{v},h)
(v,h)的联合概率分布如下所示:
p
(
v
,
h
∣
θ
)
=
1
Z
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
Z
=
∑
v
,
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
p(\red{v},h|\theta)=\frac{1}{Z}exp\{-E(\red{v},h,\theta)\} \\ Z=\sum_{v,h}exp\{-E(v,h,\theta)\}
p(v,h∣θ)=Z1exp{−E(v,h,θ)}Z=v,h∑exp{−E(v,h,θ)}
注意:标红的
v
\red{v}
v表示是某一个
v
v
v,而
Z
Z
Z中未标红的
v
v
v表示随机变量,不是某个固定值。
其对数似然函数为(关于此似然函数的原因,参见深度学习读书笔记之RBM(限制波尔兹曼机)1.3.2 从概率到极大似然):
l
o
g
L
(
θ
∣
v
)
=
l
o
g
1
Z
∑
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
=
l
o
g
∑
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
−
l
o
g
∑
v
,
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
\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}
logL(θ∣v)==logZ1∑hexp{−E(v,h,θ)}log∑hexp{−E(v,h,θ)}−log∑v,hexp{−E(v,h,θ)}
上述似然函数对
θ
\theta
θ求导计算梯度,过程如下:
∂
l
o
g
L
(
θ
∣
v
)
∂
θ
=
∂
(
l
o
g
∑
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
)
∂
θ
−
∂
(
l
o
g
∑
v
,
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
)
∂
θ
=
−
1
∑
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
∑
h
(
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
∂
E
(
v
,
h
,
θ
)
∂
θ
)
+
1
∑
v
,
h
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
∑
v
,
h
(
e
x
p
{
−
E
(
v
,
h
,
θ
)
}
∂
E
(
v
,
h
,
θ
)
∂
θ
)
=
−
∑
h
(
p
(
h
∣
v
)
∂
E
(
v
,
h
,
θ
)
∂
θ
)
+
∑
v
,
h
(
p
(
v
,
h
)
∂
E
(
v
,
h
,
θ
)
∂
θ
)
\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}
∂θ∂logL(θ∣v)==+=∂θ∂(log∑hexp{−E(v,h,θ)})−∂θ∂(log∑v,hexp{−E(v,h,θ)})−∑hexp{−E(v,h,θ)}1∑h(exp{−E(v,h,θ)}∂θ∂E(v,h,θ))∑v,hexp{−E(v,h,θ)}1∑v,h(exp{−E(v,h,θ)}∂θ∂E(v,h,θ))−∑h(p(h∣v)∂θ∂E(v,h,θ))+∑v,h(p(v,h)∂θ∂E(v,h,θ))
上式中,
θ
\theta
θ可以取
w
i
j
w_{ij}
wij、
b
i
b_i
bi和
c
j
c_j
cj,分别计算梯度如下:
(1)求对 w i j w_{ij} wij的梯度
∂
l
o
g
L
(
θ
∣
v
)
∂
w
i
j
=
−
∑
h
(
p
(
h
∣
v
)
∂
E
(
v
,
h
,
θ
)
∂
w
i
j
)
+
∑
v
,
h
p
(
v
,
h
)
(
∂
E
(
v
,
h
,
θ
)
∂
w
i
j
)
=
∑
h
j
(
p
(
h
j
∣
v
)
v
i
h
j
)
−
∑
v
i
,
h
j
p
(
v
i
,
h
j
)
v
i
h
j
=
∑
h
j
(
p
(
h
j
∣
v
)
v
i
h
j
)
−
∑
v
i
(
p
(
v
i
)
∑
h
j
p
(
h
j
∣
v
i
)
v
i
h
j
)
=
p
(
h
j
=
0
∣
v
)
v
i
⋅
0
+
p
(
h
j
=
1
∣
v
)
v
i
⋅
1
−
(
∑
v
i
p
(
v
i
)
p
(
h
j
=
0
∣
v
i
)
v
i
⋅
0
+
∑
v
i
p
(
v
i
)
p
(
h
j
=
1
∣
v
i
)
v
i
⋅
1
)
=
p
(
h
j
=
1
∣
v
)
v
i
−
∑
v
i
(
p
(
v
i
)
p
(
h
j
=
1
∣
v
i
)
v
i
)
\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}
∂wij∂logL(θ∣v)====−=−∑h(p(h∣v)∂wij∂E(v,h,θ))+∑v,hp(v,h)(∂wij∂E(v,h,θ))∑hj(p(hj∣v)vihj)−∑vi,hjp(vi,hj)vihj∑hj(p(hj∣v)vihj)−∑vi(p(vi)∑hjp(hj∣vi)vihj)p(hj=0∣v)vi⋅0+p(hj=1∣v)vi⋅1(∑vip(vi)p(hj=0∣vi)vi⋅0+∑vip(vi)p(hj=1∣vi)vi⋅1)p(hj=1∣v)vi−∑vi(p(vi)p(hj=1∣vi)vi)
注意: 在这里,因为求的是
w
i
j
w_{ij}
wij的梯度,因此求导之后参考其中的只有
h
j
h_j
hj和
v
i
v_i
vi。
(2)求对 b i b_{i} bi的梯度
∂
l
o
g
L
(
θ
∣
v
)
∂
b
i
=
−
∑
h
(
p
(
h
∣
v
)
∂
E
(
v
,
h
,
θ
)
∂
b
i
)
+
∑
v
,
h
p
(
v
,
h
)
(
∂
E
(
v
,
h
,
θ
)
∂
b
i
)
=
∑
h
(
p
(
h
∣
v
)
v
i
)
−
∑
v
i
,
h
p
(
v
i
,
h
)
v
i
=
∑
h
(
p
(
h
∣
v
)
v
i
)
−
∑
v
i
(
p
(
v
i
)
∑
h
p
(
h
∣
v
i
)
v
i
)
=
v
i
−
∑
v
i
(
p
(
v
i
)
v
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}
∂bi∂logL(θ∣v)====−∑h(p(h∣v)∂bi∂E(v,h,θ))+∑v,hp(v,h)(∂bi∂E(v,h,θ))∑h(p(h∣v)vi)−∑vi,hp(vi,h)vi∑h(p(h∣v)vi)−∑vi(p(vi)∑hp(h∣vi)vi)vi−∑vi(p(vi)vi)
注意:
∑
h
p
(
h
∣
v
i
)
=
1
\sum_{h}p(h|v_i) = 1
∑hp(h∣vi)=1,注意区分
∑
v
p
(
h
∣
v
)
=
p
(
h
)
\sum_{v}p(h|v) = p(h)
∑vp(h∣v)=p(h)。
(3)求对 c j c_{j} cj的梯度
∂ l o g L ( θ ∣ v ) ∂ c j = − ∑ h ( p ( h ∣ v ) ∂ E ( v , h , θ ) ∂ c j ) + ∑ v , h p ( v , h ) ( ∂ E ( v , h , θ ) ∂ c j ) = ∑ h j ( p ( h j ∣ v ) h j ) − ∑ v , h j p ( v , h j ) h j = ∑ h j ( p ( h j ∣ v ) h j ) − ∑ v ( p ( v ) ∑ h j p ( h j ∣ v ) h j ) = p ( h j = 0 ∣ v ) ⋅ 0 + p ( h j = 1 ∣ v ) ⋅ 1 − ( ∑ v p ( v ) p ( h j = 0 ∣ v ) ⋅ 0 + ∑ v p ( v ) p ( h j = 1 ∣ v ) ⋅ 1 ) = p ( h j = 1 ∣ v ) − ∑ v ( p ( v ) p ( h j = 1 ∣ v ) ) \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} ∂cj∂logL(θ∣v)====−=−∑h(p(h∣v)∂cj∂E(v,h,θ))+∑v,hp(v,h)(∂cj∂E(v,h,θ))∑hj(p(hj∣v)hj)−∑v,hjp(v,hj)hj∑hj(p(hj∣v)hj)−∑v(p(v)∑hjp(hj∣v)hj)p(hj=0∣v)⋅0+p(hj=1∣v)⋅1(∑vp(v)p(hj=0∣v)⋅0+∑vp(v)p(hj=1∣v)⋅1)p(hj=1∣v)−∑v(p(v)p(hj=1∣v))
(4)更新方程
对
w
i
j
w_{ij}
wij、
b
i
b_i
bi和
c
j
c_j
cj求完梯度之后,可以按照如下方程更新参数:
w
i
j
←
w
i
j
−
∂
(
l
o
g
L
(
θ
∣
v
)
)
∂
w
i
j
b
i
←
b
i
−
∂
(
l
o
g
L
(
θ
∣
v
)
)
∂
b
i
c
j
←
c
j
−
∂
(
l
o
g
L
(
θ
∣
v
)
)
∂
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}
wijbicj←←←wij−∂wij∂(logL(θ∣v))bi−∂bi∂(logL(θ∣v))cj−∂cj∂(logL(θ∣v))
迭代更新即可。
3、求解存在的问题
受限玻尔兹曼机也存在效率的问题,上述公式可以看到, ∑ v p ( v ) \sum_{v}p(v) ∑vp(v)是需要计算的,而这个式子的计算需要所有可见变量的模式之和,其复杂度为 O ( 2 n v + n h ) O(2^{n_v+n_h}) O(2nv+nh),这会使得效率非常低。因此可以使用Gibbs采样和CD对比散度算法来求解。
二、受限玻尔兹曼机的求解
在给定一个训练样本后,训练一个RBM的意义在于调整模型的参数,以拟合给定的训练样本,使得在该参数下RBM表示的可见层节点概率分布尽可能的与训练数据相符合。我们可以采用Gibbs采样或者CD算法求解参数,CD算法的效率更高。
Gibbs采样求解和CD算法求解都是近似求解模型,我们希望
p
(
v
)
=
p
t
r
a
i
n
(
v
)
p(v)=p_{train}(v)
p(v)=ptrain(v)(数据的真实、底层分布)。所以我们通过近似算法, 迭若干次之后,使得马尔科夫链拟合最终的
v
v
v的分布。
1、Gibbs采样
我们希望
p
(
v
)
=
p
t
r
a
i
n
(
v
)
p(v)=p_{train}(v)
p(v)=ptrain(v)(数据的真实、底层分布),所以我们可以使用Gibss采样去收敛这个最终的分布
p
p
p。
Gibbs采样的思想是虽然我们不知道样本数据
v
1
,
v
2
,
.
.
.
,
v
n
v
v_1,v_2,...,v_{n_v}
v1,v2,...,vnv的联合概率,但是我们知道样本的条件概率
p
(
v
i
∣
v
−
i
)
p(v_i|v_{-i})
p(vi∣v−i),则我们可以先求出每个数据的条件概率值,得到
v
v
v的任一状态
[
v
1
(
0
)
,
v
2
(
0
)
,
.
.
.
,
v
n
v
(
0
)
]
[v_1(0), v_2(0), ..., v_{n_v}(0)]
[v1(0),v2(0),...,vnv(0)],然后,用条件概率公式迭代对每一个数据求条件概率。最终,迭代
k
k
k次的时候,
v
v
v的某一个状态
[
v
1
(
k
)
,
v
2
(
k
)
,
.
.
.
,
v
n
v
(
k
)
]
[v_1(k), v_2(k), ..., v_{n_v}(k)]
[v1(k),v2(k),...,vnv(k)]将收敛于
v
v
v的联合概率分布
p
(
v
)
p(v)
p(v),其过程图如下(图片来自参考博客):

求解过程是: 假设给我一个训练样本
v
0
v_0
v0,根据公式
P
(
h
j
=
1
∣
v
)
P(h_j=1|v)
P(hj=1∣v)求
h
0
h_0
h0中每一个节点的条件概率,再根据公式
p
(
v
i
=
1
∣
h
)
p(v_i=1|h)
p(vi=1∣h)求
v
1
v_1
v1中每个节点的条件概率,然后依次迭代,直到K步,此时
p
(
v
∣
h
)
p(v|h)
p(v∣h)的概率收敛于
p
(
v
)
p(v)
p(v)的概率。
h
0
∼
p
(
h
∣
v
0
)
v
1
∼
p
(
v
∣
h
0
)
h
1
∼
p
(
h
∣
v
1
)
v
2
∼
p
(
v
∣
h
1
)
.
.
.
v
k
+
1
∼
p
(
v
∣
h
k
)
\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}
h0∼p(h∣v0)v1∼p(v∣h0)h1∼p(h∣v1)v2∼p(v∣h1)...vk+1∼p(v∣hk)
2、CD对比散度算法
上述使用Gibbs采样虽然已经相比较BP算法来说,代价减少了很多,但是Gibbs采样需要不断迭代直到收敛到平稳分布,所以迭代过程需要多次。基于此,hinton提出了对比散度算法,对比散度算法和Gibbs采样的区别在于:Gibbs采样 p ( h ∣ v ) p(h|v) p(h∣v)中 v v v的初始化是随机初始化,但是CD算法中 v v v初始化为训练样本,其余和Gibbs采样相同。实验证明,CD算法只要迭代1次就可以有很好的效果。
(1)CD算法的算法流程图
(图片来源:受限玻尔兹曼机(RBM)+对比散度算法(CD-k))

这是CD-1的算法流程,CD-k算法便是k次CD-1算法的迭代。
(2)条件分布 P ( h ∣ v ) P(h|v) P(h∣v)和 P ( v ∣ h ) P(v|h) P(v∣h)
因为在CD算法中需要求
p
(
h
j
=
1
∣
v
)
p(h_j=1|v)
p(hj=1∣v)的取值,所以我们先来看看它的公式是什么。
CD算法的能量函数为:
E
(
v
,
h
,
θ
)
=
−
∑
i
=
1
n
b
i
v
i
−
∑
j
=
1
m
c
j
h
j
−
∑
i
=
1
n
∑
j
=
1
m
w
i
j
v
i
h
j
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
E(v,h,θ)=−i=1∑nbivi−j=1∑mcjhj−i=1∑nj=1∑mwijvihj
因此,定义给定
v
,
h
v,h
v,h情况下RBM的状态概率分布为:
P
(
v
,
h
)
=
1
Z
e
−
E
(
v
,
h
)
Z
=
∑
v
,
h
e
−
E
(
v
,
h
)
\begin{array}{lcl} P(v,h) = \frac{1}{Z}e^{-E(v,h)} \\ Z = \sum_{v,h}e^{-E(v,h)} \end{array}
P(v,h)=Z1e−E(v,h)Z=∑v,he−E(v,h)
有了概率分布,我们来看条件分布
P
(
h
∣
v
)
P(h|v)
P(h∣v):
P
(
h
∣
v
)
=
P
(
h
,
v
)
P
(
v
)
=
1
P
(
v
)
1
Z
e
x
p
{
∑
i
=
1
n
b
i
v
i
+
∑
j
=
1
m
c
j
h
j
+
∑
i
=
1
n
∑
j
=
1
m
w
i
j
v
i
h
j
}
=
1
Z
′
e
x
p
{
∑
j
=
1
m
c
j
h
j
+
∑
i
=
1
n
∑
j
=
1
m
w
i
j
v
i
h
j
}
=
1
Z
′
∏
j
=
1
n
h
e
x
p
{
c
j
h
j
+
w
i
j
v
i
h
j
}
\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}
P(h∣v)====P(v)P(h,v)P(v)1Z1exp{∑i=1nbivi+∑j=1mcjhj+∑i=1n∑j=1mwijvihj}Z′1exp{∑j=1mcjhj+∑i=1n∑j=1mwijvihj}Z′1∏j=1nhexp{cjhj+wijvihj}
其中,
Z
′
{{Z}'}
Z′为新的归一化常数:
1
Z
′
=
1
P
(
v
)
1
Z
e
x
p
{
∑
i
=
1
n
b
i
v
i
}
\frac{1}{{Z}'} = \frac{1}{P(v)}\frac{1}{Z}exp\{\sum_{i=1}^nb_iv_i\}
Z′1=P(v)1Z1exp{i=1∑nbivi}
下面以同样的方式求条件分布
P
(
v
∣
h
)
P(v|h)
P(v∣h)。
能量模型基于条件分布的激活函数如下,我们以
P
(
h
j
=
1
∣
v
)
P(h_j=1|v)
P(hj=1∣v)为例推导如下:
P
(
h
j
=
1
∣
v
)
=
P
(
h
j
=
1
∣
v
)
P
(
h
j
=
0
∣
v
)
+
P
(
h
j
=
1
∣
v
)
=
e
x
p
{
c
j
+
w
i
j
v
i
}
1
+
e
x
p
{
c
j
+
w
i
j
v
i
}
=
1
1
+
e
x
p
{
−
(
c
j
+
w
i
j
v
i
)
}
=
σ
(
c
j
+
w
i
j
v
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(hj=1∣v)====P(hj=0∣v)+P(hj=1∣v)P(hj=1∣v)1+exp{cj+wijvi}exp{cj+wijvi}1+exp{−(cj+wijvi)}1σ(cj+wijvi)
因此,
P
(
h
j
=
1
∣
v
)
P(h_j=1|v)
P(hj=1∣v)实际上就就是sigmoid激活函数,同理,
P
(
v
j
=
1
∣
h
)
P(v_j=1|h)
P(vj=1∣h)也是sigmoid激活函数,其公式如下:
P
(
v
i
=
1
∣
h
)
=
σ
(
b
i
+
w
i
j
h
i
)
P(v_i=1|h) = \sigma (b_i +w_{ij}h_i)
P(vi=1∣h)=σ(bi+wijhi)
有了激活函数,我们就可以从可见层和参数推导出隐藏层的神经元的取值概率了。
(3)CD算法求解举例
如下图所示(图片来自图解深度学习),我们以此为例讲解对比散度算法(Contrastive Divergence,CD)的过程。
如何判断值为0还是1:若根据上面的公式求出 P ( h j = 1 ∣ v ) = 0.7 P(h_j=1|v)=0.7 P(hj=1∣v)=0.7,现在我们取一个0~1之间的随机数,如果随机数小于0.7,则我们认为 h j = 1 h_j=1 hj=1(条件概率求出 h j = 1 h_j=1 hj=1的概率是0.7,随机数小于0.7的概率也是0.7),否则 h j = 0 h_j=0 hj=0。

(A)如上图(a)所示, v 1 ( 0 ) , v 2 ( 0 ) , v i ( 0 ) , v n ( 0 ) v_1^{(0)}, v_2^{(0)},v_i^{(0)},v_n^{(0)} v1(0),v2(0),vi(0),vn(0)的取值分别为 1 , 0 , 1 , 1 1, 0, 1, 1 1,0,1,1。
(B) 我们根据公式 P ( h j = 1 ∣ v ) = σ ( c j + w i j v i ) P(h_j=1|v)= \sigma (c_j +w_{ij}v_i) P(hj=1∣v)=σ(cj+wijvi)可以求出 h 1 ( 0 ) , h j ( 0 ) , h m ( 0 ) h_1^{(0)},h_j^{(0)},h_m^{(0)} h1(0),hj(0),hm(0)的概率分别为 0.8 , 0.5 , 0.9 0.8,0.5,0.9 0.8,0.5,0.9。
(C ) h 1 ( 0 ) , h j ( 0 ) , h m ( 0 ) h_1^{(0)},h_j^{(0)},h_m^{(0)} h1(0),hj(0),hm(0)的概率分别为 0.8 , 0.5 , 0.9 0.8,0.5,0.9 0.8,0.5,0.9,根据上述判断结果是0还是1的方法, h 1 ( 0 ) , h j ( 0 ) , h m ( 0 ) h_1^{(0)},h_j^{(0)},h_m^{(0)} h1(0),hj(0),hm(0)的取值分别为 0 , 1 , 1 0,1,1 0,1,1。
(D) h 1 ( 0 ) , h j ( 0 ) , h m ( 0 ) h_1^{(0)},h_j^{(0)},h_m^{(0)} h1(0),hj(0),hm(0)的取值分别为 0 , 1 , 1 0,1,1 0,1,1,根据 P ( v i = 1 ∣ h ) = σ ( b i + w i j h i ) P(v_i=1|h) = \sigma (b_i +w_{ij}h_i) P(vi=1∣h)=σ(bi+wijhi)我们求得 v 1 ( 1 ) , v 2 ( 1 ) , v i ( 1 ) , v n ( 1 ) v_1^{(1)}, v_2^{(1)},v_i^{(1)},v_n^{(1)} v1(1),v2(1),vi(1),vn(1)的概率分别为 0.7 , 0.2 , 0.8 , 0.6 0.7, 0.2, 0.8, 0.6 0.7,0.2,0.8,0.6。
(E) v 1 ( 1 ) , v 2 ( 1 ) , v i ( 1 ) , v n ( 1 ) v_1^{(1)}, v_2^{(1)},v_i^{(1)},v_n^{(1)} v1(1),v2(1),vi(1),vn(1)的概率分别为 0.7 , 0.2 , 0.8 , 0.6 0.7, 0.2, 0.8, 0.6 0.7,0.2,0.8,0.6,根据上述判断结果是0还是1的方法, v 1 ( 1 ) , v 2 ( 1 ) , v i ( 1 ) , v n ( 1 ) v_1^{(1)},v_2^{(1)},v_i^{(1)},v_n^{(1)} v1(1),v2(1),vi(1),vn(1)的取值分别为 1 , 1 , 0 , 1 1,1, 0, 1 1,1,0,1。
(F)梯度的更新公式为:
w
i
j
←
w
i
j
+
η
[
p
(
h
j
(
0
)
=
1
∣
v
(
0
)
)
v
i
(
0
)
−
p
(
h
j
(
1
)
=
1
∣
v
(
1
)
)
v
i
(
1
)
]
b
i
←
b
i
+
η
(
v
i
(
0
)
−
v
i
(
1
)
)
c
j
←
c
j
+
η
[
p
(
h
j
(
0
)
=
1
∣
v
(
0
)
)
−
p
(
h
j
(
1
)
=
1
∣
v
(
1
)
)
]
\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}
wij←wij+η[p(hj(0)=1∣v(0))vi(0)−p(hj(1)=1∣v(1))vi(1)]bi←bi+η(vi(0)−vi(1))cj←cj+η[p(hj(0)=1∣v(0))−p(hj(1)=1∣v(1))]
三、深度信念网络
深度信念网络(Deep Belief Network, DBN)是由受限玻尔兹曼机堆叠而成,深度信念网络和其他神经网络的不同是:
1)神经网络的权重是先使用前向传播求得网络目标结果,再根据反向传播算法,把误差传播到下一层,调整所有的连接权重和偏置。
2)深度信念网络是逐层来调整连接权重和偏置项。具体做法是受限调整输入层和隐藏层之间的参数,把训练后得到的参数作为下一层的输入,再调整该层与下一个隐藏层之间的参数。不断迭代。
下图是DBN的示意图(图片来源:Deep Belief Networks (DBNs)):

四、应用
1、预训练
在预训练任务中,可以使用DBM逐层训练参数,因此当做其他任务的参数初始化结果。
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)学习笔记(六)对比散度算法