aihot  2017-09-23 13:59:36  深度学习 |   查看评论   
 = 生病
  • 000111, 001110, 000101, 000011, 000110 = 健康
  •   我们来训练一个自编码器(使用反向传播),六个输入、六个输出神经元,而只有两个隐含神经元。

      在经过几百次迭代以后,我们发现,每当一个“生病”的样本输入时,两个隐含层神经元中的一个(对于生病的样本总是这个)总是显示出更高的激活值。而如果输入一个“健康”样本时,另一个隐含层则会显示更高的激活值。

    再看学习

      本质上来说,这两个隐含神经元从数据集中学习到了流感症状的一种紧致表示方法。为了检验它是不是真的实现了学习,我们再看下过度拟合的问题。通过训练我们的神经网络学习到的是一个紧致的简单的,而不是一个高度复杂且对数据集过度拟合的表示方法。

      某种程度上来讲,与其说在找一种简单的表示方法,我们更是在尝试从“感觉”上去学习数据。

    受限波尔兹曼机

      下一步来看下受限波尔兹曼机( RBM),一种可以在输入数据集上学习概率分布的生成随机神经网络。

          

      RBM由隐含层、可见层、偏置层组成。和前馈神经网络不同,可见层和隐含层之间的连接是无方向性(值可以从可见层->隐含层或隐含层->可见层任意传输)且全连接的(每一个当前层的神经元与下一层的每个神经元都有连接——如果允许任意层的任意神经元连接到任意层去,我们就得到了一个波尔兹曼机(非受限的))。

      标准的RBM中,隐含和可见层的神经元都是二态的(即神经元的激活值只能是服从的0或1),不过也存在其它非线性的变种。

      虽然学者们已经研究RBM很长时间了,最近出现的对比差异无监督训练算法使这个领域复兴。

    对比差异

      单步对比差异算法原理:

      1、正向过程:

      • 输入样本 v 输入至输入层中。
      • v 通过一种与前馈网络相似的方法传播到隐含层中,隐含层的激活值为 h

      2、反向过程:

      • 将 h 传回可见层得到 v’ (可见层和隐含层的连接是无方向的,可以这样传)。
      • 再将 v’ 传到隐含层中,得到 h’

      3、权重更新:

          

        其中 a 是学习速率, vv’hh’ 和 都是向量。

      算法的思想就是在正向过程中影响了网络的内部对于真实数据的表示。同时,反向过程中尝试通过这个被影响过的表示方法重建数据。主要目的是可以使生成的数据与原数据尽可能相似,这个差异影响了权重更新。

      换句话说,这样的网络具有了感知对输入数据表示的程度的能力,而且尝试通过这个感知能力重建数据。如果重建出来的数据与原数据差异很大,那么进行调整并再次重建。

    再看流行感冒的例子

      为了说明对比差异,我们使用与上例相同的流感症状的数据集。测试网络是一个包含6个可见层神经元、2个隐含层神经元的RBM。我们用对比差异的方法对网络进行训练,将症状 v 赋到可见层中。在测试中,这些症状值被重新传到可见层;然后再被传到隐含层。隐含层的神经元表示健康/生病的状态,与自编码器相似。

      在进行过几百次迭代后,我们得到了与自编码器相同的结果:输入一个生病样本,其中一个隐含层神经元具有更高激活值;输入健康的样本,则另一个神经元更兴奋。

      例子的代码在。

    深度网络

      到现在为止,我们已经学习了隐含层中强大的特征探测器——自编码器和RBM,但现在还没有办法有效的去利用这些功能。实际上,上面所用到的这些数据集都是特定的。而我们要找到一些方法来间接的使用这些探测出的特征。

      好消息是,已经发现这些结构可以通过栈式叠加来实现深度网络。这些网络可以通过贪心法的思想训练,每次训练一层,以克服之前提到在反向传播中梯度消失及过度拟合的问题。

      这样的算法架构十分强大,可以产生很好的结果。如Google著名的,在实验中通过使用特定的深度自编码器,在无标记的图片库中学习到人和猫脸的识别。

      下面我们将更深入。

    栈式自编码器

      和名字一样,这种网络由多个栈式结合的自编码器组成。

          

      

      自编码器的隐含层 t 会作为 t + 1 层的输入层。第一个输入层就是整个网络的输入层。利用贪心法训练每一层的步骤如下:

        1、通过反向传播的方法利用所有数据对第一层的自编码器进行训练(t=1,上图中的红色连接部分)。

        2、训练第二层的自编码器 t=2 (绿色连接部分)。由于 t=2 的输入层是 t=1 的隐含层,我们已经不再关心 t=1 的输入层,可以从整个网络中移除。整个训练开始于将输入样本数据赋到 t=1 的输入层,通过前向传播至 t = 2 的输出层。下面t = 2的权重(输入->隐含和隐含->输出)使用反向传播的方法进行更新。t = 2的层和 t=1 的层一样,都要通过所有样本的训练。

        3、对所有层重复步骤1-2(即移除前面自编码器的输出层,用另一个自编码器替代,再用反向传播进行训练)。

        4、步骤1-3被称为预训练,这将网络里的权重值初始化至一个合适的位置。但是通过这个训练并没有得到一个输入数据到输出标记的映射。例如,一个网络的目标是被训练用来识别手写数字,经过这样的训练后还不能将最后的特征探测器的输出(即隐含层中最后的自编码器)对应到图片的标记上去。这样,一个通常的办法是在网络的最后一层(即蓝色连接部分)后面再加一个或多个全连接层。整个网络可以被看作是一个多层的感知机,并使用反向传播的方法进行训练(这步也被称为微调)。

     

    除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自深度学习概述:从感知机到深度网络

    留言与评论(共有 0 条评论)
       
    验证码:
    [lianlun]1[/lianlun]