受限玻尔兹曼机起源于图模型的神经网络。这种神经网络是由 Hopfield \text{Hopfield} Hopfield神经网络那样的相互连接型网络衍生而来的。本部分首先介绍 Hopfield \text{Hopfield} Hopfield神经网络和玻尔兹曼机,然后介绍受限玻尔兹曼机,最后介绍由多个受限玻尔兹曼机堆叠组成的深度信念网络。
Hopfield \text{Hopfield} Hopfield神经网络
神经网络可分为两大类:一类是之前的多层神经网络,另一类是如下图所示的相互连接型网络。相互连接型网络不分层,单元之间相互连接。它能够根据单元的值记忆网络状态,这称为联想记忆。
霍普费尔德于1982年提出的神经网络是最典型的相互连接型网络,它具有以下优点:
Hopfield \text{Hopfield} Hopfield神经网络是由 n n n个二值单元组成的二值神经网络,每个单元 i ( i = 1 , 2 , ⋯   , n ) i(i=1,2, \cdots, n) i(i=1,2,⋯,n) 的输出只能是 0 0 0或 1 1 1两个值,故而网络有 2 n 2^n 2n种状态。联想记忆就是当输入模式为某种状态时,输出端要给出与之相应的输出模式 y y y 。如果输入模式于输出模式一致,就称为自联想记忆,否则称为异联想记忆。
自联想记忆
设有由个单元组成的 Hopfield \text{Hopfield} Hopfield神经网络,第 i i i个单元在 t    ( t = 0 , 1 , 2 , ⋯   ) t\;(t=0,1,2, \cdots ) t(t=0,1,2,⋯)时刻的输入记作 u i ( t ) u_{i}(t) ui(t),输出记作 x i ( t ) x_{i}(t) xi(t),连接权重为 w i j w_{i j} wij,阈值为 b i ( t ) b_{i}(t) bi(t),则 t + 1 t+1 t+1时刻单元的输出 x i ( t + 1 ) x_{i}(t+1) xi(t+1)可用下式表示。 x i ( t + 1 ) = { 1 u i ( t ) > 0 x i ( t ) u i ( t ) = 0 ( 1 ) 0 u i ( t ) < 0 x_{i}(t+1)=\left\{\begin{array}{ll}{1} & {u_{i}(t)>0} \\ {x_{i}(t)} & {u_{i}(t)=0}\qquad(1) \\ {0} & {u_{i}(t)<0}\end{array}\right. xi(t+1)=⎩⎨⎧1xi(t)0ui(t)>0ui(t)=0(1)ui(t)<0 u i ( t ) = ∑ j = 1 n w i j x j ( t ) − b i ( t ) ( 2 ) u_{i}(t)=\sum_{j=1}^{n} w_{i j} x_{j}(t)-b_{i}(t) \qquad(2) ui(t)=j=1∑nwijxj(t)−bi(t)(2)如果单元接收的来自其他单元的输 x j ( t ) x_{j}(t) xj(t)入的权重总和 ∑ j = 1 n w i j x j ( t ) \sum_{j=1}^{n} w_{i j} x_{j}(t) ∑j=1nwijxj(t)大于阈值 b i ( t ) b_{i}(t) bi(t),则单元的输出就取值为 1 1 1。如果小于阈值 b i ( t ) b_{i}(t) bi(t),则单元的输出就取值为 0 0 0。
在 Hopfield \text{Hopfield} Hopfield神经网络中,每个时刻都只有一个随机选择的单元会发生状态变化。对于一个由 n n n个单元组成的网络,如果要完成全部单元的状态变化,至少需要 n n n个时刻。实际上,单元的状态变化会一直进行下去,直到网络达到稳定状态。各单元的最终状态就是输出模式 y y y。
根据输入模式联想输出模式时,需要事先确定连接权重 w i j w_{i j} wij。而连接权重 w i j w_{i j} wij要对输入模式的训练样本进行训练后才能确定。和神经网络一样,一次训练并不能确定连接权重,而是要不断重复这个训练过程,直到满足终止判断条件。而这个满足条件的指标就是表示 Hopfield \text{Hopfield} Hopfield神经网络状态的能量函数 E E E,其定义如下: E = − 1 2 ∑ i = 1 n ∑ j = 1 n w i j x i x j + ∑ i = 1 n b i x i ( 3 ) E=-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} w_{i j} x_{i} x_{j}+\sum_{i=1}^{n} b_{i} x_{i} \qquad(3) E=−21i=1∑nj=1∑nwijxixj+i=1∑nbixi(3)
当输入模式与输出模式一致时,能力函数 E E E的结果为 0 0 0。
根据公式 ( 1 ) (1) (1)和 ( 2 ) (2) (2)中定义的状态变化规则改变网络状态时,公式 ( 3 ) (3) (3)中定义的能力函数 E E E总是非递增的,即随时间的不断增加而逐渐减小,直到网络达到稳定状态。
下面证明能力函数的这种性质,即随时间的不断增加而逐渐减小,将公式 ( 3 ) (3) (3)的能量函数分解成单元 k k k的能量函数和 k k k以外的单元的能量函数,这样公式 ( 3 ) (3) (3)可表示如下: E = − 1 2 ∑ i ≠ k n ∑ j ≠ k n w i j x i x j − ∑ i ≠ k n b i x i − 1 2 ( ∑ j n w k j x j + ∑ i n w i k x i ) x k + b k x k ( 4 ) \begin{aligned} E=&-\frac{1}{2} \sum_{i \neq k}^{n} \sum_{j \neq k}^{n} w_{i j} x_{i} x_{j}-\sum_{i \neq k}^{n} b_{i} x_{i} \\ &-\frac{1}{2}\left(\sum_{j}^{n} w_{k j} x_{j}+\sum_{i}^{n} w_{i k} x_{i}\right) x_{k}+b_{k} x_{k} \qquad(4)\end{aligned} E=−21i̸=k∑nj̸=k∑nwijxixj−i̸=k∑nbixi−21(j∑nwkjxj+i∑nwikxi)xk+bkxk(4)
从 t t t时刻至 t + 1 t+1 t+1时刻,单元 k k k的输出值变化如下: x k ( t ) → x k ( t + 1 ) ( 5 ) x_{k}(t) \rightarrow x_{k}(t+1) \qquad(5) xk(t)→xk(t+1)(5)此时, Δ x k = x k ( t + 1 ) − x k ( t ) \Delta x_{k}=x_{k}(t+1)-x_{k}(t) Δxk=xk(t+1)−xk(t)的结果会变为 1 1 1或 − 1 -1 −1。
由于 Hopfield \text{Hopfield} Hopfield神经网络采用随机异步更新方式,所以除单元 k k k以外,其他单元的状态不发生变化。同时 Hopfield \text{Hopfield} Hopfield神经网络为对称网络, w i j = w j i w_{i j}=w_{j i} wij=wji,故于单元 k k k的状态变化量 Δ x k \Delta x_{k} Δxk相应的能量函数变化量 Δ E k \Delta E_{k} ΔEk如下所示: Δ E k = − 1 2 ( ∑ j = 1 n w k j x j + ∑ i = 1 n w i k x i ) Δ x k + b k Δ x k = − ( ∑ j = 1 n w k j x j − b k ) Δ x k ( 6 ) \begin{aligned} \Delta E_{k} &=-\frac{1}{2}\left(\sum_{j=1}^{n} w_{k j} x_{j}+\sum_{i=1}^{n} w_{i k} x_{i}\right) \Delta x_{k}+b_{k} \Delta x_{k} \\ &=-\left(\sum_{j=1}^{n} w_{k j} x_{j}-b_{k}\right) \Delta x_{k} \qquad(6)\end{aligned} ΔEk=−21(j=1∑nwkjxj+i=1∑nwikxi)Δxk+bkΔxk=−(j=1∑nwkjxj−bk)Δxk(6) 用 u k u_{k} uk表示公式 ( 6 ) (6) (6)中最终结果括号内的内容,则可得到下式。 Δ E k = − u k Δ x k ( 7 ) \Delta E_{k}=-u_{k} \Delta x_{k} \qquad(7) ΔEk=−ukΔxk(7)根据公式 ( 1 ) (1) (1)中定义的状态变化规则,当 Δ x k > 0 \Delta x_{k}>0 Δxk>0时, x k x_{k} xk的值从 0 0 0变为 1 1 1,即如果 u k > 0 u_{k}>0 uk>0,则 Δ E k < 0 \Delta E_{k}<0 ΔEk<0,当 Δ x k < 0 \Delta x_{k}<0 Δxk<0时, x k x_{k} xk的值从 1 1 1变为 0 0 0,这时由于 u k < 0 u_{k}<0 uk<0,则 Δ E k < 0 \Delta E_{k}<0 ΔEk<0。另外,当 Δ x k = 0 \Delta x_{k}=0 Δxk=0时, Δ E k = 0 \Delta E_{k}=0 ΔEk=0,因此任何情况下,下式都成立 Δ E k ⩽ 0 ( 8 ) \Delta E_{k} \leqslant 0 \qquad(8) ΔEk⩽0(8)由此可见,随着时间的推移,能量函数 E E E会不断减小。
接下来,我们将 P P P个模式输入到网络中,训练网络的连接权重,以记忆这些模式。模式用 x s = ( x 1 s , x 2 s , ⋯   , x n s ) ( s = 1 , 2 , ⋯   , P ) x^{s}=\left(x_{1}^{s}, x_{2}^{s}, \cdots, x_{n}^{s}\right)(s=1,2, \cdots, P) xs=(x1s,x2s,⋯,xns)(s=1,2,⋯,P)表示。所谓记忆模式 x s x^s xs,就是求与模式对应的能量函数的极小值。阈值为 0 0 0时,与模式 x s x^s xs 对应的能量函数如下所示: E s = 1 2 ∑ i = 1 n ∑ j = 1 n w i j s x i s x j s ( 9 ) E^{s}=\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} w_{i j}^{s} x_{i}^{s} x_{j}^{s}\qquad(9) Es=21i=1∑nj=1∑nwijsxisxjs(9)为了使能量函数收敛于极小值,可以作如下假设: w i j s = x i s x j s ( 10 ) w_{i j}^{s}=x_{i}^{s} x_{j}^{s} \qquad(10) wijs=xisxjs(10)
这样能量函数可以用公式 ( 11 ) (11) (11)这样的相互影响矩阵来表示 E s = − 1 2 ∑ i = 1 n ∑ j = 1 n ( x i s ) 2 ( x j s ) 2 ( 11 ) E^{s}=-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left(x_{i}^{s}\right)^{2}\left(x_{j}^{s}\right)^{2} \qquad(11) Es=−21i=1∑nj=1∑n(xis)2(xjs)2(11)网络需要记忆 P P P个模式,因此所有模式的连接权重如下所示 w i j = 1 P ∑ s = 1 P w i j s = 1 P ∑ s = 1 P x i s x j s ( 12 ) w_{i j}=\frac{1}{P} \sum_{s=1}^{P} w_{i j}^{s}=\frac{1}{P} \sum_{s=1}^{P} x_{i}^{s} x_{j}^{s} \qquad(12) wij=P1s=1∑Pwijs=P1s=1∑Pxisxjs(12)
玻尔兹曼机
如果发生串扰或陷入局部最优解, Hopfield \text{Hopfield} Hopfield神经网络就不能正确地辨别模式。而玻尔兹曼机则可以通过让每个单元按照一定的概率分布发生状态变化,来避免陷入局部最优解。各单元之间的连接权重是对称的,即 w i j = w j i w_{i j}=w_{j i} wij=wji,且没有到自身的连接 ( w i i = 0 ) \left(w_{i i}=0\right) (wii=0)。此外,每个单元的输出要么是 0 0 0,要么是 1 1 1.这些假设与 Hopfield \text{Hopfield} Hopfield神经网络相同,两者最大的区别是, Hopfield \text{Hopfield} Hopfield神经网络的输出是按照某种确定性决定的,而玻尔兹曼机的输出则如下所示,是按照某种概率分布决定的。 { p ( x i = 1 ∣ u i ) = exp ( x k T ) 1 + exp ( x k T ) ( 13 ) p ( x i = 0 ∣ u i ) = 1 1 + exp ( x k T ) \left\{\begin{array}{l}{p\left(x_{i}=1 | u_{i}\right)=\frac{\exp \left(\frac{x}{k T}\right)}{1+\exp \left(\frac{x}{k T}\right)}}\qquad(13) \\ {p\left(x_{i}=0 | u_{i}\right)=\frac{1}{1+\exp \left(\frac{x}{k T}\right)}}\end{array}\right. ⎩⎨⎧p(xi=1∣ui)=1+exp(kTx)exp(kTx)(13)p(xi=0∣ui)=1+exp(kTx)1
T T T表示温度系数 ( > 0 ) (>0) (>0)。如下图所示,随着 k T kT kT值的增大, x i x_i xi等于 1 1 1的概率没有显著变化,相反 k T kT kT值的减小,曲线在 0 0 0附近的斜率急剧增大。当 T T T趋于无穷时,无论 u i u_i ui取值如何, x i x_i xi等于 1 1 1或 0 0 0的概率都分别是 1 2 \frac{1}{2} 21,这种状态称为稳定状态。对于玻尔兹曼机来说,温度系数越大,跳出局部最优解的概率越高。但是温度系数增大时,获得能量函数极小值的概率就会越低,反之温度系数减小时,虽然获得能量函数极小值的概率增加了,但是玻尔兹曼机需要经历较长时间才能达到稳定状态。不过,模拟退火算法能够解决这个问题,这个算法会先采用较大的温度系数进行粗调,然后逐渐减小温度系数进行微调。根据下面的公式,就可以获得温度系数 T T T的极小值。 T = c log ( t + 1 ) ( 14 ) T=\frac{c}{\log (t+1)} \qquad(14) T=log(t+1)c(14)
与 Hopfield \text{Hopfield} Hopfield神经网络一样,玻尔兹曼机也是相互连接型网络。网络中的所有单元都通过连接权重与其他单元相连接,训练过程也和 Hopfield \text{Hopfield} Hopfield神经网络一样,步骤如下所示:
玻尔兹曼机的训练
0. 0. 0.训练准备
初始化连接权重 w i j w_{i j} wij和阈值 b i b_i bi
1. 1. 1.调整参数
首先,使用随机数或相关系数矩阵初始化连接权重。接下来,选取一个单元 i i i,根据公式 ( 2 ) (2) (2)计算该单元的激活值 u i u_i ui。根据公式 ( 1 ) (1) (1)可知,当 u i > 0 u_{i}>0 ui>0时 x i = 1 x_i=1 xi=1,当 u i < 0 u_{i}<0 ui<0时 x i = 1 x_i=1 xi=1,当 u i = 0 u_{i}=0 ui=0时 x i = x i x_i=x_i xi=xi。然后根据 x i x_i xi的值,利用公式 ( 13 ) (13) (13)计算出 x i x_i xi等于 1 1 1或 0 0 0的概率,并根据这个概率调整 x i x_i xi的值。计算公式 ( 13 ) (13) (13)得到的概率,不能直接作为 x i x_i xi的值使用,而应该把这个概率作为出现概率来决定 x i x_i xi的值。在调整连接权重 w i j w_{i j} wij时,按照相同步骤计算单元 j j j的值 x j x_j xj。如果 x i x_i xi和 x j x_j xj两者均为 1 1 1,则增大 w i j w_{i j} wij,并对所有单元迭代实施相同处理。然后,向网络输入任意的训练样本,按照相同步骤计算 x i x_i xi和 x j x_j xj。如果两者均为 1 1 1,则降低 w i j w_{i j} wij,并对所有单元迭代实施相同处理。这两种更新连接权重的处理分别称为训练和遗忘。迭代过程中使用的是模拟退火算法,逐渐减小温度系数 T T T。
下面根据上述训练规则,调整连接权重 w i j w_{i j} wij和偏置 b i b_i bi。这里使用似然函数 L ( θ ) L(\theta) L(θ)导出调整值 L ( θ ) = ∏ n = 1 N p ( x n ∣ θ ) ( 15 ) L(\theta)=\prod_{n=1}^{N} p\left(x_{n} | \theta\right) \qquad(15) L(θ)=n=1∏Np(xn∣θ)(15)这里的 θ \theta θ是一个参数,表示所有的连接权重和偏置。根据公式 ( 15 ) (15) (15)可以计算出所有组合的似然函数。此外,概率分布 p ( x n ∣ θ ) p\left(x_{n} | \theta\right) p(xn∣θ)的定义如下所示。 p ( x n ∣ θ ) = 1 Z ( θ ) exp { − E ( x , θ ) } ( 16 ) p\left(x_{n} | \theta\right)=\frac{1}{Z(\theta)} \exp \{-E(x, \theta)\} \qquad(16) p(xn∣θ)=Z(θ)1exp{−E(x,θ)}(16)公式 ( 16 ) (16) (16)的概率分布就称为玻尔兹曼机。和公式 ( 3 ) (3) (3)一样, E E E表示能量函数。 Z ( θ ) Z(\theta) Z(θ)是归一化常数,能够使所有概率分布的总和等于 1 1 1,可用下式表示: Z ( θ ) = ∑ x exp { − E ( x , θ ) } ( 17 ) Z(\theta)=\sum_{x} \exp \{-E(x, \theta)\} \qquad(17) Z(θ)=x∑exp{−E(x,θ)}(17)玻尔兹曼机引入概率分布后,公式 ( 15 ) (15) (15)的似然函数可以像下面这样转换为对数似然函数。 log L ( θ ) = ∑ n = 1 N log p ( x n ∣ θ ) ( 18 ) \log L(\theta)=\sum_{n=1}^{N} \log p\left(x_{n} | \theta\right) \qquad(18) logL(θ)=n=1∑Nlogp(xn∣θ)(18)当对数似然函数的梯度为 0 0 0时,就可以得到最大似然估计量。而对于对似然函数,通过求连接权重 w i j w_{i j} wij和偏置 b i b_i bi的相关梯度,可以求出调整值。但是,因为似然函数是基于所有单元组合来计算的,所以单元数过多将会导致组合数异常庞大,无法进行实时计算。为了解决这个问题,人们提出了一种近似算法,即对比散度 (Contrastive Divergence,CD) \text{(Contrastive Divergence,CD)} (Contrastive Divergence,CD)算法。
玻尔兹曼机有两种构成形式:第一种全部由可见单元构成;第二种则由可见单元和隐藏单元构成。
隐藏单元与输入数据没有直接联系,但会影响可见单元的概率。假设可见单元为可见变量 v v v、隐藏单元为隐藏变量 h h h。玻尔兹曼机中含有隐藏变量时,概率分布仍然与前面计算的结果相同,所以这并没有解决似然函数中组合数庞大的问题。与不含隐藏变量的情况相比,玻尔兹曼机中增加隐藏变量后,参数量相应增加了一个输入数据维度。因此组合数增加,计算愈发困难。
如下图所示:
受限玻尔兹曼机
含有隐藏变量的玻尔兹曼机的网络训练非常困难。所以辛顿等人在玻尔兹曼机中加入了“层内单元之间无连接”的限制,提出了受限玻尔兹曼机。受限玻尔兹曼机是由可见层和隐藏层构成的两层结构,可见层和隐藏层又分别由可见变量了和隐藏变量构成。可见层与隐藏层之间是相互连接着的,而相同层内单元之间均无连接。受限玻尔兹曼机的能量函数如下所示: 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 ( 19 ) E(v, h, \theta)=-\sum_{i=1}^{n} b_{i} v_{i}-\sum_{j=1}^{m} c_{j} h_{j}-\sum_{i=1}^{n} \sum_{j=1}^{m} w_{i j} v_{i} h_{j} \qquad(19) E(v,h,θ)=−i=1∑nbivi−j=1∑mcjhj−i=1∑nj=1∑mwijvihj(19) b i b_i bi是可见变量的偏置, c j c_j cj是隐藏变量的偏置, w i j w_{ij} wij是连接权重, θ \theta θ是表示所有连接权重和偏置的参数集合。能量函数 E ( v , h , θ ) E(v, h, \theta) E(v,h,θ),可见变量 v i v_i vi和隐藏变量 h j h_j hj的乘积即表示两者之间的相关程度,其与连接权重 w i j w_{ij} wij一致时,能够得到参数的最大似然估计量。状态 ( v , h ) (v, h) (v,h)的联合概率分布如下所示。 p ( v , h ∣ θ ) = 1 Z exp { − E ( v , h , θ ) } ( 20 ) p(v, h | \theta)=\frac{1}{Z} \exp \{-E(v, h, \theta)\} \qquad(20) p(v,h∣θ)=Z1exp{−E(v,h,θ)}(20) Z = ∑ v , h exp { − E ( v , h , θ ) } ( 21 ) Z=\sum_{v, h} \exp \{-E(v, h, \theta)\} \qquad(21) Z=v,h∑exp{−E(v,h,θ)}(21)
在受限玻尔兹曼机的训练过程中,需要计算的参数包括可见变量的 b i b_i bi,隐藏变量的偏置 c j c_j cj,以及连接权重 w i j w_{ij} wij。和玻尔兹曼机一样,计算时也需要使用对数似然函数。 log L ( θ ∣ v ) = log 1 Z ∑ h exp { − E ( v , h , θ ) } = log ∑ h exp { − E ( v , h , θ ) } − log ∑ v , h exp { − E ( v , h , θ ) } ( 22 ) \begin{aligned} \log L(\theta | v) &=\log \frac{1}{Z} \sum_{h} \exp \{-E(v, h, \theta)\} \\ &=\log \sum_{h} \exp \{-E(v, h, \theta)\}-\log \sum_{v, h} \exp \{-E(v, h, \theta)\} \end{aligned} \qquad(22) logL(θ∣v)=logZ1h∑exp{−E(v,h,θ)}=logh∑exp{−E(v,h,θ)}−logv,h∑exp{−E(v,h,θ)}(22)对公式 ( 22 ) (22) (22)求导计算梯度
然后计算连接权重 w i j w_{ij} wij和偏置 b i , c j b_{i}, c_{j} bi,cj。
∂ log L ( θ ∣ v ) ∂ θ = ∂ ∂ θ ( log ∑ h exp ( − E ( v , h , θ ) ) ) − ∂ ∂ θ ( log ∑ v , h exp ( − E ( v , h , θ ) ) ) = − 1 ∑ n exp { − E ( v , h , θ ) } ∑ v , h exp { − E ( v , h , θ ) } ∂ E ( v , h , θ ) ∂ θ + 1 ∑ v , h exp { − E ( v , h , θ ) } ∑ v , h exp { − E ( v , h , θ ) } ∂ E ( v , h , θ ) ∂ θ = − ∑ h p ( v ∣ h ) ∂ E ( v , h , θ ) ∂ θ + ∑ v , h p ( v , h ) ∂ E ( v , h , θ ) ∂ θ ( 23 ) \begin{aligned} \frac{\partial \log L(\theta | v)}{\partial \theta}=& \frac{\partial}{\partial \theta}\left(\log \sum_{h} \exp (-E(v, h, \theta))\right)-\frac{\partial}{\partial \theta}\left(\log \sum_{v, h} \exp (-E(v, h, \theta))\right) \\ =&-\frac{1}{\sum_{n} \exp \{-E(v, h, \theta)\}} \sum_{v, h} \exp \{-E(v, h, \theta)\} \frac{\partial E(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(v | h) \frac{\partial E(v, h, \theta)}{\partial \theta}+\sum_{v, h} p(v, h) \frac{\partial E(v, h, \theta)}{\partial \theta} \qquad(23) \end{aligned} ∂θ∂logL(θ∣v)===∂θ∂(logh∑exp(−E(v,h,θ)))−∂θ∂⎝⎛logv,h∑exp(−E(v,h,θ))⎠⎞−∑nexp{−E(v,h,θ)}1v,h∑exp{−E(v,h,θ)}∂θ∂E(v,h,θ)+∑v,hexp{−E(v,h,θ)}1v,h∑exp{−E(v,h,θ)}∂θ∂E(v,h,θ)−h∑p(v∣h)∂θ∂E(v,h,θ)+v,h∑p(v,h)∂θ∂E(v,h,θ)(23) ∂ log L ( θ ∣ v ) ∂ w i j = − ∑ h p ( v ∣ h ) ∂ E ( v , h , θ ) ∂ w i j + ∑ v , h p ( v , h ) ∂ E ( v , h , θ ) ∂ w i j = ∑ h p ( v ∣ h ) h j v i − ∑ v p ( v ) ∑ h p ( h ∣ v ) h j v i ( 24 ) = p ( H j = 1 ∣ v ) v i − ∑ v p ( v ) p ( H j = 1 ∣ v ) v i \begin{aligned} \frac{\partial \log L(\theta | v)}{\partial w_{i j}} &=-\sum_{h} p(v | h) \frac{\partial E(v, h, \theta)}{\partial w_{i j}}+\sum_{v, h} p(v, h) \frac{\partial E(v, h, \theta)}{\partial w_{i j}} \\ &=\sum_{h} p(v | h) h_{j} v_{i}-\sum_{v} p(v) \sum_{h} p(h | v) h_{j} v_{i} \qquad(24)\\ &=p\left(H_{j}=1 | v\right) v_{i}-\sum_{v} p(v) p\left(H_{j}=1 | v\right) v_{i} \end{aligned} ∂wij∂logL(θ∣v)=−h∑p(v∣h)∂wij∂E(v,h,θ)+v,h∑p(v,h)∂wij∂E(v,h,θ)=h∑p(v∣h)hjvi−v∑p(v)h∑p(h∣v)hjvi(24)=p(Hj=1∣v)vi−v∑p(v)p(Hj=1∣v)vi ∂ log L ( θ ∣ v ) ∂ b i = v i − ∑ v p ( v ) v i ( 25 ) \frac{\partial \log L(\theta | v)}{\partial b_{i}}=v_{i}-\sum_{v} p(v) v_{i} \qquad(25) ∂bi∂logL(θ∣v)=vi−v∑p(v)vi(25) ∂ log L ( θ ∣ v ) ∂ c j = p ( H j = 1 ∣ v ) − ∑ v p ( v ) p ( H j = 1 ∣ v ) ( 26 ) \frac{\partial \log L(\theta | v)}{\partial c_{j}}=p\left(H_{j}=1 | v\right)-\sum_{v} p(v) p\left(H_{j}=1 | v\right) \qquad(26) ∂cj∂logL(θ∣v)=p(Hj=1∣v)−v∑p(v)p(Hj=1∣v)(26) 接下来,各参数形式就可以更新如下。 w i j ← w i j − ∂ log L ( θ ∣ v ) ∂ w i j ( 27 ) w_{i j} \leftarrow w_{i j}-\frac{\partial \log L(\theta | v)}{\partial w_{i j}} \qquad(27) wij←wij−∂wij∂logL(θ∣v)(27) b i ← b i − ∂ log L ( θ ∣ v ) ∂ b i ( 28 ) b_{i} \leftarrow b_{i}-\frac{\partial \log L(\theta | v)}{\partial b_{i}} \qquad(28) bi←bi−∂bi∂logL(θ∣v)(28) c j ← c j − ∂ log L ( θ ∣ v ) ∂ c j ( 29 ) c_{j} \leftarrow c_{j}-\frac{\partial \log L(\theta | v)}{\partial c_{j}} \qquad(29) cj←cj−∂cj∂logL(θ∣v)(29) 然后迭代更新。不过,和玻尔兹曼机一样,受限玻尔兹曼机也同样存在问题。 ∑ v P ( v ) \sum_{v} P(v) ∑vP(v)是所有输入模式的总和,不可避免会产生庞大的计算量。要想解决这个问题,可以使用 Gibbs \text{Gibbs} Gibbs采样 ( Gibbs Sampling ) (\text{Gibbs Sampling}) (Gibbs Sampling)算法进行迭代计算求近似解,但即使这样处理,迭代次数也仍然非常多,于是,人们又提出了对比散度算法这种近似算法。
对比散度算法
对比散度算法也是一种近似算法,能够通过较少的迭代次数求出参数调整值。参数的调整步骤如下所示。
0. 0. 0.训练准备
初始化连接权重 w i j w_{i j} wij和阈值 b i b_i bi
1. 1. 1.调整参数
深度信念网络
深度信念网络由受限玻尔兹曼机通过堆叠组成,与多层神经网络或卷积神经网络最大的区别是网络的训练方法不同。训练神经网络或卷积神经网络时,首先要确定网络结构,根据最顶层的误差调整连接权重和偏置。具体做法是使用误差反向传播算法,把误差反向传播到下一层,调整所有的连接权重和偏置。而深度信念网络则如图所示,是使用对比散度算法,逐层来调整连接权重和偏置的。具体做法是首先训练输入层和隐藏层之间的参数,把训练后得到的参数作为下一层的输入,再调整该层与下一个隐藏层之间的参数。然后逐次迭代,完成多层网络的训练。
深度信念网络既可以当作生成模型来使用,也可以当作判别模型来使用。作为生成模型使用时,网络会按照某种概率分布生成训练数据。概率分布可根据训练样本导,但是覆盖全部数据模式的概率分布很难导出。所以,这里使用最大似然估计法训练参数,得到最能覆盖训练样本的概率分布。这种生成模型能够去除输入数据中含有的噪声,得到新的数据,也能够进行输入数据压缩和特征表达。而作为判别模型使用时,需要在模型顶层添加一层来达到分类的功能。就像手写字符识别那样,判别模型能够对输入数据进行分类。受限玻尔兹曼机不能单独作为判别模型使用,必须在顶层增加特殊的层才能进行数据分类。
设深度信念网络的各层为 l = 0 , 1 , ⋯   , L l=0,1, \cdots, L l=0,1,⋯,L,可见层为 v ( 0 ) v(0) v(0),隐藏层的单元为 h ( l ) h^{(l)} h(l)。各层的条件概率分布如下所示。 p ( h ( l ) ∣ h ( l − 1 ) ) = ( ∏ i f ( b i ( l ) + ∑ j w i j ( l − 1 ) h j ( l − 1 ) ) ) p\left(h^{(l)} | h^{(l-1)}\right)=\left(\prod_{i} f\left(b_{i}^{(l)}+\sum_{j} w_{i j}^{(l-1)} h_{j}^{(l-1)}\right)\right) p(h(l)∣h(l−1))=(i∏f(bi(l)+j∑wij(l−1)hj(l−1)))隐藏层中一个单元的条件概率分布如下所示。
p ( h j ( 1 ) ∣ h ( l − 1 ) ) = f ( b i ( l ) + ∑ j w i j ( l − 1 ) h j ( l − 1 ) ) p\left(h_{j}^{(1)} | h^{(l-1)}\right)=f\left(b_{i}^{(l)}+\sum_{j} w_{i j}^{(l-1)} h_{j}^{(l-1)}\right) p(hj(1)∣h(l−1))=f(bi(l)+j∑wij(l−1)hj(l−1))利用上式,设 h ( 0 ) = v h^{(0)}=v h(0)=v,迭代调整各层的参数。
玻尔兹曼机起源于 Hopfield \text{Hopfield} Hopfield神经网络这种相互连接型神经网络,在此基础上人们又提出了受限玻尔兹曼机。深度学习之所以变得如此流行,受限玻尔兹曼机功不可没,堆叠式的想法也由此诞生。虽然当前的主流技术是卷积神经网络和自编码器,但是受限玻尔兹曼机可用于卷积神经网络的预训练等,因此仍然是一项非常重要的技术。
《图解深度学习》 山下隆义著 张弥译