考虑一组具有mmm个样本的数据集X={x(1),…,x(m)}\mathbb{X}=\{x^{(1)},\dots,x^{(m)}\}X={x(1),…,x(m)},独立地由真实数据生成分布pdata(x)p_{data}(x)pdata​(x)生成。令pmodel(x;θ)p_{model}(x;\theta)pmodel​(x;θ)是一族由θ\thetaθ确定在相同空间上的概率分布,换言之,pmodel(x;θ)p_{model}(x;\theta)pmodel​(x;θ)将任意输入xxx映射到实数来估计真实概率pdata(x)p_{data}(x)pdata​(x)。对θ\thetaθ的最大似然估计被定义为
θML=argmaxθpmodel(X;θ)=argmaxθ∏i=1mpmodel(x(i);θ)(1)\theta_{ML}=argmax_\theta p_{model}(\mathbb{X};\theta)=argmax_\theta\prod_{i=1}^m p_ {model}(x^{(i)};\theta) \tag{1}θML​=argmaxθ​pmodel​(X;θ)=argmaxθ​i=1∏m​pmodel​(x(i);θ)(1)
  因为多个概率的乘积不便于计算,便转为求和形式
θML=argmaxθ∑i=1mlogpmodel(x(i);θ)(2)\theta_{ML}=argmax_\theta\sum_{i=1}^mlogp_{model}(x^{(i)};\theta)\tag{2}θML​=argmaxθ​i=1∑m​logpmodel​(x(i);θ)(2)
  重新缩放代价函数时,对优化结果没有影响,可以除以mmm,从而以训练数据经验分布p^data\hat{p}_{data}p^​data​的期望作为准则
θML=argmaxθEx∼p^datalogpmodel(x;θ)(3)\theta_{ML}=argmax_\theta\mathbb{E}_{x\sim\hat{p}_{data}}logp_{model}(x;\theta) \tag{3}θML​=argmaxθ​Ex∼p^​data​​logpmodel​(x;θ)(3)
  一种关于最大似然估计的观点是看作最小化训练集上的经验分布p^data\hat{p}_{data}p^​data​和模型分布pmodelp_{model}pmodel​之间的差异,差异可以通过KLKLKL散度定义为
DKL(p^data∣∣pmodel)=Ex∼p^data[logp^data(x)−logpmodel(x)](4)D_{KL}(\hat{p}_{data}||p_{model})=\mathbb{E}_{x\sim\hat{p}_{data}}[log\hat{p}_{data}(x)-logp_{model}(x)] \tag{4}DKL​(p^​data​∣∣pmodel​)=Ex∼p^​data​​[logp^​data​(x)−logpmodel​(x)](4)
左边仅涉及数据生成过程,和模型无关,所以只需要最小化
θML=argminθ−Ex∼p^datalogpmodel(x;θ)(5)\theta_{ML}=argmin_\theta-\mathbb{E}_{x\sim\hat{p}_{data}}logp_{model}(x;\theta) \tag{5}θML​=argminθ​−Ex∼p^​data​​logpmodel​(x;θ)(5)
我们可以将最大似然看作使模型分布尽可能和经验分布p^data\hat{p}_{data}p^​data​相匹配,理想情况下能够匹配真实分布pdatap_{data}pdata​,但我们无法直接知道这个真实分布。
  考虑用受限玻尔兹曼机RBM来对pmodelp_{model}pmodel​进行建模,RBM有两层,分别称为可见层(visible layer)和隐藏层(hidden layer),可见层为可观察变量vvv,隐藏层为潜变量hhh。层内无连接,层间全连接,是一个二分网络结构,所以当给定可见层神经元状态时,隐藏层各神经元条件独立,反之亦然。可见层神经单元用来描述观察数据,隐藏层神经单元可以看作特征提取层。

  就像普通的玻尔兹曼机,受限玻尔兹曼机也是基于能量的模型,其联合概率分布由能量函数指定(能量函数的概念最早来自于统计热力学家研究磁体的易辛模型,后来被Hinton借鉴发展为RBM模型)
Pθ(v=v,h=h)=1Zexp(−E(v,h))=1Z(θ)exp(∑i=1D∑j=1FWijvihj+∑i=1Dvibi+∑j=1Fhjaj)(6)P_\theta(\mathtt{v}=v,\mathtt{h}=h)=\frac{1}{Z}exp(-E(v,h)) \\ =\frac{1}{Z(\theta)}exp(\sum_{i=1}^D\sum_{j=1}^FW_{ij}v_ih_j+\sum_{i=1}^Dv_ib_i+\sum_{j=1}^Fh_ja_j)\tag{6}Pθ​(v=v,h=h)=Z1​exp(−E(v,h))=Z(θ)1​exp(i=1∑D​j=1∑F​Wij​vi​hj​+i=1∑D​vi​bi​+j=1∑F​hj​aj​)(6)
Pθ(v=v)=1Z(θ)∑hexp(vTWh+cTh+bTv)(7)P_\theta(\mathtt{v}=v)=\frac{1}{Z(\theta)}\sum_h exp(v^TWh+c^Th+b^Tv) \tag{7}Pθ​(v=v)=Z(θ)1​h∑​exp(vTWh+cTh+bTv)(7)
RBM的能量函数由下给出
E(v,h)=−bTv−cTh−vTWh(8)E(v,h)=-b^Tv-c^Th-v^TWh \tag{8}E(v,h)=−bTv−cTh−vTWh(8)
我们通过最大似然估计来确定RBM的参数
θ=argmaxθL(θ)=argmaxθ1N∑i=1mlogPθ(v(i))(9)\theta=argmax_\theta L(\theta)=argmax_\theta\frac{1}{N}\sum_{i=1}^mlogP_\theta(v^{(i)})\tag{9}θ=argmaxθ​L(θ)=argmaxθ​N1​i=1∑m​logPθ​(v(i))(9)
可以通过随机梯度下降 确定参数,首先要求L(θ)L(\theta)L(θ)对WWW的导数
∂L(θ)∂Wij=1N∑n=1N∂∂Wijlog(∑hexp[v(n)TWh+cTh+bTv(n)])−∂∂WijlogZ(θ)=EPdata[vihj]−EPθ[vihj]=1N∑n=1N[P(hj=1∣v(n))vi(n)−∑vP(v)P(hj=1∣v)vi](10)\frac{\partial L(\theta)}{\partial W_{ij}}=\frac{1}{N}\sum_{n=1}^N \frac{\partial}{\partial W_{ij}}log(\sum_hexp[v^{(n)T}Wh+c^Th+b^Tv^{(n)}])-\frac{\partial}{\partial W_{ij}}logZ(\theta)\\ =E_{P_{data}}[v_ih_j]-E_{P_\theta}[v_ih_j] \\ =\frac{1}{N}\sum_{n=1}^N[P(h_j=1|v^{(n)})v_i^{(n)}-\sum_vP(v)P(h_j=1|v)v_i] \tag{10}∂Wij​∂L(θ)​=N1​n=1∑N​∂Wij​∂​log(h∑​exp[v(n)TWh+cTh+bTv(n)])−∂Wij​∂​logZ(θ)=EPdata​​[vi​hj​]−EPθ​​[vi​hj​]=N1​n=1∑N​[P(hj​=1∣v(n))vi(n)​−v∑​P(v)P(hj​=1∣v)vi​](10)
∂L(θ)∂bi=EPdata[vi]−EPθ[vi]=∑n=1N[vin−∑vP(v)vi](11)\frac{\partial L(\theta)}{\partial b_{i}}=\mathbb{E}_{P_{data}}[v_i]-\mathbb{E}_{P_\theta}[v_i] \\ =\sum_{n=1}^N[v_i^{n}-\sum_vP(v)v_i] \tag{11}∂bi​∂L(θ)​=EPdata​​[vi​]−EPθ​​[vi​]=n=1∑N​[vin​−v∑​P(v)vi​](11)
∂L(θ)∂cj=EPdata[hj]−EPθ[hj]=∑n=1N[P(hj=1∣v(n))−∑vP(v)P(hi=1∣v)](12)\frac{\partial L(\theta)}{\partial c_{j}}=\mathbb{E}_{P_{data}}[h_j]-\mathbb{E}_{P_\theta}[h_j] \\ =\sum_{n=1}^N[P(h_j=1|v^{(n)})-\sum_vP(v)P(h_i=1|v)] \tag{12}∂cj​∂L(θ)​=EPdata​​[hj​]−EPθ​​[hj​]=n=1∑N​[P(hj​=1∣v(n))−v∑​P(v)P(hi​=1∣v)](12)

配分函数

  上式的前一项在全部数据集上求平均值即可,后一项等于∑v,hvihjPθ(v,h)\sum_{\mathtt{v},\mathtt{h}}v_ih_jP_\theta(\mathtt{v},\mathtt{h})∑v,h​vi​hj​Pθ​(v,h),其中ZZZ是被称为配分函数的归一化常数
Z=∑v∑hexp(−E(v,h))(13)Z=\sum_v\sum_hexp(-E(v,h)) \tag{13}Z=v∑​h∑​exp(−E(v,h))(13)
计算配分函数ZZZ的朴素方法是对所有状态进行穷举求和,计算上是难以处理的,Long and Servedio(2010)正式证明配分函数ZZZ是难解的 。但是RBM的二分网络结构具有特定性质,因为可见层和隐藏层内部各神经元是条件独立的,所以条件分布p(h∣v)p(\mathtt{h}|\mathtt{v})p(h∣v)和p(v∣h)p(\mathtt{v}|\mathtt{h})p(v∣h)是因子的,并且计算和采样相对简单。
P(h∣v)=P(h,v)P(v)=1P(v)1Zexp{bTv+cTh+vTWh}=1Z′exp{cTh+vTWh}=1Z′exp{∑j=1nhcjThj+∑nhj=1vTW:,jhj}=1Z′∏j=1nhexp{cjThj+vTW:,jhj}(14)P(h|v)=\frac{P(h,v)}{P(v)} \\ = \frac{1}{P(v)}\frac{1}{Z}exp\{b^Tv+c^Th+v^TWh\} \\ = \frac{1}{Z'}exp\{c^Th+v^TWh\} \\ = \frac{1}{Z'}exp\{\sum_{j=1}^{n_h}c_j^Th_j+\sum_{n_h}^{j=1}v^TW_{:,j}h_j\} \\ = \frac{1}{Z'}\prod_{j=1}^{n_h}exp\{c_j^Th_j+v^TW_{:,j}h_j\} \tag{14}P(h∣v)=P(v)P(h,v)​=P(v)1​Z1​exp{bTv+cTh+vTWh}=Z′1​exp{cTh+vTWh}=Z′1​exp{j=1∑nh​​cjT​hj​+nh​∑j=1​vTW:,j​hj​}=Z′1​j=1∏nh​​exp{cjT​hj​+vTW:,j​hj​}(14)
  在基于可见单元vvv计算条件概率P(h∣v)P(h|v)P(h∣v)时,可以将其视为常数,因为P(h∣v)P(h|v)P(h∣v)的性质,我们可以将向量hhh上的联合概率写成单独元素hjh_jhj​(未归一化)上分布的乘积。
P(hj=1∣v)=P~(hj=1∣v)P~(hj=0∣v)+P~(hj=1∣v)=exp{cj+vTW:,j}exp{0}+exp{cj+vTW:,j}=11+exp{−cj−∑iviWij}=σ(cj+vTW:,j)(15)P(h_j=1|v)=\frac{\tilde{P}(h_j=1|v)}{\tilde{P}(h_j=0|v)+\tilde{P}(h_j=1|v)} \\ =\frac{exp\{c_j+v^TW_{:,j}\}}{exp\{0\}+exp\{c_j+v^TW_{:,j}\}} \\ =\frac{1}{1+exp\{-c_j-\sum_iv_iW_{ij}\}} \\ =\sigma(c_j+v^TW_{:,j}) \tag{15}P(hj​=1∣v)=P~(hj​=0∣v)+P~(hj​=1∣v)P~(hj​=1∣v)​=exp{0}+exp{cj​+vTW:,j​}exp{cj​+vTW:,j​}​=1+exp{−cj​−∑i​vi​Wij​}1​=σ(cj​+vTW:,j​)(15)
其中σ(x)=11+exp(−x)\sigma(x)=\frac{1}{1+exp(-x)}σ(x)=1+exp(−x)1​,现在我们可以将关于隐藏层的完全条件分布表达为因子形式
P(h∣v)=∏j=1nhσ((2h−1)⊙(c+WTv))j(16)P(h|v)=\prod_{j=1}^{n_h}\sigma((2h-1)\odot(c+W^Tv))_j \tag{16}P(h∣v)=j=1∏nh​​σ((2h−1)⊙(c+WTv))j​(16)
类似地,P(v∣h)P(v|h)P(v∣h)也是因子形式的分布
P(v∣h)=∏i=1nvσ((2v−1)⊙(b+Wh))i(17)P(v|h)=\prod_{i=1}^{n_v}\sigma((2v-1)\odot(b+Wh))_i \tag{17}P(v∣h)=i=1∏nv​​σ((2v−1)⊙(b+Wh))i​(17)
  因为RBM允许高效计算P~(v)\tilde{P}(v)P~(v)的估计和微分,并且还允许高效地进行MCMC采样(块吉布斯采样),所以可以使用训练难以计算配分函数的模型的技术来训练RBM,如CD、SML(PCD)、比率匹配等。与深度学习中使用的其它无向模型相比,RBM可以以闭解形式计算P(h∣v)P(h|v)P(h∣v),所以可以相对直接地训练,其它深度模型如深度玻尔兹曼机等,同时具备难处理的配分函数和难以推断的问题。
  许多概率模型(通常是无向图模型)由一个未归一化的概率分布p~(x;θ)\tilde{p}(x;\theta)p~​(x;θ)定义,必须通过除以配分函数Z(θ)Z(\theta)Z(θ)来归一化p~\tilde{p}p~​,以获取一个有效的概率分布
p(x;θ)=1Z(θ)p~(x;θ)(18)p(x;\theta)=\frac{1}{Z(\theta)}\tilde{p}(x;\theta) \tag{18}p(x;θ)=Z(θ)1​p~​(x;θ)(18)
配分函数Z(θ)Z(\theta)Z(θ)是未归一化概率所有状态的积分(或求和)
Z=∫p~(x)dx=∑xp~(x)(19)Z=\int\tilde{p}(x)dx=\sum_x\tilde{p}(x) \tag{19}Z=∫p~​(x)dx=x∑​p~​(x)(19)
  通过最大似然学习无向模型的困难之处在于配分函数依赖于参数,对数似然相对于参数的梯度具有一项对应于配分函数的梯度
∇θlogp(x;θ)=∇θlogp~(x;θ)−∇θlogZ(θ)(20)\nabla_\theta logp(x;\theta)=\nabla_\theta log\tilde{p}(x;\theta)-\nabla_\theta logZ(\theta) \tag{20}∇θ​logp(x;θ)=∇θ​logp~​(x;θ)−∇θ​logZ(θ)(20)
上式是机器学习中的正相和负相的分解,对于大多数无向模型而言,负相是困难的,没有潜变量或潜变量之间很少相互作用的模型通常会有一个易于计算的正相。RBM的隐藏单元在给定可见单元的情况下彼此条件独立,是一个典型的具有简单正相和困难负相的模型。对于logZlogZlogZ的梯度有
∇θlogZ=∇θZZ=∇θ∑xp~(x)Z=∑x∇θp~(x)Z(21)\nabla_\theta logZ=\frac{\nabla_\theta Z}{Z}=\frac{\nabla_\theta\sum_x\tilde{p}(x)}{Z}=\frac{\sum_x\nabla_\theta\tilde{p}(x)}{Z} \tag{21}∇θ​logZ=Z∇θ​Z​=Z∇θ​∑x​p~​(x)​=Z∑x​∇θ​p~​(x)​(21)
上式是对离散的xxx进行求和,对连续的xxx进行积分也有类似的结果,若
  (1)对任一θ\thetaθ,p~\tilde{p}p~​是xxx的勒贝格可积函数;
  (2)对所有θ\thetaθ和几乎所有的xxx,梯度∇θp~(x)\nabla_\theta\tilde{p}(x)∇θ​p~​(x)存在;
  (3)对所有θ\thetaθ和几乎所有的xxx,都存在一个可积函数R(x)R(x)R(x),使maxi∣∂∂θip~(x)∣≤R(x)max_i|\frac{\partial}{\partial\theta_i}\tilde{p}(x)|\leq R(x)maxi​∣∂θi​∂​p~​(x)∣≤R(x)成立,
则由莱布尼兹法则有
∇θ∫p~(x)dx=∫∇θp~(x)dx\nabla_\theta\int\tilde{p}(x)dx=\int\nabla_\theta\tilde{p}(x)dx∇θ​∫p~​(x)dx=∫∇θ​p~​(x)dx
  若对于任意xxx有p(x)>0p(x)>0p(x)>0,则无妨用exp(logp~(x))exp(log\tilde{p}(x))exp(logp~​(x))代替p~(x)\tilde{p}(x)p~​(x)
∑x∇θexp(logp~(x))Z=∑xexp(logp~(x))∇θlogp~(x)Z=∑xp~(x)∇θlogp~(x)Z=∑xp(x)∇θlogp~(x)=Ex∼p(x)∇θlogp~(x)(22)\frac{\sum_x\nabla_\theta exp(log\tilde{p}(x))}{Z}=\frac{\sum_x exp(log\tilde{p}(x))\nabla_\theta log\tilde{p}(x)}{Z}=\frac{\sum_x\tilde{p}(x)\nabla_\theta log\tilde{p}(x)}{Z} \\ =\sum_x p(x)\nabla_\theta log\tilde{p}(x) =\mathbb{E}_{x\sim p(x)}\nabla_\theta log\tilde{p}(x) \tag{22}Z∑x​∇θ​exp(logp~​(x))​=Z∑x​exp(logp~​(x))∇θ​logp~​(x)​=Z∑x​p~​(x)∇θ​logp~​(x)​=x∑​p(x)∇θ​logp~​(x)=Ex∼p(x)​∇θ​logp~​(x)(22)
  等式
∇θlogZ=Ex∼p(x)∇θlogp~(x)(23)\nabla_\theta logZ=\mathbb{E}_{x\sim p(x)}\nabla_\theta log\tilde{p}(x) \tag{23}∇θ​logZ=Ex∼p(x)​∇θ​logp~​(x)(23)
是使用各种蒙特卡罗方法近似最大化(难计算配分函数模型)似然的基础。


对比散度算法(CD)
设步长ϵ>0\epsilon>0ϵ>0,吉布斯步数kkk大到足以让从pdatap_{data}pdata​初始化并从p(x;θ)p(x;\theta)p(x;θ)采样的马尔科夫链混合,在小图像集上训练一个RBM大致为1∼201\sim 201∼20
whilewhilewhile 不收敛 dododo
 从训练集采样mmm个样本{x(1),…,x(m)}\{x^{(1)},\dots,x^{(m)}\}{x(1),…,x(m)}
 g←1m∑i=1m∇θlogp~(x(i);θ)g\leftarrow\frac{1}{m}\sum_{i=1}^m\nabla_\theta log\tilde{p}(x^{(i)};\theta)g←m1​∑i=1m​∇θ​logp~​(x(i);θ)
 fori=1tomdofor \ i=1 \ to \ m \ dofor i=1 to m do
  x~(i)←x(i)\tilde{x}^{(i)}\leftarrow x^{(i)}x~(i)←x(i)
 endforend \ forend for
 fori=1tokdofor \ i=1 \ to \ k \ dofor i=1 to k do
  forj=1tomdofor \ j=1 \ to \ m \ dofor j=1 to m do
   x~(j)←gibbs_update(x~(j))\tilde{x}^{(j)}\leftarrow gibbs\_update(\tilde{x}^{(j)})x~(j)←gibbs_update(x~(j))
  endforend \ forend for
 endforend \ forend for
 g←g−1m∑i=1m∇θlogp~(x~(i);θ)g\leftarrow g-\frac{1}{m}\sum_{i=1}^m\nabla_\theta log\tilde{p}(\tilde{x}^{(i)};\theta)g←g−m1​∑i=1m​∇θ​logp~​(x~(i);θ)
 θ←θ+ϵg\theta\leftarrow\theta+\epsilon gθ←θ+ϵg
endwhileend \ whileend while


采样

  从类似于RBM的基于能量的无向模型中采样是困难的,考虑一个有两个变量的EBM例子,记p(a,b)p(a,b)p(a,b)是其分布,为了采aaa,必须先从p(a∣b)p(a|b)p(a∣b)采样,为了采bbb,又必须先从p(b∣a)p(b|a)p(b∣a)采样。而有向模型避免了这一问题,因为图结构是有向无环的,为了完成原始采样,在给定每个变量的所有父结点的条件下,根据拓扑顺序采样每一个变量,这时原始采样定义了一种高效的、单遍的方法来抽取一个样本。
  马尔科夫链的核心思想是从任意值的状态xxx出发,随时间推移,随机地反复更新状态xxx,最终xxx接近成为一个从p(x)p(x)p(x)中抽出的样本。设π\piπ为马尔科夫链上的状态分布,PPP为转移矩阵,则
π(t)=Pπ(t−1)(24)\pi^{(t)}=P\pi^{(t-1)} \tag{24}π(t)=Pπ(t−1)(24)
重复使用马尔科夫链更新,相当于重复与矩阵PPP相乘,则这一过程是关于PPP的幂乘
π(t)=Ptπ(0)(25)\pi^{(t)}=P^{t}\pi^{(0)} \tag{25}π(t)=Ptπ(0)(25)
矩阵PPP的每一列代表一个概率分布,如果对于任意状态到任意其它状态,都存在一个ttt使转移概率不为000,那么Perron-Frobenius定理保证这个矩阵的最大特征值为1,而所有特征值随时间步而指数变化
π(t)=(Vdiag(λ)V−1)v(0)=Vdiag(λ)tV−1π(0)(26)\pi^{(t)}=(Vdiag(\lambda)V^{-1})v^{(0)}=Vdiag(\lambda)^tV^{-1}\pi^{(0)} \tag{26}π(t)=(Vdiag(λ)V−1)v(0)=Vdiag(λ)tV−1π(0)(26)
所有小于111的特征值都会帅见到000,如果AAA只有一个对应特征值为111的特征向量,那么这个过程收敛到平稳分布
π=Pπ\pi=P\piπ=Pπ通常在一些宽松条件下,一个带有转移算子PPP的马尔科夫链都会收敛到一个不动点
π′(x′)=Ex∼πP(x′∣x)(27)\pi'(x')=\mathbb{E}_{x\sim \pi}P(x'|x) \tag{27}π′(x′)=Ex∼π​P(x′∣x)(27)
运行马尔科夫链直到达到平稳分布的过程通常称为马尔科夫链的磨合过程,收敛之后可以从平稳分布中抽取一个无限多数量的样本序列,这些样本服从统一分布,但是连续的样本之间会高度相关,一种解决方法是每隔nnn个样本返回一个样本。如果我们正确的选择了转移算子PPP,那么最终的平稳分布π(x)\pi(x)π(x)将会等于我们所希望采样的分布pmodel(x)p_{model}(x)pmodel​(x)。
  如果非周期马尔科夫链的转移矩阵PPP和分布π(x)\pi(x)π(x)满足
π(i)Pij=π(j)Pji(28)\pi(i)P_{ij}=\pi(j)P_{ji} \tag{28}π(i)Pij​=π(j)Pji​(28)
则π(x)\pi(x)π(x)是马尔科夫链的平稳分布,上式被称为细致平稳条件。其物理含义是对于任何两个状态iii和jjj,从iii转移到jjj而丢失的概率质量,等于从jjj转移回iii的概率质量。由细致平稳条件有
∑i=1∞π(i)Pij=∑i=1∞π(j)Pji=π(j)∑i=1∞Pji=π(j)(29)\sum_{i=1}^\infty \pi(i)P_{ij}=\sum_{i=1}^\infty\pi(j)P_{ji}=\pi(j)\sum_{i=1}^\infty P_{ji}=\pi(j) \tag{29}i=1∑∞​π(i)Pij​=i=1∑∞​π(j)Pji​=π(j)i=1∑∞​Pji​=π(j)(29)
所以πP=π\pi P=\piπP=π,此时π\piπ是平稳分布。
  如何正确选择转移算子PPP,才能使平稳分布π(x)\pi(x)π(x)恰好就是我们想要的分布pmodel(x)p_{model}(x)pmodel​(x)。假设有一转移矩阵QQQ,
p(i)Qij≠p(j)Qji(30)p(i)Q_{ij}\neq p(j)Q_{ji} \tag{30}p(i)Qij​​=p(j)Qji​(30)
此时细致平稳条件不成立,p(x)p(x)p(x)可能就不是平稳分布,引入α(i,j)\alpha(i,j)α(i,j)使细致平稳条件成立,
p(i)Qijα(i,j)=p(j)Qjiα(j,i)(31)p(i)Q_{ij}\alpha(i,j)=p(j)Q_{ji}\alpha(j,i) \tag{31}p(i)Qij​α(i,j)=p(j)Qji​α(j,i)(31)
此时,只需令α(i,j)=p(j)Qji\alpha(i,j)=p(j)Q_{ji}α(i,j)=p(j)Qji​,α(j,i)=p(i)Qij\alpha(j,i)=p(i)Q_{ij}α(j,i)=p(i)Qij​即可。引入的α(i,j)\alpha(i,j)α(i,j)称为接受率,可以认为是在原来的马尔科夫链上从状态iii以QijQ_{ij}Qij​的概率跳转到jjj的时候,以α(i,j)\alpha(i,j)α(i,j)的概率接受这个跳转。不过马尔科夫链QQQ转移的时候,接受率α(i,j)\alpha(i,j)α(i,j)可能偏小,这样可能会拒绝大量跳转,收敛速度太慢,可以把α(i,j)\alpha(i,j)α(i,j)和α(j,i)\alpha(j,i)α(j,i)同比例放大,使两者中较大的放大到111,这样就提高了跳转接受率
α(i,j)=min{p(j)Qjip(i)Qij,1}(32)\alpha(i,j)=min\{\frac{p(j)Q_{ji}}{p(i)Q_{ij}},1\} \tag{32}α(i,j)=min{p(i)Qij​p(j)Qji​​,1}(32)


Metropolis−HastingsMetropolis-HastingsMetropolis−Hastings算法
1.初始化马尔科夫链状态x0x_0x0​
2.对t=0,1,2…t=0,1,2\dotst=0,1,2…循环以下过程采样

  • 第ttt个时刻马尔科夫链状态为xtx_txt​,采样y∼q(x∣xt)y\sim q(x|x_t)y∼q(x∣xt​)
  • 从均匀分布中采样u∼Uniform[0,1]u\sim Uniform[0,1]u∼Uniform[0,1]
  • 若u<α(xt,y)=min{p(y)Qy,xtp(xt)Qxt,y,1}u<\alpha(x_t,y)=min\{\frac{p(y)Q_{y,x_t}}{p(x_t)Q_{x_t,y}},1\}u<α(xt​,y)=min{p(xt​)Qxt​,y​p(y)Qy,xt​​​,1},则接受跳转xt→yx_t\rightarrow yxt​→y,xt+1=yx_{t+1}=yxt+1​=y
  • 否则不接受跳转,xt+1=xtx_{t+1}=x_txt+1​=xt​

  对于高维的情形,由于接受率α(α≤1)\alpha(\alpha\leq 1)α(α≤1)的存在,以上Metropolis−HastingsMetropolis-HastingsMetropolis−Hastings算法的效率不高,能否找到一个转移矩阵QQQ使接受率α=1\alpha=1α=1。先观察二维的情形,假设有一概率分布p(x,y)p(x,y)p(x,y),考察xxx坐标相同的两个点A(x1,y1)A(x_1,y_1)A(x1​,y1​)和A(x1,y2)A(x_1,y_2)A(x1​,y2​),我们发现
p(x1,y1)p(y2∣x1)=p(x1)p(y1∣x1)p(y2∣x1)p(x1,y2)p(y1∣x1)=p(x1)p(y2∣x1)p(y1∣x1)(33)p(x_1,y_1)p(y_2|x_1)=p(x_1)p(y_1|x_1)p(y_2|x_1) \\ p(x_1,y_2)p(y_1|x_1)=p(x_1)p(y_2|x_1)p(y_1|x_1) \tag{33}p(x1​,y1​)p(y2​∣x1​)=p(x1​)p(y1​∣x1​)p(y2​∣x1​)p(x1​,y2​)p(y1​∣x1​)=p(x1​)p(y2​∣x1​)p(y1​∣x1​)(33)
所以p(x1,y1)p(y2∣x1)=p(x1,y2)p(y1∣x1)p(x_1,y_1)p(y_2|x_1)=p(x_1,y_2)p(y_1|x_1)p(x1​,y1​)p(y2​∣x1​)=p(x1​,y2​)p(y1​∣x1​),即p(A)p(y2∣x1)=p(B)p(y1∣x1)p(A)p(y_2|x_1)=p(B)p(y_1|x_1)p(A)p(y2​∣x1​)=p(B)p(y1​∣x1​),在x=x1x=x_1x=x1​这条平行于yyy轴的直线上,如果使用条件分布p(y∣x1)p(y|x_1)p(y∣x1​)作为任何两点之间的转移概率,那么任何两点之间的转移满足细致平稳条件。同样,如果我们在y=y1y=y_1y=y1​这条直线上任意两点A(x1,y1)A(x_1,y_1)A(x1​,y1​)和C(x2,y1)C(x_2,y_1)C(x2​,y1​)也有p(A)p(x2∣y1)=p(C)p(x1∣y1)p(A)p(x_2|y_1)=p(C)p(x_1|y_1)p(A)p(x2​∣y1​)=p(C)p(x1​∣y1​)。于是可以构造平面上任意两点之间的转移概率矩阵QQQ
Q(A→B)=p(yB∣x1)若xA=xB=x1Q(A→C)=p(xC∣y1)若yA=yC=y1Q(A→D)=0其它(34)Q(A\rightarrow B)=p(y_B|x_1) \ \ 若x_A=x_B=x_1 \\ Q(A\rightarrow C)=p(x_C|y_1) \ \ 若y_A=y_C=y_1 \\ Q(A\rightarrow D)=0 \ \ 其它 \tag{34}Q(A→B)=p(yB​∣x1​)  若xA​=xB​=x1​Q(A→C)=p(xC​∣y1​)  若yA​=yC​=y1​Q(A→D)=0  其它(34)

  有了以上转移矩阵Q,则平面上任意两点X,YX,YX,Y,满足细致平稳条件p(X)Q(X→Y)=p(Y)Q(Y→X)p(X)Q(X\rightarrow Y)=p(Y)Q(Y\rightarrow X)p(X)Q(X→Y)=p(Y)Q(Y→X),于是这个马尔科夫链会收敛到平稳分布p(x,y)p(x,y)p(x,y)。


二维GibbsSamplingGibbs \ SamplingGibbs Sampling算法
1.随机初始化x0,y0x_0,y_0x0​,y0​
2.对t=0,1,2…t=0,1,2\dotst=0,1,2…循环采样

  • yt+1∼p(y∣xt)y_{t+1}\sim p(y|x_t)yt+1​∼p(y∣xt​)
  • xt+1∼p(x∣yt+1)x_{t+1}\sim p(x|y_{t+1})xt+1​∼p(x∣yt+1​)

以上采样过程中,只是沿着xxx轴和yyy轴做转移,于是有样本(x0,y0),(x0,y1),(x1,y1),(x1,y2)…(x_0,y_0),(x_0,y_1),(x_1,y_1),(x_1,y_2)\dots(x0​,y0​),(x0​,y1​),(x1​,y1​),(x1​,y2​)…,收敛后的最终样本就是p(x,y)p(x,y)p(x,y)的样本。
  GibbsSampleGibbs \ SampleGibbs Sample是一种概念简单而又有效的方法,它构造一个从pmodel(x)p_{model}(x)pmodel​(x)中采样的马尔科夫链,在基于能量的模型中从转移算子Q(x′∣x)Q(x'|x)Q(x′∣x)采样是通过选择一个变量xix_ixi​,然后从pmodelp_{model}pmodel​中该点关于在无向图G\mathcal{G}G中邻接点的条件分布中采样。只要一些变量在给定相邻变量时是条件独立的,那么这些变量就可以被同时采样,在一个联合分布为pmodel(v,h)p_{model}(v,h)pmodel​(v,h)的潜变量模型中,通常从pmodel(v∣h)p_{model}(v|h)pmodel​(v∣h)和pmodel(h∣v)p_{model}(h|v)pmodel​(h∣v)中采样,这便是块吉布斯采样。从快速混合的角度上考虑,我们更希望pmodel(h∣v)p_{model}(h|v)pmodel​(h∣v)有很大的熵,然而从学习一个hhh的有用表示的角度上考虑,我们还是希望hhh能够有vvv的足够信息,从而能够完整重构它,这意味着hhh和vvv要有非常高的互信息,这两个目标是相互矛盾的。

Matlab代码实现

  以下是主程序,导入mnist手写数字数据集,调用RBM子程序并训练,最后给出重构结果图

%% 主程序
%% 导入mnist数据
N_sample = 1000;p = 784;
x = zeros(N_sample , p);
tic
for i = 1 : N_sampleim = imread(['F:\MATLAB\mnist手写数字\trainimage\pic2\0\' num2str(i) '.bmp']);x(i , :) = double(reshape(im(: , : , 1) , 1 , p) > 10);
end
toc
%% 调用RBM
rbm = RBM(x , 50);%创建对象
% rbm = rbm.train;%训练
rbm = rbm.predict(x(randperm(N_sample , 100) , :));%预测
%% 绘制重构图像
Im = zeros(280 , 280);
for i = 1 : size(rbm.testData_x , 1)i0 = floor((i-1)/10);j0 = mod(i-1,10);Im(i0*28+1:(i0+1)*28,j0*28+1:(j0+1)*28) = reshape(rbm.testData_x(i , :) , 28 , 28);
end
imshow(Im)

  以下是RBM子程序,将计算过程封装为类,训练和重构是其中的两个方法,调用时创建RBM对象即可。

classdef RBMpropertiestrainData_x;        %训练数据 xtestData_x;         %测试重构数据testData_h;         %测试重构数据v;                  %可见层单元     vh;                  %隐藏层单元     hv_num;              %参数     v单元的个数h_num;              %参数     h单元的个数w;                  %权重     wb;                  %权重     bc;                  %权重     cN_sample;           %样本总数 N_sampleiter_train;         %当前迭代次数IterMax;            %最大迭代次数batchSize;          %批次大小numIterOfTrain;     %训练时的吉布斯采样迭代次数numIterOfPredict;   %预测时的吉布斯采样迭代次数endmethodsfunction obj = RBM(v_num , h_num)if(nargin == 0)v_num = 1;h_num = 1;endobj.v_num = v_num;obj.h_num = h_num;obj.v = zeros(obj.v_num , 1);obj.h = zeros(obj.h_num , 1);obj.w = rand(obj.v_num , obj.h_num);obj.b = ones(obj.v_num , 1);obj.c = ones(obj.h_num , 1);obj.iter_train = 0;obj.IterMax = 3000;obj.batchSize = 100;obj.numIterOfTrain=15;obj.numIterOfPredict=50;endfunction obj = train(obj , trainData_x , Iter)            %梯度下降训练if(nargin == 2)Iter = obj.IterMax;endobj.trainData_x = trainData_x;obj.N_sample = size(obj.trainData_x,1);batch_size = obj.batchSize;alpha = .1 / batch_size;
%             gradient_w = rand(obj.v_num , obj.h_num);while obj.iter_train < Iter %sum(abs(gradient_w)) > 1e-18 obj.iter_train = obj.iter_train + 1;trainData_x_batch = obj.trainData_x(randperm(obj.N_sample , batch_size) , :);%数据集部分(正相)gradient_w = trainData_x_batch' * sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w);gradient_b = sum(trainData_x_batch)';gradient_c = sum(sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w))';%吉布斯采样部分(负相)k=obj.numIterOfTrain;for i = 1 : kh_batch = double(rand(batch_size , obj.h_num) < sigmoid(repmat(obj.c' , batch_size , 1) +...trainData_x_batch * obj.w));trainData_x_batch = double(rand(batch_size , obj.v_num) < sigmoid(repmat(obj.b' , batch_size , 1) + ...h_batch * obj.w'));endgradient_w = gradient_w - trainData_x_batch' * sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w);gradient_b = gradient_b - sum(trainData_x_batch)';gradient_c = gradient_c - sum(sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w))';%更新参数obj.w = obj.w + alpha * gradient_w;obj.b = obj.b + alpha * gradient_b;obj.c = obj.c + alpha * gradient_c;%在此绘制权重参数动态图endendfunction obj = predict(obj , num_batch , testData_h_batch)    %重构if(nargin == 3)testData_x_batch = double(rand(num_batch , obj.v_num) < sigmoid(repmat(obj.b' , num_batch , 1) + ...testData_h_batch * obj.w'));elsetestData_x_batch = obj.trainData_x(randperm(obj.N_sample , num_batch) , :);endk=obj.numIterOfPredict;for i = 1 : kh_batch = double(rand(num_batch , obj.h_num) < sigmoid(repmat(obj.c' , num_batch , 1) +...testData_x_batch * obj.w));testData_x_batch = double(rand(num_batch , obj.v_num) < sigmoid(repmat(obj.b' , num_batch , 1) + ...h_batch * obj.w'));endobj.testData_x = testData_x_batch;obj.testData_h = h_batch;endend
end
function output = sigmoid(x)
output =1 ./ (1 + exp(-x));
end

  以下是重构时采样的数字图片结果

实值RBM

  虽然玻尔兹曼机最初是为二值数据而开发的,但是许多应用,例如图像和音频建模似乎需要表示实值上概率分布的能力。在一些情况下,我们可以将区间[0,1][0,1][0,1]中的实值数据视为表示二值变量的期望。例如,Hinton(2000)将训练集中灰度图像的像素值视为定义[0,1][0,1][0,1]间的概率值,每个像素定义二值变量为111的概率,并且二值像素的采样都彼此独立。这是评估灰度图像数据集上二值模型的常见过程,然而这种方法理论上并不特别令人满意,并且以这种方式独立采样的二值图像具有噪声现象。

Gaussian-Bernoulli RBM

  最常见的是具有二值隐藏单元和实值可见单元的RBM,其中可见单元上的条件分布是高斯分布(均值为隐藏单元的函数),有许多方法可以参数化Gaussian-Bernoulli RBM,首先,可以选择协方差矩阵或精度矩阵来参数化高斯分布。这里介绍选择精度矩阵的情况,可以通过简单的修改获取协方差的形式。可见单元的条件分布为
p(v∣h)=N(v;WH,β−1)(35)p(v|h)=\mathcal{N}(v;WH,\beta^{-1}) \tag{35}p(v∣h)=N(v;WH,β−1)(35)
通过扩展未归一化的对数条件分布可以找到需要添加到能量函数中的项
logN(v;Wh,β−1)=−12(v−Wh)Tβ(v−Wh)+f(β)(36)log\mathcal{N}(v;Wh,\beta^{-1})=-\frac{1}{2}(v-Wh)^T\beta(v-Wh)+f(\beta) \tag{36}logN(v;Wh,β−1)=−21​(v−Wh)Tβ(v−Wh)+f(β)(36)
此处fff封装所有的参数,但没有模型中的随机变量。因为fff的唯一作用是归一化分布,并且我们选择的任何可作为配分函数的能量函数都能起到这个作用,所以我们可以忽略fff。
  上式中有一项12hTWTβWh\frac{1}{2}h^TW^T\beta Wh21​hTWTβWh,因为该项有hihjh_ih_jhi​hj​,这对应于隐藏单元之间的边,会导致一个线性因子模型,而非受限玻尔兹曼机,所以不能添加进能量函数,同时省略这些项不改变条件分布p(v∣h)p(v|h)p(v∣h),所以简单去掉即可。然而,我们依然可以选择是否添加仅涉及单个hih_ihi​的项,若精度矩阵是对角的,则对于每个隐藏单元hih_ihi​,有一项12∑jβjWj,i2\frac{1}{2}\sum_j\beta_jW_{j,i}^221​∑j​βj​Wj,i2​(其中hi2=hih_i^2=h_ihi2​=hi​)。如果将此项添加进能量函数,则当该单元的权重较大且以高精度连接到可见单元时,偏置hih_ihi​将自然被关闭。是否添加该偏置项不影响模型可以表示的分布族,但是会影响模型的学习动态,添加该项可以帮助隐藏单元保持合理激活。
  因此,Gaussian-Bernoulli RBM上定义能量函数的一种方式为
E(v,h)=12vT(β⊙v)−(v⊙β)TWh−bTh(37)E(v,h)=\frac{1}{2}v^T(\beta\odot v)-(v\odot\beta)^TWh-b^Th \tag{37}E(v,h)=21​vT(β⊙v)−(v⊙β)TWh−bTh(37)
但是我们还可以添加额外的项或者通过方差而不是精度参数化能量。在这里没有添加可见单元的偏置项,但是添加这样的偏置项是容易的。精度矩阵可以被固定为常数或学习出来,也可以是标量乘以单位矩阵,或者是一个对角矩阵。在此情况下,由于一些操作需要对矩阵求逆,我们通常不允许非对角的精度矩阵,因为高斯分布的一些操作需要对矩阵求逆,一个对角矩阵可以非常容易地求逆,其它形式的玻尔兹曼机,允许对协方差结构建模,并使用各种技术避免对精度矩阵求逆。

条件协方差的无向模型

  虽然高斯RBM已成为实值数据的标准能量模型,Ranzato etal.(2010a)et \ al.(2010a)et al.(2010a)认为高斯RBM感应偏置不能很好地适合某些类型的实值数据中存在的统计变化,特别是自然图像。问题在于自然图像中的许多信息内容嵌入于像素之间的协方差而不是原始像素值中。换句话说,图像中的大多数有用信息在于像素之间的关系,而不是其绝对值。由于高斯RBM仅对给定隐藏单元的输入条件均值建模,所以不能捕获条件协方差信息。为了回应这些评论,已经有学者提出替代模型,能够更好地考虑实值数据的协方差,这些模型有,均值和协方差RBM(mean and covariance RBM,mcRBM)、学生ttt分布均值乘积模型(mean product of Student t-distribution,mPoT)和尖峰和平板RBM(spike and slab RBM,ssRBM)。
  均值和协方差RBM。mcRBM使用隐藏单元独立地编码所有可观察单元的条件均值和协方差,mcRBM的隐藏单元分为两组单元,均值单元和协方差单元,建模条件均值的那组单元是简单的高斯RBM,另一半是协方差RBM。
  在二值均值单元h(m)h^{(m)}h(m)和二值协方差单元h(c)h^{(c)}h(c)的情况下,mcRBM模型被定义为两个能量函数的组合
Emc(x,h(m),h(c))=Em(x,h(m))+Ec(x,h(c))(38)E_{mc}(x,h^{(m)},h^{(c)})=E_m(x,h^{(m)})+E_c(x,h^{(c)}) \tag{38}Emc​(x,h(m),h(c))=Em​(x,h(m))+Ec​(x,h(c))(38)
其中EME_MEM​为标准的Gaussian-Bernoulli RBM能量函数
Em(x,h(m))=12xTx−∑jxTW:,jhj(m)−∑jbj(m)hj(m)(39)E_m(x,h^{(m)})=\frac{1}{2}x^Tx-\sum_jx^TW_{:,j}h_j^{(m)}-\sum_jb_j^{(m)}h_j^{(m)} \tag{39}Em​(x,h(m))=21​xTx−j∑​xTW:,j​hj(m)​−j∑​bj(m)​hj(m)​(39)
EcE_cEc​是cRBM建模条件协方差信息的能量函数
Ec(x,h(c))=12∑jhj(c)(xTr(j))2−∑jbj(c)hj(c)(40)E_c(x,h^{(c)})=\frac{1}{2}\sum_jh_j^{(c)}(x^Tr^{(j)})^2-\sum_jb_j^{(c)}h_j^{(c)} \tag{40}Ec​(x,h(c))=21​j∑​hj(c)​(xTr(j))2−j∑​bj(c)​hj(c)​(40)
参数r(j)r^{(j)}r(j)与hj(c)h_j^{(c)}hj(c)​关联的协方差权重向量对应,b(c)b^{(c)}b(c)是一个协方差偏置向量。组合后的能量函数定义联合分布
pmc(x,h(m),h(c))=1Zexp{−Emc(x,h(m)h(c))}(41)p_{mc}(x,h^{(m)},h^{(c)})=\frac{1}{Z}exp\{-E_{mc}(x,h^{(m)}h^{(c)})\} \tag{41}pmc​(x,h(m),h(c))=Z1​exp{−Emc​(x,h(m)h(c))}(41)
以及给定h(m)h^{(m)}h(m)和h(c)h^{(c)}h(c)后,关于观察数据相应的条件分布
pmc(x∣h(m),h(c))=N(x;Cx∣hmc(∑jW:,jhj(m)),Cx∣hmc)(42)p_{mc}(x|h^{(m)},h^{(c)})=\mathcal{N}(x;C_{x|h}^{mc}(\sum_jW_{:,j}h_j^{(m)}),C_{x|h}^{mc}) \tag{42}pmc​(x∣h(m),h(c))=N(x;Cx∣hmc​(j∑​W:,j​hj(m)​),Cx∣hmc​)(42)
协方差阵Cx∣hmc=(∑jhj(c)r(j)r(j)T+I)C_{x|h}^{mc}=(\sum_jh_j^{(c)}r^{(j)}r^{(j)T}+I)Cx∣hmc​=(∑j​hj(c)​r(j)r(j)T+I)是非对角的,且WWW是与建模条件均值的高斯RBM相关联的权重矩阵。由于非对角的条件协方差结构,难以通过对比散度或持续性对比散度来训练mcRBM。CD和PCD需要从xxx、h(m)h^{(m)}h(m)和h(c)h^{(c)}h(c)的联合分布中采样,这在标准RBM中可以通过Gibbs采样在条件分布上实现。但是,在mcRBM中,从pmc(x∣h(m),h(c))p_{mc}(x|h^{(m)},h^{(c)})pmc​(x∣h(m),h(c))中采样需要在学习的每个迭代计算(Cmc)−1(C^{mc})^{-1}(Cmc)−1,这对于更大的观察数据可能是不切实际的计算负担。Ranzato and Hinton (2010)通过使用mcRBM自由能上的哈密尔顿(混合)蒙特卡罗(Neal,1993)直接从边缘分布p(x)p(x)p(x)采样,避免了直接从条件分布pmc(x∣h(m),h(c))p_{mc}(x|h^{(m)},h^{(c)})pmc​(x∣h(m),h(c))抽采样。
  学生ttt分布均值乘积。学生ttt分布均值乘积(mPoT)模型(Ranzato etal.et \ al.et al.,2010b)以类似mcRBM扩展cRBM的方式扩展PoT模型(Welling etal.et \ al.et al.,2003a),通过添加类似高斯RBM中隐藏单元的非零高斯均值来实现。与mcRBM一样,观察值上的PoT条件分布是多元高斯(具有非对角的协方差)分布。然而,不同于mcRBM,给定隐藏变量的条件分布是由条件独立的Gamma分布给出。Gamma分布G(k,θ)\mathcal{G}(k,\theta)G(k,θ)是关于正实数且均值为kθk\thetakθ的概率分布,我们只需简单地了解Gamma分布就足以理解mPoT模型的基本思想。
  mPoT的能量函数为
EmPoT(x,h(m),h(c))=Em(x,h(m))+∑j(hj(c)(1+12(r(j)Tx)2)+(1−γj)loghj(c))(43)E_{mPoT}(x,h^{(m)},h^{(c)})=E_m(x,h^{(m)})+\sum_j(h_j^{(c)}(1+\frac{1}{2}(r^{(j)T}x)2)+(1-\gamma_j)logh_j^{(c)}) \tag{43}EmPoT​(x,h(m),h(c))=Em​(x,h(m))+j∑​(hj(c)​(1+21​(r(j)Tx)2)+(1−γj​)loghj(c)​)(43)
其中r(j)r^{(j)}r(j)是与单元hj(c)h_j^{(c)}hj(c)​相关联的协方差权重向量,Em(x,h(m))E_m(x,h^{(m)})Em​(x,h(m))如式(39)(39)(39)定义。
  正如mcRBM一样,mPoT模型能量函数指定一个多元高斯分布,其中关于xxx的条件分布具有非对角的协方差。mPoT模型中的学习(类似mcRBM)由于无法从非对角高斯条件分布pmPoT(x∣h(m),h(c))p_{mPoT}(x|h^{(m)},h^{(c)})pmPoT​(x∣h(m),h(c))采样而变的复杂,因此Ranzato etal.et \ al.et al.(2010b)也倡导通过哈密尔顿(混合)蒙特卡罗(Neal,1993)直接采样p(x)p(x)p(x)。
  尖峰和平板RBM。尖峰和平板RBM(spike and slab RBM,ssRBM)(Courville etal.et \ al.et al.,2011b)提供对实值数据的协方差结构建模的另一种方法。与mcRBM相比,ssRBM具有既不需要矩阵求逆也不需要哈密尔顿蒙特卡罗方法的优点,就像mcRBM和mPoT模型,ssRBM的二值隐藏单元通过使用辅助实值变量来编码跨像素的条件协方差。
  尖峰和平板RBM有两类隐藏单元:二值尖峰(spike)单元hhh和实值平板(slab)单元sss,条件于隐藏单元的可见单元均值由(h⊙s)WT(h\odot s)W^T(h⊙s)WT给出。换句话说,每一列W:,iW_{:,i}W:,i​定义当hi=1h_i=1hi​=1时可出现在输入中的分量,相应的尖峰变量hih_ihi​确定该分量是否存在。如果存在的话,相应的平板变量sis_isi​确定该分量的强度。当尖峰变量激活时,相应的平板变量将沿着W:,iW_{:,i}W:,i​定义的轴的输入增加方差,这允许我们对输入的协方差建模,幸运的是,使用Gibbs采样的对比散度和持续性对比散度仍然适用。
  形式上,ssRBM模型通过其能量函数定义
Ess(x,s,h)=−∑ixTW:,isihi+12xT(Λ+∑iΦihi)x+12∑iαisi2−∑iαiμisihi−∑ibihi+∑iαiμi2hi(44)E_{ss}(x,s,h)=-\sum_ix^TW_{:,i}s_ih_i+\frac{1}{2}x^T(\Lambda+\sum_i\Phi_ih_i)x+\frac{1}{2}\sum_i\alpha_is_i^2-\sum_i\alpha_i\mu_is_ih_i-\sum_ib_ih_i+\sum_i\alpha_i\mu_i^2h_i \tag{44}Ess​(x,s,h)=−i∑​xTW:,i​si​hi​+21​xT(Λ+i∑​Φi​hi​)x+21​i∑​αi​si2​−i∑​αi​μi​si​hi​−i∑​bi​hi​+i∑​αi​μi2​hi​(44)
其中bib_ibi​是尖峰hih_ihi​的偏置,Λ\LambdaΛ是观测值xxx上的对角精度矩阵。参数αi>0\alpha_i>0αi​>0是实值平板变量sis_isi​的标量精度参数,参数Φi\Phi_iΦi​是定义xxx上的hhh调制二次惩罚的非负对角矩阵,每个μi\mu_iμi​是平板变量sis_isi​的均值参数。
  利用能量函数定义的联合分布,能相对容易地导出ssRBM条件分布,例如,通过边缘化平板变量sss,给定二值尖峰变量hhh,关于观察量的条件分布由下式给出
pss(x∣h)=1P(h)1Z∫exp{−E(x,s,h)}ds=N(x;Cx∣hss∑iW:,iμihi,Cx∣hss)(45)p_{ss}(x|h)=\frac{1}{P(h)}\frac{1}{Z}\int exp\{-E(x,s,h)\}ds=\mathcal{N}(x;C_{x|h}^{ss}\sum_iW_{:,i}\mu_ih_i,C_{x|h}^{ss}) \tag{45}pss​(x∣h)=P(h)1​Z1​∫exp{−E(x,s,h)}ds=N(x;Cx∣hss​i∑​W:,i​μi​hi​,Cx∣hss​)(45)
其中Cx∣hss=(Λ+∑iΦihi−∑iαi−1hiW:,iW:,iT)−1C_{x|h}^{ss}=(\Lambda+\sum_i\Phi_ih_i-\sum_i\alpha_i^{-1}h_iW_{:,i}W_{:,i}^T)^{-1}Cx∣hss​=(Λ+∑i​Φi​hi​−∑i​αi−1​hi​W:,i​W:,iT​)−1,最后的等式只有在协方差阵Cx∣hssC_{x|h}^{ss}Cx∣hss​正定时成立。
  尖峰变量选通意味着h⊙sh\odot sh⊙s上的真实边缘分布是稀疏的,这不同于稀疏编码,其中来自模型的样本在编码几乎没有零,并且需要MAP推断来强加稀疏性。
  相比mcRBM和mPoT模型,ssRBM以明显不同的方式参数化观察量的条件协方差,mcRBM和mPoT都通过(∑jhj(c)r(j)r(j)T+I)−1(\sum_jh_j^{(c)}r^{(j)}r^{(j)T}+I)^{-1}(∑j​hj(c)​r(j)r(j)T+I)−1建模观察量的协方差结构,使用hj>0h_j>0hj​>0的隐藏单元的激活来对方向r(j)r^{(j)}r(j)的条件协方差施加约束。相反,ssRBM使用隐藏尖峰激活hi=1h_i=1hi​=1来指定观察结果的条件协方差,以沿着由相应权重向量指定的方向拟合精度矩阵。ssRBM条件协方差与另一个不同的模型类似,这就是概率主成分分析的乘积(PoPPCA)(WIlliams and Agakov,2002)。在过完备的设定下,ssRBM参数化的稀疏激活仅允许在稀疏激活hih_ihi​的所选方向上有显著方差(高于由Λ−1\Lambda^{-1}Λ−1给出的近似方差)。在mcRBM或mPoT模型中,过完备的表示意味着,捕获观察空间中特定方向上变化需要在该方向上的正交投影下去除潜在的所有约束,这表明这些模型不太适合于过完备设定。
  尖峰和平板RBM的主要缺点是,参数的一些设置会对应于非正定协方差矩阵。这种协方差矩阵会在离均值更远的值上放置更大的未归一化概率,导致所有可能结果上的积分发散。通常这个问题可以通过简单启发式技巧来避免,理论上还没有任何令人满意的解决方法,可以使用约束优化来显式地避免概率未定义的区域,但是可能会阻止模型到达参数空间的高性能区域。
  定性地,ssRBM的卷积变体能产生自然图像的优秀样本。ssRBM允许几个扩展,如平板变量的高阶交互和平均池化(Courville etal.et \ al.et al.,2014)使模型能够在标注数据稀缺时为分类器学习到出色的特征。向能量函数添加一项,能防止配分函数在稀疏编码模型下变的不确定,如尖峰和平板稀疏编码(Goodfellow etal.et \ al.et al.,2013g),也称为S3C。

DBN

  DBN是具有若干潜变量层的生成模型,潜变量通常是二值的,而可见单元可以是二值或实数,每层的每个单元连接到相邻层的每个单元(没有层内连接),顶部两层之间的连接是无向的,而所有其它层之间的连接是有向的,箭头指向最接近数据的层。
  具有lll个隐藏层的DBN有lll个权重矩阵,W(1),…,W(l)W^{(1)},\dots,W^{(l)}W(1),…,W(l),同时也有l+1l+1l+1个偏置向量b(0),…,b(l)b^{(0)},\dots,b^{(l)}b(0),…,b(l),其中b(0)b^{(0)}b(0)是可见层的偏置,DBN表示的概率分布由下式给出
P(h(l),h(l−1))∝exp(b(l)Th(l)+b(l−1)Th(l−1)+h(l−1)TW(l)h(l))(46)P(h^{(l)},h^{(l-1)})\propto exp(b^{(l)T}h^{(l)}+b^{(l-1)T}h^{(l-1)}+h^{(l-1)T}W^{(l)}h^{(l)})\tag{46}P(h(l),h(l−1))∝exp(b(l)Th(l)+b(l−1)Th(l−1)+h(l−1)TW(l)h(l))(46)
P(hi(k)=1∣h(k+1))=σ(bi(k)+W:,i(k+1)Th(k+1))∀i,∀k∈1,…,l−2(47)P(h_i^{(k)}=1|h^{(k+1)})=\sigma(b_i^{(k)}+W_{:,i}^{(k+1)T}h^{(k+1)}) \ \forall i,\forall k\in 1,\dots,l-2 \tag{47}P(hi(k)​=1∣h(k+1))=σ(bi(k)​+W:,i(k+1)T​h(k+1)) ∀i,∀k∈1,…,l−2(47)
P(vi=1∣h(1))=σ(bi(0)+W:,i(1)Th(1))∀i(48)P(v_i=1|h^{(1)})=\sigma(b_i^{(0)}+W_{:,i}^{(1)T}h^{(1)}) \ \forall i \tag{48}P(vi​=1∣h(1))=σ(bi(0)​+W:,i(1)T​h(1)) ∀i(48)
上式是二值可见单元,在实值可见单元的情况下,替换
v∼N(v;b(0)+W(1)Th(1),β−1)(49)v\sim \mathcal{N}(v;b^{(0)}+W^{(1)T}h^{(1)},\beta^{-1}) \tag{49}v∼N(v;b(0)+W(1)Th(1),β−1)(49)
为便于处理,β\betaβ为对角形式,只有一个隐藏层的DBN只是一个RBM。
  为了从DBN中生成样本,我们现在顶部的两个隐藏层上运行几个Gibbs采样步骤,这个阶段主要从RBM(由顶部两个隐藏层定义)采一个样本,然后,我们可以对模型的其余部分使用单次原始采样,以从可见单元绘制样本。
  在深度学习中,通常我们有一系列可见变量vvv和一系列潜变量hhh,推断困难是指难以计算p(h∣v)p(h|v)p(h∣v)或其期望,而这一步操作在一些诸如最大似然学习的任务中往往是必需的。许多仅有一个隐藏层的简单图模型会定义成易于计算p(h∣v)p(h|v)p(h∣v)或其期望的形式,例如RBM和概率PCA。不幸的是,大多数具有多层隐藏变量的图模型的后验分布都很难处理,对于这些模型而言,精确推断算法需要指数级的运行时间,即使一些只有单层的模型如稀疏编码,也存在这样的问题。

  精确推断问题可以描述为一个优化问题,有许多方法正是由此解决了推断的困难,通过近似这样一个潜在的优化问题,我们一般可以推导出近似推断算法。假设有一个具有可见变量vvv和潜变量hhh的概率模型,我们希望计算观察数据的对数概率logp(v;θ)logp(v;\theta)logp(v;θ),有时候如果边缘化消去hhh的操作很费时,会难以计算logp(v;θ)logp(v;\theta)logp(v;θ)。作为替代,我们可以计算一个logp(v;θ)logp(v;\theta)logp(v;θ)的下界L(v,θ,q)\mathcal{L}(v,\theta,q)L(v,θ,q),这个下界被称为证据下界(ELBO),另一个名称是负变分自由能,其定义如下
L(v,θ,q)=logp(v;θ)−DKL(q(h∣v)∣∣p(h∣v;θ))(50)\mathcal{L}(v,\theta,q)=logp(v;\theta)-D_{KL}(q(h|v)||p(h|v;\theta)) \tag{50}L(v,θ,q)=logp(v;θ)−DKL​(q(h∣v)∣∣p(h∣v;θ))(50)
其中qqq是关于hhh的一个任意概率分布。
  因为logp(v)logp(v)logp(v)和L(v,θ,q)\mathcal{L}(v,\theta,q)L(v,θ,q)之间的距离是由KLKLKL散度来衡量的,且KLKLKL散度总是非负的,我们可以发现L\mathcal{L}L总是小于等于所求的对数概率,当且仅当分布qqq完全等于p(h∣v)p(h|v)p(h∣v)时取到等号。L(v,θ,q)=logp(v;θ)−DKL(q(h∣v)∣∣p(h∣v;θ))=logp(v;θ)−Eh∼qlogq(h∣v)p(h∣v)=logp(v;θ)−Eh∼qlogq(h∣v)p(h,v;θ)p(v;θ)=logp(v;θ)−Eh∼q[logq(h∣v)−logp(h,v;θ)+logp(v;θ)]=−Eh∼q[logq(h∣v)−logp(h,v;θ)]=Eh∼q[logp(h,v)]+H(q)(51)\mathcal{L}(v,\theta,q)=logp(v;\theta)-D_{KL}(q(h|v)||p(h|v;\theta)) \\ =logp(v;\theta)-\mathbb{E}_{h\sim q}log\frac{q(h|v)}{p(h|v)} \\ =logp(v;\theta)-\mathbb{E}_{h\sim q}log\frac{q(h|v)}{\frac{p(h,v;\theta)}{p(v;\theta)}} \\ =logp(v;\theta)-\mathbb{E}_{h\sim q}[logq(h|v)-logp(h,v;\theta)+logp(v;\theta)] \\ =-\mathbb{E}_{h\sim q}[logq(h|v)-logp(h,v;\theta)] \\ =\mathbb{E}_{h\sim q}[logp(h,v)]+H(q) \tag{51}L(v,θ,q)=logp(v;θ)−DKL​(q(h∣v)∣∣p(h∣v;θ))=logp(v;θ)−Eh∼q​logp(h∣v)q(h∣v)​=logp(v;θ)−Eh∼q​logp(v;θ)p(h,v;θ)​q(h∣v)​=logp(v;θ)−Eh∼q​[logq(h∣v)−logp(h,v;θ)+logp(v;θ)]=−Eh∼q​[logq(h∣v)−logp(h,v;θ)]=Eh∼q​[logp(h,v)]+H(q)(51)
  对于一个合适选择的分布qqq,L\mathcal{L}L是容易计算的,对任意分布qqq的选择来说,L\mathcal{L}L提供了似然函数的一个下界,我们可以将推断问题看作找一个分布qqq使L\mathcal{L}L最大的过程。
  DBN引发许多与有向模型和无向模型同时相关的问题。由于每个有向层内的相消解释效应,以及无向连接的两个隐藏层之间的相互作用,DBN中推断是难解的,评估或最大化对数似然的标准证据下界也是难以处理的,因为需要基于大小等于网络宽度的团的期望。评估或最大化对数似然,不仅需要面对边缘化潜变量时难以处理的推断问题,而且还需要处理顶部两层无向模型内难处理的配分函数问题。
  为训练深度信念网络,我们可以先使用对比散度或随机最大似然方法训练RBM以最大化Ev∼pdatalogp(v)\mathbb{E}_{v\sim p_{data}}logp(v)Ev∼pdata​​logp(v),RBM的参数定义了DBN第一层的参数,然后第二个RBM训练为近似最大化
Ev∼pdataEh(1)∼p(1)(h(1)∣v)logp(2)(h(1))(52)\mathbb{E}_{v\sim p_{data}}\mathbb{E}_{h^{(1)}\sim p^{(1)}(h^{(1)}|v)}logp^{(2)}(h^{(1)}) \tag{52}Ev∼pdata​​Eh(1)∼p(1)(h(1)∣v)​logp(2)(h(1))(52)
其中p(1)p^{(1)}p(1)是第一个RBM表示的概率分布,p(2)p^{(2)}p(2)是第二个RBM表示的概率分布,换句话说,第二个RBM被训练为模拟由第一个RBM的隐藏单元采样定义的分布,而第一个RBM由数据驱动。这个过程能无限重复,从而向DBN添加任意多层,其中每个新的RBM对前一个RBM的样本建模。这个过程可以被视为提高数据在DBN下似然概率的变分下界。
  在大多数应用中,对DBN进行贪心逐层训练后,不需要再对其进行联合训练,然而使用醒眠算法对其进行生成精调是可能的。训练好的DBN可以直接用作生成模型,但是DBN的大多数兴趣来自它们改进分类模型的能力,我们可以从DBN获取权重,并使用它们定义MLP
h(1)=σ(b(1)+vTW(1))(53)h^{(1)}=\sigma(b^{(1)}+v^TW^{(1)}) \tag{53}h(1)=σ(b(1)+vTW(1))(53)
h(l)=σ(bi(l)+h(l−1)TW(l))∀l∈2,…,m(54)h^{(l)}=\sigma(b_i^{(l)}+h^{(l-1)T}W^{(l)}) \ \forall l\in2,\dots,m \tag{54}h(l)=σ(bi(l)​+h(l−1)TW(l)) ∀l∈2,…,m(54)
利用DBN的生成训练后的权重和偏置初始化该MLP之后,可以训练该MLP来执行分类任务。

Matlab代码实现

%% 主程序
%% 导入mnist数据
N_sample = 1000;p = 784;
x = zeros(N_sample , p);
tic
for i = 1 : N_sampleim = imread(['F:\MATLAB\mnist手写数字\trainimage\pic2\0\' num2str(i) '.bmp']);x(i , :) = double(reshape(im(: , : , 1) , 1 , p) > 10);
end
toc
%% 调用RBM
model = DBN([p 300 100 50]);%创建对象
model = model.train(x , 3000);%训练
model2=model.predict(100);%重构
%% 绘制重构图像
Im = zeros(280 , 280);
for i = 1 : size(model.rbmList(1).testData_x , 1)i0 = floor((i-1)/10);j0 = mod(i-1,10);Im(i0*28+1:(i0+1)*28,j0*28+1:(j0+1)*28) = reshape(model.rbmList(1).testData_x(i , :) , 28 , 28);
end
imshow([Im(1:140,:) Im(141:280,:)]);
classdef DBNpropertiestrainData_x;        %训练数据 xtestData_x;         %测试重构数据v_num;              %参数     v单元的个数h_num;              %参数     每个隐藏层单元的个数N_layer;            %参数     隐藏层的个数N_sample;           %样本总数 N_samplerbmList;            %将各隐藏层封装成列表IterMax;            %最大迭代次数endmethodsfunction obj = DBN(h_num)obj.v_num = h_num(1);obj.N_sample = size(obj.trainData_x,1);obj.h_num=h_num;obj.N_layer=length(h_num);% 创建各隐藏层,num_layer为一个数组,分别确定0,1,2,...层的单元个数rbmList(1:obj.N_layer-1) = pfor(@RBM , h_num(1:end-1) , h_num(2:end));obj.rbmList = rbmList;obj.IterMax = 3000;endfunction obj = train(obj , trainData_x , Iter)            %梯度下降训练if(nargin == 2)Iter = obj.IterMax;endobj.trainData_x = trainData_x;obj.N_sample = size(obj.trainData_x,1);obj.rbmList(1) = obj.rbmList(1).train(trainData_x , Iter);obj.rbmList(1) = obj.rbmList(1).predict(obj.rbmList(1).N_sample);for i = 2 : obj.N_layer-1obj.rbmList(i) = obj.rbmList(i).train(obj.rbmList(i-1).testData_h , Iter);obj.rbmList(i) = obj.rbmList(i).predict(obj.rbmList(i).N_sample);endendfunction obj = predict(obj , num_batch)    %重构testData_x_batch = obj.rbmList(obj.N_layer-1).testData_x(randperm...(obj.rbmList(obj.N_layer-1).N_sample , num_batch) , :);for i = obj.N_layer-2 : -1 : 1obj.rbmList(i) = obj.rbmList(i).predict(num_batch , testData_x_batch);testData_x_batch = obj.rbmList(i).testData_x;endobj.testData_x = testData_x_batch;endend
end
function [output]=pfor(fun , varargin)
Iter = length(varargin{1});
nar = nargin(fun);
arginList = cell(Iter , nar);
for i = 1 : Iterfor j = 1 : nararginList{i , j} = varargin{j}(i);end
end
output(1 : Iter) = fun(arginList{i , :});
for i = 1 : Iteroutput(i) = fun(arginList{i , :});
end
end
classdef RBMpropertiestrainData_x;        %训练数据 xtestData_x;         %测试重构数据testData_h;         %测试重构数据v;                  %可见层单元     vh;                  %隐藏层单元     hv_num;              %参数     v单元的个数h_num;              %参数     h单元的个数w;                  %权重     wb;                  %权重     bc;                  %权重     cN_sample;           %样本总数 N_sampleiter_train;         %当前迭代次数IterMax;            %最大迭代次数batchSize;          %批次大小numIterOfTrain;     %训练时的吉布斯采样迭代次数numIterOfPredict;   %预测时的吉布斯采样迭代次数endmethodsfunction obj = RBM(v_num , h_num)if(nargin == 0)v_num = 1;h_num = 1;endobj.v_num = v_num;obj.h_num = h_num;obj.v = zeros(obj.v_num , 1);obj.h = zeros(obj.h_num , 1);obj.w = rand(obj.v_num , obj.h_num);obj.b = ones(obj.v_num , 1);obj.c = ones(obj.h_num , 1);obj.iter_train = 0;obj.IterMax = 3000;obj.batchSize = 100;obj.numIterOfTrain=15;obj.numIterOfPredict=50;endfunction obj = train(obj , trainData_x , Iter)            %梯度下降训练if(nargin == 2)Iter = obj.IterMax;endobj.trainData_x = trainData_x;obj.N_sample = size(obj.trainData_x,1);batch_size = obj.batchSize;alpha = .1 / batch_size;
%             gradient_w = rand(obj.v_num , obj.h_num);while obj.iter_train < Iter %sum(abs(gradient_w)) > 1e-18 obj.iter_train = obj.iter_train + 1;trainData_x_batch = obj.trainData_x(randperm(obj.N_sample , batch_size) , :);%数据集部分(正相)gradient_w = trainData_x_batch' * sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w);gradient_b = sum(trainData_x_batch)';gradient_c = sum(sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w))';%吉布斯采样部分(负相)k=obj.numIterOfTrain;for i = 1 : kh_batch = double(rand(batch_size , obj.h_num) < sigmoid(repmat(obj.c' , batch_size , 1) +...trainData_x_batch * obj.w));trainData_x_batch = double(rand(batch_size , obj.v_num) < sigmoid(repmat(obj.b' , batch_size , 1) + ...h_batch * obj.w'));endgradient_w = gradient_w - trainData_x_batch' * sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w);gradient_b = gradient_b - sum(trainData_x_batch)';gradient_c = gradient_c - sum(sigmoid(repmat(obj.c' , batch_size , 1) + ...trainData_x_batch * obj.w))';%更新参数obj.w = obj.w + alpha * gradient_w;obj.b = obj.b + alpha * gradient_b;obj.c = obj.c + alpha * gradient_c;%在此绘制权重参数动态图endendfunction obj = predict(obj , num_batch , testData_h_batch)    %重构if(nargin == 3)testData_x_batch = double(rand(num_batch , obj.v_num) < sigmoid(repmat(obj.b' , num_batch , 1) + ...testData_h_batch * obj.w'));elsetestData_x_batch = obj.trainData_x(randperm(obj.N_sample , num_batch) , :);endk=obj.numIterOfPredict;for i = 1 : kh_batch = double(rand(num_batch , obj.h_num) < sigmoid(repmat(obj.c' , num_batch , 1) +...testData_x_batch * obj.w));testData_x_batch = double(rand(num_batch , obj.v_num) < sigmoid(repmat(obj.b' , num_batch , 1) + ...h_batch * obj.w'));endobj.testData_x = testData_x_batch;obj.testData_h = h_batch;endend
end
function output = sigmoid(x)
output =1 ./ (1 + exp(-x));
end

  以下是DBN采样的数字图片结果

DBM

  DBM是另一种深度生成模型,与DBN不同的是,这是一个完全无向的模型,与RBM不同的是,DBM有几层潜变量。但是像RBM一样,每一层内的每个变量是相互独立的,并条件于相邻层中的变量。与RBM和DBN一样,DBM通常仅有二值单元,但很容易能扩展到实数可见单元。DBM是基于能量的模型,这意味着模型变量的联合概率分布由能量函数EEE参数化,在一个DBM有一个可见层vvv和三个隐藏层h(1)h^{(1)}h(1)、h(2)h^{(2)}h(2)和h(3)h^{(3)}h(3)的情况下,联合概率由下式给出
P(v,h(1),h(2),h(3))=1Z(θ)exp(−E(v,h(1),h(2),h(3);θ))(55)P(v,h^{(1)},h^{(2)},h^{(3)})=\frac{1}{Z(\theta)}exp(-E(v,h^{(1)},h^{(2)},h^{(3)};\theta)) \tag{55}P(v,h(1),h(2),h(3))=Z(θ)1​exp(−E(v,h(1),h(2),h(3);θ))(55)
DBM能量函数定义如下
E(v,h(1),h(2),h(3);θ)=−vTW(1)h(1)−h(1)TW(2)h(2)−h(2)TW(3)h(3)−b(0)Tv−b(1)Th(1)−b(2)Th(2)−b(3)Th(3)(56)E(v,h^{(1)},h^{(2)},h^{(3)};\theta)=-v^TW^{(1)}h^{(1)}-h^{(1)T}W^{(2)}h^{(2)}-h^{(2)T}W^{(3)}h^{(3)} \\ -b^{(0)T}v-b^{(1)T}h^{(1)}-b^{(2)T}h^{(2)}-b^{(3)T}h^{(3)} \tag{56}E(v,h(1),h(2),h(3);θ)=−vTW(1)h(1)−h(1)TW(2)h(2)−h(2)TW(3)h(3)−b(0)Tv−b(1)Th(1)−b(2)Th(2)−b(3)Th(3)(56)
  与全连接的玻尔兹曼机相比,DBM提供了类似于RBM的一些优点。DBM的层可以组织成一个二分图,其中奇数层在一侧,偶数层在另一侧,容易发现,当我们条件于偶数层中的变量时,奇数层中的变量条件独立,反之亦然。DBM的二分图结构意味着,我们可以应用之前用于RBM条件分布的相同式子来确定DBM中的条件分布。在给定相邻层值的情况下,层内的单元彼此条件独立,因此二值变量的分布可以由Bernoulli参数完全描述。在具有两个隐藏层的事例中,激活概率由下式给出
P(vi=1∣h(1))=σ(Wi,:(1)h(1))(57)P(v_i=1|h^{(1)})=\sigma(W_{i,:}^{(1)}h^{(1)}) \tag{57}P(vi​=1∣h(1))=σ(Wi,:(1)​h(1))(57)
P(hi(1)=1∣v,h(2))=σ(vTW:,i(1)+Wi,:(2)h(2))(58)P(h_i^{(1)}=1|v,h^{(2)})=\sigma(v^TW_{:,i}^{(1)}+W_{i,:}^{(2)}h^{(2)}) \tag{58}P(hi(1)​=1∣v,h(2))=σ(vTW:,i(1)​+Wi,:(2)​h(2))(58)
P(hk(2)=1∣h(1))=σ(h(1)TW:,k(2))(59)P(h_k^{(2)}=1|h^{(1)})=\sigma(h^{(1)T}W_{:,k}^{(2)}) \tag{59}P(hk(2)​=1∣h(1))=σ(h(1)TW:,k(2)​)(59)
  二分图结构使Gibbs采样能在深度玻尔兹曼机中高效采样,Gibbs采样可以将更新分成两个块,一块为所有偶数层,另一块为所有奇数层,这样可以仅在两次迭代中更新所有单元,高效采样对使用随机最大似然算法的训练尤其重要。
  DBM具有许多有趣的性质。DBM在DBN之后开发,与DBN相比,DBM的后验分布P(h∣v)P(h|v)P(h∣v)更简单,有点违反直觉的是,这种后验分布的简单性允许更加丰富的后验近似。在DBN的情况下,我们使用启发式的近似推断过程进行分类,其中我们可以通过MLP(使用sigmoid激活函数并且权重与原始DBN相同)中的向上传播猜测隐藏单元合理的均匀场期望值。任何分布Q(h)Q(h)Q(h)可用于获取对数似然的变分下界,因此这种启发式的过程让我们能够获取这种的下界。但是,该界没有以任何方式显式优化,所以该界可能是远远不紧的。特别地,QQQ的启发式估计忽略了相同层内隐藏单元之间的相互作用,以及更深层中隐藏单元对更接近输入的隐藏单元自顶向下的反馈影响。因为DBN中基于启发式MLP的推断过程不能考虑这些相互作用,所以获取的QQQ远不是最优的。这种层内相互作用的缺失,使通过不动点方程优化变分下界,并找到真正最佳的均匀场期望变的可能。
  使用适当的均匀场允许DBM的近似推断过程捕获自顶向下反馈相互作用的影响,这从神经科学的角度来看是有趣的,因为根据已知,人脑使用许多自上而下的反馈连接。由于这个性质,DBM已被用作真实神经科学现象的计算模型。
  DBM一个不理想的特性是从中采样困难的。DBN只需要在其顶部的一对层中使用MCMC采样,其它层仅在采样过程末尾涉及,并且只需一个高效的原始采样过程。要从DBM生成样本,必须在所有层中使用MCMC,并且模型的每一层都参与每个马尔科夫链转移。

DBM均匀场推断

  训练的学习过程可以看做关于参数θ\thetaθ最大化证据下界L\mathcal{L}L的过程,EM算法在给定了分布qqq的条件下能够进行大学习步骤,而基于MAP推断的学习算法则是学习一个P(h∣v)P(h|v)P(h∣v)的点估计而非推断整个完整的分布,这里介绍其它的方法。
  变分学习的核心思想是在一个关于qqq的有约束的分布族上最大化L\mathcal{L}L,选择这个分布族时应该考虑到计算EqlogP(h,v)E_qlogP(h,v)Eq​logP(h,v)的难易度。一个典型的方法就是添加分布qqq如何分解的假设,一般是加入一些限制使qqq是一个因子分布
q(h∣v)=∏iq(hi∣v)(60)q(h|v)=\prod_iq(h_i|v) \tag{60}q(h∣v)=i∏​q(hi​∣v)(60)
这被称为均值场方法。更一般地说,我们可以通过选择分布qqq的形式来选择任何图模型的结构,通过选择变量之间相互作用的多少灵活地决定近似程度的大小,这种图模型方法被称为结构化变分推断(structured variational inference)(Saul and Tordan,1996)。
  变分法的优点是,我们不需要为分布qqq设定一个特定的参数形式。我们设定它如何分解,之后通过解决优化问题来找出在这些分解限制下最优的概率分布。对离散型潜变量来说,这意味着我们可以使用传统的优化技巧来优化描述分布qqq的有限个变量。对连续型潜变量来说,这意味着我们使用一个被称为变分法的工具来解决函数空间上的优化问题,而且这时的变分法,不需要过多地人工选择模型,只需要设定分布qqq如何分解,而不需要去猜测一个特定的能够精确近似原后验分布的qqq。
  因为L(v,θ,q)=logp(v;θ)−DKL(q(h∣v)∣∣p(h∣v;θ))\mathcal{L}(v,\theta,q)=logp(v;\theta)-D_{KL}(q(h|v)||p(h|v;\theta))L(v,θ,q)=logp(v;θ)−DKL​(q(h∣v)∣∣p(h∣v;θ)),关于qqq最大化L\mathcal{L}L的问题等价于最小化DKL(q(h∣v)∣∣p(h∣v))D_{KL}(q(h|v)||p(h|v))DKL​(q(h∣v)∣∣p(h∣v)),这时要用qqq来拟合ppp。当我们使用最大似然估计来用模型拟合数据时,我们最小化DKL(pdata∣∣pmodel)D_{KL}(p_{data}||p_{model})DKL​(pdata​∣∣pmodel​),这意味着最大似然鼓励模型在每一个数据达到高概率的地方达到高概率,而基于优化的推断则鼓励qqq在每一个真实后验分布ppp概率低的地方概率较小。这两种基于KL散度的方法都有各自的优点和缺点,选择哪一种方法取决于不同的应用更偏好哪种性质。
   给定相邻层,一个DBM层上的条件分布是因子的,在有两个隐藏层的DBM的示例中,这些分布是P(v∣h(1))P(v|h^{(1)})P(v∣h(1))、P(h(1)∣v,h(2))P(h^{(1)}|v,h^{(2)})P(h(1)∣v,h(2))和P(h(2)∣h(1))P(h^{(2)}|h^{(1)})P(h(2)∣h(1)),因为层之间的相互作用,所有隐藏层上的分布通常不是因子的。
  与DBN一样,我们还是要找出近似DBM后验分布的方法,然而与DBN不同,DBM在其隐藏单元上的后验分布能用均匀场近似来求解。均匀场近似是变分推断的简单形式,其中我们将近似分布限制为完全因子的分布。在DBM的情况下,均匀场方程捕获层之间的双向相互作用。
  令Q(h(1),h(2)∣v)Q(h^{(1)},h^{(2)}|v)Q(h(1),h(2)∣v)为P(h(1),h(2)∣v)P(h^{(1)},h^{(2)}|v)P(h(1),h(2)∣v)的近似,均匀场假设意味着
Q(h(1),h(2)∣v)=∏jQ(hj(1)∣v)∏kQ(hk(2)∣v)(61)Q(h^{(1)},h^{(2)}|v)=\prod_jQ(h_j^{(1)}|v)\prod_kQ(h_k^{(2)}|v) \tag{61}Q(h(1),h(2)∣v)=j∏​Q(hj(1)​∣v)k∏​Q(hk(2)​∣v)(61)
  均匀场近似试图找到这个分布族中最适合真实后验P(h(1),h(2)∣v)P(h^{(1)},h^{(2)}|v)P(h(1),h(2)∣v)的成员,而且,每次我们使用vvv的新值时,必须再次运行推断过程以找到不同的分布QQQ。可以设想很多方法来衡量Q(h∣v)Q(h|v)Q(h∣v)与P(h∣v)P(h|v)P(h∣v)的拟合程度,均匀场方法是最小化
KL(Q∣∣P)=∑hQ(h(1),h(2)∣v)log(Q(h(1),h(2)∣v)P(h(1),h(2)∣v))(62)KL(Q||P)=\sum_hQ(h^{(1)},h^{(2)}|v)log(\frac{Q(h^{(1)},h^{(2)}|v)}{P(h^{(1)},h^{(2)}|v)}) \tag{62}KL(Q∣∣P)=h∑​Q(h(1),h(2)∣v)log(P(h(1),h(2)∣v)Q(h(1),h(2)∣v)​)(62)
  一般来说,处理要保证独立性假设,我们不必提供参数形式的近似分布,变分近似通常能够恢复近似分布的函数形式,然而在这里对于隐藏单元的均匀场假设,设定模型的参数形式不损失一般性。将QQQ作为Bernoulli分布的乘积进行参数化,将h(1)h^{(1)}h(1)每个元素的概率与一个参数相关联,对于每个jjj有h^j(1)=Q(hj(1)=1∣v)\hat{h}_j^{(1)}=Q(h_j^{(1)}=1|v)h^j(1)​=Q(hj(1)​=1∣v),其中h^j(1)∈[0,1]\hat{h}_j^{(1)}\in[0,1]h^j(1)​∈[0,1],另外对于每个kkk有h^k(2)=Q(hk(2)=1∣v)\hat{h}_k^{(2)}=Q(h_k^{(2)}=1|v)h^k(2)​=Q(hk(2)​=1∣v),其中h^k(2)∈[0,1]\hat{h}_k^{(2)}\in[0,1]h^k(2)​∈[0,1]。则有以下近似后验
Q(h(1),h(2)∣v)=∏jQ(hj(1)∣v)∏kQ(hk(2)∣v)=∏j(h^j(1))hj(1)(1−h^j(1))(1−hj(1))×∏k(h^k(2))hk(2)(1−h^k(2))(1−hk(2))(63)Q(h^{(1)},h^{(2)}|v)=\prod_jQ(h_j^{(1)}|v)\prod_kQ(h_k^{(2)}|v) \\ =\prod_j(\hat{h}_j^{(1)})^{h_j^{(1)}}(1-\hat{h}_j^{(1)})^{(1-h_j^{(1)})}\times\prod_k(\hat{h}_k^{(2)})^{h_k^{(2)}}(1-\hat{h}_k^{(2)})^{(1-h_k^{(2)})} \tag{63}Q(h(1),h(2)∣v)=j∏​Q(hj(1)​∣v)k∏​Q(hk(2)​∣v)=j∏​(h^j(1)​)hj(1)​(1−h^j(1)​)(1−hj(1)​)×k∏​(h^k(2)​)hk(2)​(1−h^k(2)​)(1−hk(2)​)(63)
现在已经指定了近似分布QQQ的分布族,但仍需要指定用于选择该函数族中最适合PPP的成员的过程,最直接的方法是,通过求解变分下界倒数为零的位置而导出
∂∂h^L(v,θ,h^)=0(64)\frac{\partial}{\partial\hat{h}}\mathcal{L}(v,\theta,\hat{h})=0 \tag{64}∂h^∂​L(v,θ,h^)=0(64)
我们有以下更新规则
hj(1)=σ(∑iviWi,j(1)+∑k′Wj,k′(2)h^k′(2)),∀j(65)h_j^{(1)}=\sigma(\sum_iv_iW_{i,j}^{(1)}+\sum_{k'}W_{j,k'}^{(2)}\hat{h}_{k'}^{(2)}),\ \forall j \tag{65}hj(1)​=σ(i∑​vi​Wi,j(1)​+k′∑​Wj,k′(2)​h^k′(2)​), ∀j(65)
h^k(2)=σ(∑j′Wj′,k(2)h^j′(1)),∀k(66)\hat{h}_k^{(2)}=\sigma(\sum_{j'}W_{j',k}^{(2)}\hat{h}_{j'}^{(1)}),\forall k \tag{66}h^k(2)​=σ(j′∑​Wj′,k(2)​h^j′(1)​),∀k(66)
对于具有两个隐藏层的深度玻尔兹曼机L\mathcal{L}L由下式给出
L(Q,θ)=∑i∑j′viWi,j′(1)h^j′(1)+∑j′∑k′h^j′(1)Wj′,k′(2)hk′(2)−logZ(θ)+H(Q)(67)\mathcal{L}(Q,\theta)=\sum_i\sum_{j'}v_iW_{i,j'}^{(1)}\hat{h}_{j'}^{(1)}+\sum_{j'}\sum_{k'}\hat{h}_{j'}^{(1)}W_{j',k'}^{(2)}h_{k'}^{(2)}-logZ(\theta)+\mathcal{H}(Q) \tag{67}L(Q,θ)=i∑​j′∑​vi​Wi,j′(1)​h^j′(1)​+j′∑​k′∑​h^j′(1)​Wj′,k′(2)​hk′(2)​−logZ(θ)+H(Q)(67)
该表达式仍然有对数配分函数logZ(θ)logZ(\theta)logZ(θ),因此依然有配分函数和采样的困难,这意味着评估玻尔兹曼机的概率质量函数需要近似方法,训练模型需要近似对数配分函数的梯度。对比散度是缓慢的,因为它们不能在给定可见单元时对隐藏单元进行高效采样,每当需要心的负相样本时,对比散度将需要磨合一条马尔科夫链,DBM通常使用随机最大似然训练。不幸的是,随机初始化后使用随机最大似然训练的DBM通常导致直白,在一些情况下,模型不能学习如何充分地表示分布,在其它情况下,DBM可以很好地表示分布,但是没有比仅使用RBM获取更高的似然,除第一层外,所有层都具有非常小权重的DBM与RBM表示大致相同的分布,因此,目前开发了允许联合训练的各种技术。


用以训练两个隐藏层的DBM的变分随机最大似然算法
设步长ϵ\epsilonϵ为一个小的证书,设定吉布斯步数kkk,达到足以让p(v,h(1),h(2);θ+ϵΔθ)p(v,h^{(1)},h^{(2)};\theta+\epsilon\Delta_\theta)p(v,h(1),h(2);θ+ϵΔθ​)的马尔科夫链混合(从来自p(v,h(1),h(2);θ)p(v,h^{(1)},h^{(2)};\theta)p(v,h(1),h(2);θ)的样本开始)
初始化3个矩阵,V~\tilde{V}V~、H~(1)\tilde{H}^{(1)}H~(1)和H~(2)\tilde{H}^{(2)}H~(2)每个都将mmm行设为随机值
whilewhilewhile 没有收敛(均匀场推断循环)dododo
H^(1)←sigmoid(VW(1)+H^(2)W(2)T)\ \ \hat{H}^{(1)}\leftarrow sigmoid(VW^{(1)}+\hat{H}^{(2)}W^{(2)T})  H^(1)←sigmoid(VW(1)+H^(2)W(2)T)
H^(2)←sigmoid(H^(1)W(2))\ \ \hat{H}^{(2)}\leftarrow sigmoid(\hat{H}^{(1)}W^{(2)})  H^(2)←sigmoid(H^(1)W(2))
endwhileend \ whileend while
ΔW(1)←1mVTH^(1)\Delta_{W^{(1)}}\leftarrow\frac{1}{m}V^T\hat{H}^{(1)}ΔW(1)​←m1​VTH^(1)
ΔW(2)←1mH^(1)TH^(2)\Delta_{W^{(2)}}\leftarrow\frac{1}{m}\hat{H}^{(1)T}\hat{H}^{(2)}ΔW(2)​←m1​H^(1)TH^(2)
forl=1tok(Gibbs采样)dofor \ l=1 \ to \ k \ (Gibbs采样) \ dofor l=1 to k (Gibbs采样) do
Gibbsblock1:\ \ Gibbs \ block \ 1:  Gibbs block 1:
∀i,j,V~i,j\ \ \forall i,j,\tilde{V}_{i,j}  ∀i,j,V~i,j​采自P(V~i,j=1)=sigmoid(Wj,:(1)(H~i,:(1)T))P(\tilde{V}_{i,j}=1)=sigmoid(W_{j,:}^{(1)}(\tilde{H}_{i,:}^{(1)T}))P(V~i,j​=1)=sigmoid(Wj,:(1)​(H~i,:(1)T​))
∀i,j,H~i,j(2)\ \ \forall i,j,\tilde{H}_{i,j}^{(2)}  ∀i,j,H~i,j(2)​采自P(H~i,j(2)=1)=sigmoid(H~i,:(1)W:,j(2))P(\tilde{H}_{i,j}^{(2)}=1)=sigmoid(\tilde{H}_{i,:}^{(1)}W_{:,j}^{(2)})P(H~i,j(2)​=1)=sigmoid(H~i,:(1)​W:,j(2)​)
Gibbsblock2:\ \ Gibbs \ block \ 2:  Gibbs block 2:
∀i,j,H~i,j(1)\ \ \forall i,j,\tilde{H}_{i,j}^{(1)}  ∀i,j,H~i,j(1)​采自P(H~i,j(1)=1)=sigmoid(V~i,:W:,j(1)+H~(2)Wj,:(2)T)P(\tilde{H}_{i,j}^{(1)}=1)=sigmoid(\tilde{V}_{i,:}W_{:,j}^{(1)}+\tilde{H}^{(2)}W_{j,:}^{(2)T})P(H~i,j(1)​=1)=sigmoid(V~i,:​W:,j(1)​+H~(2)Wj,:(2)T​)
endforend \ forend for
ΔW(1)←ΔW(1)−1mVTH~(1)\Delta_{W^{(1)}}\leftarrow\Delta_{W^{(1)}}-\frac{1}{m}V^{T}\tilde{H}^{(1)}ΔW(1)​←ΔW(1)​−m1​VTH~(1)
ΔW(2)←ΔW(2)−1mH~(1)TH~(2)\Delta_{W^{(2)}}\leftarrow \Delta_{W^{(2)}}-\frac{1}{m}\tilde{H}^{(1)T}\tilde{H}^{(2)}ΔW(2)​←ΔW(2)​−m1​H~(1)TH~(2)
W(1)←W(1)+ϵΔW(1)W^{(1)}\leftarrow W^{(1)}+\epsilon\Delta_{W^{(1)}}W(1)←W(1)+ϵΔW(1)​
W(2)←W(2)+ϵΔW(2)W^{(2)}\leftarrow W^{(2)}+\epsilon\Delta_{W^{(2)}}W(2)←W(2)+ϵΔW(2)​
endwhileend \ whileend while


RBM受限玻尔兹曼机的公式推导及代码实现(matlab)相关推荐

  1. RBM(受限玻尔兹曼机)原理及代码

    本文转自http://blog.csdn.net/zdy0_2004/article/details/45798223,虽然源贴也是转载的,转自http://www.cnblogs.com/xiaok ...

  2. RBM受限玻尔兹曼机

    受限玻尔兹曼机(RBM) 一.RBM的网络结构 RBM的网络结构如下图所示: RBM中包括两层,即: 可见层(visible layer),图上的___v___ 隐藏层(hidden layer),图 ...

  3. RBM受限玻尔兹曼机的一点理解

    RBM是玻尔兹曼机的一种,每一个layer之间的node没有相连. 一个很好的介绍看这里,是一个intuitive的introduction. RBM最重要的一点就是只有两层,两层之间即可以向前传播, ...

  4. RBM(受限玻尔兹曼机)解析

    1.RBM结构 RBM包括隐层.可见层和偏置层.与前馈神经网络不一样,RBM在可见层和隐层间的链接方向不定的(值可以双向传播,隐层->可见层和可见层->隐层)和完全链接的. Boltzma ...

  5. 受限玻尔兹曼机RBM的基本原理详细概述

    RBM受限玻尔兹曼机是组成深度信念网络的一种基本单元,RBM是一种概率生成模型也是一种能量模型, RBM模块中主要包括一个隐含层和一个可见层.其中,受限玻尔兹曼机的隐含层和可见层是通过双向连接的方式进 ...

  6. keras 受限玻尔兹曼机_目前深度学习的模型有哪几种,适用于哪些问题?

    深度学习的模型有很多, 目前开发者最常用的深度学习模型与架构包括 CNN.DBN.RNN.RNTN.自动编码器.GAN 等.雷锋网搜集整理了涉及以上话题的精品文章,供初学者参考,加速深度学习新手入门. ...

  7. 受限玻尔兹曼机的python参考实现

    简介 众所周知,玻尔兹曼机好是好,但是太复杂了,所以在实际应用中不会使用.而受限玻尔兹曼机(Restricted Boltzmann machine, RBM)是它的一个带约束的版本,因此模型变得更加 ...

  8. 【总结】关于玻尔兹曼机(BM)、受限玻尔兹曼机(RBM)、深度玻尔兹曼机(DBM)、深度置信网络(DBN)理论总结和代码实践

    近期学习总结 前言 玻尔兹曼机(BM) 波尔兹曼分布推导过程 吉布斯采样 受限玻尔兹曼机(RBM) 能量函数 CD学习算法 代码实现受限玻尔兹曼机 深度玻尔兹曼机(DBM) 代码实现深度玻尔兹曼机 深 ...

  9. 受限玻尔兹曼机(RBM)与python在Tensorflow的实现

    任何程序错误,以及技术疑问或需要解答的,请扫码添加作者VX:1755337994 简介 受限玻尔兹曼机是一种无监督,重构原始数据的一个简单的神经网络. 受限玻尔兹曼机先把输入转为可以表示它们的一系列输 ...

最新文章

  1. 学习笔记-4.1用户管理命令
  2. Hierarchical Cluster 层次聚类
  3. CentOS6.8 安装/升级Python2.7.x,并安装最新setuptools、pip、fabric程序总结
  4. 《Neo4j全栈开发》_陈韶健
  5. 终极指南:如何使用Visual Studio Code进行 Java 开发?
  6. 3、play中的模板引擎
  7. 软件测试菲律宾,英雄联盟手游菲律宾测试资格怎么得 菲律宾测试资格获取攻略[多图]...
  8. python 神经网络原理_神经网络理论基础及Python实现
  9. oracle强制drop用户,强制Oracle Drop全局临时表
  10. mysql性能优化配置总结
  11. WINDOWS常用端口
  12. 压力测试工具之DDos-Attack
  13. 众说纷纭的ul、ol、li
  14. Linq,企业类库,EXECL生成,Execl chart的一些基本操作记录.(一)
  15. 7.7-11 重定位过程描述+可执行目标文件的加载+共享库动态链接
  16. 看雪论坛论坛小测试的答案
  17. LintCode—合并两个排序链表(165)
  18. 1 Arduino开发软件和下载程序
  19. 1-10 图灵测试:机器会思考吗? (笔记)
  20. haosou属于搜索引擎的_中国的搜索引擎有哪些?

热门文章

  1. 风华是一指流砂,苍老了一段过往年华
  2. 使用UltraISO制作Ubuntu16.04 U盘启动盘
  3. 计算机再医学前沿领域的应用,计算机在医学前沿领域的应用
  4. 揪心的问题-f2py
  5. 债转股问题研究(lunwen+开题报告+外文翻译)
  6. blur表单验证方式
  7. 分式加法JAVA程序_十五:实战2-分式计算器
  8. php弹幕,PHP直播源码,实现简单弹幕效果
  9. nginx指定目录安装
  10. 全排列-python递归解法