查看全课大纲(第 39 / 93 节)
- 1.计算机视觉概述
- 2.计算机视觉应用场景
- 3.困难与挑战
- 4.开源库介绍
- 5.图像显示与存储
- 6.CLAHE
- 7.腐蚀膨胀与开闭运算
- 8.滤波与边缘填充
- 9.各种滤波
- 10.图像金字塔
- 11.傅里叶变换
- 12.短时傅里叶变换与小波变换
- 13.颜色特征与颜色直方图
- 14.几何特征_边缘
- 15.几何特征-角点与斑点
- 16.局部特征-SIFT特征描述子
- 17.局部特征-SURF特征描述子
- 18.局部特征-ORB特征描述子
- 19.其他特征描述子
- 20.传统图像分割技术
- 21.GraphCut
- 22.GrabCut
- 23.人脸检测的传统方法
- 24.行人检测的传统方法HOG+SVM
- 25.行人检测DPM
- 26.人工神经网络的架构
- 27.目标函数与梯度下降
- 28.误差反向传播
- 29.可手算的神经网络
- 30.改进目标函数与克服梯度消散
- 31.神经网络之传统神经网络与深度网络的差异
- 32.各种梯度下降算法
- 33.如何选择合适的梯度下降算法
- 34.避免过适应
- 35.CNN的架构
- 36.CNN的误差反向传播_卷积层
- 37.CNN的误差反向传播_池化层
- 38.分类所用的数据集
- 39.Alexnet详解
- 40.VGG详解
- 41.GoogLeNet_v1
- 42.BatchNormalization
- 43.GoogLeNet_v3v4
- 44.ResNet
- 45.ResNeXt
- 46.CNN设计准则
- 47.图像检索与推土机距离
- 48.基于颜色相似性
- 49.基于形状相似性
- 50.基于纹理相似性
- 51.基于局部特征相似性
- 52.DL的二值哈希编码
- 53.高维空间中检索KDTree
- 54.高维空间中检索LSH
- 55.目标识别任务综述
- 56.RCNN
- 57.SPP-Net
- 58.Fast R-CNN
- 59.Faster R-CNN
- 60.R-CNN系列模型回顾
- 61.R-FCN的设计思路
- 62.R-FCN的实现
- 63.YOLOv1
- 64.YOLOv2_9000
- 65.YOLOv3
- 66.图像分割应用场景与数据集
- 67.上采样的实现方式
- 68.FCN网络架构的由来
- 69.FCN构建细节
- 70.DeepLabv1
- 71.CRF
- 72.DeepLabv2
- 73.DeepLabv3
- 74.特定的医学影像分割任务
- 75.U-Net
- 76.3D U-Net
- 77.V-Net
- 78.DenseNet
- 79.病理切片分析任务及数据集
- 80.病理切片分析
- 81.图说任务及其传统处理方法
- 82.深度语言模型与RNN
- 83.LSTM及其变种
- 84.NIC模型
- 85.SAT模型
- 86.图说的性能指标
- 87.判别模型与生成模型
- 88.KL散度与JS散度
- 89.VAE
- 90.GAN的基本原理
- 91.DCGAN与CGAN
- 92.Wasserstein GAN
- 93.SRGAN
Alexnet详解
AlexNet详解
小象实战讲义 · 基于深度学习的计算机视觉
在深度学习席卷计算机视觉领域的历史进程中,有一个模型具有里程碑式的意义,它标志着深度卷积神经网络(CNN)时代的真正开启。本节我们将深入剖析这个里程碑式的模型——AlexNet。通过本节学习,你将理解AlexNet为何能赢得2012年ImageNet竞赛的冠军,掌握其网络结构的具体细节,并了解它所引入的关键技术如何深刻影响了后续所有深度学习模型的设计。
💡 核心导读
- 历史定位:AlexNet是开启深度学习革命的里程碑(CNN 的更早先驱是 LeNet),它让深度卷积网络真正走向大规模应用。
- 网络架构:由5个卷积层和3个全连接层构成,共8层,包含约6000万个参数。
- 关键技术:首次在大规模深度卷积网络中成功应用并推广了ReLU、Max Pooling和Dropout等关键技术。
- 设计细节:为应对当时硬件限制,采用双GPU分组训练策略;输入尺寸224×224源于数据增强的考量。
- 深远影响:其基本架构和设计思想直接启发了VGG、GoogLeNet、ResNet等后续经典网络,并拓展至目标检测、图像分割等多个领域。
卷积神经网络的进化历程与AlexNet的历史地位
在深入AlexNet的细节之前,我们有必要将其置于卷积神经网络(CNN)的进化史中,以理解其不可替代的开创性地位。
从网络深度演进的视角看,AlexNet是一个起点。它是一个8层的网络(5个卷积层+3个全连接层)。紧随其后,VGG网络将层数加深到了典型的19层(也有13、16层等变体),其结构简洁而有效,易于修改和迁移到其他任务中,因此常被用作高层视觉任务的基础网络。GoogLeNet则进一步将深度提升至22层,并引入了创新的Inception模块结构。而ResNet利用残差连接,成功训练了深达152层的网络,解决了极深网络的梯度消失和退化问题。
从性能竞争的角度看,无论是GoogLeNet还是ResNet,在纯粹的分类任务上,其性能都超越了VGG。但这一切性能的飞跃,其源头都可以追溯到AlexNet奠定的基础。
因此,如何强调AlexNet在CNN发展史中的重要地位都不过分。
在AlexNet之前,并非没有深度学习的尝试。Yann LeCun等人在20世纪90年代提出LeNet系列(代表作LeNet-5发表于1998年),其雏形可追溯至1989年用手写邮编识别的早期卷积网络,但受限于当时的硬件(如GPU算力不足)和算法(如梯度消失问题),深度网络并未得到大规模应用和验证。
转机出现在2012年。Geoffrey Hinton教授及其学生Alex Krizhevsky等人,在GPU硬件取得长足发展和算法层面有所突破的双重背景下,提出了AlexNet,并在ImageNet大规模视觉识别挑战赛(ILSVRC)中一举夺魁。
AlexNet的成功并非仅仅因为得了第一名,而在于它将第二名远远甩在了身后——其 Top-5 错误率约 16.4%(5 模型集成,Top-1 错误率 38.1%;单模型 Top-5 约 18.2%),而第二名传统方法约 26%,以巨大的优势证明了深度卷积神经网络的强大威力。这标志着基于深度神经网络的深度学习革命性时代的开始。
此后,基于AlexNet的架构思想,CNN的发展主要沿着几个方向深化:
- 加深网络:如VGG系列,通过堆叠更多的小卷积核来增加网络深度和感受野。
- 增强卷积模块功能:如GoogLeNet的Inception系列,设计了更高效的局部网络结构(Inception Module)。
- 结合深度与模块改进:如ResNet,利用残差连接使网络可以变得非常深,同时保持了良好的性能。
- 任务拓展:将原本用于分类的网络(如AlexNet, VGG, ResNet)进行改造,拓展到目标检测(如R-CNN, Fast R-CNN, Faster R-CNN系列)和图像分割(如FCN全卷积网络)等领域。
- 增加功能模块:如引入Batch Normalization来加速训练并提升性能。
可以说,AlexNet是后续所有这些伟大网络的共同祖先。
AlexNet网络架构详解
AlexNet的基本架构是5个卷积层加上3个全连接层,总共8层。整个网络包含约6000万个参数和65万个神经元。接下来,我们将结合网络结构图,逐层解析其设计。
输入层与数据增强
网络输入图像的尺寸通常写作 224×224×3。这里的“3”代表RGB三个颜色通道,即输入是彩色图像。
需要先说明一个教材里常见的口径差异:课程 PPT 把输入记为 224×224,但若按论文的卷积参数反推,第一层实际看到的是 227×227×3;224 与 227 只差 3 个像素,很多资料混用二者。本节沿用课程口径,输入记为 224,但 Conv1 的 55×55 输出对应的是 227 的输入:。若严格用 224 且不加填充,则只能得到 54×54。
一个常见的疑问是:训练前图像通常会被统一缩放/下采样到256×256的固定分辨率,为什么这里输入是224×224?
这背后体现了数据增强(Data Augmentation) 的重要思想。训练一个拥有6000万参数的大型网络,很容易因为训练样本相对不足而产生严重的过拟合(Overfitting)。即使ImageNet提供了上百万张图片,对于如此庞大的模型来说,数据依然不够。
因此,AlexNet采用了一种简单的数据增强方法:随机裁剪。具体做法是从256×256的原图中,随机裁剪出一个224×224的区域。这个区域通常能覆盖图像的主体内容,同时由于裁剪位置是随机的,使得主体在图像中的位置不断变化。此外,还会对图像进行水平翻转。通过“随机裁剪+水平翻转”这套组合,一张原始图片可以生成多张训练样本,有效扩充了数据集,缓解了过拟合。
所以,224这个尺寸并非随意设定,它综合考虑了数据增强的需求以及后续网络层尺度计算的便利性。
卷积层与池化层解析
理解AlexNet的网络图是深度学习的一项基本技能。我们需要能从图中读懂每一层进行了什么操作(卷积、池化、激活等),以及数据尺度的变化。
第一卷积层 (Conv1)
- 输入:224×224×3(实际卷积按 227×227 计算,见上节说明)
- 卷积核:11×11×3,数量为96个(注意:因双GPU训练,实际是两组48个)
- 步长 (Stride):4
- 输出尺寸计算:
输出尺寸 = floor((输入尺寸 - 卷积核尺寸) / 步长) + 1。按 227 的输入:(227-11)/4 + 1 = 55,输出为55×55。若严格按 224 且无填充,则floor((224-11)/4) + 1 = 54,因此后续尺寸沿用 55×55 这一经典口径。通道数变为96(两组48)。 - 后续操作:卷积后先经过ReLU激活函数,再进行局部响应归一化(LRN),最后进行最大池化(Max Pooling),池化核为3×3,步长为2。池化后尺寸变为27×27×96。
第二卷积层 (Conv2)
- 输入:27×27×96(来自上一层池化输出)
- 卷积核:5×5×48(注意:输入通道96被分到两个GPU,每个GPU处理48个通道),每个GPU输出128个特征图,故总输出通道为256。
- 步长:1
- 填充 (Padding):使用填充(Padding=2)以保持空间尺寸。卷积后尺寸为27×27×256。
- 后续操作:ReLU激活 → LRN → Max Pooling (3×3, stride=2)。池化后尺寸变为13×13×256。
第三、四、五卷积层 (Conv3, Conv4, Conv5)
- Conv3:输入13×13×256,使用384个3×3×256的卷积核,步长1,填充1。输出13×13×384。特别注意:从这一层开始,两个GPU的信息进行了交互融合。
- Conv4:输入13×13×384,使用384个3×3×192的卷积核(同样分组),步长1,填充1。输出13×13×384。
- Conv5:输入13×13×384,使用256个3×3×192的卷积核(分组),步长1,填充1。输出13×13×256。
- 池化:仅在Conv5之后有一个Max Pooling层 (3×3, stride=2),将最终的特征图尺寸降为6×6×256。
经过五层卷积和池化,原始图像被转化为一组高度抽象的特征图(6×6×256)。这些特征将送入全连接层进行最终分类。
全连接层与输出
卷积层的作用是自动提取图像的特征,而全连接层的作用则是将这些分布式特征“综合”起来,完成最终的分类决策。
- FC6 (第一个全连接层):将6×6×256=9216个特征值展开(Flatten)为一个一维向量,并连接到一个包含4096个神经元的全连接层。之后经过ReLU激活,并应用Dropout正则化。
- FC7 (第二个全连接层):结构同FC6,也是4096个神经元,后接ReLU和Dropout。
- FC8 (第三个全连接层/输出层):连接到1000个神经元的全连接层,对应ImageNet的1000个类别。
- 输出:最后通过一个Softmax函数,将1000个输出值转化为概率分布,表示输入图像属于每一类的概率。概率最高的类别即为网络的预测结果。
在训练过程中,网络预测结果与真实标签之间的误差(通常使用交叉熵损失)会通过误差反向传播算法,从输出层逐层向前传递,指导网络中每一个卷积核(权重参数)的更新,使得网络提取的特征越来越有利于做出正确的分类。这是一个以最终任务目标驱动特征学习的自动化过程。
AlexNet的关键技术与创新点
AlexNet的成功,很大程度上归功于它引入或成功实践了几项关键技术:
- ReLU 激活函数:在AlexNet之前,神经网络普遍使用Sigmoid或Tanh作为激活函数。这些函数在输入值极大或极小时梯度会趋近于0,导致深层网络训练时出现“梯度消失”问题。ReLU (Rectified Linear Unit) 函数
f(x)=max(0,x)在正区间的梯度恒为1,有效缓解了梯度消失,大大加速了深层网络的训练。 - 最大池化 (Max Pooling):AlexNet使用最大池化进行下采样,取代了之前LeNet中使用的平均池化。最大池化能更好地保留纹理特征,并提供了某种程度的平移不变性。
- Dropout 正则化:Dropout是一种防止过拟合的正则化技术。在训练时,它以一定的概率随机让网络中的一些神经元暂时“失效”(输出置零)。这相当于在每次迭代中训练一个不同的、更薄的网络,最终效果类似于模型集成(Ensemble),能显著提升模型的泛化能力。在AlexNet中,Dropout主要应用于参数密集的全连接层。
- 双GPU并行训练:受限于当时单块GPU的显存(GTX 580仅有3GB),AlexNet创新性地将网络模型(主要是卷积核)平均分配到两块GPU上。大部分时间GPU独立计算,仅在特定的层(如第三卷积层)进行必要的数据交互。这是一种模型并行和数据并行结合的早期实践。
局部响应归一化 (LRN) —— 一个未被沿用的尝试
AlexNet还提出了一项称为局部响应归一化 (Local Response Normalization, LRN) 的技术。其灵感来源于生物神经元中的“侧抑制”现象,即活跃的神经元会抑制其邻近神经元的活动。
LRN的公式旨在对同一个空间位置(x,y)上、不同通道(特征图)的激活值进行归一化,试图增强响应大的值,抑制响应小的值。然而,后续的研究(如提出VGG的论文)证明,LRN对于模型性能的提升没有明显帮助,反而增加了计算开销。因此,这项技术在后来的主流网络(如VGG、ResNet)中并未被沿用。我们在学习时,了解其设计初衷即可。
网络参数与结构表示
AlexNet的网络结构通常有两种表示方式:一种是形象的网络结构图,另一种是清晰的参数表格。二者本质是统一的,都描述了从输入到输出的数据变换流程。
以下表格清晰地概括了AlexNet各层的操作与数据变化:
| 网络层 | 类型 | 卷积核/池化核 | 步长 | 填充 | 输入尺寸 | 输出尺寸 | 备注 |
|---|---|---|---|---|---|---|---|
| 输入 | - | - | - | - | - | 224×224×3 | RGB图像 |
| Conv1 | 卷积 | 11×11×3 (96个) | 4 | Valid | 224×224×3 | 55×55×96 | ReLU → LRN;55×55 对应 227 输入口径 |
| Pool1 | 最大池化 | 3×3 | 2 | - | 55×55×96 | 27×27×96 | - |
| Conv2 | 卷积 | 5×5×48 (256个) | 1 | Same | 27×27×96 | 27×27×256 | ReLU → LRN |
| Pool2 | 最大池化 | 3×3 | 2 | - | 27×27×256 | 13×13×256 | - |
| Conv3 | 卷积 | 3×3×256 (384个) | 1 | Same | 13×13×256 | 13×13×384 | ReLU |
| Conv4 | 卷积 | 3×3×192 (384个) | 1 | Same | 13×13×384 | 13×13×384 | ReLU |
| Conv5 | 卷积 | 3×3×192 (256个) | 1 | Same | 13×13×384 | 13×13×256 | ReLU |
| Pool5 | 最大池化 | 3×3 | 2 | - | 13×13×256 | 6×6×256 | - |
| FC6 | 全连接 | - | - | - | 6×6×256 | 4096 | ReLU → Dropout |
| FC7 | 全连接 | - | - | - | 4096 | 4096 | ReLU → Dropout |
| FC8 | 全连接 | - | - | - | 4096 | 1000 | - |
| 输出 | Softmax | - | - | - | 1000 | 1000 | 类别概率 |
注:表格中“Same”填充表示进行填充以使输出尺寸与输入尺寸相同(当步长为1时)。
📝 动手练一练
- 概念辨析:AlexNet中,Dropout技术主要应用在网络结构的哪一部分?为什么选择应用在这里而不是卷积层?
- 结构计算:假设有一张231×231的RGB图像输入AlexNet,请计算经过第一卷积层(Conv1: 11×11卷积核,步长4,无填充)和紧随其后的池化层(Pool1: 3×3最大池化,步长2)后,输出特征图的空间尺寸(宽×高)是多少?
👉 点击查看参考答案
Dropout的应用位置与原因: Dropout主要应用在AlexNet的全连接层(FC6和FC7)。这是因为全连接层的参数量巨大,神经元之间两两相连,容易导致过拟合。Dropout通过随机断开一部分连接,强制网络学习更鲁棒的特征,是一种有效的正则化手段。卷积层本身由于参数共享和稀疏连接,已经具有一定的正则化效果,且卷积层提取的是空间局部特征,直接应用Dropout可能会破坏这种空间信息,因此AlexNet未在卷积层使用Dropout。
结构计算:
- Conv1输出尺寸计算: 公式:
输出尺寸 = floor((输入尺寸 - 卷积核尺寸) / 步长) + 1宽度:floor((231 - 11) / 4) + 1 = floor(220 / 4) + 1 = 55 + 1 = 56高度同理,也为56。 所以Conv1输出尺寸为:56×56×96(深度96为通道数)。 - Pool1输出尺寸计算: 公式:
输出尺寸 = floor((输入尺寸 - 池化核尺寸) / 步长) + 1宽度:floor((56 - 3) / 2) + 1 = floor(53 / 2) + 1 = 26 + 1 = 27高度同理,也为27。 所以最终输出特征图的空间尺寸为:27×27。
- Conv1输出尺寸计算: 公式:
本章小结
本节我们深入学习了深度学习计算机视觉领域的奠基之作——AlexNet。我们不仅剖析了其“五卷积层+三全连接层”的具体架构,理解了从224×224输入到1000类输出的完整数据流,更重要的是,我们认识了ReLU、Max Pooling、Dropout等关键技术如何被成功应用并成为后世标准。同时,我们也看到了像LRN这样的探索虽未成功,但同样是技术演进中宝贵的尝试。AlexNet的历史性胜利,证明了深度卷积神经网络的巨大潜力,为后续VGG、GoogLeNet、ResNet等网络的蓬勃发展铺平了道路。
今天,AlexNet 已不再作为实用模型使用,但它确立的“卷积堆叠 + ReLU + 池化 + 全连接分类头”骨架,仍是所有 CNN 教材的起点。现代网络在深度、归一化(BN/LN)、注意力机制和训练技巧上早已远超它,但“用数据驱动特征学习”的范式正是从 2012 年这一步开始确立的。
📋 行动清单
- 理清网络脉络:在白纸上尝试画出AlexNet的简化结构图,并标注出各层输入输出的尺寸变化。
- 掌握关键技术:复述ReLU、Max Pooling、Dropout各自解决了什么问题,以及它们在AlexNet中是如何被应用的。
- 进行对比思考:将AlexNet与之前了解的LeNet进行对比,思考在层数、规模、技术上发生了哪些根本性的变化,这些变化带来了什么影响。
—— 小象教研组