摘要:
在ImageNet竞赛中,主要使用8层(5个卷积层、三个全连接层),其中在第1,2,5层使用最大池化,三个全连接层使用softmax非线性激活。实现图像分类,正是AlexNet网络模型的结构,在传统的神经网络模型中,使用非饱和和高效的CPU来卷积操作,同时也是用“dropout”(正则化)来减少过拟合。
- 1 介绍
对于模型的训练,使用大量的数据集更有利于提高结果的准确性,同时使用CNN(卷积神经网络)为训练模型提供便捷性,使用更好的层数得到更好的结果(AlexNet),当然通过加大层数也可以提高准确性,对于CNN每减少一层,都会导致性能下降。 - 2 数据集
ImageNet数据集,使用它的子类,大约有120万张训练图像,5万张验证图像,15万张测试图像,每张图片宽,高位256 * 256固定的分辨率。 - 3 结构
3.1 ReLU非线性
tanh非饱和神经元激活函数:
f (x) = tanh(x) 或 f (x) = (1 + e−x)−1
ReLU饱和神经元激活函数:
f (x) = max(0, x)
创新使用ReLU激活函数替换tanh激活函数,ReLU激活函数有助于减少过拟合,ReLU激活函数比tanh激活函数要快几倍。
3.2 多GPU训练
论文中只用两个GPU并行训练数据集,使得一个GPU不能完成的任务分块在两个GPU上完成。
3.3 局部响应归一化
LRN作为一种有效的正则化手段,被广泛应用于图像识别,语音识别,自然语言处理等多种深度学习任务中,尤其在CNN的设计中占据重要地位。LRN源于AlexNet架构,它的核心理念是模拟生物视觉系统中的侧抑制机制,通过调整相邻特征图元之间的响应关系,从而替身模型的学习能力和泛化性能。
局部响应归一化的数学表述:对于每个神经元的输出值,其LRN后的响应值由其自身以及其邻近神经元的响应值共同决定。具体来说,给定一个神经元i的激活值a(i),其经过LRN处理后的结果y(i)可通过以下公式计算:
其中,n代表邻域大小,α、β是可训练参数,k通常设为1以避免除零错误,N表示总的层数。
3.4 重叠池化
CNN中的池化层对同一核映射中相邻神经元组的输出进行汇总。在原有的图像中通过数据增强进行翻转或者水平裁剪,可以提高数据集数量,从而提高准确性。这种方法也可以减少过拟合。
3.5 整体架构
AlexNet网络模型:5个卷积层,三个全连接,每一层都是用ReLU非线性激活函数,后三个全连接层使用softmax非线性激活,第1,2,5使用最大池化。
第一层,第二层分别对上一层进行过滤:
第一层用96个大小11 * 11 * 3、步长为4的核对224 * 224 * 3的输入图像进行过滤;
第二层用256个大小为5 * 5 * 38的核对55 * 55 * 28的图像进行过滤。
第三层总共有384个大小为3 * 3 * 256的核;
第四层总共有384个大小为3 * 3 * 192的核;
第五层总共有256个大小为3 * 3 * 192的核;
全连接层每层有4096个神经元。 - 4 减少过拟合
两种减少过拟合的方法
4.1 数据增强
数据增加的第一种形式是图像平移和水平反射。通过对输入图片的长和宽再提取里面的补丁进行数据增强,扩大了数据集,减少过拟合。如果出现过拟合,可以使用更小的网络来解决。本论文中是提取5个224*224补丁和5个水平反射后的补丁进行预测,最后在网络softmax层对这十个补丁平均。
数据增强的第二中形式是改变图像RGB通道强度,主要通过PCA来实现,有效的抓住了自然图像的一个特征,物体不受光照强度和颜色变化的影响。
(PCA:特征向量P与对应的特征值乘以一个随机变量a成正比,p,是协方差的特征向量和特征值,a是一个均差为0,平方差为0.1的随机变量。)
4.2 正则化
把神经网络中的隐藏层以0.5的概率输出为0。同时正则化不参与正向,反向传播,因此对神经网络采样一个不同的结构时,每一次的输入都被取样,且所有这些结构共享权重。 - 5 学习细节
优化器使用SGD,损失函数中加入了权重衰退,权重衰退的值小更有助于模型的学习。对学习率的设置,初始时设置为0.01,当验证率不再随学习率而提高时,将学习率除以10,再观察验证率。一共进行了三次学习率下调。 - 6 结论
GPU1很大程度上与颜色无关,GPU2很大程度上与颜色相关。 - 7 讨论
主要使用的是监督学习,通过增加标记数据量的大小来简化实验。而不是像无监督学习那样增加网格的大小来简化实验。这也说明无监督学习比监督学习更需要性能的支持,同时训练时间也会更长。
- AlexNet比相对较小的LeNet5要深得多。AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
- AlexNet使用ReLU而不是sigmoid作为其激活函数。
net = nn.Sequential(
# 这里使用一个11*11的更大窗口来捕捉对象。
# 同时,步幅为4,以减少输出的高度和宽度。
# 另外,输出通道的数目远大于LeNet
nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2),
# 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道数
nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2),
# 使用三个连续的卷积层和较小的卷积窗口。
# 除了最后的卷积层,输出通道的数量进一步增加。
# 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度
nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Flatten(),
# 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合
nn.Linear(6400, 4096), nn.ReLU(),
nn.Dropout(p=0.5),
nn.Linear(4096, 4096), nn.ReLU(),
nn.Dropout(p=0.5),
# 最后是输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000
nn.Linear(4096, 10))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!