玻尔兹曼机和受限玻尔兹曼机

Boltzmann Machines起源

在上一篇博客Hopfield神经网络学习(HNN)中,我们提到Hopefield网络容易发生串扰或陷入局部最优解,导致网络不能正确的识别模式,Boltzmann Machines通过让每个单元按照一定的概率分布发生状态变化可以解决这个问题。

Boltzmann Machines的结构

Boltzmann Machines保持了Hopefield的假设:

  • 权重对称
  • 自身无连接
  • 二值输出

输出单元 i i​ 有一定的概率改变自身的值,首先需要计算它的总输入 z i z_i​ :
(1) z i = b i + j s j w i j z_i=b_i+\sum_js_jw_{ij}\tag{1}​
上式中 w i j w_{ij}​ 是连接单元 i i​ j j​ 的权重,然后单元 i i​ 会按照下面的概率更新自身:
(2) p r o b ( s i = 1 ) = 1 1 + e z i prob(s_i=1)=\frac{1}{1+e^{-z_i}}\tag{2}​

当所有的神经元都不再更新的时候,网络达到了一个平稳状态(参考马尔科夫链的平稳分布),即Boltzmann Distribution,在这个分布中,所有状态 v v​ 的概率取决于状态空间中该状态的能量。
(3) P ( v ) = e E ( v ) u e E ( u ) P(v)=\frac{e^{-E(v)}}{\sum_ue^{-E(u)}}\tag{3}​
分母是所有状态的能量之和,分子是当前状态的能量,即每个状态的能量的归一化比例,一个状态的能量越小其出现概率越高。

我们在Hopefield网络中对每一个状态的能量已经有了定义:
(4) E ( v ) = i s i v b i i < j s i v s j v w i j E(v)=-\sum_is_i^vb_i-\sum_{i<j}s_i^vs_j^vw_{ij}\tag{4}
其中 s i v s_i^v 是状态v第i个神经元的二值状态。

玻尔兹曼机可以用来解决两类问题。一类是搜索问题。当给定变量之间的连接权重,需要找到一组二值向量,使得整个网络的能量最低。另一类是学习问题。当给一组定部分变量的观测值时,计算一组最优的权重。

Boltzmann Machines的搜索问题

在玻尔兹曼机中,配分函数Z 通常难以计算,因此,联合概率分布p(x)一般通过MCMC方法来近似,生成一组服从p(x)分布的样本。本节介绍基于吉布斯采样的样本生成方法。

吉布斯采样需要计算每个变量X i 的全条件概率KaTeX parse error: Expected '}', got '\i' at position 10: p(x_i|x_{\̲i̲}),其中KaTeX parse error: Expected 'EOF', got '\i' at position 2: x\̲i̲表示除变量 x i x_i 外其它变量的取值。

(5) p r o b ( s i = 1 ) = 1 1 + e b i + j s j w i j prob(s_i=1)=\frac{1}{1+e^{b_i+\sum_js_jw_{ij}}}\tag{5}

不同于Hopefield网络,Boltzmann Machines加入了对神经元更新自身时的概率限制,可以帮助网络跳出局部最小点,从而能够得到更优的解。具体来讲就是:我们在讲Hopefield网络的时候谈到,为了让每次状态变化的时候能量变换量都小于0,我们设计了能量变化量的计算公式,但是如果我们以一定的概率舍弃神经单元的更新,那么这个假设便不成立了,也就是说能量可能会上升,而不是一直下降,这就给了网络一个跳出局部极小点的机会。

这个思想类似于模拟退火的思想,模拟退火是一种寻找全局最优的近似方法,其名字来自冶金学的专有名词“退火”,即将材料加热后再以一定的速度退火冷却,可以减少晶格中的缺陷。固体中的内部粒子会停留在使内能有局部最小值的位置,加热时能量变大,粒子会变得无序并随机移动。退火冷却时速度较慢,使得粒子在每个温度都达到平衡态。最后在常温时,粒子以很大的概率达到内能比原先更低的位置。可以证明,模拟退火算法所得解依概率收敛到全局最优解

Boltzmann Machines的学习问题

不含隐藏层的学习

给定某一状态空间下的训练集(数据),学习出权重矩阵、偏置矩阵,使得这些训练样本的对数似然函数尽可能的高,即EBM(Energy Based Model)模型中的学习问题。

通过对Eq.3和Eq.4求导我们可以得到:
E ( v ) w i j = s i v s j v \frac{\partial E(v)}{\partial w_{ij}}=-s_i^vs_j^v​
l o g P ( v ) w i j = < s i s j > d a t a < s i s j > m o d e l \frac{\partial logP(v)}{\partial w_{ij}}=<s_is_j>_{data}-<s_is_j>_{model}​

有了目标函数,接下来我们只需要应用梯度上升算法,在训练集上进行训练,最大化所有样本的对数概率,就能够得到一组理想的参数。

如果训练样本中对每一个神经元都赋予了一个0-1值,那么这个问题就是一个凸优化问题,存在且只存在一个全局最优解,但是往往训练样本的空间的维度小于Boltzmann Machines的状态空间的维度,因此存在多个局部最小值。

包含隐藏层的学习

当Boltzmann Machines网络中既包含可被观察到的可见神经元,又包含不可见神经元的时候,网络可以表达更加复杂的模式,就像上面我们说的,样本数据的维度往往小于Boltzmann Machines状态空间的维度,但是我们又无法直接扩充训练集的维度,因此我们在网络中加入隐藏单元,这样网络就可以在隐藏单元和可见单元之间建立联系,而不仅仅是在可见单元之间建立联系,而这些不可见单元的值并没有在训练样本中指定,这使得我们能够捕获更加高阶的数据分布。

加入隐藏单元之后,我们的学习算法并不需要做出改变,但是隐藏单元的值需要一直更新直到达到稳定分布。

学习速度

包含多层隐藏单元和可见单元的Boltzmann Machines的学习是非常慢的,因为网络越大,达到稳定分布所需要的时间就越长,尤其是当权重矩阵的值较大的时候,最终达到的稳定分布很有可能是高维多峰的。我们可以通过限制连接、简化学习算法或者依次只学习一个隐藏层来缓解这个问题。

不同类型的Boltzmann Machines

High-Order Boltzmann Machines

Boltzmann Machines的动态随机算法和学习算法可以使用更加复杂的能量函数,比如能量函数中的第二项可以替换为 s i s j s k w i j k s_is_js_kw_{ijk} ,然后总输入 z z 也需要变成 z i = b i + j < k s j s k w i j k z_i = b_i + \sum_{j<k}s_js_kw_{ijk}

Conditional Boltzmann Machines

Boltzmann Machines 建模了数据的分布,我们可以将其扩展一下用来对条件分布进行建模。当我们计算 < s i s j > d a t a <s_is_j>_{data} 的时候,计算了可见单元的值,但是没有计算隐藏单元的值,如果我们取出一部分可见单元做为input,并从中抽样作为样本,那么其余的可见单元就是output,我们就得到了条件概率 P ( o u t p u t i n p u t ) P(output|input) 的建模,学习算法仍然不变。

Mean Field Boltzmann Machines

没看懂

Non-Binary Units

Boltzmann Machines的神经单元默认都是二值的,只有0和1两个取值,我们可以将其泛化到softmax单元、高斯单元、泊松单元或者其他任何属于指数簇的单元,使其拥有更多的取值。这些单元的特性是其参数的变化对对数概率的影响是线性的,因此我们不需要修改学习算法。

Restricted Boltzmann Machines

当Boltzmann Machines 包含很多可见单元层和隐藏单元层的时候会导致网络的训练特别困难,因此在其上加一些限制,使得层内单元之间没有连接,如下图所示:

RBMs

和其他模型的联系

参考文献

Boltzmann Machines

A Beginner’s Guide to Restricted Boltzmann Machines (RBMs)

深度学习基础:Boltzmann Machines

受限玻尔兹曼机基础教程

受限玻尔兹曼机(RBM)学习笔记

基于能量的模型和波尔兹曼机

深度学习读书笔记之RBM(限制波尔兹曼机)

一起读懂传说中的经典:受限玻尔兹曼机

猜你喜欢

转载自blog.csdn.net/serryuer/article/details/89350019