卷积神经网络鼻祖LeNet网络分析

卷积神经网络鼻祖LeNet网络分析

 

https://www.toutiao.com/a6634346529920385539/

 

 

1998年,被成为是现代卷积神经网络的鼻祖LeNet,被Yann LeCun正式提出。下图是广为流传LeNet的网络结构,它可以用麻雀虽小,五脏俱全来形容,其中卷积层、池化层、全连接层,这些都是现代卷积神经网络的基本组件。

 

总体来说LeNet是从输入INPUT->C1卷积层->S2池化层->C3卷积层->S4池化层->C5卷积层->F6全连接层->输出OUTPUT,如下图所示。

卷积神经网络鼻祖LeNet网络分析

 

1 LeNet输入

LeNet的输入图像是32*32的大小,这要比mnist数据集中字母28*28要大。也就是说,要对mnist的数据进行两圈值为零的像素填充。像素填充的目的是为了让图像边缘的区域,也能出现在卷积过程感受野的中心。

卷积神经网络鼻祖LeNet网络分析

 

2 LeNet的C1卷积层

C1层是LeNet的第一个卷积层,它的输入是32*32大小的图像,然后经过卷积过程,输出为6个通道28*28大小的特征图像。其中卷积核的大小为5*5,在LeNet中都使用了5*5大小的卷积核。

 

卷积过程的滑动步长为1,所以输出特征图像的计算方式为:32-5+1=28,因此输出特征图的大小为28*28。

因为输入为1通道的图像,然后用了6个卷积核,所以输出为6通道的特征图像。C1层的参数计算方式为(5*5+1)*6=156,其中每个卷积核为5*5,还带有一个偏置项。

卷积神经网络鼻祖LeNet网络分析

 

3 LeNet的S2池化层

LeNet的第2层即S2是个池化层,在之前的文章中也为大家介绍过池化(pooling)过程,它是在做下采样操作,目的是在保留特征图像主要信息的同时,降低卷积神经网络的参数数量。

 

常见的池化有两种:

(1)Max-Pooling,选择Pooling窗口中的最大值作为采样值;

(2)Mean-Pooling, 将Pooling窗口中的所有值相加取平均,以平均值作为采样值。

 

在S2中的池化,选择的是特征图像2*2大小的窗口区域进行池化,因此特征图像的大小缩减了一倍,即从28*28的大小,变为14*14的大小。池化过程不影响特征图通道的数目,S2层池化过程如下图所示。

 

卷积神经网络鼻祖LeNet网络分析

 

4 卷积与池化的重复

在卷积神经网络中,卷积与池化可以重复多次,可以一层卷积带有一层的池化如LeNet中的C1->S2,C3->S4,也可以多层卷积后再跟一个池化层。

 

在这里大家可以去思考一个问题,也就是怎样计算C3层的参数数目(提示,可以结合C1层的计算方式和之前文章中介绍的卷积知识去推算)。

 

在这里还需要注意的是C5层,它是一个比较特殊的卷积层,它的输入是16通道5*5大小的特征图像,而输出是一个120的向量。C5层可以有两种实现,第一种是使用5*5大小的卷积核进行卷积,第二种是将16通道5*5大小的特征图像拉平,然后再做全连接。

卷积神经网络鼻祖LeNet网络分析

 

 

5 全连接

在实际LeNet的编码实现中,F6层和Output层都可以用全连接来实现。其中F6是120->84的全连接,而Output是84->10的全连接,最后的10对应10种类别。

 

F6层参数数量的计算为(120+1)*84=10164,这个跟多层感知器全连接参数的计算方式是一样的,每个全连接都带有一个偏置项。

 

后记

LeNet是学习卷积神经网络的一个非常好的示例,通过学习LeNet可以对卷积神经网络设计有基础的认识,比如卷积核大小,通道数目,全连接结构等等,为以后深入学习卷积神经网络设计打下比较好的基础。另外,在现在的卷积神经网络中经常会使用ReLU作为**函数,并采用批归一化BN,DropOut等处理,在后续的文章还会为大家带来更多的分享,欢迎大家关注我们。

 

本文作者:宽涛老师