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

这是Hinton的第12课,结合前一课能够知道RBM是来自BM,而BM是来自Hopfield的,由于水平有限,是直译的,虽然有时候会看不懂,可是好歹不会曲解原来的本意,看的话:一、先看ppt;二、通读下面对应的段落;三、不要纠结某句话不通顺,这是我的翻译水平问题,可是能够看出通读整段话,也可以大体知道这个ppt所表述的意思,并且hinton这门课涉及东西不少,确定不会在几个视频就说的清楚,也就是这是综述同样的介绍,具体的仍是得多看论文才是。只是看这个视频,再去看论文,不少东西就不会显得那么陌生了。


1、玻尔兹曼机的学习算法算法

在上一课中,介绍了玻尔兹曼机可使用二值数据向量集合的几率模型来解释,在这一课中,会介绍玻尔兹曼机的学习算法,一个很是简单的学习模型,它有着优美的原理解释,可是在实际操做中它不但至关的慢,并且多噪音,简单来讲就是不work,因此在许多年来,人们认为玻尔兹曼机不会是一个有实际操做价值的东西。而后Hinton们发现了几个不一样的用来加速学习的方法,如今,这个算法可以更好的具备实际意义了,事实上,已经用在了那些为了得到一百万机器学习比赛的获胜算法中了,这个在稍后会介绍。网络


玻尔兹曼机学习算法是一个无监督学习算法,不像你们典型使用的BP算法,它会涉及到一个输入向量和一个理想的输出(做为目标或者标签),而在玻尔兹曼机学习中咱们只须要输入向量便可。该算法试图要作的就是创建一个有关输入向量集合的模型,并经过该集合来考虑输出向量。机器学习

咱们要作的就是最大化这些几率的积,这些几率也就是在训练集合中玻尔兹曼机指派的二值向量的集合。这等于最大化由玻尔兹曼机指派到训练向量的log几率的和;若是咱们按照下面的方式来运行玻尔兹曼机,那么它一样的等于最大化咱们得到的N个训练样本的几率:首先,让网络在N次不一样的时间上在没有外部输入的状况下稳定到它的平稳分布;而后对可视向量进行采样,而后让网络再次稳定下来,而后接着对可视向量进行采用,以此类推。函数


那么为何这个学习是很困难的呢?最主要的可能的缘由是,若是你考虑一个单元链,这里是一个隐藏单元链,在两端是两个可视单元。若是咱们使用一个训练集合,其中包含着(1,0)和(0,1),换句话说,咱们想要这两个可视单元处于相反的状态,那么达到这样的结果的方式是确保全部的这些权重的积是负数。例如,若是全部的权重都是正的,打开W1将会倾向于打开第一个隐藏单元,而这将会倾向于打开第二个隐藏单元,以此类推。第四个隐藏单元将会倾向于打开另外一个可视单元;若是这些权重中有一个是负的,那么就能够获得一个介于这两个可视单元之间的反相关,意思就是若是咱们考虑学习权重W1,咱们须要知道其余的权重。因此假如这是w1(红框框起来),为了知道如何更改这个权重,咱们须要知道w3,咱们须要知道有关w3的信息,由于若是w3是负的,咱们对w1所要作的应该就是当w3为正的时候所作的相反的事情。学习


因此甚至在正确的方向上,为了可以改变,给定的一个权重却仍须要知道其余权重,使人惊讶的是有一个很是简单的学习算法只须要知道局部信息。因此事实证实,一个权重须要知道全部的其余权重和数据的任何事情都包含在两个相关性的差别之中的。另外一个方法是若是你使用这个由玻尔兹曼机指派到可视向量V的log几率,而后对这个进行求关于权重wij的偏导。这就是当这个网络使用夹在可视单元上的v创建的热平衡稳定以后,状态i和状态j的积的指望值之间的差别。也就是当v夹在可视单元中,而该网络处理热平衡的时候,减去一样的数量。可是当V没夹在可视单元上,由于可视向量的log几率的导数是简单的相关性的差,咱们可使得权重之间的变化按照基于训练集合中的全部可视向量的激活均值的指望积成比例改变,这就是咱们称之为的数据。当你没有夹紧任何东西,并且网络已经达到了热平衡而没有额外的干扰的时候,减去一样的两个激活值的积。因此这是一个很是有趣的学习规则,规则的第一项说的是当你要表达数据的时候,按与激活的单元的积的比例提高权重。这是所知做为一个hebbian学习规则的最简单的形式。在1940或者1950年代donald hebb 认为大脑中的突触也许会使用相似这样的规则。可是若是你只使用这个规则,突触的强度会变得愈来愈强,全部的权重都会变成正的,整个系统会被毁掉。你须要某些东西来控制,而这个学习算法经过使用第二项来进行控制的,当你从模型的分布中进行采样的时候,它按照两个常常在一块儿的单元的频率来下降权重。你一样能够将这个做为第一项就像一个Hopfield网络的存储项同样,而第二项做为逃离伪最小的一项,事实上这也是正确的考虑方式。这个规则准确的告诉你多少程度的非学习。测试

一个显而易见的问题是为何这个偏导这么简单。在热平衡上一个全局组态的几率,是一个能量的指数函数,这个几率是相关于E的负能量指数。因此当咱们达到了平衡状态,咱们得到一个log几率和能量函数之间的线性关系。spa

如今这个能量函数在权重中是线性的。因此咱们有一个介于权重和log几率之间的线性关系。由于咱们试图经过对权重进行操做来达到操做log几率的目的,这是一个log线性模型。事实上,这个关系很是简单。这是可以关于一个具体权重wij的偏导等于两个被权值链接起来的激活值的积。翻译

因此这里所发生的是什么呢?是经过传播权重的信息而稳定到热平衡的过程?咱们不须要一个显式的BP阶段。咱们只须要两个阶段,咱们须要解决有数据的时候和没有数据的时候。不过注意到这个网络的行为在这两个阶段中是至关同样的。网络中的深度的内部单元所干的事情是同样的,只是有着不一样的边界条件。在BP中,前馈传播和反向传播事实上是至关不一样的。视频


另外一个你可能会问的问题是,为何须要这个负阶段?以前已经说过了这个就像一个Hopfield网络中的非学习,用来逃离伪最小的。更详细的说,上图中的可视向量的几率的等式,(如上图所描述的同样,这里省略不翻译了,说的就如上图解释通常就为了说明这个公式罢了。并且我的以为,这里用几率统计的角度看看得了。不过的确本身对这里的理解还不够*************)事件


如今,为了运行这个学习规则,你须要收集这些统计数据。你须要收集咱们称之为正的统计数据,这些是当有数据夹在可见单元上的时候;一样的负统计数据,这些是当你没有数据被夹的时候,这时候你会使用非学习(其实能够称之为遗忘)。在1983年Hinton和Terry Sejnowski提出了一个效率低下的方法去收集这些统计数据。该想法是,在正阶段,你经过可视单元来夹逼一个数据向量,而后将隐藏单元设置成随机的二值状态,而后在网络中进行更新这些隐藏单元,一次一个单元,直到这个网络到达了温度为1的热平衡。事实上是经过高温度做为起始,而后开始进行减小的,不过这不是这里的重点。而后一旦你达到了热平衡,你就能够进行采样关于两个单元在一块儿的频率,因此你须要测量被可视向量夹逼的I和J的相关性。而后你基于全部的可视向量进行重复这样的操做,因此这个在被采样的相关性是基于全部数据上的一个均值。

而后在负阶段中,你无需夹逼任何东西。这个网络已经不受外部干扰的影响了。因此这就算设置好了全部的单元,包括可视单元和隐藏单元到随机的二值状态,而后更新这些单元,一次一个,直到这个网络达到了温度为1的热平衡,就像以前在正阶段作的同样。再一次,对每一对单元i和j的相关性进行采样,而后这样重复许屡次,如今是比较困难的知道到底须要重复多少次,不过在负阶段中,你指望这个能量景观可以有许多不一样的最小值,可是却分的至关开,并且有着差很少同样的能量。你这样指望的缘由是由于咱们使用玻尔兹曼机去作相似于对图片集合进行建模的事情。并且你指望这样合理的图片全部都有着差很少同样的能量,而后那些不合理的图片有着很是高的能量,因此你指望有一小部分的空间有着低能量状态,而一个很是大片的空间有着坏的高能量状态。(我的:这就相似于找局部最小同样)若是你有好几个模型,那么其实并不清楚你须要多少次去重复这个过程使得可以对这些模型进行采样。(我的:就是重复到本身认为满意就够了)。

2、获得准确统计的更多有效的方法
这部分将会介绍更多有关如何加速玻尔兹曼机学习的方法,经过使用更聪明的方法使得马尔可夫链可以保持在平稳分布的周围,或者使用被称之为均值场的方法。内容是至关先进的,因此这能够不算是该课程的部分(意思是这部分算是课外知识,不算在他老人家认为的该课程的考核内容),该部分用以让那些感兴趣的如何让深度玻尔兹曼机工做的更好的人看的。

有比Terry和Hinton在开始提出的更好的方法来收集统计数据。若是以一个随机状态开始,那么就会花费很长的时间来达到热平衡状态,固然也没那么容易来测试是否已经达到了热平衡状态,因此咱们不知道咱们须要多久来运行这个中间过程。因此为何不以你上次结束时遇到的那个具体的数据向量的状态做为开始呢。咱们记得隐藏单元中数据向量的解释,那么咱们就从那里开始。这个存储的状态,也就是这个数据向量的解释,被称之为一个粒子(particle)。使用粒子可让咱们有一个良好的开始而且有个巨大的优点。若是咱们以前处在平稳状态,咱们只须要更新权重一点点就够了,只须要在一个粒子中更新一小部分就能返回到平稳状态,咱们可使用粒子在正阶段和负阶段,在正阶段咱们会夹逼出一个数据向量,而负阶段就无需夹逼任何东西。


上图就是直接的收集统计数据,该方法由Radford Neal在1992年引入的。在正阶段中,你有一些具体的数据粒子,每一个训练样本有一个或者一些这样的粒子,每一个粒子的当前的值是隐藏单元们的一个组态加上该粒子涉及到的数据向量 。在每一个粒子中你使用相关的夹逼到的数据向量按顺序来更新全部的隐藏单元好几回。而后对于每一个链接到的单元对,基于全部的这些粒子来均化的这两个单元的几率。

在负阶段,保留一组fantasy的粒子,这些都是全局组态,再一次,在每一个权重更新以后,在每一个fantasy粒子中按顺序更新全部的这些单元好几回,如今你一样能够更新这些可视单元。对于每对链接起来的单元对,基于全部的这些fantasy粒子进行均化SiSj。该学习规则按照比例来改变权重来达到均化的数据的目的,均化全部的训练数据,均化当没有东西被夹逼时随着fantasy粒子获得的数据。该方法比Terry Snofsky和Hinton提出的学习规则更work,至少对于全批量学习来讲是这样的。


然而,将这个方法用在mini批量上是比较困难的,是由于当咱们回到了一样的数据向量,若是咱们使用的是mini批量,这些权重将会更新不少回,因此针对于数据向量的存储的具体的数据粒子将再也不会在热平衡附近了。在给定新的权重下这些隐藏单元随着粒子的可视单元下将不会处在热平衡中。再一次说明,咱们不知道再一次接近热平衡状态的这个过程须要多久,因此咱们能够经过作出一个强烈的假设关于咱们理解这个世界的程度来解决这个问题。这是一种认识论的假设,咱们假设当一个数据向量被夹逼的时候,这些好的解释,也就是隐藏单元的状态,扮演着那个数据向量的解释   是单峰的。意思就是说对于一个给定的数据向量,没有两个很是不一样的解释。咱们对于感知输入假设只有一个正确的解释,若是咱们对这些数据有个很好的模型,咱们的模型在这个数据点将会给咱们一个能量最小值。这是在咱们将要学习的这种模型上的约束,咱们使用的学习算法对于一个数据向量有着许多不一样的解释的模型是没法学习的。假设咱们有着这样的假设,咱们可使用一个很是有效的方法来达到热平衡或者逼近热平衡。


该方法被称之为平均场逼近。因此若是咱们想要获得正确的统计数据,咱们须要统计的和顺序的更新这些单元。这个更新规则是打开单元 i 的几率(上图第一个式子),是总的来自其余单元和他们的偏置的输入的逻辑函数,这里Sj是另外一个单元的状态,是随机二值。

如今不使用这个规则,咱们能够说咱们不打算保持来自单元 i 的二值状态,咱们会保持一个实值基于0和1之间被称之为几率的值。而在时间t+1时的几率是是逻辑函数的输出,更多你须要放入的是这个偏置和在时间t时权重和这些几率积的和,因此咱们经过一个实值几率来替换以前的随机二值。不过这还不是那么正确,由于这个随机二值是在非线性函数内部的,若是这是一个线性函数,那么没事,可是由于逻辑非线性,咱们当咱们使用几率来替换波动的内部二值时得不到正确的答案 。不过,它仍是work的很好,它可能在给咱们双向振荡的时候发生错误,由于如今咱们想要并行的更新任何事物,并且咱们正常的使用在计算p(t+1)_i 时被称之为阻尼平均场来处理这些,不过咱们不是彻底听从这样的方式的,咱们首先选择咱们如今所处的一个点,而后更新到咱们想要去的地方(上图第三个式子),因此在阻尼平均场,咱们使用lambda乘以咱们如今的状态并加上(1-lambda)乘以这个更新规则让咱们去的地方,这会解决振荡问题。


如今,咱们获得了一个对于玻尔兹曼机来讲有效的mini批量学习方法,这是Russ Salakhutdinov发现的。在正阶段,咱们能够初始化全部的几率为0.5,咱们能够在可视单元上夹逼一个数据向量,而后使用平均场的方法来并行的更新全部的隐藏单元直到收敛。对于平均场,你能够发现当几率中止改变的时候就是收敛了。一旦咱们收敛了,咱们就对每一对链接起来的单元对进行记录PiPj。

在负阶段,咱们作咱们以前作过的,咱们保持一组fantasy粒子,每一个粒子拥有的值是一个全局组态。在每一次权重更新后,咱们在每个fantasy粒子中按顺序更新全部的单元好几回。而后在基于全部的fantasy粒子上对于每一对链接的单元对,咱们均化SiSj这些随机二值,这些均化之间的不一样在于学习规则。也就是咱们经过对这些差别的量成比例来改变权重。


若是咱们想要更并行的使用这些fantasy粒子来更新,咱们能够改变玻尔兹曼机的结构,因此咱们有一个特殊的结构容许交替的对这些fantasy粒子进行并行更新,在层内咱们没有链接,并且也没有跨越层的链接,不过咱们容许有许多的隐藏层。因此这个结构看上去像上图所示,咱们称这个为深度玻尔兹曼机(deep boltzmann machine)。其实这就是一个普通的玻尔兹曼机有着许多消失的链接罢了,若是它们表现出来的话,全部的这些就是跨越层的链接。若是没有层次的话,它也只是一个普通的玻尔兹曼机。可是在这特殊的结构中,有些nice的事情仍是能够作的。


(这时候上图的从上往下数第一行第三行有问号),例如咱们能够更新第一个隐藏层和第三个隐藏层,给定可视单元的当前的状态和第二层隐藏层的状态,而后咱们能够在第二个隐藏层中更新可视单元(这时候从上往下是第二和第四行有问号)。而后咱们能够回头而后更新其余状态(这时候是第一行第三行有问号,其实也就是交替的更新),咱们能够回向和前向像这样,咱们能够并行的更新全部单元的一半状态,而这能够是正确的更新。


因此一个问题就是,若是咱们有一个DBM,经过使用平均场进行训练正阶段而后经过基于奇数层和偶数层交替的使用fantasy例子更新的负阶段获得的,咱们能够为了MNIST数字学到好的模型,或者一个更复杂的事物吗?因此一个告诉是否你获得的是一个好的模型的方法,是在学习以后,你移除全部的输入而后只是从这个模型中进行生成样本,因此你运行马尔可夫链很长时间直到它起效果了,而后你观察你获得的采样结果。因此Russ Salakhutdinov使用一个DBM去对MNIST进行建模,对正阶段使用平均场,而后为负阶段交替的更新粒子的层。真实的数据如上图右边所示,从模型中的获得的数据如上图左边所示,你能够发现,他们事实上至关类似。这个模型生成的东西很是MNIST因此这是一个至关好的模型。


因此这里有个谜题,当他在学习的时候,他使用带有100个数据样本的mini批量和一样适用100个fantasy粒子,一样的100fantasy粒子针对每个mini批量,问题就是,咱们如何使用这100个负样本去特征化整个空间来评估这些负的统计数据?对于全部的有趣的问题来讲,这个全局组态空间是高度多峰的。咱们如何成功的找到和表示全部的这些节点,在只是用100个粒子的状况下


这里是一个有趣的答案,用马尔可夫链交互的学习用来收集负统计数据,不管是否用来更新fantasy粒子的,它交互是为了有更好更有效的混合率。也就是说,咱们不可能经过认为这是一个更新权值的外部循环,和一个内部训练来收集固定的权重集合的统计数据同样来分析这个学习。这个学习影响着内部循环的有效程度。

缘由是不论什么时候这个fantasy粒子超过正数据,能量表面都是增加的,并且这会影响到马尔可夫链的混合率。它使得fantasy超激活的,并且它们比马尔可夫链的混合率更快的进行周围的移动去寻找更好的当前的静态权重。


因此这图是展现发生的事情。若是在能量表面有一个模式,它有着比数据更多的fantasy 粒子,这个能量表面将会上升直到fantasy粒子逃离这个模式。因此上图右边的左边的模式有四个fantasy粒子(四个红色箭头)和两个数据点。因此学习的影响是为了提高这里的能量。而这个能量障碍对于马尔可夫链来讲过高了,使得不能跨越,因此混合率会变得很慢。可是这个学习事实上经过提高这个最小值来让红的粒子逃出这个能量最小,在填充的时候这个fantasy粒子将会逃离到到其余更深的最小值。因此咱们能够逃出最小值使得马尔可夫链没法逃出,至少再也不一个合理的时间上逃出。因此这里发生的就是这个能量表面是真的用来做为两个不一样的目的的。这个能量表面表示咱们的模型,但是他一样经过学习算法操做使得马尔可夫链混合得更快;或者 影响一个更快混合的马尔可夫链。一旦这个fantasy粒子填满了一个洞,它们将会冲到其余地方,而后处理下一个问题。一个针对它们的分析就是他们看上去像调查的记者,冲去调查一些严重的问题,一旦公布告终果使得问题解决了,他们又冲去找下一个严重的问题。

3、受限玻尔兹曼机
在这部分,将会介绍受限玻尔兹曼机。它们有着更简单的结构,其中层内无链接,层间有连接,这使得在给定可视单元的基础上它很是容易的达到隐藏单元的平稳分布。也就是一旦你在可视单元上夹逼到数据向量,这个隐藏单元的平稳分布能够准确的在下一步中计算获得。由于在给定可视单元基础上,它们之间是相互独立的,更合适的玻尔兹曼机学习算法对于RBM来讲仍然很慢,不过在1998年,Hinton发现一个很是使人惊讶的快捷方式,可使得它成为玻尔兹曼机第一有效的学习算法,即便这个算法在原理上有些问题,不过在实际操做中它仍然work的很好,并且这算是玻尔兹曼机学习中的一个复兴。

在RBM中,咱们约束了网络的链接为了使得在推论上和学习上都变得更加简单。因此,它只有一层隐藏单元,并且在隐藏单元之间没有链接,一样在可视单元之间也没有连接,因此这个结构看上去如上图右上角所示,它就是计算机科学家称之为一个二分图,它有着两部分,在每一个部分中没有链接。关于RBM的好事是若是你在可视单元上夹逼一个数据向量,你能够在下一步达到热平衡,意思就是随着一个夹逼获得的数据向量,咱们能够快速的计算ViHj的指望值,由于咱们能够计算每一个打开的单元J的准确的几率,而这在隐藏层中它是与其余单元之间独立的。单元J打开的几率是从可视单元获得的输入的逻辑函数,并且这与其余隐藏单元之间相互独立。因此咱们能够并行的计算这个几率。这是巨大的胜利。


若是你想要一个关于二值向量的好的模型,那么正确的使用RBM的算法是有Tieleman在2008年引入的方法,该方法是基于更早的Neal的方法。在正阶段,你从可视单元上夹逼数据向量,而后计算在隐藏单元中不可见的全部对的vihj准确的指望值,你能够这么作是由于vi是固定的,并且你能够准确的计算vj,而后对于每一对链接的单元对,在mini批量中基于全部的数据向量来均化vihj的指望值。

在负阶段,保持的一组fantasy粒子是全局组态,而后经过交替的并行更新来更新每一个fantasy粒子好几回。因此在每一个权重更新后,更新fantasy粒子会使得它们更加接近平稳,而后对于每一对链接的单元对,基于全部的fantasy粒子来均化vihj,这会获得负统计数据。该算法事实上work的很好,而且容许RBM创建很好的密度模型或者生成二值向量集合。


如今,来讲说学习算法,该算法不擅长创建密度模型,不过却更快,因此先以一张对于RBM来讲低效的学习算法的图片开始。(上图t=0)先基于可视单元夹逼数据向量,而后称该时刻为t=0,因此如今是使用时间来标记,而不是意味着权重的更新,而是指在马尔可夫链中的步骤。给定这个可视向量,如今来更新隐藏单元,因此咱们对隐藏单元来选择二值状态,而后对于全部链接的可视和隐藏单元对测量这个指望值,vihj,称之为vihj0 来指明这是在t=0的时候测量到的,这时候是可视单元决定着隐藏单元。固然,能够并行的更新全部的隐藏单元,而后使用这个隐藏向量来并行的更新全部的可视单元(这时候t=1),而后再一次并行的更新全部的隐藏单元,因此这时候可视单元向量t = 1,咱们称这个为重构,或者说是一步重构,咱们能够一直这样交替这个链以这种方式,更新可视单元,而后隐藏单元,每一组都能并行更新。在咱们运行很长一段时间以后,咱们就获得了可视单元的某个状态,或者称之为t=infinity来指明这是在很长一段时间以后,而后该系统将会处于热平衡了,如今咱们能够测量vi和hj的相关性了,这时候称之为vihj_infinity,这时候的可视状态被称之为fantasy。因此如今这个学习算法看上去很简单,经过学习率乘以t=0时刻的vihj和在infinity时候的vihj之间的差别来改变权重。固然问题是在达到热平衡以前须要运行这个链很长一段时间,若是咱们运行的时间不够长的话,这个学习最后可能会犯错。事实上最后的状态是很是有误导性的。结果证实即便咱们只运行这个链很短的时间,该学习算法依然work。


因此这里就是很是使人惊讶的快捷方式,你只是运行这个链up,down,up这样。因此从数据中,你生成一个隐藏状态,而后你生成一个重构,而后接着生成另外一个隐藏状态。一旦结束后,你也许会有一个统计数据,因此不经过在平稳状态测量获得这个统计数据,而是使用在一个完整的马尔可夫链以后测量获得的统计数据。该学习规则但愿计算可以更加的快速,这很清楚的这不是最大似然学习,由于咱们为了负统计数据使用的这一项是错的。不过这个学习算法仍是很work,后面的课会介绍它为何work。


因此一个显而易见的问题是为何这个快捷方式会work?,这就是缘由,若是咱们在数据上开始这个链,该马尔可夫链将会离开数据并朝着他的平稳状态前进,目标是初始化的权重更加像这些数据。咱们能够观察到在一些步骤以后游荡到哪里了,若是咱们知道初始化的权重很差的话,那么就是在浪费时间,如今咱们知道如何改变他们来阻止它远离数据而不朝着平衡状态前进的状况。全部咱们须要的就是下降这个像心理学家称呼的虚构事件的重构几率,这支在一个完整的步骤以后就产生,而后提高数据的几率,这能够阻止它远离数据,一旦这个数据和在一个完整的步骤以后的位置有着一样的分布,那么这个学习就会中止。


因此这就是一张到底发生了什么的图片。(上图上面的红绿点的部分图),这是在全局组态空间中能量表面。绿点是在能量表面上的数据点,数据点的意思是包括了可视向量和具体的经过随机更新隐藏单元获得的隐藏向量。因此这个隐藏向量是一个该数据点是什么的函数。因此从这个数据点开始,咱们运行马尔可夫链一个完整的步骤来获得一个新的可视向量,而后隐藏向量就到了上图红点部分。因此一个数据点的重构加上从重构获得的隐藏向量。而后改变这个权重去将能量下降到这个数据点,而后接着经过重构来提高这个能量。这样作的结果是能量表面如上图下面那个曲线图所示。你能够注意到在开始的时候数据部分在构建一个能量最小值,你同时注意到它在远离数据,并且前往和以前差很少的状态。


因此这个只作一次完整的步骤的快捷方式获得的重构会在它远离数据的地方失败。咱们须要担忧这个模型很像的数据空间却很是远离数据点的区域。这些低能量洞致使这个归一项变得很大,以致于在使用快捷方式的时候没法感知到他们。若是咱们使用持续不断的粒子,这其中咱们会记得他们的状态,而后在每一次更新后,咱们更新它们(粒子)更屡次,而后它们最终会找到这些洞。它们会移动到这些洞内部,而后学习着将这些洞补起来。一个介于速度和正确性之间的权衡是开始于很是小的权重,而后使用CD1(也就是一个完整的步骤)来获得负数据。一旦这个权重增加了,马尔可夫链就会混合的更慢,如今咱们可使用CD3.一旦这个权重增加的更多,咱们可使用CD5,或者9 或者10.因此这是按照权重的增加而增长的,咱们能够保持这个学习work的更合理,即便这个马尔可夫链的混合率降低了。

4、对比散度学习的例子
这部分,将会介绍一个有关RBM的简单的例子,关于学习手写数字2图片的模型。在模型学习结束后,咱们能够观察它是如何重构这个2的。而后观察若是咱们给它一些不一样的数据,而后要求模型重构会发生什么。咱们一样在全部的数字上训练一个更大的RBM,来观察咱们获得的权重,这会生成各式各样的图片,在这其中能够更好的重构全部的不一样的数字类,一样的也是这些数字类的一个至关好的模型。也就是若是你使用一个二值向量,这上百的图片的基础上,这个模型能够找到低能量状态,兼容这些图片。若是你给它一张十分不像这上百张图片的数字的图片,这个模型就可能无法找到兼容这张图片的低能量状态了。

如今介绍一个至关简单的RBM如何学习创建一个图像数字2的模型。该图像是16×16像素的图片,这个模型有着50个二值隐藏单元来做为特征检测器。因此当它为了表现数据状况的时候,第一件要作的事情就是使用这个权重和像素与特征之间的链接像上图绿色箭头同样,去激活这些特征。这是对于每一个二值神经元如此的,作出决定关因而否将这个特征检测器的状态为1仍是0.。而后使用这些为了激活的二值神经元来重构这个数据(上图淡蓝色箭头),也就是对于每个像素,它作出决定关因而否为1仍是0的决定,而后从新激活这个二值特征检测器,经过使用重构来激活而不是以前的原始数据,这样权重经过基于一个激活像素和激活的特征检测器之间的增量权重来更新,在观察数据的时候这会下降数据的全局组态的能量,不论隐藏模式会变成什么,并且在观察重构的时候它减量基于一个激活像素和一个激活的特征检测器之间的权重,这会提高重构的能量。在学习开始的附近,当权重随机时,这个重构几乎老是会下降能量到数据如下(意思就是下降能量),由于这个重构是在给定激活的隐藏模式基础上从新基于可视单元来从新生成。明显的这是基于他的能量函数从新生成有着低能量的模式,你能够认为这个学习是改变权重使得数据有着低能量,而崇高是一般有着更高的能量。


因此让咱们以有着50个特征检测器且是随机权重开始,咱们使用很是小的权重,并且这每个方块表示权重的样子。这个很小的随机权重是用来打破对称性的。由于这个更新是随机的,因此其实咱们也不须要这样。


在输入了几百张图片以后,这些权重开始造成一些模式了


若是接着这么干,你能够发现许多特征检测器开始检测一个2的洞了这些都是至关的全局特征检测器。并且这些特征检测器变得更强大了


许多特征检测器开始局部化了,变得更加的局部,


这就是最终的权重,你能够发现每一个神经元变成一个不一样的特征检测器,大部分特征检测器都至关局部化了。若是观察上图红框中的特征检测器,他是检测2的顶部的,并且当2的顶部是白色像素并且没有黑色像素的时候这个特征检测器会兴奋起来,因此它是表示2的顶部的


一旦咱们学好了这个模型,咱们能够观察它重构的如何,而后咱们给它一些测试数字,一些以前没见过的数字,这里先给它一个2的测试例子,(上图左边),他的崇高看上去至关像测试例子。这个测试例子在顶部有个回勾,而在重构以后就被平滑掉了,不过这仍是一个很不错的重构。更有趣的是给它一个不一样的数字类,若是咱们给它一个数字3来进行重构,它重构的事实上看上去更像是一个2而不是3,全部的这些学好的特征检测器都是很好的表现2的,而不是为了检测3中间的那个尖端的。因此结束重构以后,它仍是听从2的规则的,而不是3的规则。事实上,这个网络试图表示做为2的事情。


因此这里是一些特征检测器,在这个模型的第一层隐藏层中,使用了500个隐藏单元去对全部的这10个数字类进行建模。这个模型被使用CD算法训练很长时间。它有着很是不一样的特征检测器。若是观察从上往下数第6行,左边第二个,这是显而易见的用来检测数字8的。若是接着看第8行左数第5个,这不是你指望看到的,这看上去是为了检测底部的像素的,而它看上去不像是检测像素,而却有21个底部的像素,其实这是数据被归一化了,因此这个数字不会有比20个像素更大的高度,意思就是若是你知道有一个像素在这些大的正权重上,也就是在负权重上这个像素不太可能被打开。因此这是挑选出的归一化后安排好的规律。观察倒数第二行左数第二个,它作的是同样的事情,数据不可能有大于20个像素的宽度;观察第二行左数6个,它是为了检测一个竖直拐弯的底部的,它检测一些不一样的位置而且而后拒绝检测那些中间位置。因此这很是像一个明显的二值数字中的数字,当你增长数字的强度,它会on 而后off,而后on  而后off。这是为了找到表达这些数据更复杂的方法。

5、应用在协同过滤下的RBM

在这部分,会介绍将RBM应用在协调过滤上。协同过滤意思是试图指出一个用户在基于喜欢其余产品的程度和有多少用户喜欢这个产品上,该用户有多喜欢这个产品。具体的状况能够在Netflix比赛中看到,在这其中,一个机器学习算法能够预测一个具体的永辉将会喜欢一个具体的电影。这个比赛的训练数据包括了50万个用户的18000个电影的100百万个评级,因此这是一个至关大的数据集。这任何人都不认为RBM能够处理的了。咱们能够看到,有一个很是重要的技巧可使得RBM来处理全部的这些几乎消失的电影评级(就是为了预测这些消失的评级)。可是当咱们使用这个技巧的时候,咱们能够训练这个模型,在实际操做中,这很是的实用,并且得到了胜利。


因此如今咱们来解释如何将RBM用在Netflix比赛中的协同过滤吧。在这个比赛中,给你的数据是50万个用户写的给18000个电影的评级,每一个电影的评级是从1到5.固然,每一个用户只评级一部分电影。可是即便这样,仍是有1百万个评级,因此这也是个至关大的数据集。你须要预测用户对给出的电影的评级,若是你干的好,奖励也是很丰厚的。若是你赢了,就能够获得1百万的奖励。因此你能够在一个巨大的表格中划出这个评级结果,顶部是电影编号,左边是用户编号。上图中数字都是评级,问题就是如何预测出那个问号的数字,你可能以为结果和用户2差很少,由于看上去他两是以同一个思想来评级电影的,另外一方面,用户4喜欢电影6,此次你能够预测的更合理,由于你发现可使用更多的统计数据。


让咱们使用一个语言模型来讲明,乍一听很奇怪,不过能够发现其实至关于一个标准的方法。因此咱们能够按照三元组字符串的形式来写数据,更像是一个家族树。每一个三元组有用户,电影和评级三个内容。上图左边就是上上图的数据内容,咱们只预测三元组的第三个值,因此若是咱们创建一个语言模型,咱们要作的就是转换每个用户到这个用户的向量特征上,这是咱们学到的向量,并且咱们将电影转换到这个电影的向量特征,从这两个特征向量上,咱们试图进行预测评级。如今这个显而易见的方法就是将它放在一个大的隐藏层中,而后将特征向量馈送到这个隐藏层,而后用这个隐藏层来预测这个评级。咱们的结果显示咱们并不比一个很是简单的方法结果更好,这个方法是简单的使用用户的特征向量和电影的特征向量的标量积,你只须要将它们逐点乘起来,加起来,而后就像你的评级同样输出。这甚至不是一个softmax,事实上输出的是你从这个标量积得来的实数。如今这至关于作一个被称之为矩阵分解模型的事情。若是咱们安排用户的特征为行,电影特征为列,咱们能够发现若是咱们将它们乘起来,这个用户的矩阵乘以电影的特征,而后咱们就获得了评级的预测。这准确的等于隔壁这个语言模型。因此这个矩阵分解模型是最通用的做为协同过滤,并且它work的很好。


如今,让咱们考虑一个可代替的模型,使用咱们的RBM,用RBM来解决这个问题看上去不是很明显。因此咱们须要一些思考。在最后咱们决定咱们能够将每一个用户视为一个训练样本。因此一个用户是一个电影评级的向量,对于每一个电影,咱们有一个可视单元,有着5个可代替的值。因此可视单元再也不是二值,而是5种softmax.因此咱们的RBM的网络如上图右边所示。每一个可视单元是一个5方式的softmax,一个电影一个可视单元,你可能会担忧会有18000个可视单元存在。而后咱们有大约100个隐藏单元,每一个隐藏单元连接着softmax的5个输出,一样的它还有一个偏置。你能够发现参数的数量是很是巨多的。对于softmax的cd算法是与二值单元同样的,就像以前说的有100个单元。咱们要作的学习一个模型,而后试图填满那些消失的数据。


如今,使用这个方法来解决这个问题,咱们不想要一个RBM有着18000个可视单元,并且只有一小部分是有值的。这是一个很是巨大的消失的数据量。有一个整洁的方法,对于每一个用户,咱们使用一个RBM,它有着和用户评级过的电影数量同样多的可视单元。因此,每一个用户均可能对应一个不一样的RBM,有着一个不一样的子集和可视单元。如今全部的这些RBM共享一样的权重。也就是咱们知道哪一个电影是哪一个,因此若是两个用户看同一部电影,并且评级了同一部电影,来自这个电影到这个隐藏单元的权重将会针对这两个用户来讲是同样的。因此咱们有着许多权重共享。很是的幸运,由于对于每一个用户来讲,咱们只有一个训练样本。咱们让具体的有着正确结构的RBM对应每个用户,也就是可视单元正确的数量对应用户评级过的电影。如今只有一个训练样本,也就是这个评级向量,可是这50万的训练样本共享到隐藏单元的权重,因此学习算法work的很好,该模型使用cd1训练,而后过段时间使用cd3训练,而后使用cd5和cd9,那么它们的效果如何呢?


这个RBM的效果和以前的矩阵分解的方法效果同样好,不过它给出的是彻底不一样的错误,意思就是若是你均化RBM的预测结果和矩阵分解模型的预测结果,你获得一个很大的胜利,而冠军团队实际上使用多个不一样的RBM模型,而后进行均化,并且使用了多个不一样的矩阵分解模型。据Hinton所知他们使用的主要模型就是矩阵分解模型和RBM模型。

相关文章
相关标签/搜索