LeNet - 5
LeNet-5是由Yann LeCun在上世纪90年代提出的一种经典卷积神经网络结构,最初主要用于手写数字识别(MNIST数据集)。该网络是深度学习领域早期的里程碑模型之一
主要结构
- 特征提取层(卷积+池化层)
- 卷积层和池化层交替使用,是为了在不同层次上提取越来越抽象的特征。卷积层提取的是低级特征(例如边缘、颜色、纹理),而池化层通过减少数据维度,降低计算量和内存消耗,使得网络能够处理更多的抽象特征,进而使得模型能够识别更复杂的物体或模式
- 理解:回顾复习之前文章的概念,该处就类似于识别一个猫的时候,先,你会关注猫的轮廓(边缘),这是卷积层的作用。接着,你开始注意到猫的耳朵、眼睛和尾巴这些重要特征(更抽象的特征)。而在这一过程中,你并不需要关心猫的每根毛发是怎样的,或者背景中的细节。这时,池化层就像是帮助你简化信息,让你把注意力集中在更关键的特征上,而忽略不重要的细节
- 分类部分(全连接层)
- 经过特征提取得到的特征图摊平(flatten)成向量,然后通过若干个全连接层和非线性激活函数进行处理,最终输出用于分类的概率分布(通常通过softmax)
- 文物评审团根据各种评价最终汇总出一个综合报告
具体实现细节分析
输入层
- 输入一般为32×32的单通道(灰度)图像。在经典的MNIST数据中,原始尺寸为28×28,论文中有时在周围填充边界使之变为32×32,便于网络的卷积操作对齐
第一层卷积(C1)
- 卷积核大小:5×5
- 卷积核数量:6个滤波器(filter)
- 输入通道为1(灰度图),输出通道为6
- 输出特征图大小为:28×28(因为32×32输入经过5×5卷积不使用padding的话结果大小为32-5+1=28)
经过C1层后数据形状为:(批次大小B, 通道数6, 高28, 宽28)
第一层池化(S2)
- 池化方式:2×2平均池化(sub-sampling),步幅为2
- 输出特征图大小:14×14 (因为28×28经过2×2池化下采样变为14×14)
- 通道数不变,仍为6
经过S2层后数据形状为:(B, 6, 14, 14)
第2卷积层 (C3)
- 卷积核大小:5×5
- 卷积核数量:16个滤波器
- 输入通道数为6
- 输出特征图大小为:14-5+1=10,因此输出为10×10
经过C3层后数据形状为:(B, 16, 10, 10)
第2池化层(S4,平均池化层)
- 仍为2×2平均池化,下采样后大小由10×10变为5×5
- 通道数仍为16
经过S4层后数据形状为:(B, 16, 5, 5)
第3卷积层 (C5)
- 卷积核大小:5×5
- 滤波器数量:120个(经典设计中)
- 由于输入特征图为16个通道,每个为5×5,使用5×5卷积核得到1×1的输出特征图,所以输出为120个1×1的特征图,即相当于输出维度为120
- 经过C5层后数据形状为:(B, 120)
全连接层(F6)
- 将前一层输出120维向量连接至84个隐藏单元的全连接层(F6层)
- 输出为84维特征向量
输出层
- 最终全连接输出层为10维(针对10分类,如数字0-9识别),通过softmax得到每个类别的概率
lenet5的激活函数与池化类型
在原始的LeNet-5中使用的激活函数是Sigmoid或tanh(论文时代较早,还没有ReLU的提出)。现代版本多用ReLU代替
池化使用的是平均池化(average pooling),现代CNN中更多使用max pooling,但LeNet-5是历史早期设计,以平均池化为主
AlexNet
网络结构
总结
- AlexNet使用 5个卷积层 提取多层次特征,逐层增加卷积核数量,捕捉图像的深层特征
- 卷积层后紧跟 最大池化层,降低特征图的分辨率,同时保留关键信息
- 最后的 3个全连接层 负责整合特征并输出分类结果
- 使用创新技术(如ReLU、Dropout、GPU并行)显著提升了模型的性能和训练效率
创新点总结(相较于之前模型)
采用ReLU(Rectified Linear Unit)代替传统的Sigmoid激活函数,加速了网络的训练过程,同时有效缓解了梯度消失问题
GPU并行训练,使用两块GPU并行处理,将网络分为两部分分别在两块GPU上运行;解决了当时单卡GPU内存不足的问题,同时加速了训练过程
Dropout正则化,在全连接层引入Dropout,随机屏蔽部分神经元,减少过拟合
数据增强,通过随机裁剪、水平翻转、颜色抖动等方法进行数据增强,提升模型的泛化能力
实现分析
输入层 (Input Layer)
- 输入图像的大小为 227×227×3(宽 × 高 × 通道数)。
- 这是彩色图像,包含RGB三个通道。
卷积层1 (Conv1)
- 卷积核数量:96
- 卷积核大小:11×11
- 步幅(Stride):4
- 输出尺寸:55×55×96
- 卷积操作通过滑动窗口提取图像局部特征。
- 输出的深度是96,表示使用了96个卷积核提取特征
- Max Pooling(最大池化)
- 池化的窗口是3 * 3 ; 步幅为 2 ,经过池化图像缩小为27×27×96
卷积层2 (Conv2)
- 卷积核数量:256
- 卷积核大小:5×5
- 步幅(Stride):1
- 输出尺寸:27×27×256(卷积核)
- Max Pooling(最大池化)
- 池化的窗口是3 * 3 ; 步幅为 2 ,经过池化图像缩小为13×13×256
卷积层3 (Conv3)
- 卷积核数量:384
- 卷积核大小:3×3
- 步幅(Stride):1
- 输出尺寸:13×13×384(卷积核)
卷积层4 (Conv4)
- 卷积核数量:384
- 卷积核大小:3×3
- 步幅(Stride):1
- 输出尺寸:13×13×384(卷积核)
卷积层35(Conv5)
- 卷积核数量:256
- 卷积核大小:3×3
- 步幅(Stride):1
- 输出尺寸:13×13×256(卷积核)
- Max Pooling(最大池化)
- 池化的窗口是3 * 3 ; 步幅为 2 ,经过池化图像缩小为6×6×256
全连接层1 (fc6)
- 输入尺寸:从卷积层的输出(6×6×256)摊平成一维向量,大小为 9216(6×6×256)
- 输出神经元数量:4096
- 激活函数:ReLU
- Dropout用于减少过拟合
全连接层2 (fc7)
- 输入神经元数量:4096
- 输出神经元数量:4096
- 激活函数:ReLU
- Dropout用于正则化
全连接层3 (fc8)
- 输入神经元数量:4096
- 输出神经元数量:类别数量(N),例如ImageNet有1000个类别。
- 激活函数:Softmax
Dropout正则化
概述
概念
Dropout 是一种用于神经网络的 正则化技术,其核心思想是在训练过程中随机“屏蔽”(即临时移除)一部分神经元,让网络不完全依赖某些特定神经元的输出
该方式的主要目的是减少模型的过拟合,提高网络的泛化能力
传统标准的神经网络中,所有神经元都会参与前向传播和反向传播,模型会充分利用所有神经元的输出;而Dropout中在每次训练的前向传播中,会根据设置的参数屏蔽一部分神经元,仅使用剩余的神经元参与运算。屏蔽的神经元在下一次训练中可能会被重新启用
理解
类似于在团队训练一个团队的人,团队总共有10个人,教练每次随机挑选5个人训练(这个过程就类似于Dropout的过程)
由于每次训练的球员不同,每个人都必须具备独立解决问题的能力,不能依赖某个固定队友(减少依赖性)
所以在最后比赛的时候(对应测试阶段),全部队员都上场的时候,因为每名队员都进行过训练,所以会总体表现更好
实现过程
随机屏蔽神经元
- 每次训练时,随机选择部分隐藏层神经元,将其屏蔽(即不参与当前的计算)
- 例如,如果设置 Dropout 概率为 0.5,表示每次训练时约有 50% 的隐藏神经元被屏蔽
前向传播
- 将输入数据传入网络时,仅使用未被屏蔽的神经元进行计算
- 被屏蔽的神经元被临时“移除”,不传递信息
反向传播
- 误差反向传播时,仅更新未被屏蔽的神经元对应的权重(
w
和b
) - 被屏蔽的神经元的权重不参与更新
重复过程
- 每次训练时,都会随机屏蔽不同的神经元
- 在最终测试阶段,Dropout 不再屏蔽神经元,而是对权重进行缩放(通常乘以 Dropout 概率),以保持一致性
作用
减少过拟合
简单理解:过拟合类似于复习知识点的时候总是死记硬背书本的知识点,当课本上的数据更改的时候,就会表现的很差
过拟合是指模型在训练集上表现非常好,但在测试集或新数据上表现很差的问题
- 模型过于依赖训练数据,学习到了数据中的噪声或无关模式,而不是抓住数据的 泛化特征
- 这种现象导致模型对训练数据“记得太多”,但对新数据无法正确预测
减少神经元之间的相互依赖
理解:类似于上述中教练的行为,每次都随机组一个5人的团队,这样就会避免队员之间的依赖,从而提高其工作效率
深度学习中,每个神经元可能会“依赖”某些固定的神经元输入来提取特征,如果某些神经元总是同时激活并依赖特定的组合模式,整个网络的泛化能力可能受到限制(类似于“死记硬背”的行为)
- 随机屏蔽部分神经元,让网络在每次前向传播中只依赖不同的子网络(随机组合的活跃神经元)
- 这样迫使每个神经元独立学习特征,而不是依赖其他神经元,从而减少神经元之间的强依赖性
Dropout减少过拟合的方法
- 破坏特定的模式
- 通过屏蔽神经元后,网络在每次训练后都会看到不同的子网络,这样就可以成功阻止网络记忆特定的模式和细节
- 类似于通过每次都训练不同的数学题目,这样就不会死记硬背
- 模拟模型的集成效果
- Dropout 让每次训练的网络结构都稍有不同,这相当于训练了许多不同的子模型
- 测试时启用所有神经元,就像结合了多个模型的优点,提升泛化能力
图像增强
概述
使用原因
减少过拟合:通过图像增强相关操作可以产生更多的样本,可以使得模型不仅仅记住训练数据中的特定模式,而是学习到更普适的特征
给定一张图像,通过平移、旋转、颜色变换等操作,可以生成多个不同版本的图像,让模型见到更多的图像变化
图像增强可以模拟不同的现实世界场景,例如低光照、模糊、噪声等情况,让模型学会在这些不理想的情况下做出准确的预测
常用方法
-
旋转(Rotation):随机旋转图像一定的角度(例如:-30°到+30°),使得网络可以更好地处理不同方向的物体
-
翻转(Flipping):随机水平翻转(或垂直翻转)图像。通常水平翻转更常见,特别适用于大多数物体
-
缩放(Scaling):随机缩放图像的尺寸,并通过裁剪或填充调整大小,以适应网络输入大小。这有助于网络适应不同物体的大小
-
裁剪(Cropping):随机裁剪图像的不同部分。常见的做法是中心裁剪、随机裁剪、以及改变裁剪的比例
-
平移(Translation):对图像进行随机的水平或垂直平移。通常结合裁剪一起使用,帮助网络更好地识别位移物体
-
颜色变换(Color Jittering):随机改变图像的亮度、对比度、饱和度、色调等,以增强模型对不同光照条件的适应能力。
-
噪声(Noise Injection):给图像添加随机噪声(如高斯噪声),可以让网络对不清晰或噪声较多的图像具有鲁棒性
-
仿射变换(Affine Transformation):包括旋转、缩放、平移、倾斜等多种几何变换
-
灰度化(Grayscale):将图像随机转换为灰度图像,可以帮助模型适应不同的输入模式
图像增强PCA
简单了解
如果原始图像是一个鸟,那么PCB图像增强就像是为了这张照片模拟了不同光线、颜色环境下的拍摄效果;虽然通过这种增强后图片看着都不同,但是本质并没有改变,进一步说也就是其物体形状边缘并没有改变。通过这种方式,深度学习模型可以学会在多种颜色环境下识别物体,然后提高泛化能力
实现步骤理解
图像标准化:将图像标准化,即把每个颜色通道的值处理为均值为0、方为1
- RGB三个颜色通道的值范围不同(比如红色、绿色、蓝色的强度值可能分布不同)。通过标准化,将它们转化为统一的范围,方便后续处理
- 可以想象成描述一个人的时候会有多重数据,例如身高体重等,通过标准化将其每种单位转化为统一标准,这样可以消除单位和数量级的差异
展开矩阵:将图像的像素点从高宽(H × W)结构展开成一个二维矩阵,方便数学操作
- 图像展开后,每个像素点就对应一行,RGB三个通道对应列。这样操作的目的是将图像数据以数学上更容易操作的形式表示出来
- 假设我们在一张纸上绘制了一幅画,画上有高楼、树木和天空。现在我们希望描述每个像素点的颜色,就需要将整张画“展开”,以像素点为单位列出每个点的颜色(红、绿、蓝值),形成一个表格,具体实现中类似于在原本每个颜色的地方标注其颜色数值
计算协差矩阵:计算协方差矩阵,用来描述RGB三个通道之间的关系
- 如果一张图片的颜色偏红,那通常绿色和蓝色也会发生某种规律性的变化。协方差矩阵将这种规律量化
- 例如统计很多人身高体重时候发现以下规律 ,对应图像也就是对其规律进行量化
- 身高和体重通常是正相关的(高个子通常体重大)
- 身高和视力的相关性较弱(高个子未必视力更好)
特征分解:对协方差矩阵进行特征分解,找出主要的颜色变化方向
- 图像: RGB颜色变化可以看作是三个方向。特征分解找出了颜色变化的主要方向,比如某种色调的变化(红色-绿色的比例变化、亮度变化等)
- 还是分析学生身高体重等数据,通过分析可以发现
- 第一主成分可能是“体型”,即身高和体重变化的共同趋势
- 第二主成分可能是“健康状态”,即体重和视力之间的关系
添加随机扰动:给主要颜色方向添加随机抖动,生成新的颜色变化
- 例如拍了很多张同一场景的照片,比如蓝天下的一棵树。如果每张照片的颜色都完全一样,模型学到的颜色特性会很单一。但现实中,相机可能因为光照变化、天气原因或相机参数调整,使得每张照片的亮度或色调稍有不同(比如有的更暖一些、有的更冷一些)
- PCA增强模拟了这种现实情况,在原始图像的主要颜色方向上添加了一些随机变化,让模型学会应对这些变化
合成增强图像:将生成的随机扰动加回原图像的RGB通道,得到增强后的图像
- 类似于P图中,对照片加上了不同的滤镜