zoukankan      html  css  js  c++  java
  • 模式识别课堂笔记 ——深度学习

    引言:深度学习的浪潮开始于Hinton 的一篇文章 Reducing the Dimensionality of Data with Neural Networks;

    代表人物:Geoffery Hinton  链接 :http://www.cs.toronto.edu/~hinton/

    Yann LeCun 链接:http://yann.lecun.com/ex/index.html

    Yoshua Bengio 链接:http://www.iro.umontreal.ca/~bengioy/yoshua_en/ 

    Andrew Ng 链接:http://www.andrewng.org/

     

    发展历程:

    -Hopfield network

    –Boltzman machine

    –Restricted Boltzman machine

    –CNN

    –RNN

    –LSTM

    –Autoencoder

    –DBN

    –DBM

    –Deep Learning

     

    1.CNN

    1998年,Yann LeCun设计了一个处理图像的卷积神经网络,并用于文本识别,取得了不错的效果。

    目的是要对自然图像,希望直接从图像底层开始进行学习(非结构化特征学习)。即,对于图像识别任务,不必事先提取出人为设计的特征,比如Gabor纹理特征、多尺度小波特征、SIFT特征、HOG特征,等等。(因为这些人为设计的特征有缺点:这些特征具有一些参数,如尺度、梯度方向、频域划分等,其泛化能力不强)

    CNN重新设计了多层神经网络的结构(并未改变神经元),原因是如果以图像直接作为输入,并将每个像素看成一个结点,对于200*200大小的图像,则仅输入层就有4万个结点;如果第一隐含层仅仅只包含1000个结点,则权重数量将达到4千万。这显然是一个巨大的计算负担。

    为了解决这个问题,CNN采取了三个策略:第一个局部链接,第二个权值共享,第三个下采样(第三个又叫pooling)。

    第一个局部链接:每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知。

    第二个权值共享:从图像任何一个局部区域内连接到同一类型的隐含结点,其权重保持不变。

    用图像卷积的思想描述上述两个过程就是:使用一个滤波器对图像进行卷积,滤波器的大小和取值并不随区域位置改变,而滤波器的卷积核的权重就是输入层到隐含层的权重。具体如下图所示:

    我们大大的减少了需要学习的权重的数量,然后我们就有能力多加几个滤波器了:

     

    这样做之后,隐含层的节点数不是随便选的,而是由原图像的大小,滤波器的大小,滤波器的个数共同决定的。维度较高,容易产生过拟合,所以引进了第三个策略,pooling——对不同位置的特征进行聚合统计,比如,计算图像一个区域上的某个特定特征的平均值(或最大值)

     

    接下来是第一隐层到第二隐层的操作,要注意,是对第一层中多个滤波器的结果进行同时加权处理(也就是用一个立方体滤波器进行下一次滤波),当然局部连接和权值共享还是同样的方式,只不过是相当于作用在4幅图像上了:

     

    接下来的每一层都进行相同的操作(但是卷积核的尺寸与个数是不同的):

    –卷积 (Convolution)

    •将卷积之和加到下一层

    •对卷积之和进行激励 (特别指出:也可以在pooling之后求激励)

    –聚合 (Pooling)

    •下采样,两种基本的运算:

    –2*2窗口取平均(或取最大值)

    在最后两层加入全连接的多层感知器:

     

    网络的训练:仍然采用误差反向传播算法。

     

    2.AutoEncoder(自编码器)

    目的:卷积神经网络的训练样本是带有标签的,但是很多问题是没有标签的,所以我们的自然想法就是能不能处理这一类问题。

    解决的思路:在整个网络中让输出与输入相等,隐含层则可以理解为用于记录数据的特征。

    核心思想

    –将 input 输入一个 encoder 编码器,就会得到一个 code。这个 code 也就是输入的一个表示。

    –通过增加一个 decoder 解码器,并采用信号重构的方式来评价这个 code 的质量。

    –理想情况下,希望 decoder 所输出的信息(表达可能不一样,但本质上反应的是同一个模式)与输入信号input 是相同的。

    –此时会产生误差,我们期望这个误差最小。

     

    –将第一层输出的 code 当成第二层的输入信号,再次最小化重构误差,得到第二层的权重参数,同时获得第二层的code,即原始号的第二个表达。

    –在训练当前层时,其它层固定不动。完成当前编码和解码任务。前一次"编码"和"解码"均不考虑。

    –因此,这一过程实质上是一个静态的堆叠(stack)过程

    –每次训练可以用BP算法对一个三层前向网络进行训练

     

    在完成 Autoencoder 的学习任务之后,在实际应用中,在解码阶段学习得到的权重将不进行考虑。因此,编码阶段获得的网络系统其实质是一种特征学习。层级越高,结构特征越大越明显。

    对于分类任务,可以事先用 Autoencoder 对数据进行学习。然后以学习得到的权值作为始初权重,采用带有标签的数据对网络进行再次学习,即所谓的 fine-tuning。为了实现分类任务,需要在编码阶段的最后一层加上一个分类器,比如一个多层感知器(MLP)。

     

    3.RNN

    网络结构如下:(注意这里的标号都是向量和矩阵,代表了一个网络结构,如右侧的图示)

    这里的W是产生记忆的源头,将输入按时间顺序展开得到下图(两个图是一样的,只是表示形式不同):

    接下来就是如何训练如此庞大的一个网络,所以引进了一个方法LSTM

     

    4.LSTM (Long Short Term Memory)

    基本理念:一旦信息得到利用,我们希望该结点能释放(遗忘)这种累积效应,从而使网络更具有灵活性和自主学习性(依赖于学习内容来自我决定)。

    它是在RNN网络结构的基础上改变了隐含层神经元的构成,具体如下:

    由简单的输入、输出、隐含层自循环增加了三个门单元

    -遗忘门:控制对细胞内部状 态的遗忘程度

    -输入门:控制对细胞输入的 接收程度

    -输出门:控制对细胞输出的 认可程度

    对应公式如下:

     

    网络训练的目标是要估计如下矩阵:

     

     

    截图来源:http://pan.baidu.com/s/1sltG4bj

    推荐文章:Yann LeCunYoshua BengioGeoffrey Hinton合作的一篇综述文章"Deep Learning"http://www.nature.com/nature/journal/v521/n7553/full/nature14539.html ,及其翻译:http://www.csdn.net/article/2015-06-01/2824811

  • 相关阅读:
    Android 按键消息处理Android 按键消息处理
    objcopy
    SQLite多线程读写实践及常见问题总结
    android动画坐标定义
    Android动画效果translate、scale、alpha、rotate
    Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/simayuhe/p/5399601.html
Copyright © 2011-2022 走看看