Part One.深度生成模型概述
深度生成模型从整体上来说,是以某种方式寻找某种数据的概率分布,深度生成模型可以基于有向图或者无向图的形式来生成深层次的概率分布。
常见的深度生成模型的结构图如下:深度玻尔兹曼机和深度信念网络都是以受限的玻尔兹曼机为基本单元,区别就是深度信念网络的最高层的两层是无向图的连接,下面的两层是采用有向图的连接;深度自编码网络可以看做由深度信念网络来进一步构成,它可以被认为和栈式自编码器是一种东西,他们都是通过信念网络的结构和形式(自编码器和自解码器这样的两个信念网络的连接)连接。
如果自编码器的输入是带有噪声的,那么自编码器会提取出这些输入的数据中比较稳定的特征(这部分生成的特征我们是不需要带有标签的),并通过解码器重构出没有噪声的原始的信号,这个就可以看做是去躁的自编码器网络
下面这个是我们最常见的GAN网络,GAN网络是过去的十年中最有趣的发明,GAN引入了博弈论的思想,有两个生成网络和判别网络组成,生成网络不断的生成符合某种概率的数据,判别网络进行判别,直到判别网络判别不出生成网络中的是真实的数据还是生成的数据的时候,整个GAN就达到一种稳定的状态, 生成网络是一个无监督的过程,不需要提供带有标签的训练数据,生成网络可以帮助我们生成很多特征
Part Two.Hopfield神经网络
一、神经网络的分类
多层神经网络: 模式识别
相互连接型网络:通过联想记忆去除数据中的噪声
例如左图前馈型的多层神经网络,可以用于模式识别和回归等任务;例如中间的图,每个神经元节点与其他的神经元节点之间都是相互连接的,这样是看不出来连接的层次,中间的图还可以展开成右图的形式,节点A既是其他节点的输入,也是当前节点的输出,其他节点也是相同的,这就是一种相互连接的神经网络。
二、Hopfiled神经网络
Hopfield神经网络是最典型的相互连结型网络
1. Hopfield神经网络优点
单元之间的连接权重对称(
=
),因为采用的是无向图的连接方式
每个单元没有到自身的连接(
)
Hopfiled神经网络在 t 时刻的状态间接的和他 t-1 时刻的状态是有关的,因为不同单元都有连接
单元的状态采用随机异步更新方式,每次只有一个单元改变/更新状态
个二值单元做成的二值神经网络,每个单元的输出只能是0或1的两个值
Hopfiled的网络是把训练数据的信息存储到权重上,这个可以看做是联想记忆的形式,这个就跟人类大脑记忆信息的形式是一样的。例如我们看到香蕉就会想到黄色,看到苹果就会想到红色,这就是联想记忆的形式
联想记忆就是当输入模式为某种状态时,输出端要给出与之相应的输出模式。如果输入模式与输出模式一致,称为自联想记忆,否则称为异联想记忆
2.Hopfield神经网络计算
假设有个单元组成的Hopfield神经网络,第
个单元在
时刻的输入记作
,输出记作
,神经单元
和
之间的连接权重为
,阈值为
,则
时刻
单元的输出
可表示为:
如果输入
,则表示其他神经元加权之后是超过这个阈值
的,则该神经元被**,所以下一时刻的输出状态值为1;
如果输入
,则表示其他神经元加权之后是没超过这个阈值
的,则该神经元没被**,所以下一时刻的输出状态值为0;
如果输入
,则表示其他神经元加权之后是等于这个阈值
的,则该神经元状态不变,所以下一时刻的输出状态值
;
注意我们阈值一般是用减号,而偏置才是加号
在Hopfield神经网络中,每个时刻都只有一个随机选择的单元会发生状态变化
对于一个由n个单元组成的网络,如果要完成全部单元的状态变化,至少需要n个时刻
单元的状态变化会一直进行下去,直到网络达到稳定状态。各单元的最终状态就是输出模式
那么怎么才算是网络达到稳定的状态呢?
这个我们就可以看做是应用Hopfiled神经网络或者说是进行测试的时候,比如,我们有一个测试样本,我们想看一下Hopfiled神经网络把它识别成什么了或者继续记住他是什么了没有,那这个时候和其他的网络一样,我们都需要先确定连接权重,因为连接权重确定了以后这个网路才是一个有意义的网络
根据输入模式联想输出模式时,需要事先确定连接权重????????????,而连接权重????????????要对输入模式的训练样本进行训练后才能确定
和多层神经网络一样,一次训练并不能确定连接权重,而是要不断重复这个过程,直到满足终止判断条件,而这个指标就是Hopfield神经网络的能量函数 ????( 公式如下),当输入模式与输出模式一致时,能量函数 ???? 的结果是0 。
Hopfield神经网络的能量函数 ???? 的特点
根据前面定义的状态变化规则( 即:Hopfield神经网络的计算 )改变网络状态时,上式中定义的能量函数 ???? 总是非递增的,即随时间的不断增加而逐渐减小,直到网络达到稳定状态为止。为什么是非递增的呢?我们可以进行简单的推导。能量函数是所有神经元构成的能量函数,所以,我们可以把能量函数分解成两部分:单元 的能量函数和
以外的单元的能量函数
第一步:首先把最外层的最为index,根据
把神经元分为神经元
和
以外的神经元的能量函数。
把能量函数中的第一项:分解成两项
和
;第二项:
也分解成两项
和
第二步:下一步我们把index 所处的神经元也是分成
和
两部分
第三步:去掉括号
第四步:我们根据Hopfiled网络发现,神经元是与自身没有连接的,,即:
这些神经元每一次都是随机有一个神经元的状态更新,其他的神经元的状态都是保持不变的,饿哦们要更新的神经元是第个神经元,那么这个时候能量的变化就是从
时刻到
时刻,只有这个神经元
在发生变化,其他的是不变的。
和
其实表达的是一个意思,
表示其他所有神经元到
这个神经元上连接的一个关系,
也表示其他所有神经元到
这个神经元上连接的一个关系,也就是说把
中的
中的下标
换成
即可,再利用单元之间的连接权重对称性,知道
。所以当第
个神经元发生状态改变的时候,能量函数的变化就是
乘以这个第
个神经元状态改变量。
下面我们对第 个神经元状态的变化量进行分类讨论:
当∆
> 0时,
从
到
由0变成1,前提是保证
,神经元被**,此时
,也就是能量在减小
当∆
< 0时,
从
到
由1变成0,前提是保证
,神经元被抑制,此时
,也就是能量在减小
当∆
= 0时,
从
到
状态不变
综上:是非递增的!
注意不同的教材上的区别
3.基于Hebb学习的参数训练
Hebb学习规则是Donald Hebb在1949年提出的一种学习规则,用来描述神经元的行为是如何影响神经元之间的连接的,通俗的说,就是如果相连接的两个神经元同时被**,显然我们可以认为这两个神经元之间的关系应该比较近,因此将这两个神经元之间连接的权值增加,而一个被**一个被抑制,显然两者间的权值应该减小。我们把权重写成这样的形式:。此时网络如果要记忆P个模式,那么
,
是训练样本的index,
表示样本1,
表示样本
,
和
相当于模式,例如我们的输入样本有好几个维度,比如说输入是
的图像块
,这样就相当于有25个神经元,这样的话,我们的权重
就会记住要训练的模式,由于每次只更新一个神经元的状态,所以我们需要好多部才能使得这个网络达到稳定的状态,所以这里的权重
也是在不断的变化,以此达到稳定。
达到稳定就是训练好了,训练好了以后,权重就会把的训练样本的模式记住,这个时候我们就可以进行测试。使用训练样本(b)进行训练,这个时候网络记住了我们训练样本的模式,当我们使用测试样本进行测试时,我们发现,网络能够正确的输出,虽然测试样本中的4和训练样本中的4差异较大,但是网络的拟合能力也是很不错的。这个过程实际上是对测试样本具有一定程度的识别和去躁
当需要记忆的模式之间的较为相似,或者需要记忆的模式太多时,Hopfield神经网络就不能正确地辨别模式。这种相互干扰、不能准确记忆的情况称为串扰(crosstalk)
Hopfield神经网络能够记忆的模式数量有限,大约是网络单元数的15%左右,为了防止串扰,可以采用先把模式的正交化再进行记忆等方法。正交化可以避免模式之间的相似性,例如神经网络有个单元的话,他应该可以包含
种模式,也就是记住
种模式,但是这么多的模式他记不住,只能够记住15%,但是正交化方法并不能完全解决问题,玻尔兹曼机可以解决这一问题
三、玻尔兹曼机和受限的波尔兹曼机
1.玻尔兹曼机
❑玻尔兹曼机也是相互连接型网络。玻尔兹曼机和Hopfield神经网络很相似,但是Hopfield神经网络如果发生串扰或陷入局部最优解的话,Hopfield神经网络就不能正确的辨别模式。而玻尔兹曼机则可以通过让每个单元按照一定的概率分布发生状态变化,来避免陷入局部最优解
❑玻尔兹曼机保持了Hopfield神经网络的假设:权重对称;自身无连接;二值输出
❑玻尔兹曼机的输出是按照某种概率分布决定的
????(>0)表示温度系数,当 ???? 趋近于无穷时,无论取值如何,下一时刻的状态
等于1 或 0 的概率都是1/2,这种状态称为稳定状态。k是玻尔兹曼常数,
是一个能量变化的函数,和
没有关系。
下面是概率曲线随着温度的变化情况:
当T越来越大的时候,基本上趋于均匀分布,概率为
;当T越来越小的时候,曲线在0附近变得越来越陡。
2.玻尔兹曼机中的模拟退火算法
玻尔兹曼机选择模拟退火算法进行求解,可以先采用较大的温度系数及进行粗调,然后逐渐减小温度系数进行微调。温度系数越大,跳出局部最优解的概率越高,因为他的概率就在 附近,相当于输出是1或者输出是0的随机性比较大,所以跳出局部最优解的概率就会大一些。但是温度系数增大时,获得能量函数极小值的概率就会降低;反之,温度系数减小时,虽然获得能量函数极小值的概率增加了,因为系数比较下的话,能量就会慢慢趋于稳定,是0或是1的概率就会比较确定下来,但是玻尔兹曼机需要经历较长时间才能达到稳定状态。
模拟退火是一种贪心算法,但是它的搜索过程引入了随机因素,以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解, 而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定)
例如我们要求一条曲线的最大值。求最小值的时候,我们是沿着梯度的负方向进行求解,求最大值的时候我们就是沿着梯度的正方向找这个最大值。也就是爬山算法。首先我们达到了C这个点,然后我们到达了A这个局部最优解,这个时候,他就跳不出这个局部最优解(因为A附近周围的任何一个值,都没有A大),他觉得在这就是稳定了,此时我们希望A能够以一定的概率接受一个当前情况下,比A自身次的点是的能够跳出这样的局部最优解A。比如我们当前找的是D,我们就有可能跳出这个局部最优解,因为我们在D附近再找的时候,就会慢慢的接近B这个点,所以说模拟退火算法不一定百分之百能够保证你得到一个全局最优解,他是说具有一定的概率跳出这个局部最优解从而找到一个更好的解,降低陷入局部最优解得可能性。
3.玻尔兹曼机的训练过程
玻尔兹曼机的训练过程– 1. 训练准备:初始化连接权重和偏置
(输入输出的连接关系就是
)
– 2. 调整参数– 2.1 选取一个单元
,求输入
(和Hopfield类似,玻尔兹曼机也是每次随机选择一个单元进行更新,其他的单元不变)
– 2.2 根据
的值,计算输出
(和Hopfield不类似,玻尔兹曼机引入了概率,按照某种概率分布来决定它输出是0还是1)
– 2.3 根据输出
和
的值,调整连接权重
和偏置
– 重复步骤2,直到满足终止判断条件
具体而言,当初始化连接权重后,选取一个单元
– 2.1计算单元**值(这一步和Hopfiled一样)
– 2.2计算等于 1 或 0 的概率,这个概率还要和随机数进行比较
根据概率
等于1或0的概率,调整
的取值。一般是随机产生一个(0,1)之间的随机数λ,如果p>λ, 确认状态改变,否则不改变
不能将计算所得概率直接作为
的值,而是作为概率来决定
的值
– 2.3调整连接权重和偏置
, 这里用似然函数????(θ)导出调整值,θ 表示所有的连接权重和偏置
代表训练样本,给定参数θ 的情况下,以最大概率出现这个训练样本的情况,就是让????(θ)最大。有很多训练样本,所有的样本都要以最大概率出现自身训练样本的情况,所以这些所有训练样本的出现的概率要相乘。训练样本就是我们网络要记住的这个模式
其中,概率分布的定义如下,训练样本S={,
,…,
,…,
} ,????表示能量函数,????(θ)是归一化常数,是对所有的样本的能量函数的求和。能量越小,出现的概率就会越大一些,如果能量是0的话,概率就是
前面连乘的形式不太方便计算,所以我们在似然函数求解的时候把连乘的形式变成求和的形式,求和的形式就是取对数。所以通常,使用对数似然函数求解
当对数似然函数的梯度为0时,就可以得到最大似然估计量,即通过求连接权重和偏置
的相关梯度,可以求出调整值。也就是说,求极值点,极值点是梯度等于0的时候(极大值极小值都是),如果求极大值的话,修正的方向是沿着梯度的正方向;求极小值的时候我们就是沿着梯度的负方向,所以我们是可以进行求导调整权重
和偏置
的
求解困难:似然函数是基于所有单元组合来计算的,所以单元数过多将导致组合数异常庞大,无法进行实时计算。为了解决这个问题,人们提出了一种近似算法,对比散度算法(稍后介绍)