受限玻耳兹曼机的学习就是对模型参数集θ进行计算,常用的方法是最大似然估计,其基本思想在于采用梯度上升算法最大化总体对数似然函数。在给定可视向量训练集s={v(l),1≤l≤n}时,受限玻耳兹曼机的对数似然函数定义为
由于
所以,受限玻耳兹曼机的对数似然梯度为
其中,ep(•)表示求关于分布p的数学期望,p(hv(l),θ)表示在可视向量为v(l)时,隐含向量的条件概率分布。
根据公式(3.13)可得对数似然梯度关于各个参数的偏导为
显然,直接利用公式(3.14)~公式(3.16)计算上述偏导值的效率是非常低的,因为在计算ep(v,h|θ)[hivj]、ep(v,h|θ)[vj]和ep(v,h|θ)[hi]的期望值时,需要进行具有指数复杂度的求和运算。
为了快速计算受限玻耳兹曼机的对数似然梯度,可以采用一类称为对比散度(contrastive divergence,cd)的近似算法[146,147]。其中常用的是k步对比散度算法(kstep contrastive divergence,cdk),详见算法3.1。注意,算法3.1并未加入学习率等预设参数,与网上下载的实现代码可能略有不同。
算法3.1k步对比散度(cd-k)
不难看出,cdk算法的核心是一种特殊的吉布斯采样,称为交错吉布斯采样(alternating gibbs sampling)或者分块吉布斯采样(blocked gibbs sampling)[145],如图3.3所示。吉布斯采样是一种mcmc算法,在直接采样困难的情况下,可以用来生成一个吉布斯蒙特卡罗马尔可夫链或吉布斯链[148,149],用以近似一个给定多变量分布的样本。交错吉布斯采样主要包括下面两个关键步骤:

1)令t=0,用可视向量的训练样本v(l)初始化吉布斯链,得到g(t)=(g(t)1,g(t)2,…,g(t)m)t=v(l)。
2)通过迭代依次从p(hg(t),θ)采样h(t)=(h(t)1,h(t)2,…,h(t)n),从p(vh(t),θ)采样g(t+1),直到t+1=k。
对每一个可视向量样本v(l),都可以利用交错吉布斯采样生成一个k步吉布斯链,g(l,0)=v(l),h(l,0),g(l,1),…,h(l,k),g(l,k+1)。根据这个吉布斯链,就可以近似计算在训练样本仅为v(l)时的对数似然梯度如下:
cdk=kl(p0p∞)-kl(pkp∞)
=1nlogn-1n∑nl=1logp(g(l,0)|θ)-1nlogn-1n∑nl=1logp(g(l,k)|θ)
=1n∑nl=1(logp(g(l,0)|θ)-logp(g(l,k)|θ))(3.20)
其中,p0(vθ)=1n∑nl=1δ(v-v(l))=1n∑nl=1δ(v-g(l,0))
θ(t+1)=θ(t)+ηlrbm(θ(t))θ-λθ(t)+νΔθ(t-1):=Δθ(t)(3.21)