LeNet是Yann LeCun于1989年提出的一种用于手写数字识别的神经网络,可以说是卷积神经网络的基石,之后的多种卷积神经网路结构都是在LeNet的基础上改进演变而来。因此Yann LeCun也被称为“卷积之父”。
图3.14所示为LeNet的结构示例,LeNet又称LeNet-5,LeNet网络总共有8层,包括1个输入层、3个卷积层、2个池化层、1个全连接层以及1个输出层。在图中用C表示卷积层,用S表示下采样层(也就是池化层),用F表示全连接层。
图3.14 LeNet典型结构
输入层输入图片大小为32×32,实际上,在LeNet应用于手写数字图像时,数字仅为图像中间28×28的范围区域,图像周围区域为填充效果,且该输入图像仅为黑白图像。
C1层为卷积层,由6个卷积核构成,卷积核大小为5×5,卷积步长为1,输入图像经过C1层的卷积计算后生成的特征图层大小为28×28,总共有6个特征图层生成,神经元的个数为6×28×28=4704。6个卷积核,卷积核大小为5×5,加上6个偏置,共有6×25+6=156个参数。
S2层为池化层,也叫下采样层,在LeNet中采用最大池化(max_pool),池化核大小为2×2,池化步长为2,经过池化层下采样后生成6个14×14大小的特征图。一般池化层是没有参数的,但在LeNet中,采用平均池化后,均值乘上一个权重参数加上一个偏置参数作为激活函数的输入,激活函数的输出即是节点的值,每个特征图的权重和偏置值都是一样的,所以S2池化层也有6×2=12个参数。
C3层为卷积层,共有60个5×5大小的卷积核,输出为16个10×10的特征图,C3跟S2并不是全连接的,具体连接方式见表3.1,表中第一行为C3层16个特征图的编号,第一列是S2层6个特征图的编号,表格中有“X”的表示相应层有连接关系,否则就没有连接关系。加上每个特征图的偏置,C3层共有60×25+16=1516个参数。
表3.1 LeNet-5的S2到C3层的连接方式
S4层为池化层,池化核大小仍为2×2,池化方式为最大池化,池化步长为2,经过池化后输出为16个5×5的特征图。S4层和S2层一样的池化操作,共有16×2=32个参数。
C5层为卷积层,卷积核大小仍为5×5,但是卷积核数量增加至120个,卷积步长为1,最终输出120个1×1的特征图。在此处,C5层作为卷积层,实际上与全连接层非常相似,但其本质上为卷积层,此处输出为1×1仅是因为输入图像大小导致,倘若将输入图像尺寸增大,本层输出特征图的大小也会相应变化,不再是1×1,便会体现出与全连接层的区别。S4和C5的所有特征图之间全部相连,有120×16=1920个卷积核,每个卷积核大小为5×5,加上120个偏置,共有1920×25+120=48120个参数。
F6层为全连接层,与C5层输出的120个特征图进行全连接,输出为含有84个元素的一维向量,共有(120+1)×84=10164个参数。
输出层由10个欧式径向基函数构成(现在已经变为Softmax函数),分别对应0~9这10个数字类别,每个类别对应一个径向基函数单元,每个单元的输入为F6层输出的84个向量。每个径向基函数单元分别计算输入与该类别标记向量之间的欧式距离,将距离最近的类别作为手写数字识别的输出结果。共有(84+1)×10=850个参数。
表3.2总结了LeNet-5各层的激活值尺寸维度、神经元数量和每层参数数量。从第二列可以看出,随着神经网络的加深,激活值尺寸会逐渐变小。但是,如果激活值尺寸下降得太快,会影响神经网络的性能。卷积层的参数相对较少,大量的参数都存在于全连接层;一般池化操作是没有参数的,LeNet-5中在池化层整体增加了权重参数和偏置。
表3.2 LeNet-5的网络总体情况