《图解深度学习》学习笔记(三)

第四章 受限玻尔兹曼机

受限玻尔兹曼机是起源于图模型的神经网络。这种网络是由Hopfield神经网络那样的相互连接型网络衍生而来的。

Hopfield神经网络玻尔兹曼机受限玻尔兹曼机、多个受限玻尔兹曼机堆叠组成的深度信念网络

神经网络分为两大类:

  1. 前面介绍过的多层神经网络。分层。
  2. 相互连接型网络不分层单元之间相互连接,(可看做同层之间也互相连接)。它能够根据每个单元的值记忆网络状态,被称为:联想记忆。

人类的大脑能够根据某种输入信息记忆或者联想与之有关的信息,比如看到“苹果”能够想到“红色”,看到“香蕉”能够想到“黄色”。

联想记忆就是通过在事物之间建立对应关系来记忆的方法。多层神经网络和卷积神经网络可应用于模式识别,而相互连接型网络可通过联想记忆去除输入数据中的噪声

一、Hopfield神经网络

Hopfield神经网络是最典型的相互连接型网络:具有以下优点:

  • 单元之间的连接权重对称(w_{ij} = w_{ji})(无向或说双向对等)
  • 每个单元没有到自身的连接(w_{ii}=0)(无自环,无自联)
  • 单元的状态变化采用随机异步更新方式,每次只有一个单元改变状态。

Hopfield神经网络是由n个二值单元组成的二值神经网络,每个单元i的输出只能是0或1两个值,故而网络由2^{n}种状态。

联想记忆就是当输入模式为某种状态时,输出端要给出与之相应的输出模式y

  • 自联想记忆:输入模式与输出模式一致
  • 异联想记忆:输入模式与输出模式不一致

所谓的输入模式,输出模式,或者说模式,就是指每个神经元的0或1状态的组合模式。每一种组合都是一种模式。每个模式对应一种状态。网络从这个神经元的0或1状态中记忆联想来调整权重使总能量最小。

训练过程:

设有由n个单元组成的Hopfield神经网络,第i个单元在t(t=0, 1, 2, ...)时刻的输入记作u_{i}(t),输出记作x_{i}(t),连接权重为w_{ij},阈值为b_{i}(t),则t+1时刻单元的输出x_{i}(t+1)可用下式表示。

x_{i}(t+1) = \left\{\begin{matrix} 1 \\ x_{i}(t) \\ 0 \end{matrix}\right.      \begin{matrix} u_{i}(t) > 0\\ u_{i}(t) = 0\\ u_{i}(t) < 0 \end{matrix}                u_{i}(t) = \sum_{j=1}^{n}w_{ij}x_{j}(t) - b_{i}(t)

如果单元接收的来自其他单元的输入x_{j}(t)的权重总和\sum_{j=1}^{n}w_{ij}x_{j}(t)大于阈值b_{i}(t),则单元的输出就取值为1;如果小于阈值b_{i}(t),则单元的输出就取值为0。(直白点讲:就说神经元有没有被激活。大于阈值就激活。)

在Hopfield神经网络中,每个时刻只有一个随机选择的单元发生状态变化。对于一个由n个单元组成的网络,如果要完成全部单元的状态变化,至少需要n个时刻。实际上,单元的状态变化会一直进行下去,直到网络达到稳定状态各单元的最终状态就是输出模式y。

目标函数:

根据输入模式联想输出模式时,需要实现确定连接权重w_{ij}。而连接权重w_{ij}要对输入模式的训练样本进行训练才能确定。和神经网络一样,一次训练并不能确定连接权重,而是不断重复这个训练过程,直到满足终止判断条件。而这个满足条件的指标就是表示Hopfield神经网络状态能量函数(误差函数)EE= -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}w_{ij}x_{i}x_{j}+\sum_{i=1}^{n}b_{i}x_{i} 。(目标函数)

为研究能量函数如何变化,将能量函数分解成单元k的能量函数和k以外的单元的能量函数。

由于Hopfield神经网络采用随机异步更新方式,所以除单元k以外,其他单元的状态不发生变化

从t时刻至t+1时刻,单元k的输出值变化如下:

x_{k}(t)\rightarrow x_{k}(t+1)      :要么激活,要不激活。要么为1,要么为0。

\Delta x_{k} = x_{k}(t+1) - x_{k}(t)   :结果会变为1或-1。要么从0变到1,要么从1变到0。1-0或者0-1。

单元k的状态变化量\Delta x_{k}相对应的能量函数变化量\Delta E_{k}

\Delta E_{k} = -u_{k}\Delta x_{k}

分析这个\Delta E_{k} :

  • \Delta x_{k} > 0时,说明1-0,单元k的输出值x_{k}从0变为了1。也就是说阈值激活,u_{k} > 0。此时的\Delta E_{k} < 0;
  • \Delta x_{k} < 0时,说明0-1,单元k的输出值x_{k}从1变为了0。也就是说阈值激活,u_{k} < 0。此时的\Delta E_{k} < 0;
  • 如果k的状态不变,此时\Delta x_{k} = 0,那么 \Delta E_{k} = 0;即:当输入模式与输出模式一致时,能量函数E的结果为0。

综上:\Delta E_{k} \leqslant 0。总是成立的。 

也就是说随着时间的不断增加E逐渐减小,直到网络达到稳定状态为止。

 

接下来,我们将P个模式输入到网络中,训练网络的连接权重,以记忆这些模式。模式用\large x^{s} = (x_{1}^{s},x_{2}^{s},x_{3}^{s},..,x_{n}^{s})\left ( s = 1, 2, ..., P \right )表示。

所谓记忆模式\large x^{s},就是求与模式对应的能量函数的极小值。

阈值为0时,与模式\large x^{s},对应的能量函数(误差函数):E^{s}= - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}w_{ij}^{s}x_{i}^{s}x_{j}^{s}。为了使能量函数(误差函数)收敛于极小值,可以做出假设:w_{ij}^{s} = x_{i}^{s}x_{j}^{s}。这样能量函数(误差函数)就可以用公式E^{s}= - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}(x_{i}^{s})^{2}(x_{j}^{s})^{2}这样的相互影响矩阵来表示了。网络需要记忆P个模式,因此所有模式的连接权重:w_{ij} = \frac{1}{p}\sum_{i=1}^{n}w_{ij}^{s} = \frac{1}{p}\sum_{i=1}^{n}x_{i}^{s}x_{j}^{s}

 

如图4.2(a)这样的两种模式为例,来进行Hopfield神经网络的联想训练。这两种训练模式的图像样本由5 \times 5 个像素组成,像素值为1的是白色,为0的是黑色。

Hopfield神经网络会把每一个像素作为一个单元用0对单元之间的连接权重w_{ij}进行初始化。(零启动初始化。)

根据公式:x_{i}(t+1) = \left\{\begin{matrix} 1 \\ x_{i}(t) \\ 0 \end{matrix}\right.      \begin{matrix} u_{i}(t) > 0\\ u_{i}(t) = 0\\ u_{i}(t) < 0 \end{matrix}                u_{i}(t) = \sum_{j=1}^{n}w_{ij}x_{j}(t) - b_{i}(t),调节连接权重后,得到的连接权重如图4.3所示。一些连接权重的值比较大,但是连接权重矩阵的对角线元素为0。

测试时,训练模式使用的是含有噪声的样本图像(图4.2(b))。虽然训练时使用所有的训练模式来更新连接权重,但在测试时是逐张添加图像的,最终分别得到相应的结果(图4.2(c))。由此可见,即使训练模式中含有噪声,Hopfield神经网络也能联想出原本的模式。

接下来再来看看如图4.4(a)所示的三种模式时的网络训练。使用如图4.4(b)所示的含有噪声的模式作为测试图像时,Hopfield神经网络输出的是如图4.4(c)所示的模式。虽然训练时使用的模式各不相同,但是Hopfield神经网络还是误把“1”识别成了“4”。这是因为“4”中包含了“1”中的全部竖线,所以网络根据竖线联想到了“4”。w_{ij} = \frac{1}{p}\sum_{i=1}^{n}w_{ij}^{s} = \frac{1}{p}\sum_{i=1}^{n}x_{i}^{s}x_{j}^{s}是针对所有模式的近似连接权重,所以当需要记忆的模式之间较为相似,或者需要记忆的模式太多时,Hopfield神经网络就不能正确地辨别模式。这种相互干扰不能准确记忆的情况称为串扰(crosstalk)。Hopfield神经网络能够记忆的模式数量有限,大约是网络单元数15%左右。为了防止串扰,可以采用先把模式正交化再进行记忆等方法。

二、玻尔兹曼机

如果发生串扰陷入局部最优解,Hopfield神经网络就不能正确地辨别模式。而玻尔兹曼机(Boltzmann Machine)则可以通过让每个单元按照一定的概率分布发生状态变化,来避免陷入局部最优解。

玻尔兹曼机:

  • 各单元之间的连接权重是对称的,即w_{ij} = w_{ji},且没有到自身的连接w_{ii}=0
  • 每个单元的输出要么是0,要么是1。(以上两个特点与Hopfield相同。)
  • 玻尔兹曼机的输出按照某种概率分布决定的。而Hopfield神经网络的输出是按照某种确定性决定的。(两者最大不同。)

 

 

输出:\large \left\{\begin{matrix} p(x_{i}=1\mid u_{i}) = \frac{exp(\frac{x}{kT})}{1 + exp(\frac{x}{kT})}\\ p(x_{i}=0\mid u_{i}) = \frac{1}{1 + exp(\frac{x}{kT})} \end{matrix}\right.

T表示温度系数(>0)。如图4.5所示,随着kT值的增大,\large x_{i}等于1的概率没有显著变化;相反,随着kT值的减小,曲线在0附近的斜率急剧增大。当T趋近于无穷大时,无论\large u_{i}取值如何,\large x_{i}等于1或0的概率都分别是1/2,这种状态称为稳定状态。

对于玻尔兹曼机来说,温度系数越大,跳出局部最优解的概率越高。但是温度系数增大时,获得能量函数极小值的概率就会降低;反之,温度系数减小时,虽然获得能量函数极小值的概率增加了,但是玻尔兹曼机需要经历较长时间才能达到稳定状态。不过,模拟退火算法能够解决这个问题,这个算法会先采用较大的温度系数进行粗调,然后逐渐减小温度系数进行微调。(调节显微镜也这么调的吧)。根据公式\large T = \frac{c}{log(t+1)}就可以获得温度系数T的极小值。

训练过程:

玻尔兹曼机和Hopfield神经网络一样,也是相互连接型网络。两者的连接权重定义和训练过程也一样。

(网络结构一样,系数定义方式一样,训练流程一样。状态激活方式一样,唯独激活以后的输出不同。)前者输出x_{i}等于1或0的概率,后者输出x_{i}等于1或者0。一个是概率,一个是定值

首先,使用随机数或相关系数矩阵初始化连接权重。接下来,选取一个单元 i,根据u_{i}(t) = \sum_{j=1}^{n}w_{ij}x_{j}(t) - b_{i}(t)计算该单元的激活值u_{i}。根据x_{i}(t+1) = \left\{\begin{matrix} 1 \\ x_{i}(t) \\ 0 \end{matrix}\right.      \begin{matrix} u_{i}(t) > 0\\ u_{i}(t) = 0\\ u_{i}(t) < 0 \end{matrix}可知,当u_{i} > 0时x_{i}=1,当u_{i} < 0时x_{i}=0, 当u_{i} = 0时x_{i}=x_{i}。然后根据x_{i}的值,利用公式\large \left\{\begin{matrix} p(x_{i}=1\mid u_{i}) = \frac{exp(\frac{x}{kT})}{1 + exp(\frac{x}{kT})}\\ p(x_{i}=0\mid u_{i}) = \frac{1}{1 + exp(\frac{x}{kT})} \end{matrix}\right.,计算出x_{i}等于1或0的概率值,并根据这个概率调整x_{i}的值。

利用公式\large \left\{\begin{matrix} p(x_{i}=1\mid u_{i}) = \frac{exp(\frac{x}{kT})}{1 + exp(\frac{x}{kT})}\\ p(x_{i}=0\mid u_{i}) = \frac{1}{1 + exp(\frac{x}{kT})} \end{matrix}\right.计算得到的是概率,不能直接作为x_{i}的值使用,而应该把这个概率作为出现概率来决定x_{i}的值

在调整连接权重w_{ij}时,按照相同的步骤计算单元j的值x_{j}。如果x_{i}x_{j}两者均为1,则增大w_{ij},并对所有单元迭代实施相同的处理。然后,向网络输入任意的训练样本,按照相同步骤计算x_{i}x_{j}。如果两者均为1,则降低w_{ij}并对所有单元迭代实施相同的处理。这两种更新连接权重的处理分别称为训练遗忘。迭代过程中使用的是模拟退火算法逐渐减小温度系数T

目标函数:

根据上述规则,调整连接权重w_{ij}和偏执b_{i}。这里使用似然函数L\left (\theta \right ) = \prod_{n=1}^{N}p(x_{n}\mid \theta )导出调整值。这里的\theta是一个参数,表示所有的连接权重和偏置。据此可以计算出所有组合的似然函数。此外,概率分布p(x_{n}\mid \theta )的定义如下:

p(x_{n}\mid \theta ) = \frac{1}{Z(\theta)} e^{-E(x, \theta )}。该公式的概率分布就称为玻尔兹曼机。E表示能量函数(损失函数)目标函数。Z(\theta)是一个归一化常数,能够使所有概率分布的总和等于1,Z(\theta) = \sum_{x}e^{-E(x,\theta)}

玻尔兹曼机中引入概率分布后,似然函数L\left (\theta \right ) = \prod_{n=1}^{N}p(x_{n}\mid \theta )转换为对数似然函数:L\left (\theta \right ) = \sum_{n=1}^{N}logp(x_{n}\mid \theta )。当对数似然函数的梯度为0时,就可以得到最大似然函数估计量。而对于对数似然函数,通过求连接权重w_{ij}和偏执b_{i}的相关梯度,可以求出调整值。但是,因为似然函数是基于所有单元组合来计算的,所以单元数过多将会导致组合数异常庞大,无法进行实时计算。为了解决这个问题,人们提出了一种近似算法,即对比散度算法(Contrastive Divergence, CD)。

两种玻尔兹曼机的构成形式:

  1. 全部由可见单元构成;
  2. 由可见单元和隐藏单元共同构成。

如上图:隐藏单元与输入数据没有直接联系。以图像为例,图像的像素点就相当于可见单元。前面的介绍就是在计算各像素点为黑=0或白=1的概率。隐藏单元虽然与输入数据没有直接联系,但是会影响可见单元的概率。假设可见单元为可见变量v、隐藏单元为隐藏变量h。玻尔兹曼机中含有隐藏变量时,概率分布仍然与前面计算的结果相同。所以,这并没有解决似然函数中组合数庞大的问题。与不含隐藏变量的情况相比,玻尔兹曼机中增加隐藏变量后,参数量相应增加了一个输入数据维度。因此组合数增加,计算愈发困难。


三、受限玻尔兹曼机

含有隐藏变量的玻尔兹曼机的网络训练非常困难。所以,辛顿(Hinton)等人在玻尔兹曼机中加入了“层内单元之间无连接”的限制,提出了受限玻尔兹曼机(Restricted Boltzmann Machine)。

受限玻尔兹曼机是由可见层隐藏层构成的两层结构,可见层和隐藏层又分别由可见变量v隐藏变量h构成。可见层与隐藏层之间是相互连接着的,而相同层内单元之间均无连接

受限玻尔兹曼机的能量函数为:E\left ( v,h,\theta \right ) = - \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_{ij}v_{i}h_{j}b_{i}是可见变量的偏置,c_{j}是隐藏变量的偏置,w_{ij}是连接权重,\theta是表示所有连接权重和偏置的参数集合。能量函数E(v, h, \theta ))中,可见变量\large v_{i}和隐藏变量\large h_{j}的乘积即表示两者之间的相关程度,其与权重w_{ij}一致时,能够得到参数的最大似然估计量。

状态(v,h)的联合概率分布如下所示。

在受限玻尔兹曼机的训练过程中,需要计算的参数包括可见变量偏置b_{i}、隐藏变量的偏置c_{j},以及连接权重w_{ij}。和玻尔兹曼机一样,计算时也需要使用对数似然函数,然后求导计算梯度。然后迭代更新计算连接权重和偏置。

对于受限玻尔兹曼机的庞大计算量,可以使用Gibbs采样算法进行迭代计算近似求解。但是迭代次数仍然很多。人们提出了对比散度算法这种近似算法

四、对比散度算法

Gibbs采样对比散度算法都是近似求解算法。能够通过较少的迭代次数求出参数调整值。

五、深度信念网络

辛顿等人提出的深度信念网络由受限玻尔兹曼机通过堆叠组成,与多层神经网络或卷积神经网络最大的区别是网络的训练方法不同

  • 训练神经网络或卷积神经网络时,首先要确定网络结构,根据最顶层的误差调整连接权重和偏置。具体做法是:使用误差反向传播算法,把误差反向传播到下一层,调整所有的连接权重和偏置。链式法则。
  • 深度信念网络则如下图所示,是使用对比散度算法,逐层来调整连接权重和偏置的。具体做法是:首先训练输入层和隐藏层之间的参数,把训练后得到的参数作为下一层的输入,再调整改层与下一个隐藏层之间的参数。然后逐次迭代,完成多层网络的训练。逐层训练。

深度信念网络既可以当做生成模式来使用,也可以当做判别模式来使用。

  • 作为生成模式使用时,网络会按照某种概率分布生成训练数据。概率分布可根据训练样本导出,但是覆盖全部数据模式的概率分布很难导出。所以这里使用最大似然估计法训练参数,得到最能覆盖训练样本的概率分布。这种生成模式能够去除输入数据中含有的噪声得到新的数据,也能够进行输入数据压缩特征表达
  • 作为判别模式使用时,需要在模型顶层添加一层来达到分类的功能。就像手写字符识别那样,判别模型能够对输入进行分类。受限玻尔兹曼机不能单独作为判别模式使用,必须在顶层增加特殊的层才能进行数据分类。

深度信念网络作为判别模式使用时,如图4.10所示:在最顶层级联一个softmax层。进行分类时,需要同时提供训练样本和期望输出。除最顶层外,其他各层都可以使用无监督学习进行训练。接下来,把训练得到的参数作为初始值,使用误差反向传播算法对包含最顶层的神经网络进行训练。最顶层的参数使用随机数进行初始化。

六、小结

玻尔兹曼机起源于Hopfield神经网络这种相互连接型神经网络,在此基础上人们又提出了受限玻尔兹曼机。深度学习之所以变得如此流行,受限玻尔兹曼机功不可没,堆叠式的想法也是由此诞生的。虽然当前的主流技术是卷积神经网络自编码器,但是受限玻尔兹曼机可用于卷积神经网络的预训练等,因此仍然是一项非常重要的技术。


小结:1、Hopfield网络不分层,所有神经元可见且每个神经元之间互联,每个神经元的输出通过其他神经元与权重之积是否超过阈值来确定。如果超过阈值就为1;等于阈值维持原状变;如果不到阈值就为0。输出的值是确定的。

但是Hopfield记忆空间有限,容易发生串扰或者陷入局部最优解,所以一般采用模式正交化方法。

2、玻尔兹曼机对于Hopfield的改进,将神经元的输出改为状态概率,而不再直接输出状态值,可以避免陷入局部最优解。

3、受限玻尔兹曼机主要解决玻尔兹曼机隐藏层单元的训练困难这个问题,同时减小了计算量。取消了“层内单元之间的连接”(层内单元之间无连接)。

4、深度信念网络由玻尔兹曼机堆叠而成。可以用于生成模式判别模式

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值