卷积神经网络 - 关于LeNet-5的若干问题的解释
结合上一博文所学的LeNet-5,本文我们来围绕LeNet-5的一些问题点进行解释,以便进一步理解LeNet-5。
我们先来回顾一下LeNet-5的网络结构概述:
(1) C1层是卷积层,使用6个5×5的卷积核,得到6组大小为28×28 = 784 的特征映射。因此,C1 层的神经元数量为 6 × 784 = 4 704,可训练参数数量为 6 × 25 + 6 = 156,连接数为 156 × 784 = 122 304(包括偏置在内,下同)。
(2) S2 层为汇聚层,采样窗口为 2 × 2,使用平均汇聚,并使用一个如公 式 (5.27) 的非线性函数.神经元个数为 6 × 14 × 14 = 1 176,可训练参数数量为 6×(1+1) = 12,连接数为6×196×(4+1) = 5880。
(3) C3 层为卷积层.LeNet-5 中用一个连接表来定义输入和输出特征映 射之间的依赖关系,如图5.11所示,共使用 60 个 5 × 5 的卷积核,得到 16 组大 小为 10 × 10 的特征映射.神经元数量为 16 × 100 = 1 600,可训练参数数量为 (60 × 25) + 16 = 1516,连接数为100 × 1516 = 151600。
(4) S4 层是一个汇聚层,采样窗口为 2 × 2,得到 16 个 5 × 5 大小的特征映 射,可训练参数数量为16 × 2 = 32,连接数为16 × 25 × (4 + 1) = 2000。
(5) C5层是一个卷积层,使用120 × 16 = 1920个5 × 5的卷积核,得到 120 组大小为 1 × 1 的特征映射.C5 层的神经元数量为 120,可训练参数数量为 1920×25+120 = 48120,连接数为120×(16×25+1) = 48120。
(6) F6层是一个全连接层,有84个神经元,可训练参数数量为84×(120+ 1) = 10 164。连接数和可训练参数个数相同,为 10 164。
(7) 输出层:输出层由 10 个径向基函数(Radial Basis Function,RBF)组 成。
问题一:为什么输入图像大小为 32 × 32?而不是28*28或者其他?
LeNet-5 选择 32×32 的输入尺寸主要有以下几个原因:
-
保留边缘信息
尽管 MNIST 数据集中的手写数字本身是 28×28,但为了在卷积操作过程中不丢失图像边缘附近的信息,通常会对数字图像进行填充,使其达到 32×32。这能帮助网络在初期就捕捉到更全面的特征。 -
历史和数据集背景
LeNet-5 最初设计时使用的数据来自于 NIST 数据库,原始的图像尺寸常常是 32×32。后来在 MNIST 数据集上,为了兼容早期设计,也采用了 32×32 的输入格式。 -
方便网络层设计
32×32 的尺寸使得经过一系列卷积和池化操作后,输出尺寸易于控制(例如 C1 层输出为 28×28,经过池化层之后降采样到 14×14 等),从而构建出层次分明且结构紧凑的网络架构。
综合来看,32×32 的输入不仅能确保足够的边缘信息和上下文,也使得网络的设计与早期实验和硬件条件相适应。这也是 LeNet-5 在当时获得成功并被广泛引用的重要原因之一。
问题二:卷积层 C1,为什么选择卷积核数量为6?
LeNet-5 中 C1 层选择 6 个卷积核主要是一个设计决策,综合考虑了以下几个方面:
-
任务复杂度:LeNet-5 主要用于手写数字识别(如 MNIST 数据集),数字图像的复杂度相对较低,6 个滤波器足以捕捉到足够的基本特征(如边缘、角落和笔画)来区分不同数字。
-
参数和计算量平衡:较少的卷积核可以降低参数数量和计算成本,对于当时的硬件条件来说,这种轻量级结构更易于训练和部署。过多的卷积核可能带来边际收益递减,并且增加了模型复杂性和过拟合风险。
-
经验和实验验证:在 LeNet-5 的设计中,6 个卷积核是经过实验验证后选定的,能够在保证模型性能的同时实现较好的泛化能力。
-
分层特征提取策略:LeNet-5 采用多层网络结构,虽然第一层只有 6 个滤波器,但后续层(如 C3)会增加滤波器数量(例如 16 个),逐层丰富特征表达。因此,C1 层只需要提取最基本的低级特征,而更多的特征组合在后续层中完成。
综上所述,6 个卷积核是一个折中方案,既能满足任务需求,又能控制模型复杂度,这也是历史上 LeNet-5 被广泛接受的原因之一。
问题三:卷积层 C1,为什么输出尺寸为28×28×6?
LeNet-5 的 C1 层接受尺寸为 32×32 的输入图像,然后使用 5×5 的卷积核进行“valid”(无填充)卷积运算。根据卷积的数学公式,对于无填充卷积,输出尺寸计算为:
Output Size=Input Size−Kernel Size+1.
对于高度和宽度分别计算,有:
32−5+1=28.
同时,C1 层使用了 6 个卷积核,每个核都会生成一个 28×28 的特征图,因此输出的深度(通道数)为 6。综上,C1 层的输出尺寸为 28×28×6。
问题四:卷积层 C1,为什么可训练参数数量为 6 × 25 + 6 = 156,连接数为 156 × 784 = 122 304 ?
-
可训练参数数量为156个的原因:
- 在C1层中,我们有6个卷积核,每个卷积核尺寸为5×5。
所以每个卷积核包含的权重数为 5×5=25个。 - 每个卷积核还有1个偏置参数。
- 因此,每个卷积核的参数数量为 25+1=26 个。
- 6个卷积核总共的可训练参数为 6×26=156 个,也可以写成 6×25+6=156。
- 在C1层中,我们有6个卷积核,每个卷积核尺寸为5×5。
-
连接数为156×784 = 122304的原因:
- 这里“连接数”指的是卷积核参数在前向传播过程中被重复使用的次数。
- 对于每个卷积核,其在输入图像上滑动后生成一个28×28的特征图,也就是有784个输出位置。
- 每个卷积核的25个权重和1个偏置,都在这些784个位置上参与计算。
- 从参数重复使用的角度看,每个可训练参数(无论是权重还是偏置)都参与了784次局部运算,所以总的“连接数”为 156×784 = 122304。
这两个数值分别反映了参数数量和这些参数在整个卷积操作中被应用的总次数。
问题五:子采样层 S2,为什么 可训练参数数量为 6×(1+1) = 12,连接数为6×196×(4+1) = 5880?
在 LeNet-5 中,子采样层 S2(有时也称为池化层或下采样层)不仅起到降低特征图空间尺寸、减少计算量和增强局部不变性的作用,同时它在原始设计中是可训练的,即每个输出特征图都有一个可学习的缩放因子和偏置。
1. 可训练参数数量为 6×(1+1)=12 个
-
背景:
S2 层接收来自 C1 层的 6 个特征图。对于每个特征图,S2 层通过对局部区域(通常是 2×2 区域)的平均池化来进行下采样。但在 LeNet-5 中,这一层不仅仅做简单的池化操作,还在池化后的结果上乘以一个可学习的系数,再加上一个偏置,这两个参数都是可训练的。 -
计算:
- 每个特征图对应 2 个可训练参数:一个乘法系数(缩放因子)和一个偏置。
- 因为有 6 个特征图,所以总参数数量为: 6×2=12
也可以写作 6×(1+1)。
2. 连接数为 6×196×(4+1)=5880
-
背景:
在 S2 层,采用 2×2 池化来对 C1 层的 28×28 特征图进行下采样。经过池化后,每个特征图的尺寸变为 28/2×28/2=14×14(即 196 个单元)。
对于每个 S2 层的单元,其计算不仅包含池化时 2×2 区域的 4 个输入,还加上了一个偏置项的“连接”(在计算过程中偏置被加到每个单元的输出中)。 -
计算:
- 每个池化单元接收的“连接数”为 2×2个输入(即 4 个)加上 1 个偏置连接,共 4+1=5 个连接。
- 每个特征图有 14×14=196 个池化单元。
- 因此,每个特征图的连接总数为 196×5。
- 对于 6 个特征图,总连接数为: 6×196×5=6×196×(4+1)=5880.
-
参数数量:S2 层对每个特征图有 2 个可学习参数(一个缩放因子和一个偏置),因此 6 个特征图共有 6×2=12 个可训练参数。
-
连接数:S2 层的每个单元(共 196 个)与 2×2 输入区域(4 个数值)以及偏置(1 个)相关联,共有 5 个连接,6 个特征图则累计 6×196×5=5880 个连接。
这种设计既能在下采样时减少数据维度和计算量,又能通过可训练参数调整输出特征的尺度和偏置,从而更好地适应后续网络层的处理。
问题六:对于卷积层 C3,为什么卷积核数量是16 个?卷积核尺寸是5×5?
在 LeNet-5 的设计中,C3 层使用16个5×5的卷积核,这主要是基于以下几个考虑:
-
特征复杂度的提升
C1 层通过6个卷积核提取了相对简单的低级特征(如边缘和局部纹理)。在 C3 层,通过增加卷积核数量(16个)和使用较大的卷积核尺寸(5×5),可以对 S2 层提取到的特征进行更复杂的组合,从而捕捉更丰富、更抽象的中级特征(例如轮廓、局部形状等)。这种设计有助于模型在后续层更好地区分不同类别的对象。 -
局部连接策略
在 LeNet-5 中,C3 层并不是与 S2 层的所有6个特征图全连接,而是采用了一种局部连接模式,让某些卷积核只连接部分 S2 层特征图。这样做既可以减少参数数量,又能打破特征的对称性,促使网络学习到更加多样化的特征。这种设计思想促使 C3 层选择16个卷积核来组合来自 S2 层的局部特征。 -
核尺寸选择
5×5 的卷积核尺寸在当时是一个经验上的选择:对于经过 S2 层下采样后(一般输出尺寸为14×14)的特征图,5×5 的滤波器足够覆盖较大的局部区域,能够有效捕捉中尺度的特征信息。尺寸太小可能无法捕捉足够的上下文信息,而尺寸过大则会增加计算量,并且可能使得局部细节被过度平滑。
总的来说,16个5×5的卷积核是 LeNet-5 设计中一个折中方案:既能充分整合和提升从前一层提取到的低级特征,又能保持网络参数数量和计算复杂度在合理范围内,同时也反映了当时经验和实验验证的结果。