卷积神经网络 - LeNet-5
LeNet-5 是卷积神经网络(CNN)的早期代表之一,由 Yann LeCun 等人在 1998 年提出,主要用于手写数字识别任务(如 MNIST 数据集)。理解 LeNet-5 可以从其网络结构、各层功能以及整体设计思想入手。
它是一个非常成功的神经网络模型。基于 LeNet-5 的手写数字识别系统在 20 世纪 90 年代被美国很多银行使用,用来识别支票上面的手写数字。LeNet-5 的网络结构如下图所示:
LeNet-5 共有7 层,接受输入图像大小为 32 × 32 = 1024,输出对应 10 个类别的得分。
一. LeNet-5 的结构概述
LeNet-5 的典型结构如下:
-
输入层
- 输入图像通常为 32×32 像素的灰度图(1 个通道)。
- 为什么使用 32×32 而非 28×28?这是为了在卷积和池化过程中保留足够的边缘信息。
-
卷积层 C1
- 卷积核数量:6 个
- 卷积核尺寸:5×5
- 输出尺寸:28×28×6
- 功能:初步提取图像中的局部特征(如边缘和简单纹理)。
- 激活函数一般使用 sigmoid 或 tanh(在早期网络中常见)。
-
C1层是卷积层,使用6个5×5的卷积核,得到6组大小为28×28 = 784 的特征映射。因此,C1 层的神经元数量为 6 × 784 = 4704,可训练参数数量为 6 × 25 + 6 = 156,连接数为 156 × 784 = 122304(包括偏置在内,下同)。
-
子采样层 S2(池化层)
- 使用平均池化(Subsampling)
- 池化窗口:2×2,步幅为 2
- 输出尺寸:14×14×6
- 功能:降低空间分辨率,减少参数数量,同时对平移、畸变具有一定的不变性。
-
S2 层为汇聚层,采样窗口为 2 × 2,使用平均汇聚,并使用一个非线性函数。神经元个数为 6 × 14 × 14 = 1 176,可训练参数数量为 6×(1+1) = 12,连接数为6×196×(4+1) = 5880。
-
卷积层 C3
- 卷积核数量:16 个
- 卷积核尺寸:5×5
- 输出尺寸:10×10×16(部分滤波器并非与所有6个通道全连接,而是设计了局部连接模式,体现了局部特征组合)
- 功能:进一步提取更复杂的特征,组合低级特征形成更具判别性的模式。
-
C3 层为卷积层。LeNet-5 中用一个连接表来定义输入和输出特征映 射之间的依赖关系,如下图所示,共使用 60 个 5 × 5 的卷积核,得到 16 组大 小为 10 × 10 的特征映射。神经元数量为 16 × 100 = 1 600,可训练参数数量为 (60 × 25) + 16 = 1516,连接数为100 × 1516 = 151600。LeNet-5 中 C3 层的连接表:
定义一个连接表(Link Table)𝑇 来描述输入和输出特征映射之间的连接关系。在 LeNet-5 中,连接表的基本设定如上图所示。C3 层的第 0-5 个特征映射依赖于 S2 层的特征映射组的每 3 个连续子集,第 6-11 个特征映射依赖于 S2 层的特征映射组的每 4 个连续子集,第 12-14 个特征映射依赖于 S2 层 的特征映射的每 4 个不连续子集,第 15 个特征映射依赖于 S2 层的所有特征映射。
如果第𝑝个输出特征映射依赖于第𝑑个输入特征映射,则𝑇𝑝,𝑑 =1,否则为0 。𝒀^𝑝 为:
其中 𝑇 为 𝑃 × 𝐷 大小的连接表.假设连接表 𝑇 的非零个数为 𝐾,每个卷积核的大 小为𝑈 ×𝑉,那么共需要𝐾 ×𝑈 ×𝑉 +𝑃参数。
-
子采样层 S4
- 池化窗口:2×2(平均池化),步幅为2
- 输出尺寸:5×5×16
- 功能:进一步降采样,增强特征的不变性,减少参数和计算量。
-
S4 层是一个汇聚层,采样窗口为 2 × 2,得到16 个 5 × 5 大小的特征映射,可训练参数数量为16 × 2 = 32,连接数为16 × 25 × (4 + 1) = 2000。
-
全连接层 C5
- 虽然输入尺寸为 5×5×16,但在 LeNet-5 中这层被视为一个卷积层(卷积核尺寸为 5×5,与输入尺寸匹配),其输出为 1×1×120。
- 功能:将前面提取的局部特征整合,形成全局特征表示。
-
C5层是一个卷积层,使用120 × 16 = 1920个5 × 5的卷积核,得到 120 组大小为 1 × 1 的特征映射。C5 层的神经元数量为120,可训练参数数量为 1920×25+120 = 48120,连接数为120×(16×25+1) = 48120。
-
全连接层 F6
- 输出节点数:84 个
- 功能:进一步组合特征,为最终分类做准备。
-
F6层是一个全连接层,有84个神经元,可训练参数数量为84×(120+ 1) = 10 164。连接数和可训练参数个数相同,为 10 164。
-
输出层
- 输出节点数:通常为 10(对应数字 0-9),采用 softmax 进行多类别分类。
-
输出层由 10 个径向基函数(Radial Basis Function,RBF)组 成.
二. 各层功能与设计思想
-
局部连接与权值共享:
卷积层中的滤波器(卷积核)在整个图像上滑动,使用相同的参数去检测相同类型的局部特征。这种权值共享大大减少了模型参数,并赋予网络平移不变性。 -
降采样(池化):
池化层(在 LeNet-5 中采用平均池化)对卷积层输出进行下采样,减小特征图的尺寸,降低计算量,并在一定程度上对图像的小幅变形具有鲁棒性。 -
层次化特征提取:
LeNet-5 采用多层卷积和池化结构,从最初的简单边缘特征,到后续层组合形成更抽象的形状、部件,最后通过全连接层形成全局的特征表示用于分类。 -
全连接层:
全连接层将卷积层提取到的局部特征进行整合,形成最终的分类决策。LeNet-5 的全连接层结构较浅,但对于 MNIST 这样的任务足够有效。
三. 理解 LeNet-5 的关键点
-
输入预处理与尺寸设计:
LeNet-5 采用 32×32 的输入尺寸是为了在卷积过程中保留足够的边缘信息,尽管 MNIST 数据集本身尺寸为 28×28。 -
激活函数的选择:
早期网络多采用 sigmoid 或 tanh 激活函数,而现代网络则普遍使用 ReLU。但其核心思想不变:通过非线性映射增强模型表达能力。 -
结构简洁但层次分明:
LeNet-5 是第一个成功将卷积层和池化层组合起来用于图像分类的网络,其设计为后续更深层网络(如 AlexNet、VGG、ResNet 等)提供了理论基础。
四. 总结
理解 LeNet-5,就是理解卷积神经网络如何利用局部连接、权值共享、非线性激活及池化操作来自动提取图像中的特征,并通过全连接层进行整合和分类。LeNet-5 的成功不仅在于其结构简单易懂,更在于其层次化特征提取的理念为后来的深度学习模型奠定了基础。
这种模型的核心思想可以概括为:
- 局部特征提取:利用卷积核在局部区域扫描输入图像,检测边缘、纹理等基础特征;
- 空间降维:通过池化降低特征图的尺寸,保留主要特征;
- 全局整合:通过全连接层将局部特征组合为全局表示,用于最终分类。
五.举例
下面我们以 LeNet-5 处理一张手写数字图像(例如 MNIST 数据集中预处理为 32×32 的灰度图像)为例,详细说明其前向传播过程,并重点展示卷积层(C1)和汇聚层(S2)的操作,帮助理解整个网络的工作原理。
例子背景
假设我们的任务是识别手写数字“7”。
- 输入图像:一张预处理为 32×32 的灰度图像,只有一个通道。
- LeNet-5 的结构大致为:
- C1 层:6 个 5×5 卷积核(输出尺寸 28×28×6)
- S2 层:2×2 平均池化或子采样层(输出尺寸 14×14×6)
- 后续层(C3、S4、全连接层等),用于进一步特征提取与分类(此处我们重点关注 C1 与 S2)。
1. C1 卷积层的前向传播
假设:
为了简化,我们以第一个卷积核为例。假设这个卷积核 K 的大小为 5×5,其所有权重均为 1/25(相当于对局部区域求平均),且偏置 b=0。
激活函数采用线性激活(即 f(z)=z),便于直观理解。
操作步骤:
- 卷积核在输入图像上滑动,每次取出一个 5×5 的局部区域(也称为“切片”)。
- 对于每个局部区域,将卷积核与该区域对应元素相乘,然后求和。
例如,在图像左上角的 5×5 区域,如果该区域内所有像素值均为 2(一个理想化的情况),则卷积运算为: - 经过激活函数后,该位置输出为 2。
- 卷积核对整个输入图像重复这个过程,得到 28×28 的特征图(注意 32-5+1 = 28)。
直观理解:
在这个例子中,第一个卷积核其实在检测局部区域的平均亮度。如果图像局部较亮(例如数字“7”中某些笔画较粗且亮),对应的卷积层输出就会有较高的响应;反之,则输出较低。6 个不同的卷积核会各自学习不同的特征,比如边缘、角点或其他纹理模式,这些输出组合起来构成了 28×28×6 的特征映射。
2. S2 汇聚层(下采样)的前向传播
假设:
S2 层采用 2×2 平均池化(LeNet-5 原论文中采用的是子采样层,有时被看作平均池化的变体)。
目标是将每个 2×2 区域的输出缩小为一个值,从而将 C1 层的 28×28×6 特征图下采样为 14×14×6。
操作步骤:
- 对于每个特征图(以第一个特征图为例),划分为非重叠的 2×2 区域。
- 对每个区域计算其平均值。例如,假设某 2×2 区域中的值为
, 则平均值为 p=(2+3+4+5)/4=14/4=3.5.
- 每个 2×2 区域计算得到的平均值构成下采样后的特征图的一个像素。
- 重复对所有特征图进行操作,最终输出尺寸为 14×14×6。
直观理解:
池化层的操作相当于对局部区域的特征“汇聚”,既降低了数据维度,减少计算量,又增强了特征的鲁棒性,使得模型对小幅平移和噪声变化不敏感。
3. 反向传播中的梯度推导(概述)
在反向传播过程中,每一层都要计算损失 LL 关于该层参数的梯度,以及将误差传递给上一层。
- 卷积层:
- 汇聚层(池化层):
池化层没有可学习参数,其反向传播主要是把输出梯度传递回输入区域。- 对于 最大池化,梯度只传递到那个在前向过程中选取了最大值的输入位置,其它位置梯度为 0。
- 对于 平均池化,输出梯度均匀分配给区域内每个输入。
4. 综合反向传播示例(简化)
假设在 C1 层的某个输出特征图中,一个像素 z_{11} 经过前向计算得到值 2,经激活函数(线性)后输出 a_{11}=2。假设目标输出或后续梯度给出:
如果该输出 z_{11} 是由一个 5×5 区域产生,而我们使用的卷积核在该位置对应的局部输入区域所有像素值已知,那么对卷积核中某个权重 W_{u,v} 的贡献就为该区域对应位置的像素值乘以 δ11,再对全图累加。
类似地,池化层如果在某个 2×2 区域采用平均池化,且该区域输出梯度为 δp,那么该区域内每个输入元素获得的梯度就是 δp/4。
这个例子中,我们展示了 LeNet-5 的前向传播如何处理一张手写数字图像,从输入预处理、通过 C1 卷积层提取局部特征,再通过 S2 池化层汇聚特征,最终形成一个低分辨率的特征表示。
- 卷积层中,每个卷积核在整个图像上滑动,产生对应的二维特征映射,其每个位置计算为局部输入区域与卷积核权重的加权和加偏置。
- 池化层则对局部区域的特征进行汇聚(例如取平均或最大值),降低空间尺寸。
- 在反向传播过程中,卷积层利用链式法则将损失梯度通过各局部区域输入值累加,计算出卷积核权重和偏置的梯度;而池化层根据具体的池化方法将梯度正确分配回输入区域。
这样的例子帮助初学者理解 CNN 中各层之间如何协同工作,从而实现自动特征提取和最终分类。