模式识别课堂笔记 ——深度学习

引言:深度学习的浪潮开始于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

posted @ 2016-04-16 22:26  司马_羽鹤  阅读(441)  评论(0编辑  收藏  举报