深度学习—卷积神经网络AlexNet

本文介绍了深度学习中的重要里程碑—AlexNet,详细分析了其历史、网络结构,并探讨了ReLu函数、最大池化、随机丢弃、数据扩增及GPU加速等关键改进,这些方法对现代深度神经网络训练有着重要影响。

在这一讲中,我们将详细讲解深度学习发展中的重要里程碑AlexNet

1. AlexNet的历史

2012年Geoffrey Hintton的学生ALEX Krizhevsky构建了一个包含65万多个神经元,待估计参数超过6000万的大规模的卷积神经网络。他以自己的名字命名了这个神经网络叫作AlexNet,用以解决ImageNet数据集1000类的分类问题。在2012年,ImageNet测试比赛上取得了远超GooleFacebook两个大公司的成绩。相比前面讲过的LeNetAlexNet在网络结构上深了很多,即神经网络层数和每层神经元个数多了很多,但其基本思想与LeNet完全一样,我们看懂了LeNet后能很容易看懂AlexNet,下图1是AlexNet的网络结构图。

在这里插入图片描述

图1 AlexNet网络结构图

2. AlexNet网络结构简要分析

从图1也可以看到,它也是由一些卷积层、降采样层和全连接层组成的。需要注意的是层与层之间也有非线性函数Batch Normalization,图中没有画出。下面举例说明AlexNet的网络结构。

例如在图中第一个卷积层中,输入的是227×227的彩色图片,由于彩色图片有RGB三个颜色分量,所以channel数量为3。第一个卷积层有96个11×11×3的卷积核,卷积的步长stride=(4,4)

根据上一讲的思考题,如果一个M×N的图像和一个m×n的卷积核进行操作,移动步长stride=(P,Q),即在长的方向上每步移动P个像素,在宽这个方向上每步移动Q个像素,请问经过卷积操作后获得的特征图的长H和宽W分别是多少呢?

H = f l o o r ( M − m P ) + 1 H=floor(\frac{M-m}{P})+1 H=floor(PMm)+1

W = f l o o r ( N − n Q ) + 1 W=floor(\frac{N-n}{Q})+1

### AlexNet 架构特点 #### 1. 多层结构设计 AlexNet 是一种具有多层结构的深度卷积神经网络,其核心由八层组成,其中包括五层卷积层和三层全连接层。这种分层的设计使得模型能够逐步提取图像中的低级特征(如边缘、角点)以及高级语义特征(如物体形状)。通过增加网络层数,AlexNet 显著提升了模型的学习能力[^3]。 #### 2. ReLU 激活函数的应用 相比于传统的 Sigmoid 或 Tanh 激活函数,AlexNet 首次大规模应用了 Rectified Linear Unit (ReLU) 激活函数。ReLU 的引入不仅加快了训练速度,还有效缓解了梯度消失问题,从而提高了模型性能。 #### 3. 数据增强技术 为了减少过拟合并提升泛化能力,AlexNet 利用了数据增强技术。具体方法包括随机裁剪输入图片的不同部分、水平翻转以及颜色变换等操作。这些技巧增加了训练集的有效样本数量,使模型更加鲁棒。 #### 4. Dropout 正则化策略 在全连接层中,AlexNet 使用了 Dropout 技术来防止过拟合现象的发生。Dropout 方法会在每次迭代过程中随机丢弃一部分神经元及其连接权重,以此模拟多个子网络的效果,最终提高整体模型的稳定性。 #### 5. GPU 并行计算支持 由于 AlexNet 参数量庞大且运算复杂度高,在单个 GPU 上难以高效完成整个前向传播与反向传播过程。因此,该模型采用了双GPU并行处理方案:将两组几乎相同的卷积核分别部署于两个独立的GPU上,并通过特定方式共享少量跨设备的信息流实现同步更新参数的目的。 ```python import torch.nn as nn class AlexNet(nn.Module): def __init__(self, num_classes=1000): super(AlexNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2), 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(x.size(0), 256 * 6 * 6) x = self.classifier(x) return x ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值