LetNet5
这个是其网络结构。
下面我们详细介绍该网络结构,在此之前,先约定一些称呼:feature maps(f.maps)是每层网络的特征图;stride是卷积核的步长;C1层的特征图大小为28×28×6,其中28×28表示特征图的高度×宽度,6表示特征图的通道数;该层使用的卷积核大小5×5×1×6,表示高度×宽度×输入通道数×输出通道数。
首先是输入层,输入图像大小统一归一化为32×32,在正式输入网络之前,其灰度值也要进行归一化。
第一个卷积层C1,
其经过大小为5×5×1×6的卷积核(stride=1),生成特征图为28×28×6,不使用填充,步长为1。输入的图像是一个单通道的图像,因此,特征图的数量就等于卷积核的数量,每个输出通道都与一个输入通道相连。C1层包含了5×5×1×6+6=156个可训练的参数,以及28×28×6=4704个节点,每个节点都是经过一个5×5的卷积和一个偏置项计算所得到的,连接数为5×5+1=26个,所以C1层一共有4704×26=122304个连接。
池化层S2,
其首先对C1层输出中的2×2相邻的区域求和,再取平均值,然后乘以一个权值和加上一个偏置值,将结果通过Sigmoid函数进行映射。这是一个2×2的采样核,stride=2,生成特征图为14×14×6。注意,这里的池化层虽然没有卷积核,但有训练参数。其包括6×2=12个训练参数,分别是求和的权重和偏移量,共(4+1)×6×14×14=5880个连接。早期的LeNet5使用平均池化,后来使用最大池化。
卷积层C3,
经过大小为5×5×6×16的卷积核(stride=1),其生成特征图为10×10×16。其输入是6个通道,输出是16个通道,这里经过了一个编码,
C3层的前6个特征图与S2层相邻的3个特征图相连,接下来的6个特征图与S2层相邻的4个特征图相连,再接下来的3个特征图与S2层部分不相邻的4个特征图相连,最后一个特征图与S2层的所有特征图相连。这其实是一个非常主观的设定,输出的16个通道并没有与输入的每个通道相连。它的设计初衷有两个:第一是减小计算量;第二是打破对称性。实际上,在后来的网络设计中,很少会遵循这样的设计准则。
可以求出C3层有6×(5×5×3+1)+9×(5×5×4+1)+1×(5×5×6+1)=1516个参数,与S2层的连接一共有10×10×1516=151600个。
池化层S4,
其经过2×2的采样核(stride=2),生成特征图为5×5×16。S4层有32个可训练参数、2000个连接。S4层的池化方式与S2层相同,输入是10×10×16,输出是5×5×16。S4层一共有16×2=32个参数,与C3层一共有(4+1)×5×5×16=2000个连接。
卷积层C5,
它由120个5×5的卷积核组成,每个卷积核都与S4层中每个大小为5×5的特征图进行卷积,所以每个C5层的卷积核都会输出一个1×1的结果,有点类似于全局平均池化和全连接层,但C5层是一个卷积层而不是一个全连接层,如果这个LeNet5网络的输入变得更大而其他保持不变,那么这个输出将大于1×1。C5层与S4层共有120×(5×5×16+1)=48120个连接。
全连接层F6,
它的输入为1×1×120,输出为1×1×84,总参数量为120×84。F6层有84×(120+1)=10164个可训练的连接,84这个数字有当时的设计背景,与ASCII码表示的7×12的位图大小相等。F6层将输入向量与权重向量求点积,然后加上偏置项,用Sigmoid函数产生输出。
输出全连接层,
其输入为1×1×84,输出为1×1×10,总参数量为84×10个,其中10就是分类的类别数。输出层是由欧式径向基函数(RBF)组成的。每个输出对应一个RBF,每个RBF都有84维的输入向量。每个RBF都有一个输出,最后输出层会输出一个10维的向量。
注意,虽然是分类任务,但这里并没有采用现在广泛使用的Softmax损失,即交叉熵,而采用了一个欧式距离,称为Gaussian Connection,其等价于一个全连接层加上一个欧式损失层。
LeNet5是早期非常经典的卷积神经网络,也是网络成功商业化的代表,但它的输入图像太小,加上数据不足,在早期并没有在除手写数字识别之外的其他计算机视觉任务上取得大的突破。
摘录于《深度学习之模型设计》