LeNet-5是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,是深度学习领域中的早期重要里程碑之一。 它是第一个成功应用于手写数字识别的卷积神经网络,标志着深度学习在计算机视觉领域的初步应用。
MNIST数据集
LeNet-5以其简洁而有效的结构,成为了早期卷积神经网络中最具代表性之一。 它成功奠定了卷积神经网络在计算机视觉领域的地位。
LeNet-5
一、CNN奠基论文
在深度学习领域,卷积神经网络(CNN)的奠基之作非Yann LeCun与Yoshua Bengio(花书《深度学习》作者之一)等人所著的《Gradient-Based Learning Applied to Document Recognition》莫属。
人工智能三巨头
该论文深入解析了LeNet网络架构,其在手写体识别上的突破性成就,为CNN的后续发展奠定了坚不可摧的基石。
LeNet-5
首先,论文介绍了传统模式识别方法在处理复杂图像数据时面临的挑战,特别是手工设计特征提取器的局限性。
- 传统方法局限性:传统模式识别方法依赖于手工设计的特征提取器,这些方法在处理复杂图像数据时存在局限性,如无法有效应对图像中的平移、形变和扭曲等变化。
- 全连接网络的不足:全连接网络虽然可以作为分类器,但在处理图像数据时存在两个问题:一是参数过多,导致训练困难;二是忽略了输入数据的拓扑结构(如图像的空间相关性)。
传统模式识别方法
随后,作者提出了使用多层神经网络(特别是卷积神经网络)来解决这些问题,因为这些网络能够从大量数据中学习复杂的、高维的、非线性的映射。
- 局部感受野:CNN通过局部感受野机制,每个神经元只连接输入数据的一个局部区域,这有助于提取图像的局部特征。
- 权值共享:同一特征图中的所有神经元共享相同的权值,这使得网络能够检测图像中不同位置的相同特征,从而实现位移不变性。
- 下采样(池化):通过池化操作降低特征图的维度,减少计算量,并增强模型对形变的鲁棒性。
CNN识别方法
二、 LeNet-5网络结构
LeNet-5是论文中提出的经典卷积神经网络结构,主要由两个卷积层、两个池化层、两个全连接层和一个输出层组成,用于手写数字识别。 其结构主要包括以下几个部分:
LeNet-5
- 输入层:接收归一化大小的字符图像,通常图像中的字符位于中心位置。
- 卷积层(C1):
- 使用多个卷积核(6@28*28)对输入图像进行卷积操作,每个卷积核对应一个特征图。
- 每个特征图的神经元通过局部感受野连接输入图像的一个局部区域,并共享相同的权值。
- 池化层(S2):
- 对C1层的特征图进行下采样操作(6@14*14),通常采用最大池化或平均池化。
- 减少特征图的维度,降低计算量,并增强模型的鲁棒性。
- 第二个卷积层(C3):
- 对S2层的输出进行进一步的卷积操作(16@10*10),提取更高级别的特征。
- C3层的特征图与S2层的特征图之间可能存在复杂的连接模式,具体取决于网络设计。
- 第二个池化层(S4):
- 对C3层的特征图进行下采样操作(16@5*5),进一步减少特征图的维度。
- 全连接层(C5):
- 将S4层的输出展平为一维向量,并连接到全连接层。
- 全连接层中的每个神经元都与前一层的所有神经元相连。
- 输出层:
- 全连接层的输出连接到输出层,输出分类结果。
- 对于手写体识别任务,输出层通常包含与类别数相等的神经元,每个神经元对应一个类别的概率。
三、 LeNet-5模型训练
LeNet-5模型训练: 论文深入探讨了利用梯度下降法,特别是结合反向传播算法,来训练LeNet-5网络模型。
该过程通过计算损失函数对网络参数的梯度,随后沿梯度的负方向迭代更新参数,使网络逐步优化,从而精准学习从输入图像到输出类别的复杂映射关系。
模型训练
反向传播(Back Propagation): 反向传播算法利用链式法则, 通过从输出层向输入层逐层计算误差梯度 ,高效求解神经网络参数的偏导数,以实现网络参数的优化和损失函数的最小化。
反向传播
神经网络算法 - 一文搞懂Back Propagation(反向传播)
损失函数(Loss Function): 用于衡量模型预测值 与真实值 之间的差距。损失函数越小,模型的预测性能就越好。
损失函数
神经网络算法 - 一文搞懂Loss Function(损失函数)
梯度下降( Gradient Descent ) : 从一个初始点出发,沿着损失函数的负梯度方向不断更新参数,直到达到一个局部最小值或者全局最小值。
梯度下降
随机梯度下降(SGD):
随机梯度下降在每次迭代中仅随机选择一个样本来计算损失函数的梯度,并根据这个梯度来更新模型的一个或多个参数。
随机梯度下降
批量梯度下降(BGD):与随机梯度下降不同,
在每次迭代中,批量梯度下降 使用整个数据集来计算损失函数的梯度,并根据这个梯度来更新模型的所有参数。
批量梯度下降