AlexNet

AlexNet是深度学习在图像识别领域的里程碑,通过5层卷积和3层全连接网络,结合ReLU激活函数和局部响应标准化,显著提升了ImageNet挑战赛的性能。数据扩增、Dropout等技术有效减少了过拟合,该模型在ILSVRC2010和2012上取得优异成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Imagenet classification with deep convolutional neural networks

AlexNet

Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.

总结

网络结构是5层卷积和3层全连接,使用不饱和激活函数ReLU加快训练速度,局部响应标准化LRU可以加快训练速度增加模型泛化能力,因为用了不饱和激活函数ReLU,所以不能再加快速度了。重叠池化,不容易过拟合,提升少许性能。本文的减少过拟合是一个重点,使用了随机裁剪和翻转,以及PCA改变图片像素值来作为数据扩增手段,另外还用了Dropout来减少过拟合。在预测方面,一张256图片,4角中心取5张,翻转后变成10张,取模型结果的平均作为最后的结果。结果在LSVRC-2010和2012上测评,单模型,集成5个模型和预训练模型。


摘要

ImageNet是一个数据集,有1500万标记过的高分辨率图片,22000个类别。

ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)是用ImageNet部分数据集(1000个类别)举办的比赛,训练集120万张,验证机5000张,测试集15万张。有两个评价指标,top-1,top-5指预测出来概率前5的结果中包括了正确标签。

ImageNet图片大小不一,中心裁剪到256大小,使用训练集的均值对图片去均值。

引言

现有的方法是用机器学习做目标识别。因为数据集少,机器学习足够了,但是现实中的图片就不一样了。出现了大规模标注的数据集,LabelMe、ImageNet。

需要有足够学习能力的模型来学习这么多图片的目标。然而现实中那么多图片,不都包含在ImageNet中,所以需要学习先验知识。CNN可以通过改变深度和宽度来增加学习能力,和普通的机器学习神经网络相比可以学习到图片的本质,也就是统计的平稳性和像素相关性的局部性,而且参数更少,更容易训练。

CNN效果好,效率也比较高,但是还是不能用在高分辨率的图片上。使用高度优化的二维卷积,现在的GPU可以放两张像ImageNet的图片。有足够的图片可以防止严重的过拟合。

在ImageNet子集ILSVRC2010和2012的数据集上训练模型,在GPU上实现卷积和其他训练操作。在第3节介绍了一些方法来提高模型性能,减少训练时间。第4节介绍了一些有效的防止过拟合的方法。

模型受限于GPU,可以通过提高GPU和数据集来获得更好的效果。

数据集

ImageNet是一个数据集,有1500万标记过的高分辨率图片,22000个类别。

ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)是用ImageNet部分数据集(1000个类别)举办的比赛,训练集120万张,验证机5000张,测试集15万张。有两个评价指标,top-1,top-5指预测出来概率前5的结果中包括了正确标签。

ImageNet图片大小不一,中心裁剪到256大小,使用训练集的均值对图片去均值。

网络结构

先介绍一些除了卷积以外的其他特殊的操作。ReLU激活函数,饱和激活函数比不饱和训练的慢。

饱和激活函数和不饱和激活函数的训练时间比较

因为本文主要是减少过拟合,所以没有展开讨论传统变体激活函数和ReLU的好坏。ReLU激活函数不需要对输入进行标准化来防止它到饱和区域,因为只要有正的输入就可以训练神经元。但是局部归一化LRU可以增加泛化能力。

bix,y=aix,y/(k+αj=max0,in/2minN1,i+n/2(ajx,y)2) b x , y i = a x , y i / ( k + α ∑ j = max 0 , i − n / 2 min N − 1 , i + n / 2 ( a x , y j ) 2 )

参数解释: aix,y a x , y i ,x,y是位置,i是卷积核编号,a是激活函数的输出。相当于在同一个位置(x, y),不同的map上的激活进行了平滑。n是计算前后多少个卷积的,N是卷积核总数。LRN降低了top-1和top-5,在CIFAR-10上也降低了测试误差。

LRU原理图

重叠池化Overlapping Pooling,池化步长为2,池化面积为3x3,效果有少许提升,更不容易过拟合。。自己实现的深度学习操作,在2块GPU上跑程序。

整体结构图,5层卷积3层全连接,最后一层全连接是1000softmax用于一千分类。损失是最小化多项式逻辑回归(交叉熵?),和最大化预测的对数概率等价。

网络结构

LRU和重叠池化的位置,先通过LRU,再通过重叠池化:

LRU和重叠池化的位置

减小过拟合

1. 数据扩增

水平垂直翻转,255图片中随机裁剪出224,预测的时候在255图片中4个角和中间取5张,加上水平翻转的5张,平均10张的概率作为最后的结果。

[p1,p2,p3][α1λ1,α2λ2,α3λ3] [ p 1 , p 2 , p 3 ] [ α 1 λ 1 , α 2 λ 2 , α 3 λ 3 ]

PCA,RGB是图片的3个特征,p是协方差矩阵的特征向量,λ是特征值,把计算出来的上式的值加到原像素值上面去。

2. Dropout

通过概率关闭神经元,形成不同的网络结构(参数共享),有模型集成的作用;因为不能依靠所有的神经元特征,减小了模型复杂度,迫使神经元学习更稳定的特征。测试的时候乘上保留概率。在全连接层的第一、二层使用了dropout。

学习细节

batch大小为128,使用动量法,动量因子为0.9,L2正则化方法,权重衰减为0.0005。

vi+1:=0.9vi0.0005ϵwiϵ(Lw|wi)Di v i + 1 := 0.9 ⋅ v i − 0.0005 ⋅ ϵ ⋅ w i − ϵ ⋅ ( ∂ L ∂ w | w i ) D i

wi+1:=wi+vi+1 w i + 1 := w i + v i + 1

初始化:用(0,1)的高斯分布来初始化每一层的权重,第2、4、5卷积层的偏置和全连接层隐藏层的参数初始化为1,其他的初始化为0。学习率:初始学习率为0.01,训练过程中手动调整学习率,在验证集错误率不再提升的时候乘上0.1,减小过3次,在1.2百万的训练集上训练了90个cycles。

结果

ILSVRC-2010的结果:

ILSVRC-2010结果

ILSVRC-2012的结果:

ILSVRC-2012的结果

1 CNN是base-line模型,5 CNN是单独训练了5个base-line,然后平均测试结果的概率得到的结果。* 是在ImageNet 2011的数据集(15M图片,22K类别)上训练一个6层卷积的CNN,然后finetune到ILSVRC-2012,最后一个是平均2个CNN*和5个CNN得到的结果。

定性评估

从第一层的卷积核可视化中可以看到网络学到一些特征,GPU 1上的卷积核在很大程度上与颜色无关,而GPU 2上的卷积核学到了很多颜色信息。

可视化卷积核

另一种探测网络可视化知识的方式是看最后一层4096维的隐藏层,下图展示了该层向量相近(欧氏距离小)的几组图片。直接计算4096维向量效率太低,可以训练一个自编码器来压缩提高效率。

全连接隐藏层判断的相似图片

讨论

去掉一层卷积结果会变差,说明深度很重要。为了简化实验,没有使用预训练模型和为了增加网络规模节省了数据集大小。最终目的是使用很大的卷积网络来处理图片序列,而不是单一的图片。

参考资料

  1. 饱和神经元和不饱和神经元
  2. AlexNet讲解的优快云博客
  3. 局部响应标准化local response normalization
  4. weight decay
05-23
### AlexNet 深度学习模型使用指南与代码实现 #### 一、AlexNet 的背景介绍 AlexNet 是由 Alex Krizhevsky 提出的一种卷积神经网络,在 ImageNet LSVRC-2010 比赛中取得了显著的成绩并远超第二名,这标志着深度学习在图像分类领域的突破性进展[^3]。它的成功不仅验证了深度学习提取特征的能力优于传统手工设计的方法,还推动了后续一系列 CNN 架构的研究与发展。 #### 二、AlexNet 的主要特点 以下是 AlexNet 的几个核心特性及其优势: 1. **ReLU 激活函数** ReLU (Rectified Linear Unit) 被用于激活隐藏单元,相比传统的 Sigmoid 和 Tanh 函数,ReLU 不会遇到梯度消失问题,并能加速训练过程中的收敛速度[^3]。 2. **数据增强技术** AlexNet 利用了多种数据增强手段来扩充训练集规模,例如随机裁剪、水平翻转以及颜色变换等操作。这些方法有效提升了模型的泛化能力,降低了过拟合风险[^1]。 3. **Dropout 技术的应用** Dropout 方法被引入到全连接层部分以减少过拟合现象的发生。通过随机丢弃一部分神经元的方式增加模型鲁棒性和防止参数间过度依赖关系形成[^1]。 4. **多GPU 并行计算支持** 原始版本实现了跨两个 NVIDIA GTX 580 GPUs 上分布式运行的设计理念,从而大幅缩短了整体训练时间成本。 #### 三、AlexNet 完整代码实现 下面提供了一个基于 PyTorch 实现的标准 AlexNet 结构: ```python import torch.nn as nn import torch.optim as optim class AlexNet(nn.Module): def __init__(self, num_classes=1000): # 默认设置为ImageNet类别数量 super(AlexNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2), # 输入通道数设为3(RGB图片) nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2) ) self.classifier = nn.Sequential( nn.Dropout(), nn.Linear(256 * 6 * 6, 4096), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(4096, 4096), nn.ReLU(inplace=True), nn.Linear(4096, num_classes) ) def forward(self, x): x = self.features(x) x = x.view(-1, 256 * 6 * 6) # 展平处理 x = self.classifier(x) return x # 创建实例对象 model = AlexNet() criterion = nn.CrossEntropyLoss() # 设置损失函数交叉熵误差适合多类别的分类任务 optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) # 使用SGD优化器配置初始学习率和动量项系数 ``` 以上展示了如何构建一个基本版次的Pytorch框架下的alexnet架构定义文件;当然实际项目开发当中还需要考虑更多细节比如加载预训练权重或者调整输入尺寸适应不同分辨率需求等问题。 #### 四、注意事项 当尝试复刻或改进该算法时需要注意以下几点事项: - 数据准备阶段应严格按照官方描述执行相应的前处理步骤; - 如果硬件资源有限,则可能需要降低batch size大小或是简化原结构复杂程度以便顺利完成整个流程运转工作; - 训练过程中密切关注loss变化趋势曲线图以及其他评估指标表现情况及时作出相应策略调整决策。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值