深层置信网的快速学习方法(Deep Learning)

时间:2021-08-17 10:13:17

来自这篇论文:A fast learning algorithm for deep belief nets

转自:http://www.doesbetter.com/archives/35

Geoffrey E.Hinton and Simon Osindero

    摘要:使用互补先验消除explainingaway现象(互补先验:在具有双向的链式结构中,某数据推出的结果(后验)在反向时为其提供的先验概率就叫互补先验,explaining awaycomplementaryprior可以用来分层学习directed belief networks。由此导出一个算法,此算法用来初始化一个过程的权值,此过程使用contrastive version of the wake-sleep algorithm来fine-tunes the weights.fine-tunes之后,得到一个具有3层隐藏层的网络,这个网络是一个关于手写数字与它的标签的联合分布的生成模型。这个生成模型在对数字分类方面比最好的判别学习算法的效果都要好。the low-dimensional manifolds on which the digits lie are modelled by long ravines in the free-energy landscape of the top-level associative memory and it is easy to explore these ravines by using the directed connections to display what the associative memory has in mind(谁能告诉我这是神马意思???)

    1 introduction

    由于在给定数据的情况下很难推出隐藏层的条件分布(推不出条件分布就不行?这个条件分布对模型的学习这很重要吗?),所以很难学习densely-connect,directed belief nets.有很多方法来近似逼近真正的条件分布,但是效果不太好,特别是对于最深层的隐藏层的时候,因为它们的先验概率被认为是独立的。很多的学习方法要求参数一起学习,这在参数增长时将耗费大量的时间.

    作者提出了一个最上层为一个无向联想存储器的模型.其它的隐藏层形成的是一个有向无循环图(如下图),可以将联想存储器中的表示转为可视化(比如转为像素,图片等等).

     深层置信网的快速学习方法(Deep Learning)

   2 complementary

    explaining away 现象导致有向置信网很难推理,隐层的后验分布很难处理,除非在混合模型或者线性且含有高斯噪声模型中.MCMC方法可以通过抽样估计后验概率(how do?)。变分法可以用来估计更难以处理的后验分布而且它能提高训练数据对数概率的下界.值得庆幸的是:这个学习方法(指的是变分法?)即使在对隐藏层状态推理错误的情况下,仍然能提高下界值.如果能找到一种方法消除explaining away现象就好了,即使是模型的隐藏层和显层高度相关的情况下.

    logistic belief net由随机二值节点组成,当网络生成数据时,节点取值为1的概率是:深层置信网的快速学习方法(Deep Learning)

j是与节点i直接相连的父节点。如果LBN只有一个隐藏层,那么隐藏层的先验分布就是可分解的,因为模型在生成数据时,它们的二值状态是独立选取的(在隐藏层选取节点,是独立的。所以先验可以写成各自的组合形式)。非独立的后验分布(因为是多因一果)由data(上面所讲的生成的data?)的似然函数(即:P(h|v))得到。在第一层隐藏层可以通过使用另外一层隐藏层产生与似然函数中反相关的互补先验的方法消除explaining away(想用在生成过程方向上V1对h0的先验(此先验与v0对h0的先验反相关(为什么反相关呢?因为:V1是由h0得到的,h0->v11,h0->v12,……,h0->vij,所以可以由此反向得到v0i与h0j的相关性(1) )消除explaining away现象)。所以,当我们把先验和似然函数相乘后,得到的后验分布也是可以分解的(因为似然函数也成为了可分解的了,至于是不是用complementary prior替换p(h|v),我还不确定) ,并不是所有的互补先验都能很容易看出来,但是下图中的无限logistic belief net的例子中,每一层都有complementary prior

深层置信网的快速学习方法(Deep Learning)

使用tied weights构造互补先验就像是使用一些技巧使得有向网络模型变成无向网络模型(原模型就是bottom-up而没有up-bottom,即没有可以重现V0的步骤,而tied weights就是指up-bottom方向上的weights) ,所以我们可以得到通过逐步将下层的weights untying from高层的weights的方法学习模型(这里要untying的weights是指W’还是W?)

2.1 an infinite directed model with tied weights

    可以通过从无限深的隐藏层选取一个随机构型开始生成数据(根据注释知,所谓的无限还是有限的,在到达平稳分布之前迭代一定次数之后选取构型) .然后执行自顶向下的过程,从祖先节点向下传递.每层的节点状态都是从其上层激活状态的父节点作为输入的伯努利分布中选取的.和有向网不同的是,我们可以通过从在给定显层数据情况下隐层的真正后验分布中抽样,然后通过权值矩阵的转置反推每个隐藏层的后验分布(先从P(h|v)=p(h)*p(v|h)/p(v)抽样,即得到v_i0,然后再通过W‘计算得到h0,因子分布???? .v_i0是可见单元i能被激活的概率,如果可见变量是由隐层单元抽样后得到的(即在重构数据中单元i能被激活的概率,概率??? 。计算V1的后验分布p(v1|h0),和重构数据的过程是一样的,所以v_i1是以概率v_i0的概率从伯努利分布中抽样。

    v1与h_j0之间的关系是通过v_i0联系起来的,因为v_i0是given h_j0时的期望。

3 RBM&&CD

    RBM只有一个隐藏层,而且隐藏层内部节点没有连接.隐藏层和显层对称连接.为了生成数据,可以随机选取一层并赋予随机状态,然后执行交替Gibbs抽样:在给定一层节点状态的情况下,另一层并行更新,这个过程持续到系统到达平稳状态。这个过程就像IBN中带有tied weights生成数据的过程.为了最大化RBM的似然函数,我们可以利用两个相连节点之间状态的差异.对于每一个权值w_ij,是显层节点i和隐层节点j之间的权重。当给定一个显层数据V0,隐层数据时由条件分布p(v|h)中抽样得到的且是可分解的,就得到一个<v0h0>。这时执行交替GIBBS抽样,直到该马尔科夫链到达稳定状态,此时计算<vi_infinite hj_infinite>,对数概率的梯度为:深层置信网的快速学习方法(Deep Learning)

这个学习规则和最大化infinite logistic belief net的似然函数的方法类似,每一步gibbs抽样都和计算ILBN的一层后验分布相对应(即是计算p(v|h)) 。最大化数据data的对数概率,相当于最小化初始状态P0与平稳分布时的状态P_theta的KL散度(后面的比较好理解,就是个等价的过程)(貌似下面就要讲CD了)只执行n步的full gibbs抽样(h|v+v|h称为one full step) ,相当于忽略掉来自上层的n-1步的导数(即将bottom-up以及up-bottom之间的部分忽略了) ,忽略掉的这些导数值的和等于第n层的后验分布的对数概率的导数(第n层:p(h0|v0)*p(v1|h0)*p(h1|v1)……,然后求对数就得到和) 。下面这个公式就是最小化ingoring derivatives:深层置信网的快速学习方法(Deep Learning) ,gibbs抽样保证公式(5)不会是负值。P_theta(n)依赖于模型的参数,CD算法中,P_theta(n)随着参数变化的方式被忽略掉了(什么意思?) 。这种情况不会出现在P0中,因为P0不依赖于参数。看似有效的方法也带来了很高的代价:当DMN的weights不相等时,CD算法效果不好,为了到达平稳状态将耗费大量的时间。下一节就给出了等价于RBM和IDN的有效学习方法,该方法在多层而且without tied weights的网络中效果不错。

4 a greedy learning algorithm for transforming representations

    多种模型组合的情况下,每学习一个模型都要重新调整参数。adaboost中是针对前面模型的错误决策调整权重。figure 5是作者提出的一个混合模型:

    深层置信网的快速学习方法(Deep Learning)

最上层是无向连接,其它层都是有向的,最上层相当于无限多的higher layer with tied weights。内部没有连接,每层的节点都相等的,学习W0是比较简单的,假设高层的权值能用来提供W0的互补先验,相当于假设所有的权值矩阵是相等的(即可以用W0近似W1这个complementary prior)。这时学习W0就相当于学习一个RBM(RBM就是假设各种相等??) ,但是这仍然有一定的困难。更好的近似方法是CD。一旦得到W0,数据v0会映射到H0,H0继续用来create更高层的V1.

    为了使得这个模型更好,作者提出了greedy algorithm:1,假设所有的权值矩阵are tied(神马意思?????) 。2,使用W‘生成H0的近似后验分布(由v0得到H0,即得到P(h0|v0)) ,即使在后面的计算中发现W’是错误的也没关系。3,视W0为不存在,继续学习。当这个greedy algorithm改变上层权值矩阵,它能保证提升该生成模型的整体性能。数据的负对数概率由一个变量*能量energy限定,该energy是近似后验分布的期望值减去分布的墒值。对于一个有向图模型,某个构型的能量由这个公式给出:

深层置信网的快速学习方法(Deep Learning)

所以可以知道边界形式为:

深层置信网的快速学习方法(Deep Learning)

上式第一项是Q*E,这个可以根据求期望的公式很容易看出.第二项是该分布的熵值.h0是第一隐藏层的二值构型,P(h0)是当前模型下的先验概率分布。Q(·|v0)可以是第一隐藏层的任何分布形式,如果Q(·|v0)是真正的后验分布,则边界形式是等号。

    当所有的权值矩阵are tied together(啥意思?放在一起?) ,由应用W_0‘得到的H0的因子分布(factorial distribution,可分解分布概率?因子分布?)就是其真正的后验分布,所以bound成为了如下形式:深层置信网的快速学习方法(Deep Learning)

所以只需要最大化这个bound就行了,即最大化这个隐层节点H0以概率Q发生的的对数概率。P(V0)不会下降。

    如果使用full最大似然RBM的学习算法去学习tied weights,然后将最底层的从权值集中解除,就能每次学习一层的权值,并且保证在整个生成模型下不会降低数据的对数概率。实际中我们用CD替代MLRBM方法(即只执行n步gibbs抽样)

    为了保证生成模型适用这个算法,将每层的节点设置为相同的,这样便于高层权值初始化为已经学习到的权值(w0?还是w0’?是W0) 。当然这个算法也可以用在不同层次有不同节点个数的模型中。

5 Back-Fitting with the up-down algorithm

    每次只学习一层的权值虽然有效但不是最优的,一旦得到高层的权值,对于下层来说权值和推理过程都不是最优的.对监督学习来说贪心算法的子优化问题一般难以操作,因为带有标签的数据比较少,且只提供了关于参数约束的一少部分信息(对学习参数的约束条件比较少) ,所以容易过拟合.如果go back 重新拟合之前的模型学习的参数,这将带来很多麻烦。然而,无监督方法能用到大量的无标签数据集,而且每一个sample都将是高维数据,能提供很多信息。under-fitting成为了一个严重的问题,不过可以用back-fitting权值的子阶段,这个阶段是调整先学习到的权值去拟合后面学习到的权值(应该是对应后面的从W0’向上逐层调整权值的过程)

    逐层学习并初始化每层的权值之后,将从决定模型的generative 权值推出的recognition 权值(转置)解除,但是保留一个限制条件:每层的后验必须由给定低层值得到的条件独立层内变量的因子分布做近似估计。(下面开始介绍wake-sleep算法) ,在向上的过程中,recognition 权值用来随机选择每一隐层的状态(所谓“随机”,大概就是指取0或1是由一个概率决定的) , 有向连接中的generative权值通过最大化似然函数公式(2)被调整。最上层的无向连接权值,和之前层次的学习方法一样,通过将最上层RBM拟合倒数第二层的后验的方法来学习。

    向下的过程从联想存储器的一个状态开始,随机激活下一层的单元(和up-pass一致) ,在自顶向下的过程中,所有的生成方向的连接不变,只有最底层的recognition 权值发生调整。这等于wake-sleep的sleep阶段,如果在执行down-pass之前联想存储器系统状态到达了平稳分布状态。如果联想存储器被up-pass初始化而且在down-pass之前只允许执行有限步的gibbs抽样,这就是wake-sleep算法的一个对比形式算法,这避免了必须使联想存储器系统状态达到平稳分布。对比形式的wake-sleep算法还解决了sleep阶段的其它问题,它保证recognition 权值被用来学习类似真实数据的表达(实际上gibbs抽样得到的是“伪”真实数据。这里不是很明白) ,还可以消除mode averaging(目前表示不懂) 。如果给定一个数据sample,recognition 权值经常会在上层选取一个特定的模型,而忽略性能相当的比较复杂的模型,在向下的过程中,如果sleep节点是一个纯粹的从父节点到子节点的过程,向下过程中将不会改变recognition权值去恢复任何它能恢复的其它模型(意思是在向下的过程中,不对recognition权值作调整??) 。纯粹的ancestral pass需要上层的联想存储器系统状态gibbs抽烟到达平稳分布。通过上层的联想存储器消除wake阶段的问题:独立的上层单元要求允许ancestral pass(意思是要求最上层之上也有节点层?) ,但是这意味着变化的估计对上层权值矩阵作用不大(啥意思?)

——————-剩下的就是些实验结果,就暂时不写了。—————————————————