深度置信网络学习总结

目录

深度置信网络学习总结... 1

一、 蒙特卡洛方法和Gibbs 采样... 2

1.1 随机模拟(蒙特卡罗方法)的作用... 2

3.2蒙特卡洛的基础——马氏链及其平稳分布... 3

3.3 举个例子——蒙特卡洛方法的使用步骤... 7

3.4 Gibbs 采样... 10

二.限制波尔兹曼机... 13

2.1限制波尔兹曼机(RBM)... 13

2.1.1 RBM的使用说明... 13

2.1.2 RBM的用途... 15

2.2限制波尔兹曼机(RBM)能量模型... 16

2.2.1 能量模型定义... 16

3.2.2 能量模型作用... 16

2.3从能量模型到概率... 18

2.3.1 从能量函数到概率... 18

2.3.2 从概率到极大似然... 19

2.4求解极大似然... 20

2.5用到的抽样方法... 23

3.6马尔科夫蒙特卡罗简介... 25

致谢... 26

参考文献... 26

一、 蒙特卡洛方法和Gibbs 采样

深度置信网络,是由多层限制波尔兹曼机组成,在网络学习过程中用到了蒙特卡洛方法,所以在学习深度置信网络的过程中,首先需要了解蒙特卡洛方法的作用、原理、使用方法。

1.1 随机模拟(蒙特卡罗方法)的作用

随机模拟(或者统计模拟)方法的别名是蒙特卡罗方法(Monte CarloSimulation)。现代的统计模拟方法最早由数学家乌拉姆提出,被命名为蒙特卡罗方法,蒙特卡罗是著名的赌场,赌博总是和统计密切关联的,所以这个命名风趣而贴切,很快被大家广泛接受。

统计模拟中有一个重要的问题就是给定一个概率分布p(x),我们如何在计算机中生成它的样本。可是,这些样本有什么用呢?举个例子,假设在一场射击比赛中,经过了多轮射击,最后要计算运动员的平均成绩。假如运动员射击了无数次,我们可以得到运动员射击点的分布函数 , 表示射击点与靶心的距离, 表示射击点在 处时的成绩,那么该运动员的平均成绩便可以通过下面的一个积分求得:

但显然,上述的 是很难求得的,因此在实际中,假设运动员射击了 次,我们可以将多次的成绩相加,然后平均来近似地表示成绩,即

要强调一点,利用蒙特卡洛思想的条件是,假设我们以及知道了概率 ,而且我们也已经得到了大量服从概率分布 的样本,再此基础上我们才能通过抽样来求解上面的积分。但这也造成了蒙特卡洛方法的一个缺陷,即有时候,我们虽然知道概率 ,但上述 太复杂,我们得不到,服从这一分布的样本我们也没有现成的,此时要使用蒙特卡洛方法,就要创造一批服从分布 随机样本,那应该怎么创造呢?

一般而言均匀分布Uniform(0,1)的样本是相对容易生成的。 通过线性同余发生器可以生成伪随机数,我们用确定性算法生成[0,1]之间的伪随机数序列后,这些序列的各种统计指标和均匀分布Uniform(0,1)的理论计算结果非常接近。这样的伪随机序列就有比较好的统计性质,可以被当成真实的随机数使用。

而我们常见的概率分布,无论是连续的还是离散的分布,都可以基于Uniform(0,1)的样本生成。例如正态分布可以通过著名的Box-Muller变换得到

如果随机变量 , 独立且 , 服从分布Uniform[0,1],

则 , 独立且服从标准正态分布。其它几个著名的连续分布,包括指数分布、Gamma分布、t分布、F分布、Beta分布、Dirichlet分布等等,也都可以通过类似的数学变换得到;离散的分布通过均匀分布更加容易生成。更多的统计分布如何通过均匀分布的变换生成出来,大家可以参考统计计算的书,其中SheldonM.Ross的《统计模拟》是写得非常通俗易懂的一本。

不过我们并不是总是这么幸运的,当p(x)的形式很复杂,或者p(x)是个高维的分布的时候,样本的生成就可能很困难了。譬如有如下的情况

§  ,而 我们是可以计算的,但是底下的积分式无法计算。

§ p(xy)是一个二维的分布函数,这个函数本身计算很困难,但是条件分布p(x|y),p(y|x)的计算相对简单;如果p(x)是高维的,这种情形就更加明显。

此时就需要使用一些更加复杂的随机模拟的方法来生成样本。而本节中将要重点介绍的MCMC(Markov Chain MonteCarlo)和Gibbs Sampling算法就是最常用的一种,这两个方法在现代贝叶斯分析中被广泛使用。要了解这两个算法,我们首先要对马氏链的平稳分布的性质有基本的认识。

3.2蒙特卡洛的基础——马氏链及其平稳分布

马氏链的数学定义很简单:

也就是状态转移的概率只依赖于前一个状态。

我们先来看马氏链的一个具体的例子。社会学家经常把人按其经济状况分成3类:下层(lower-class)、中层 (middle-class)、上层 (upper-class),我们用1、2、3分别代表这三个阶层。社会学家们发现决定一个人的收入阶层的最重要的因素就是其父母的收入阶层。如果一个人的收入属于下层类别,那么他的孩子属于下层收入的概率是0.65,属于中层收入的概率是0.28,属于上层收入的概率是0.07。事实上,从父代到子代,收入阶层的变化的转移概率如下

使用矩阵的表示方式,转移概率矩阵记为

假设当前这一代人处在下层、中层、上层的人的比例是概率分布向量π0=[π0(1),π0(2),π0(3)],那么他们的子女的分布比例将是π1=π0P,他们的孙子代的分布比例将是π2=π1P=π0P2,……,第n代子孙的收入分布比例将是πn=πn−1P=π0Pn

假设初始概率分布为π0=[0.21,0.68,0.11],则我们可以计算前n代人的分布状况如下

我们发现从第7代人开始,这个分布就稳定不变了,这个是偶然的吗?我们换一个初始概率分布π0=[0.75,0.15,0.1]试试看,继续计算前n代人的分布状况如下

我们发现,到第9代人的时候,分布又收敛了。最为奇特的是,两次给定不同的初始概率分布,最终都收敛到概率分布π=[0.286,0.489,0.225],也就是说收敛的行为和初始概率分布π0无关。这说明这个收敛行为主要是由概率转移矩阵P决定的。我们计算一下Pn

我们发现,当n足够大的时候,这个Pn矩阵的每一行都是稳定地收敛到π=[0.286,0.489,0.225]这个概率分布。自然的,这个收敛现象是绝大多数马氏链的共同行为,关于马氏链的收敛我们有如下漂亮的定理:

马氏链定理:如果一个非周期马氏链具有转移概率矩阵P,且它的任何两个状态是连通的,经过足够多次的转移,状态j的概率是一定的,且与初始状态i无关,记 。请注意,这里的π指的是一种分布。此外我们有下面的推论

a)

b)

c)   是方程 的唯一非负解,其中, , 称为马氏链的平稳分布。

这个马氏链的收敛定理非常重要,所有的MCMC (Markov Chain MonteCarlo)方法都是以这个定理作为理论基础的。定理的证明相对复杂,一般的随机过程课本中也不给证明,所以我们就不用纠结它的证明了,直接用这个定理的结论就好了。我们对这个定理的内容做一些解释说明:

a)       该定理中马氏链的状态不要求有限,可以是有无穷多个的;

b)       两个状态ij是连通并非指i可以直接一步转移到j (Pij>0),而是指i可以通过有限的n步转移到达j (Pijn>0)。

c)   我们用Xi表示在马氏链上跳转第i步后所处的状态,如果 存在,很容易证明以上定理的第二个结论。由于

上式两边取极限就得到

从初始概率分布π0出发,我们在马氏链上做状态转移,记马氏链上跳转第i步后的状态Xi的概率分布为πi,则有

由马氏链收敛的定理,概率分布πi(x)将收敛到平稳分布π(x)。假设到第n步的时候马氏链收敛,则有

所以XnXn+1Xn+2,⋯∼π(x)都是同分布的随机变量,当然他们并不独立。如果我们从一个具体的初始状态x0开始,沿着马氏链按照概率转移矩阵做跳转,那么我们得到一个转移序列x0x1x2,⋯xnxn+1⋯,由于马氏链的收敛行为,xnxn+1,⋯都将是平稳分布π(x)的样本

3.3 举个例子——蒙特卡洛方法的使用步骤

对于给定的概率分布p(x),我们希望能有便捷的方式生成它对应的样本。由于马氏链能收敛到平稳分布,于是一个很的漂亮想法是:如果我们能构造一个转移矩阵为P的马氏链,使得该马氏链的平稳分布恰好是p(x),那么我们从任何一个初始状态x0出发沿着马氏链转移,得到一个转移序列x0,x1,x2,⋯xn,xn+1,…如果马氏链在第n步已经收敛了,于是我们就得到了π(x)的样本xn,xn+1⋯。

这个绝妙的想法在1953年被Metropolis想到了,为了研究粒子系统的平稳性质,Metropolis考虑了物理学中常见的波尔兹曼分布的采样问题,首次提出了基于马氏链的蒙特卡罗方法,即Metropolis算法,并在最早的计算机上编程实现。Metropolis算法是首个普适的采样方法,并启发了一系列MCMC方法,所以人们把它视为随机模拟技术腾飞的起点。Metropolis的这篇论文被收录在《统计学中的重大突破》中,Metropolis算法也被遴选为二十世纪的十个最重要的算法之一。

我们接下来介绍的MCMC算法是Metropolis算法的一个改进变种,即常用的Metropolis-Hastings算法。由上一节的例子和定理我们看到了,马氏链的收敛性质主要由转移矩阵P决定,所以基于蒙特卡洛方法做采样的关键问题是如何构造转移矩阵P,使得平稳分布恰好是我们要的分布p(x)。如何能做到这一点呢?我们主要使用如下的定理。

定理:[细致平稳条件]如果马氏链的转移矩阵P和分布π(x)满足

π(x)是马氏链的平稳分布,上式被称为细致平稳条件(detailed balance condition)。其实这个定理是显而易见的,因为细致平稳条件的物理含义就是对于任何两个状态ij,从i转移出去到j而丢失的概率质量,恰好会被从j转移回i的概率质量补充回来,所以状态i上的概率质量π(i)是稳定的,从而π(x)是马氏链的平稳分布。数学上的证明也很简单,由细致平稳条件可得

由于π是方程πP=π的解,所以π是平稳分布。

假设我们已经有一个转移矩阵为Q马氏链(Q是随意取的),其中 表示从状态i转移到状态j的概率,显然,通常情况下,细致平稳条件是不成立的,即

所以p(x)不太可能是这个马氏链的平稳分布。那么,我们可否对马氏链作一个改造,使得细致平稳条件成立呢?譬如,我们引入一个 ,我们希望

但是,取什么样的 和 可以使得以上等式能成立呢?最简单的,按照对称性,我们可以取

于是细致平稳条件就成立了。所以有

于是我们把原来具有转移矩阵Q的一个很普通的马氏链,改造为了具有转移矩阵Q′的马氏链,而且Q′的平稳分布就是p(x)!

在改造Q的过程中引入的 和 称为接受概率,物理意义可以理解为在原来的马氏链上,从状态i以 的概率转跳转到状态j的时候,我们以 的概率接受这个转移,于是得到新的马氏链 的转移概率为 。

把以上的过程整理一下,假设我们已经有一个转移矩阵Q(对应元素为 ),我们就得到了如下的用于采样概率分布p(x)的算法。

上述过程中p(x),q(x|y)说的都是离散的情形,事实上即便这两个分布是连续的,以上算法仍然是有效,于是就得到更一般的连续概率分布p(x)的采样算法,而q(x|y)就是任意一个连续二元概率分布对应的条件分布。

以上的MCMC采样算法已经能很漂亮的工作了,不过它有一个小的问题:马氏链Q在转移的过程中的接受率 可能偏小,这样采样过程中马氏链容易原地踏步,这使得马氏链遍历所有的状态空间要花费太长的时间,收敛到平稳分布p(x)的速度太慢。有没有办法提升一些接受率呢?

假设 、 ,假设此时满足细致平稳条件,于是

上式两边扩大5倍,我们改写为

看,我们提高了接受率,而细致平稳条件并没有打破!这启发我们可以把细致平稳条件的 和 同比例放大,使得两数中最大的一个放大到1,这样我们就提高了采样中的跳转接受率。所以我们可以取

于是,经过对上述MCMC采样算法中接受率的微小改造,我们就得到了如下教科书中最常见的Metropolis-Hastings算法。

3.4 Gibbs 采样

对于高维的情形,由于接受率α的存在(通常α<1),以上Metropolis-Hastings算法的效率不够高。能否找到一个转移矩阵Q使得接受率α=1呢?我们先看看二维的情形,假设有一个概率分布 ,考察x坐标相同的两个点A(x1,y1)、B(x1,y2),我们发现

所以得到

基于以上等式,我们发现,在x=x1这条平行于y轴的直线上,如果使用条件分布p(y|x1)做为任何两个点之间的转移概率,那么任何两个点之间的转移满足细致平稳条件。同样的,如果我们在y=y1这条直线上任意取两个点A(x1,y1),C(x2,y1),也有如下等式

因此,对于二维变量,我们可以如下构造平面上任意两点之间的转移概率矩阵Q

于是

如果

如果

其它

有了如上的转移矩阵Q,我们很容易验证对平面上任意两点X,Y,满足细致平稳条件

于是这个二维空间上的马氏链将收敛到平稳分布 。而这个算法就称为Gibbs Sampling算法,是Stuart Geman和Donald Geman这两兄弟于1984年提出来的,之所以叫做Gibbs Sampling是因为他们研究了Gibbs random field,这个算法在现代贝叶斯分析中占据重要位置。

 

 

以上采样过程中,如图所示,马氏链的转移只是轮换的沿着坐标轴x轴和y轴做转移,于是得到样本(x0,y0),(x0,y1),(x1,y1),(x1,y2),(x2,y2),⋯马氏链收敛后,最终得到的样本就是p(x,y)的样本,而收敛之前的阶段称为burn-in period。额外说明一下,我们看到教科书上的Gibbs Sampling算法大都是坐标轴轮换采样的,但是这其实是不强制要求的。最一般的情形可以是,在t时刻,可以在x轴和y轴之间随机的选一个坐标轴,然后按条件概率做转移,马氏链也是一样收敛的。轮换两个坐标轴只是一种方便的形式。

以上的过程我们很容易推广到高维的情形,如果x1变为多维情形x1,可以看出推导过程不变,所以细致平稳条件同样是成立的

此时转移矩阵Q由条件分布p(y|x1)定义。上式只是说明了一根坐标轴的情形,和二维情形类似,很容易验证对所有坐标轴都有类似的结论。所以n维空间中对于概率分布 可以如下定义转移矩阵

a)     如果当前状态为 ,马氏链转移的过程中,只能沿着坐标轴做转移。沿着xi这根坐标轴转移的时候,转移概率由条件概率p(xi|x1,⋯,xi−1,xi+1,⋯,xn)定义;

b)       其它无法沿着单根坐标轴进行的跳转,转移概率都设置为0。

c)       于是我们可以把Gibbs Smapling算法从采样二维的p(x,y)推广到采样n维的p(x1,x2,⋯,xn)

以上算法收敛后,得到的就是概率分布p(x1,x2,⋯,xn)的样本,当然这些样本并不独立,但是我们此处要求的是采样得到的样本符合给定的概率分布,并不要求独立。同样的,在以上算法中,坐标轴轮换采样不是必须的,可以在坐标轴轮换中引入随机性,这时候转移矩阵Q中任何两个点的转移概率中就会包含坐标轴选择的概率,而在通常的Gibbs Sampling算法中,坐标轴轮换是一个确定性的过程,也就是在给定时刻t,在一根固定的坐标轴上转移的概率是1。

二.限制波尔兹曼机

2.1限制波尔兹曼机(RBM)

2.1.1 RBM的使用说明

一个RBM的结构如下:

以上的RBM网络结构有m个可视节点和n个隐藏节点,其中每个可视节点只和n个隐藏节点相关,和其他可视节点是独立的,即这个可视节点的状态只受n个隐藏节点的影响;类似的,每个隐藏节点只受m个可视节点的影响,这个特点使得RBM的训练变得容易了。

RBM网络有几个参数,一个是可视层与隐藏层之间的权重矩阵 ,一个是可视节点的偏移量 ,一个是隐藏节点的偏移量 ,这几个参数决定了RBM网络将一个m维的样本编码成一个什么样的n维的样本。

RBM网络的功能有下面的几种,就简单地先描述一下。

首先为了描述容易,先假设每个节点取值都在集合 中,即 。

假如一个训练样本 的取值为 ,经过RBM网络,可以得到这一样本的n维编码, ,这n维的编码也可以认为是抽取了n个特征的样本。而这个n维的编码后的样本是按照下面的规则生成的:对于给定的 ,隐藏层的第i个节点的取值为1的概率为

其中的v取值就是x,hi的取值就是yi,其中 ,是sigmoid函数。也就是说,编码后的样本y的第i个位置的取值为1的概率是 。所以,生成yi的过程就是:

1)先利用公式 ,根据x的值计算概率 ,其中vj的取值就是xj的值。

2)然后产生一个0到1之间的随机数,如果它小于 ,yi的取值就是1,否则就是0(假如p(hi=1|v)=0.6,这里就是因为yi的取值就是1的概率是0.6,而这个随机数小于0.6的概率也是0.6;如果这个随机数小于0.6,就是这个事件发生了,那就可以认为yi的取值是1这个事件发生了,所以把yi取值为1)。上述步骤相当于得到了符合概率分布为 的一个样本,这样的采样方法称为Gibbs采样。

反过来,现在知道了一个编码后的样本y,想要知道原来的样本x,即解码过程,跟上面也是同理,过程如下:

3)先利用公式 ,根据y的值计算概率 ,其中hi的取值就是yi的值。

4)然后产生一个0到1之间的随机数,如果它小于 ,vj的取值就是1,否则就是0。

对于2)的说明:例如,你现在出去逛街,走到一个岔路口,你只想随便逛逛,所以你是有0.5的概率往左边的路,0.5的概率往右边的路;但是你不知道怎么选择哪个路,所以你选择了抛硬币,正面朝上你就向左,反面朝上就向右。现在你只抛一次,如果是正面朝上,就向左走。回到上面的问题,假如某节点A取值为1的概率是0.6,现在要给节点A取值,就拿这个硬币抛一下,正面朝上就取值1,反面朝上就取值0,这个就相当于抛硬币决定走哪个路的那个过程。现在假如找不到这样的不均匀的硬币,就拿随机数生成器来代替(生成的数是0-1之间的浮点数);因为随机数生成器取值小于0.6的概率也是0.6,大于0.6的概率是0.4。

这里一定要记住 指的是通过隐藏节点所恢复的第i个可视节点的状态,不是输入xi。

2.1.2 RBM的用途

RBM的用途主要是两种,一是对数据进行编码,把RBM作为一个降维的方法来使用,然后交给监督学习方法去进行分类或回归;二是得到了权重矩阵和偏移量,供BP神经网络初始化训练。其中的原因是神经网络也要训练一个权重矩阵和偏移量,但如果直接用BP神经网络,初始值选得不好的话,往往会陷入局部极小值。实际应用结果表明,直接把RBM训练得到的权重矩阵和偏移量作为BP神经网络初始值,得到的结果会非常地好。

这就类似爬山,如果一个风景点里面有很多个山峰,如果让你随便选个山就爬,希望你能爬上最高那个山的山顶,但是你的精力是有限的,只能爬一座山,而你也不知道哪座山最高,这样,你就很容易爬到一座不是最高的山上。但是,如果用直升机把你送到最高的那个山上的靠近山顶处,那你就能很容易地爬上最高的那座山。这个时候,RBM就的角色就是那个直升机。

强调一点,在深度置信网络里,多个RBM串联在一起,利用的就是RBM的编码能力。例如,输入是一个向量化的28*28的图像,我们希望输入的信息转化为隐藏层节点,然后再转化为可视层后,此时的可视层和输入的值尽量一致。如果输入服从某一种分布的话,我们无监督训练的目的就是学习最合适的参数w,b,c,使得由这些参数表示出的可视层节点分布与输入样本的分布尽可能一致。

庆幸的是,利用下文的能量模型,我们发现通过隐藏层恢复的可视层节点服从Gibbs分布,但是里面的参数w,b,c是未知的,我们希望的就是学习到这些参数。

2.2限制波尔兹曼机(RBM)能量模型

2.2.1 能量模型定义

介绍RBM之前,首先需要了解能量模型。能量模型是个什么样的东西呢?直观上的理解就是,把一个表面粗糙又不太圆的小球,放到一个表面也比较粗糙的碗里,就随便往里面一扔,看看小球停在碗的哪个地方。一般来说停在碗底的可能性比较大,停在靠近碗底的其他地方也可能,甚至运气好还会停在碗口附近(这个碗是比较浅的一个碗);能量模型把小球停在哪个地方定义为一种状态,每种状态都对应着一个能量,这个能量由能量函数来定义,小球处在某种状态的概率(如停在碗底的概率跟停在碗口的概率当然不一样)可以通过这种状态下小球具有的能量来定义(换个说法,如小球停在了碗口附近,这是一种状态,这个状态对应着一个能量E,而发生“小球停在碗口附近”这种状态的概率p,可以用E来表示,表示成p=f(E),其中f是能量函数),这就是我认为的能量模型。

这样,就有了能量函数,概率之类的东西。波尔兹曼网络是一种随机网络。描述一个随机网络,总结起来主要有两点。

第一,概率分布函数。由于网络节点的取值状态是随机的,从贝叶斯网的观点来看,要描述整个网络,需要用三种概率分布来描述系统。即联合概率分布,边缘概率分布和条件概率分布。要搞清楚这三种不同的概率分布,是理解随机网络的关键,这里向大家推荐的书籍是张连文所著的《贝叶斯网引论》。很多文献上说受限波尔兹曼是一个无向图,从贝叶斯网的观点看,受限波尔兹曼网络也可以看作一个双向的有向图,即从输入层节点可以计算隐层节点取某一种状态值的概率,反之亦然。

第二,能量函数。随机神经网络是根植于统计力学的。受统计力学中能量泛函的启发,引入了能量函数。能量函数是描述整个系统状态的一种测度。系统越有序或者概率分布越集中,系统的能量越小。反之,系统越无序或者概率分布越趋于均匀分布,则系统的能量越大。能量函数的最小值,对应于系统的最稳定状态。

2.2.2 能量模型作用

为什么要弄这个能量模型呢?原因有几个。

第一、RBM网络是一种无监督学习的方法,无监督学习的目的是最大可能的拟合输入数据,所以学习RBM网络的目的是让RBM网络最大可能地拟合输入数据。

第二、对于一组输入数据来说,现在还不知道它符合什么分布,学习起来是非常困难的。例如,知道它符合高斯分布,那就可以写出似然函数,然后求解,就能求出这是一个什么样的高斯分布;但如果不知道它符合一个什么分布,那可是连似然函数都没法写的,根本就无从下手。好在天无绝人之路——统计力学的结论表明,任何概率分布都可以转变成基于能量的模型,而且很多的分布都可以利用能量模型的特有的性质和学习过程,有些甚至从能量模型中找到了通用的学习方法。有这样一个好东西,当然要用了。

第三、在马尔科夫随机场(MRF)中能量模型主要扮演着两个作用:一、全局解的度量(目标函数);二、能量最小时的解(各种变量对应的配置)为目标解。也就是能量模型能为无监督学习方法提供两个东西:a)目标函数;b)目标解。换句话说,就是——使用能量模型使得学习一个数据的分布变得容易可行了。

能否把最优解嵌入到能量函数中至关重要,决定着我们具体问题求解的好坏。统计模式识别主要工作之一就是捕获变量之间的相关性,同样能量模型也要捕获变量之间的相关性,变量之间的相关程度决定了能量的高低。把变量的相关关系用图表示出来,并引入概率测度方式就构成了概率图模型的能量模型。

RBM作为一种概率图模型,引入了概率就可以使用采样技术求解,在CD(contrastivedivergence)算法中采样部分扮演着模拟求解梯度的角色。

能量模型需要一个定义能量函数,RBM的能量函数的定义如下

这个能量函数的意思就是,每个可视节点和隐藏节点之间的连接结构都有一个能量,通俗来说就是可视节点的每一组取值和隐藏节点的每一组取值都有一个能量,如果可视节点的一组取值(也就是一个训练样本的值)为(1,0,1,0,1,0),隐藏节点的一组取值(也就是这个训练样本编码后的值)为(1,0,1),然后分别代入上面的公式,就能得到这个连接结构之间的能量。

能量函数的意义是有一个解释的,叫做专家乘积系统(POE,product of expert),这个理论也是hinton发明的,他把每个隐藏节点看作一个“专家”,每个“专家”都能对可视节点的状态分布产生影响,可能单个“专家”对可视节点的状态分布不够强,但是所有的“专家”的观察结果连乘起来就够强了。具体我也看不太懂,各位有兴趣看hinton的论文吧,中文的也有,叫《专家乘积系统的原理及应用,孙征,李宁》。

另外的一个问题是:为什么要搞概率呢?下面就是解释。能量模型需要两个东西,一个是能量函数,另一个是概率,有了概率才能跟要求解的问题联合起来。下面就介绍从能量模型到概率。

2.3从能量模型到概率

2.3.1 从能量函数到概率

为了引入概率,需要定义概率分布。根据能量模型,有了能量函数,就可以定义一个可视节点和隐藏节点的联合概率

也就是一个可视节点的一组取值(一个状态)和一个隐藏节点的一组取值(一个状态)发生的概率 是由能量函数来定义的。这个概率不是随便定义的,而是有统计热力学的解释的——在统计热力学上,当系统和它周围的环境处于热平衡时,一个基本的结果是状态 发生的概率如下面的公式

其中 表示系统在状态i时的能量,T为开尔文绝对温度, 为Boltzmann常数,Z为与状态无关的常数,用来归一化。

我们这里的 变成了 ,因为 也是一个状态,其他的参数T和 由于跟求解无关,就都设置为1了,Z就是我们上面联合概率分布的分母,这个分母是为了让我们的概率的和为1,这样才能保证 是一个概率。

现在我们得到了一个概率,其实也得到了一个分布,其实这个分布还有一个好听点的名字,可以叫做Gibbs分布,当然不是一个标准的Gibbs分布,而是一个特殊的Gibbs分布,这个分布是有一组参数的,就是能量函数的那几个参数w,b,c。

有了这个联合概率,就可以得到一些条件概率,是用积分去掉一些不想要的量得到的。

2.3.2 从概率到极大似然

上面得到了一个样本和其对应编码的联合概率,也就是得到了RBM网络的Gibbs分布的概率密度函数。现在回到求解的目标——让RBM网络表示的Gibbs分布与输入样本的分布尽可能地接近。

假设 表示样本空间,q是输入样本的分布,即q(x)表示训练样本x的概率, q其实就是要拟合的那个样本表示分布的概率;再假设p是RBM网络表示的Gibbs分布的边缘分布(只跟可视节点有关,隐藏节点是通过积分去掉了,可以理解为可视节点的各个状态的分布),输入样本的集合是S,那现在就可以定义样本表示的分布和RBM网络表示的边缘分布的KL距离

如果输入样本表示的分布与RBM表示的Gibbs分布完全符合,这个KL距离就是0,否则就是一个大于0的数。第一项其实就是输入样本的熵(熵的定义),输入样本定了熵就定了;第二项没法直接求,但是,偷懒一下,可以用蒙特卡罗抽样(后面有章节会详细介绍)来估算这个值。直接把输入样本当作利用抽样过程抽中的样本(输入样本肯定符合分布q(x)),第二项可以用 来估计,其中的l表示训练样本个数。

由于KL的值肯定是大于等于0的,所以第一项肯定大于等于第二项,让第二项取得最大值,就能让KL距离最小;最后,还可以发现,最大化 ,相当于最大化 ,而这就是极大似然估计。结论就是求解输入样本的极大似然,就能让RBM网络表示的Gibbs分布和样本本身表示的分布最接近。这就是为什么RBM问题最终可以转化为极大似然来求解。

2.4求解极大似然

既然是求解极大似然,就要对似然函数求最大值,求解的过程就是对参数就导,然后用梯度上升法不断地把目标函数提升,最终到达停机条件(在这里看不懂的同学就去看参考文献中的《从极大似然到EM》)

设参数为 (注意是一组参数),则似然函数可以写为

为了省事 写成p(v)了,然后就可以对它的对数进行求导了(因为直接求一个连乘的导数太复杂,所以变成对数来求)

可以看到,是对每个p(v)求导后再加和,然后就有了下面的推导了。

到了这一步的时候,我们又可以发现问题了。我们可以看到的是,对每一个样本,第二个等号后面的两项其实都像是在求一个期望,第一项求的是 这个函数在概率p(h|v)下的期望,第二项求的是 这个函数在概率p(v,h)下面的期望。

上面的两个部分其实就是两个积分,因此我们可以尝试利用蒙特卡洛的方法求解上面的积分。回顾上面关于蒙特卡洛方法的介绍,求解上面式子的第一项时,根据蒙特卡洛的思路,首先我们要有大量符合分布p(h|v)的样本,而我们根据能量函数已经知道了条件概率:

根据蒙特卡洛方法的步骤,每一次输入 都是一个样本,我们都可以得到概率 ,然后产生一个随机数,如果随机数大于 , 的样本取1,否则样本取0,这样我们就得到了此时h的一个样本。而对于一个样本 ,它的 也是可以计算的,只求多个输入下的均值就可以估算出第一项。

但是第二项求解起来就比较复杂。因为我们没有RBM网络表示的Gibbs分布下的样本的(后面会介绍这些怎么抽)。

为了进行下面的讨论,把这个梯度再进一步化简,看看能得到什么。根据能量函数的公式,是有三个参数的w,b和c,就分别对这三个参数求导

其中第四个等号的原因是 ,第三个等号的原因是 。

到了这一步,我们来分析一下,从上面的联合概率那一堆,我们可以得到下面的

也就是说 是可以求的。剩下的麻烦全部集中在第二项了。第二项就是上面的导数化简后的减号后面的那一项。要求第二项,就要遍历所有可能的v的值,然后根据公式去计算几个梯度的值,那样够麻烦的了,还好蒙特卡罗给出了一个偷懒的方法。把上面的式子再写出来:

上式是RBM的核心,需要好好理解。首先,这里的 中的 指的通过隐藏层节点恢复出来可视层节点,而不是输入时候的可视层, 也就表示的是这些恢复出来的可视层节点服从的分布。之前的关于能量函数的讨论中已经提到, 其实就是参数为w,a,c的Gibbs分布,是已知的。要想利用蒙特卡洛方法求解上式,最关键的是取得服从分布为 的样本。

对于上面的情况,是这么处理的,对每个训练样本x,都用某种抽样方法抽取一个它对应的符合RBM网络表示的Gibbs分布(恢复的可视节点v的分布)的样本,假如叫y;那么,对于整个的训练集{x1,x2,…xl}来说,就得到了一组符合RBM网络表示的Gibbs分布的样本{y1,y2,…,yl},然后拿这组样本去估算第二项,那么梯度就可以用下面的公式来近似了

其中xk表示第k个训练样本,yk表示第k个训练样本对应的RBM网络表示的Gibbs分布(不妨将这个分布称为R)的样本(yk是根据分布R抽取的样本,而且这个样本是从xk出发,用Gibbs抽样抽取出来的,也就是说yk服从分布R,可以用来估算第二项,同时yk跟xk有关),Vyk表示可视节点取值为yk的时候的状态,那么Vykj就表示yk的第j个特征的取值。

这样,梯度出来了,这个极大似然问题可以解了,最终经过若干论迭代,就能得到那几个参数w,b,c的解。

2.5简单的抽样算法——CD-k

上面提到的“某种抽样方法”,现在一般就用Gibbs抽样,然后hinton教授还根据这个弄出了一个CD-k算法,就是用来解决RBM的抽样的。下面一章就介绍这个吧。

Gibbs抽样一般要进行k步的抽样,这个k一般还要比较大,所以是比较费时间的,尤其是在训练样本的特征数比较多(可视节点数大)的时候,所以hinton教授就弄一个简化的版本,叫做ContrastiveDivergence(CD),也就对比散度。与Gibbs抽样不同,hinton教授指出当使用训练样本初始化v0的时候,仅需要较少的抽样步数(一般就一步)就可以得到足够好的近似了。

在CD算法一开始,可见单元的状态就被设置为一个训练样本,并用上面的几个条件概率 来对隐藏节点的每个单元都从{0,1}中抽取到相应的值,然后再利用 来对可视节点的每个单元都从{0,1}中抽取相应的值,这样就得到了v1了,一般v1就够了,就可以拿来估算梯度了。

下面给出RBM的基于CD-k的快速学习的主要步骤。

参考文献

[1] http://blog.csdn.net/mytestmy/article/details/9150213/,深度学习读书笔记之RBM(限制波尔兹曼机)

[2] http://www.52nlp.cn/lda-math-mcmc-%E5%92%8C-gibbs-sampling1 gibbs抽样相关

深度置信网络学习总结相关推荐

  1. 基于深度学习的安卓恶意应用检测----------android manfest.xml + run time opcode, use 深度置信网络(DBN)...

    基于深度学习的安卓恶意应用检测 from:http://www.xml-data.org/JSJYY/2017-6-1650.htm 苏志达, 祝跃飞, 刘龙     摘要: 针对传统安卓恶意程序检测 ...

  2. 深度学习 --- 基于RBM的深度置信网络DBN-DNN详解

    上一节我们详细的讲解了受限玻尔兹曼机RBM的原理,详细阐述了该网络的快速学习原理以及算法过程,不懂受限玻尔兹曼机的建议先好好理解上一节的内容,本节主要讲解的是使用RBM组成深层神经网络的深度置信网络D ...

  3. 深度学习DBN深度置信网络

    之前的文章有些地方不太完善,故补充完善一下. 2017-4-10. 深度信念网络,DBN,Deep Belief Nets,神经网络的一种.既可以用于非监督学习,类似于一个自编码机:也可以用于监督学习 ...

  4. 深度学习基础--不同网络种类--深度置信网络(DBN)

    深度置信网络(DBN)   RBM的作用就是用来生成似然分布的互补先验分布,使得其后验分布具有因子形式.   因此,DBN算法解决了Wake-Sleep算法表示分布难以匹配生成分布的难题,通过RBM使 ...

  5. Python 3深度置信网络(DBN)在Tensorflow中的实现MNIST手写数字识别

    任何程序错误,以及技术疑问或需要解答的,请扫码添加作者VX:1755337994 使用DBN识别手写体 传统的多层感知机或者神经网络的一个问题: 反向传播可能总是导致局部最小值. 当误差表面(erro ...

  6. 【DBN分类】基于matlab深度置信网络DBN变压器故障诊断【含Matlab源码 2284期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[DBN分类]基于matlab深度置信网络DBN变压器故障诊断[含Matlab源码 2284期] 获取代码方式2: 付费专栏Matlab智 ...

  7. 受限玻尔兹曼机和深度置信网络

    从玻尔兹曼机到深度置信网络 本文仍处于草稿阶段,请慎重观看 引言 受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)最初是在1986年由Paul Smolensky ...

  8. 【零散知识】受限波兹曼机(restricted Boltzmann machine,RBM)和深度置信网络(deep belief network,DBN)

    前言: { 最近一直在想要不要去线下的英语学习机构学英语 (本人的英语口语能力实在是低).如果我想完成今年的年度计划,那么今年就没时间学英语了. 这次的内容是之前落下的深度置信网络(deep beli ...

  9. 【DBN分类】基于matlab麻雀算法优化深度置信网络SSA-DBN数据分类【含Matlab源码 2318期】

    ⛄一.DBN DBN由数个RBM堆叠构成,通常会在顶层加入一个BPNN来实现有监督的分类,DBN中下一层的隐藏层就是上一层的可见层.图1所示的DBN即由两个RBM和顶层一个BPNN构成. 图1 深度置 ...

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

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

最新文章

  1. SpringMVC注解整理
  2. Linux系统资源限制
  3. 13 个适合『中级开发者』练手的项目
  4. linux NAND驱动之一:内核中的NAND代码布局
  5. 中公事业单位计算机模拟试题,事业单位考试计算机基础知识模拟试题汇总—单选题(2)...
  6. 中国水培营养素行业市场供需与战略研究报告
  7. Flutter报错 Navigator operation requested with a context that does not include a Navigator.
  8. Android ListView的背景和黑色边缘化的问题
  9. mysql 大事物commit慢造成全库堵塞问题
  10. html 字符转换 ascii,HTML ASCII
  11. ARM64体系结构编程与实践:基础知识
  12. Keras机器翻译实战
  13. 二分图最大匹配与其应用
  14. 100道积分公式证明(71-100)
  15. arduino控制寻迹传感器
  16. mysql myisam表分区_MySQL分区表的局限和限制详解
  17. repo (一) 简介
  18. MTK开发 — touch key驱动
  19. MSN -- AIR客户端
  20. 阿里妈妈 广告部门 Java 一二面面经

热门文章

  1. 番茄时间管理法:一个番茄是如何让你工作更有效率的
  2. C语言编程实例——百钱买百鸡
  3. CNC编程工程师如何炼成?要哪些必备技能?
  4. Git 64位安装包下载
  5. java处理代码表_Java处理中华人民共和国行政区划代码
  6. 伺服速度控制模式接线图_伺服驱动器三种控制模式的接线
  7. [转]电子书收集工具
  8. Python网络爬虫实现音乐下载器和图片下载器功能
  9. android.dig机器人采访,机器人学导论心得 - osc_jjc36t9p的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 【新手基础教程】 硬件加速的图像处理