• 2025年8月29日 星期五

4.3卷积神经网络ALEXNET

8 月 29, 2025

ALEXNET相对于LeNet,做出了五个改进:

  1. ReLu函数
  2. 最大池化
  3. 随机丢弃
  4. 数据扩增
  5. GPU并行训练

首先,我们来看看什么是ALEXNET:

1. AlexNet 的基本情况

  • 作者:Alex Krizhevsky、Ilya Sutskever(Hinton 的学生们)
  • 提出时间:2012 年
  • 数据集:ImageNet(120 万张图像,1000 个类别)
  • 规模:约 650,000 个神经元、6000 万参数、6500 万连接

2. 网络结构(典型版)

输入是 227×227×3彩色图像,网络包含 8 层可训练的层(5 个卷积层 + 3 个全连接层):

  1. Conv1:96 个 11×11 卷积核,stride=4 → 输出 55×55×96
  2. Max Pooling:3×3, stride=2 → 27×27×96
  3. Conv2:256 个 5×5 卷积核 → 27×27×256
  4. Max Pooling:3×3, stride=2 → 13×13×256
  5. Conv3:384 个 3×3 卷积核 → 13×13×384
  6. Conv4:384 个 3×3卷积核 → 13×13×384
  7. Conv5:256 个 3×3卷积核 → 13×13×256
  8. Max Pooling:3×3, stride=2 → 6×6×256
  9. FC1:全连接层,4096 个神经元
  10. FC2:全连接层,4096 个神经元
  11. FC3:全连接层,1000 个神经元(对应 1000 个类别,Softmax 输出)

3. AlexNet 的关键创新

  • 使用 ReLU 激活函数(代替传统的 Sigmoid/Tanh,加快收敛速度)。
  • 使用 Dropout(随机丢弃神经元,防止过拟合)。
  • 数据增强(图像平移、翻转、颜色扰动,扩大训练集有效规模)。
  • GPU 并行训练(首次把 GPU 引入大规模卷积神经网络训练,大大提高训练速度)。
  • 最大池化(突出最显著的特征,对背景噪声更鲁棒)。

4. 影响

  • 在 2012 ILSVRC 比赛中,Top-5 错误率仅 15.3%,而第二名是 26.2%,差距非常大。
  • AlexNet 的成功让业界认识到:深度卷积神经网络在大规模数据和 GPU 加速下,能远超传统方法
  • 后续的 VGG、GoogLeNet、ResNet 都是在 AlexNet 的基础上发展起来的。

接下来让我们分别看看每一个创新点


1.ReLu函数

AlexNet 里用的 ReLU(Rectified Linear Unit,修正线性单元),是它最重要的创新之一。


1. 传统激活函数的问题

在 AlexNet 之前,常见的非线性激活函数是 Sigmoidtanh

Sigmoid

σ(x)=11+ex

,输出在(0,1) 之间

tanh

tanh(x)=exexex+ex

,输出在 (−1,1)之间

这两种函数的主要缺点:

  1. 计算复杂:涉及指数运算,早期计算资源有限,效率不高。
  2. 梯度消失:在输入很大或很小时,函数会饱和(趋近于常数),导数接近 0,导致梯度几乎传不下去 → 深层网络难以训练。

2. ReLU 的定义

f(x)=max⁡(0,x)

非常简单:小于 0 的直接变成 0,大于 0 的保持原值。


3. ReLU 的优点

  • 计算高效:只需比较和截断,比 sigmoid/tanh 快得多。
  • 缓解梯度消失:在 x>0 区域,梯度恒为 1,可以把误差有效传递到深层。
  • 稀疏激活:当 x<0 时输出 0,很多神经元不激活,使网络稀疏化,减少参数依赖,提高泛化能力。
  • 收敛速度快:在 AlexNet 的实验里,ReLU 网络的收敛速度比 tanh 快 6 倍以上。

4. ReLU 的小问题与变种

  • “神经元死亡”:如果某个神经元长期输入为负,就一直输出 0,不再更新。
  • 解决办法:出现了 Leaky ReLU、Parametric ReLU、ELU 等变体,在负半轴给一个小斜率,而不是完全为 0。

2.最大池化MaxPooling

1. 什么是池化?

池化就是在 特征图的局部区域 内,按照某种规则把多个像素“聚合”为一个值,从而:

  • 缩小特征图尺寸(降采样)
  • 减少计算量
  • 增强模型对平移和局部变化的鲁棒性

简单理解就是:

把邻近像素看作一个“小池子”,然后用池化函数(如取最大值/平均值)来代表这一片区域。


2. 常见池化方法

(1) 平均池化 (Average Pooling)

  • 输出 = 窗口内所有像素的平均值
  • LeNet-5 使用的就是这种方式
  • 特点:保留整体趋势,但细节容易被“冲淡”
y=1k2i=1kj=1kxij

(2) 最大池化 (Max Pooling)

  • 输出 = 窗口内像素的最大值
  • AlexNet 采用的方式
  • 特点:突出最显著的特征(如边缘、角点),对背景噪声更鲁棒
y=max(i,j)windowxij

(3) 全局平均池化 (Global Average Pooling, GAP)

  • 对整个特征图取平均,得到单个数值
  • GoogLeNet 开始流行,用于代替全连接层,减少参数

3. 池化的作用

  1. 降采样:减少特征图大小和参数量
  2. 平移不变性:即使目标在图像里稍微移动,池化后的特征变化不大
  3. 抑制噪声:尤其是最大池化,能忽略弱特征,强化显著特征

4. LeNet vs AlexNet 的对比

  • LeNet (1998):用 平均池化 (average pooling),更偏“平滑”
  • AlexNet (2012):改用 最大池化 (max pooling),保留了更强的边缘和纹理特征,识别效果显著提升。

3.随机丢弃Dropout

Dropout(随机失活/随机丢弃) 是 AlexNet 中首次大规模应用的一种正则化方法,提出的动机是为了缓解深度神经网络容易出现的 过拟合 问题。它的做法很直观:在训练过程中,按照一定概率 p(通常取 0.5)随机“丢弃”部分神经元及其连接,不让它们参与本次前向传播和反向传播,相当于临时把这些神经元屏蔽掉。这样每一次训练迭代时,网络结构都不完全一样,更像是训练了很多不同的子网络。由于这些子网络共享权重,最后整体效果相当于在做一种“模型集成”,能显著提高网络的泛化能力。

在实际实现时,Dropout 只在训练阶段起作用,测试阶段则恢复所有神经元,但会把权重按丢弃概率缩放,使得输出的期望保持一致。AlexNet 正是因为采用了 Dropout,有效缓解了当时训练大规模网络时严重的过拟合问题,才能在 ImageNet 上取得远超传统方法的表现。


4.数据扩增Data Augumentation

AlexNet 用的 ImageNet 数据集已经有 120 万张标注图片,在当时算是非常庞大的训练集了。但即便如此,这样一个 拥有 6000 万参数 的深度卷积神经网络,依然容易 过拟合。原因有两个:

第一,网络容量太大。
AlexNet 的参数规模比以往的模型大得多,它有能力“记住”训练数据里的很多细节甚至噪声。如果没有更多样化的数据,它在测试集上就会表现下降。

第二,样本分布不够“丰富”。
虽然 ImageNet 总量大,但对每个类别来说,图片的采集场景有限:

  • 大部分照片拍摄角度类似
  • 光照条件相对单一
  • 物体位置、比例变化不够多

这会导致网络学习到的特征偏向于这些“训练集特定的分布”,泛化能力不足。

因此,数据增强(Data Augmentation)就显得非常重要。AlexNet 里采用的增强方法主要有:

  • 随机裁剪:从原始 256×256 图像中随机裁出 224×224 的区域,增加平移与缩放的变化。
  • 水平翻转:随机把图片左右翻转,让模型学会对称性。
  • RGB 通道扰动:对颜色做轻微变化,模拟不同光照环境。

这些操作能在 不增加人工标注成本 的前提下,成倍地产生新的训练样本。这样一来,网络不仅见过“猫的正面照片”,也见过“猫的翻转照片”;不仅见过“光线好的苹果”,也见过“偏暗的苹果”。最终效果就是 提升泛化性能,降低过拟合


5.GPU并行训练

在 2012 年的时候,深度神经网络的规模已经远远超出了普通 CPU 的承载能力。AlexNet 大约有 6000 万参数、6.5 亿连接,如果完全用 CPU 训练,可能要几个月甚至更久,几乎不可行。

Alex Krizhevsky 当时采用了 两块 NVIDIA GTX 580 GPU(每块显存 3GB) 来加速训练,并设计了一种 跨 GPU 的分工机制

  • 通道切分(channel split):每一层的特征图通道数被 平均分成两份,上面一半分配给 GPU1,下面一半分配给 GPU2。
  • 卷积局部计算:大多数卷积操作只在“本 GPU 的通道子集”上完成,减少跨卡通信量。
  • 有限的跨 GPU 连接:在某些层(如 Conv3、Conv4、Conv5)引入少量跨 GPU 的连接,用来保持特征的一致性。

这样做的好处是:

  1. 分担显存压力:当时的显存有限,把通道拆分能保证网络能放下。
  2. 并行计算:两个 GPU 同时运算,大幅缩短训练时间。AlexNet 最终用了 5~6 天 就在 ImageNet 上完成训练,而不是几个月。
  3. 工程上的突破:这是深度学习第一次真正利用 GPU 进行大规模卷积神经网络的训练,奠定了后面“GPU 是深度学习核心算力”的基础。

思考题:根据LeNet参数个数为61706个,计算ALEXNET每层参数的个数。

卷积层

  • Conv1:11×11×3×96+96=34944
  • Conv2(groups=2):每个核只连到上一层的一半通道 48
    5×5×48×256+256=307456
  • Conv3(不分组):3×3×256×384+384=885120
  • Conv4(groups=2):3×3×192×384+384=663936
  • Conv5(groups=2):3×3×192×256+256=442624

全连接层

  • FC6(6×6×256=9216→4096):9216×4096+4096=37752832
  • FC7(4096→4096):4096×4096+4096=16781312
  • FC8(4096→1000):4096×1000+1000=4097000

总计

60965224

(≈ 6,096 万参数)

Avatar photo

李星海

简介: 2025-今 浙江农林大学 | 2022-今 广州白蓝碗蛋科技有限公司 | 2022-2024 广州商学院 | 2019-2022 广东工贸职业技术学院 | 服务宗旨:心始至客,行亦致远。