Deep Learning读书笔记(三):Greedy Layer-Wise Training of Deep Networks

        这篇文章主要针对深信度网络(DBN)来展开的,文章的主要工作有两个方面:第一,描述了当限制玻尔兹曼机(RBM)的输入是连续时,所利用的公式该如何变化;第二,当输入数据的分布并不是很明显时,又应该如何处理的问题。

        文章的开头就阐明了深层网络较浅层网络的优势所在:因为深层网络具有较多层的非线性计算单元,因此深层网络能够更好的表示高度非线性的和high-varying(这个概念的含义可以参见“Learning Deep Architectures for AI”这篇文章,该文章特别值得一读)的函数。

          首先对DBN做一些简单的介绍。DBN的结构如下图所示:
Deep Learning读书笔记(三):Greedy Layer-Wise Training of Deep Networks_第1张图片
        从图中可以看出,整个模型的下层是一个有向图。而模型的最上两层是无向图,其实就是一个限制玻尔兹曼机,我们通常称之为联想记忆层。不知道大家有没有想过这样一个问题,这里权值连接的方向是向下的,但是网络中数值的传播是向上的。这样的话,传播的方向与连接权值的方向相反,我们应该如何训练连接的权值呢?其实在DBN的训练中还是将每一层视作是一个RBM,利用对比分歧算法来进行训练。最后来对整个模型进行调参,无监督的学习算法包括wake-sleep算法、BP算法,监督型学习算法就会有mean-field approximation算法。
       
             其联合概率分布为:
            其中,x表示模型的输入,表示第i层隐藏层。右式中的最后一项就对应着DBN最上两层的RBM。将左式表示成条件概率相乘的形式好处就是对其的采样更加容易。
        如果第i层隐藏层中有个元素,那么:
        在训练RBM时,我们将经验数据作为输入,并对它进行建模。将的后验分布记作。式表达的意思是,当从数据的经验分布中采样时,针对第一层隐藏层就会产生一个经验分布。以此类推,利用经验分布进行采样,则会依据式子使得服从分布
        在RBM中,表示层l与层l-1间的参数。而在DBN中表示的是上一层的参数。所以,在RBM中式所表达的含义与DBN中的是不同的,除非表示的是DBN中最上两层的RBM。但是我们通常会使用RBM中的来近似DBN中的
        给定一个DBN模型,如果在原有的基础之上插入新的一层,如果该层能够有足够多的单元,以及能够被很好的初始化,那么在插入该层后对该层的上层以及该层的训练质量都会有所提高。
        接下来来叙述下对于DBN的学习算法。首先是监督型的mean-field approximation算法。该算法的思想很简单,就是用mean-field expected value来代替第i-1层的采样。其中具体形式为:
        对于DBN来说,向上的权重用于“认知”,向下的权重用于“生成”。使用wake-sleep算法调整所有的权重。让"认知"和"生成"达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。wake-sleep算法分为wake和sleep两个阶段:
(1) wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。
(2) sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。
        在介绍了一些铺垫性的工作之后,接下来就要进入本篇文章的主要工作了。前面提到,模型的输入都是二值的,但如果遇到一个具体的问题,其输入不是二值的,我们通常的处理方法是:将数据投影到(0,1)区间内,然后再依概率确定每个值是0还是1。这样的做法在处理图像数据上是有用的,但在处理其他类型的数据方面效果就不是那么好了。接下来我们就要谈论当输入数据是指数分布或是truncated指数分布、以及高斯分布时参数的表达式又应该如何变化。对于二值输入时,参数的更新公式可以在读书笔记(二)中找到。
        现在来考虑第一种情况。RBM中的一个单元y,z是其他层与y连接的一个单元。可以表示为包含y的指数的形式,同样也可以表示为ya(z),其中。如果我们允许y从任意区间I中取值,那么y的条件概率就会变为。当时,这个式子中的参数就只有a(z),归一化的整数为-1/a(z)。只有当存在z,使得a(z)<0时,该归一化因子才是存在的。计算这个式子的期望以及对该分布进行采样就会变得容易。如果区间I是闭区间,那么上述的分布就会变成truncated exponential。以I=[0,1]为例,归一化的因子就为,而且是一直存在的。y给定x的条件期望为。对于truncated exponential的采样是比较简单的,通过uniform采样U并使用条件分布的inverse分布函数,具体式子为:。不管是truncated还是not truncated的情况,对比分歧算法的参数更新表达式原来二值单元的形式一样,只是采样的形式发生了变化,变成了是根据单元条件概率的形式。
        当输入数据服从高斯分布时,需要在模型的能量函数后加上一个平方项,,其中是与高斯单元连接的那个单元,等于的逆方差。那么,对于一个单元y,其输入为z,逆方差为,就有
        对比分歧算法中参数的更新规则只需要对能量函数求导数就可以了。具体的更新规则也可以在网上找到相关的资料,这里就不一一列出了。
        前面我们讨论了输入为其他分布时的情况,我们也可以这样考虑,如果隐藏层单元也服从其他分布呢?其实是完全可以的,但是会有一些缺点。拿高斯分布来举例吧,在高斯单元上运行mean-filed approximation算法,结果只是进行了一次线性变换。如果整个模型中只存在线性变换,那肯定是不行的。如果模型中只是存在服从高斯分布的单元,那么就只能对服从高斯分布的数据进行建模。
        接下来我们来说明下本篇文章的另一个主要工作,就是处理分类目标与输入数据的分布并没有太大关联的情况。问题的描述是这样的,一个分类任务,输入数据x服从分布p(x),而分类目标可以表示为y=f(x)+noise,其中p与f并没有特别明显的关系。在这种设定下,我们并不能指望无监督学习对模型的学习有特别大的帮助。在这种情况下,我们可以在每一层的训练时综合监督型学习算法和无监督的学习算法。一种比较简单的方式就是将对比分歧算法与梯度下降法相结合,只需要在每一层学习时添加一层假想的输出层就可以了。试验表明,我们只需要在网络的第一层的学习时使用这种方法,那么就能够将对目标的预测信息保留在网络中,使其能够向高层传播,而不必在每一层的学习时都使用这种方法。
        最后呢,我们来讨论两个还比较有意义的问题。第一个呢就是关于每一层单元数目的问题。在一开始介绍深度学习的时候就谈到了,深度学习的目的就是借助深层次的模型来学习数据的特征。对特征进行学习时就必然会涉及到降维这个问题,我们希望最后学习到的特征是维度比较低的。那是否意味着模型每一层的单元数目是否一定要是递减的呢?其实不然,试验发现,只要每一层单元的数目有一个递减的趋势就行了。
        试想一下,如果我们可以对模型的所有层同时进行训练,使每一层只对其输入进行建模,而忽略更高的层次。这样,我们可以很容易的添加一层,而且对于所有层次有一个简单的停止条件。同样也可以加快模型的学习速度。试验发现,这样的方法并不会比传统的方法效果差。

        


你可能感兴趣的:(Deep Learning读书笔记(三):Greedy Layer-Wise Training of Deep Networks)