'); })();

浅谈深度学习基础(下)

编辑时间: 2017-12-26 23:02:45    关键字:

浅谈深度学习基础

CNN、RNN和LSTM

卷积神经网络(Convolutional Neural Network,CNN)

  1984年,日本学者福岛基于感受区域概念提出了神经认知机。神经认知机可以看作是卷积神经网络的第一个实现网络,也是感受区域概念在人工神经网络领域的首次应用。神经认知机将一个视觉模式分解成许多feature,然后进入分层递阶式相连的feature maps进行处理,这样就可以将视觉系统模型化,使其能够在物体有位移或轻微变形的时候,也能完成识别。

卷积神经网络

卷积神经网络LeNet-5示例

  我们以用于手写数字识别的LeNet-5为例来讲卷积神经网络。

  卷积神经网络由卷积层(Convolutions Layer)、池化层(Pooling Layer)和全连接层构成。全连接层在最后,前面是若干卷积层和池化层,每个卷积层后面跟一个池化层,如此重复。

  图中展示了LeNet-5网络的结构,一共七层,前面四层是卷积层和池化层(池化层又叫子采样层,也即Subsample Layer),后面三层是全连接层,最后一层输出层是高斯连接层,也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是欧式径向基函数(ERBF)的网络连接方式。假设x是上一层的输入,y是ERBF的输出,则ERBF输出的计算方式是:

3*3的一个卷积核

3*3的一个卷积核

  卷积神经网络通过『参数减少』与『权值共享』大大减少了连接的个数,也即需要训练的参数的个数。

  就拿原图像到第一层卷积层的连接举例,假设我们的图像是1000*1000的,则有10^6个隐层神经元,那么它们全连接的话,也就是每个隐层神经元都连接图像的每个像素点,就有10^12个连接,也即10^12个权值参数需要训练,这显然是不值得的。但是对于一个只识别特定feature的卷积核,需要大到覆盖整个图像的所有像素点吗?通常是不需要的,一个特定feature,尤其是第一层需要提取的feature,通常都相当基础,只占图像很小的一部分。所以我们设置一个较小的局部感受区域,比如10*10,也即每个神经元只需要和这10*10的局部图像相连接,所以10^6个神经元也就有10^8个连接。这就叫参数减少。

  那什么叫权值共享呢?在上面的局部连接中,10^6个神经元,每个神经元都对应100个参数,所以是10^8个参数,那如果每个神经元所对应的参数都是相同的,那需要训练的参数就只有100个了。

  这后面隐含的道理在于,这100个参数就是一个卷积核,而卷积核是提取feature的方式,与其在图像上的位置无关,图像一个局部的统计特征与其他局部的统计特征是一样的,我们用在这个局部抽取feature的卷积核也可以用在图像上的其它任何地方。

  而且这100个参数只是一种卷积核,只能提取一种feature,我们完全可以采用100个卷积核,提取100种feature,而所需要训练的参数也不过10^4,最开始我们训练10^12个参数,还只能提取一种特征。选取100个卷积核,我们就能得到100张FM,每张FM可以看做是一张图像的不同通道。

  接下来我要具体介绍一下利用卷积核卷积生成FM的过程:

3*3卷积核在5*5图像上卷积的过程

3*3卷积核在5*5图像上卷积的过程

  左侧绿色的是5*5的原图,左侧黄色的是3*3的卷积核覆盖的区域,右侧是3*3的FM。

原图就不说了,卷积核的权重是黄色区域每个格子右下角乘号后面的数字,也即卷积核就是我们前面用作示例的那个卷积核:

3*3的一个卷积核

3*3的一个卷积核

  具体的卷积过程,就是将卷积核覆盖在原图上,从左上角开始,一次向右移动一个像素,卷积完一行,整个卷积核向下移动一个像素,再开始卷积。在卷积核覆盖的区域范围内,原图与卷积核对应位置的像素分别做乘法,再全部加和。

  至于FM为什么是3*3的,因为(5-3)/1 + 1 = 3。原图5*5,卷积核3*3,按这样的方法法卷积(卷积核卷积的滑动步长为1),得到的feature也就是3*3的。也即这一层隐层的神经元的个数是3*3,不过这只是一张FM,如果10张相同的FM,那神经元的个数就是10倍了。

  如果定义了滑动步长为2,那就每次向右移动2个像素了,一行结束也是向下移动2个像素,当然FM大小的计算方法也要随之改变了,也即(5-3)/2 + 1 = 2,公式为(原图宽高-卷积核宽高)/滑动步长 + 1。

  这样基本的卷积过程就讲完了,接下来讲池化过程。

浅谈深度学习基础

 

  池化过程看起来要简单的多,就是一个取局部平均值\最大值的过程(根据具体池化方法决定)。人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。

  另外需要提的一点是,前面说10*10的卷积核需要训练的参数是100个,严格来讲是错误的,其实是101个,因为每个卷积核还有一个可训练偏置。

  接下来以LeNet-5为例,从头捋一遍卷积神经网络的过程,重新放一遍LeNet-5的图:

卷积神经网络

卷积神经网络LeNet-5示例

  输入层是32*32像素的图片,比数据集中最大的的字符(最大体积是20*20像素的字符,位于28*28像素区域的中心)大很多。这样做的原因是能使潜在的特征比如边缘的端点、拐角能够出现在最高层次的卷积核的接收域的中心。

  然后第一层C1,6个卷积核,所以也就6张FM,卷积核是5*5的,至于为什么每张FM是28*28的,(32-5)/1 + 1 = 28。那C1一共有多少个需要训练的参数呢?(5*5+1)*6 = 156个可训练参数,每个卷积核26个可训练参数,6个卷积核,也就是156个可训练参数。那C1与原图一共有多少个连接呢?(28*28)*6*26 = 122304个连接,28*28的FM,一共有6张,所以乘6,这6张FM里的每一个点,都是采用了6种卷积核的其中之一卷积出来的,不管是这6种卷积核里的哪种,都有26个参数,也即26个连接,所以要乘以26。当然每张FM里面的点用的是同样的卷积核,连接数公式简记为(FM宽高*FM宽高)*可训练参数。

  然后第二层S2,以2*2的范围去池化,我们也称其为一个2*2的池化核。6张28*28的FM被池化成了14*14的图,这个算法很简单,可以参考上面池化层的动图去理解。这里的每个池化核有两个可训练参数,一个负责与池化核里4个输入相加的和相乘,另一个作为可训练偏置加在乘积上,最后得到池化结果。6张FM,也对应6个池化核,每个池化核2个参数,也即12个可训练参数。那S2层与C1层有多少连接呢?(14*14)*6*5 = 5880个连接,这里池化核与卷积核不同,对于卷积核而言,26个可训练参数,也即26个连接;而池化只有2个可训练参数,但是如果池化核也只有2个连接,那那4个输入是从哪来的呢,所以这里2*2的池化核对应5个连接。然后6张图,每张14*14,每个点5个连接,所以得到5880个连接。

  然后是C3层,C3层同样通过5*5的卷积核去卷积每张图14*14的S2,然后得到的每张FM就是10*10的,算法与C1时相同。它有16种不同的卷积核,所以C3层就对应了16张FM。这里有个比C1层复杂的多的问题,就是C1层只卷积1张图,而C3层要卷积6张图。那这16张FM是如何卷积前面S2层的6张图的呢?如下图:

C3层卷积S2层对应关系图

  0-5这6张FM卷积S2中的3张图,6-11这6张FM卷积S2中连续的4张图,12-14这3张FM卷积S2中不连续的4张图,15这张FM卷积所有的6张图。FM0卷积图012、FM6卷积图0123、FM12卷积图0134、FM15卷积图012345。

  我们知道一张FM对应一个卷积核,那一个卷积核怎样同时卷积多张图呢?我们把多张图上同一位置的卷积结果相加,然后代入激活函数:

 

双曲正切激活函数
推荐热图
2010-2016 可思数据版权所有 ICP备案:京ICP备14056871号