卷积神经网络学习(一):卷积神经网络结构——以LeNet-5为例

来源:互联网 发布:贴吧爆吧软件 编辑:程序博客网 时间:2024/05/16 07:26

最近开始接触深度学习(deep learning),看了一些卷积神经网络(CNN: convolutional neural network)的文献,并在LINUX系统下配置好了Caffe平台,在此整理一下对卷积神经网络的一些初步理解。

PS:本人能力有限,内容有不妥的地方还望各位大侠指出。

一、卷积神经网络的代表:LeNet-5

LeNet-5由Yann LeCun在1998设计并提出来的,是一个用来识别手写数字的最经典的卷积神经网络。为什么一开始不介绍CNN的一些基本理论而是直接将这个模型呢?因为这个模型不仅简单(当然简单是相对于其他类型的CNN而言的),而且具有代表性,它包含了卷积神经网络的一些基本组件(卷积层、池化层(也叫下采样层)、全连接层),后续复杂的CNN模型都离不开这几个基本网络层组件,因此对于小白是再合适不过的了。下面自然是先献上这个模型的框架图:


LeNet-5 model

从上图可以看出,LeNet-5共包含8层(包括输入输出层),输入数据(手写数字)经若干卷积层、池化层和全连接层得到输出结果(0-9)。


1. 卷积层(Convolutions)

卷积层的功能是对原图或者特征图(feature map, 即经过卷积运算后的图)进行卷积运算,这里先举一个简单的例子来介绍卷积运算过程:


convolution process

图中的input是一张6*6的图片或特征图(feature map),中间3*3的矩阵称为卷积核(convolutional kernel),输出为一张特征图,由输入与卷积核卷积计算得到。

以输出特征图中蓝色部分的3为例,3由输入中蓝色矩阵和卷积核对应元素相乘再求和(加权求和)得到,即:3=11+0(1)+0(1)+0(1)+11+0(1)+0(1)+0(1)+11

对于output中其他元素,形象地说,卷积核在输入图像上每向右或者向下移动1个单位,做1次卷积运算(这里的1称为步长),当卷积核移动到输入的右下方时,即可计算出一个完整的输出特征图,而特征图的大小由输入图像和卷积核的大小共同确定,即4=63+1,这里的4、6、3、1分别代表输入图像(特征图)、卷积核、输出特征图的大小和卷积核移动步长。

然而,在CNN网络构建中,卷积层的卷积核往往有多个,例如LeNet-5模型中,C1层有6个5*5的卷积核分别与输入做卷积运算,因此得到的特征图有6个。这时细心的你也许会发现,对于LeNet-5中S2->C3层的卷积是如何计算的呢?其实不难,对于某一个卷积核,我们将它与S2中的6个特征图分别做卷积运算,再将得到的6个特征图对应元素进行叠加并加入偏置项,最后通过一个非线性映射(activation function: 激活函数)即可得到该卷积核对应的输出特征图。因为该层有16个卷积核,所以得到的输出特征图也是16个,而每一个特征图的大小都为10*10(10=14-5+1)。整个过程可通过如下公式来描述:

xljulj==f(ulj)iMjxl1iklij+blj
其中,ulj为卷积层lj个通道的净激活(Net activation),它通过对前一层输出特征图xlil1xlj是卷积层l的第j个通道的输出。f(.)称为激活函数通常可使用sigmoid和tanh等函数。Mj表示用于计算ulj的输入特征子集,klij是相应的卷积核矩阵,blj是对卷积后特征图的偏置,‘*’是卷积运算符。

相信到这里,大家对卷积已经有了直观的理解,但是,你或许想问,为什么要卷积?它有什么用?卷积核是怎么确定的?其实可以把卷积看作一个特征提取过程,而每一个卷积核代表一种特征提取方式。我们知道,对于Object Recognition问题,给定一幅图像,如何仅仅凭借一个特征,很难确定这幅图里是什么,如果可以提取一幅图的很多特征,我们自然就可以知道图中是什么。因此卷积层中往往有多个卷积核。而卷积核则是由网络在不断训练中得到的,换句话说,卷积核中的每一个元素都是网络训练的参数。当然卷积层的训练参数还包括卷积核的偏置项,这一点跟BP神经网络中的权值和偏置类似。不同的是,卷积层中每一个卷积核每次只和输入图像的局部信息作卷积运算,及“局部感知”,而且同一个卷积核在不同区域作卷积运算时其参数保持不变,即“权值共享”。这两个特点的存在使得卷积神经网络的训练参数大大减少,有效降低了网络的训练时间,同时缓解过拟合(overfitting)。

对于具体的参数训练过程,以后有机会再提(毕竟现在自己还在学习阶段,对CNN的具体训练过程理解得还不够,大写的尴尬)。

2. 池化层(pooling)

在CNN 中,池化层往往紧接在卷积层后面,一个简单的池化过程如下:


pooling

池化层的输入和输出均为特征图,首先将输入特征图分成n*n个不重叠的子特征图,然后在每一个子图上进行池化,通常采用平均池化或者最大池化,如上图所示,池化后的输出特征他相比于输入特征图在两个维度上都缩小了n倍。该过程本质上是对特征图进行了采样处理,所以也叫下采样层(sub-sampling),具体的可以用如下公式描述:

xljulj==f(ulj)βljdown(xl1j)+blj
其中,ulj称为池化层lj个通道的净激活,它又前一层输出特征图进行池化加权并偏置后得到,β是池化的权重系数,blj是偏置项,符号down(.)池化函数。

由此我们可以看出,池化层的意义在于在尽可能保留原始特征图信息的前提下,进一步减少训练参数的数量从而又一次降低训练成本,缓解过拟合(第一次是在卷积层中卷积核局部感知和全局共享的特性中体现的)。

3. 全连接层(full-connected)

全连接层即为传统的神经网络结构,在该层中,将所有二维图像的特征图拼接为一维特征作为全连接层的输入,全连接层的输出可通过对输入加权求和并通过激活函数的响应得到,可用如下公式面描述:

xlul==f(ul)wlxl1+bl
其中,ul为全连接层的净激活,它由前一层输出特征图xl1进行加权偏置后得到,wl是全连接层的权重系数,bl是偏置项。对于全连接层的详细结构这里不再赘述,可以参考我这篇博文的前半部分:BP神经网络——误差反向传播公式的简单推导

二、总结

至此卷积神经网络的基本结构已经介绍完毕,与传统的多层神经网络(如BP神经网络)相比,卷积神经网络加入了卷积层和池化层,从而大大减少了参数的数目,这对于后续网络的训练有着非常大的改善。当然,本篇文章还真是对卷积神经网络的一个宏观的了解,由于笔者现在对其更深的理论推导还有待学习,这里就不献丑了。

三、参考文献

[1] JackBouvrie. Notes on Convolutional Neural Networks. 2006
[2] 常亮,邓小明等. 图像理解中的卷积神经网络 [J]. 自动化学报, 2016.

1 0
原创粉丝点击