AlexNet 深度卷积神经网络
一、历史背景
为什么AlexNet重要?
- 时间: 2012年
- 成就: 在ImageNet图像识别挑战赛中以 巨大优势夺冠
- 意义: 首次证明学习到的特征可以超越手工设计的特征,开启了深度学习革命
深度学习复兴的两个关键因素
1. 数据的突破
- ImageNet数据集(2009年发布):
- 100万个训练样本
- 1000个不同类别
- 规模前所未有
2. 硬件的突破
- GPU的应用:
- GPU拥有100-1000个处理核心(vs CPU的4-64核)
- 浮点运算性能比CPU高几个数量级
- 卷积和矩阵乘法可以高效并行化
- 使用的硬件: 两个NVIDIA GTX 580 GPU(各3GB显存)
二、AlexNet架构设计
整体结构
8层网络: 5个卷积层 + 2个全连接隐藏层 + 1个输出层
详细层次结构
输入: 224×224×1 (或3通道彩色图像)
第1层: Conv(11×11, stride=4) -> 96通道 -> ReLU -> MaxPool(3×3, stride=2)
输出: 26×26×96
第2层: Conv(5×5, padding=2) -> 256通道 -> ReLU -> MaxPool(3×3, stride=2)
输出: 12×12×256
第3层: Conv(3×3, padding=1) -> 384通道 -> ReLU
输出: 12×12×384
第4层: Conv(3×3, padding=1) -> 384通道 -> ReLU
输出: 12×12×384
第5层: Conv(3×3, padding=1) -> 256通道 -> ReLU -> MaxPool(3×3, stride=2)
输出: 5×5×256
第6层: Flatten -> FC(4096) -> ReLU -> Dropout(0.5)
第7层: FC(4096) -> ReLU -> Dropout(0.5)
第8层: FC(10) - 输出层
三、关键技术创新
1. 使用ReLU激活函数
优势:
- 计算简单(无需复杂的指数运算)
- 梯度恒为1(在正区间),避免梯度消失
- 训练更容易,收敛更快
对比sigmoid:
- Sigmoid在接近0或1时梯度几乎为0
- 容易导致梯度消失问题
2. Dropout正则化
- 在两个全连接层使用Dropout(p=0.5)
- 有效防止过拟合
- 增强模型泛化能力
3. 数据增强
- 图像翻转
- 随机裁剪
- 颜色变换
- 扩大样本量,减少过拟合
4. 更深更宽的网络
- 卷积通道数是LeNet的10倍
- 全连接层参数接近1GB
四、与LeNet的对比
| 特性 | LeNet-5 | AlexNet |
|---|---|---|
| 层数 | 7层 | 8层 |
| 深度 | 较浅 | 更深 |
| 激活函数 | Sigmoid | ReLU |
| 正则化 | 权重衰减 | Dropout |
| 数据增强 | 无 | 大量使用 |
| 输入尺寸 | 28×28 | 224×224 |
| 应用场景 | 小数据集 | 大规模数据集 |
五、PyTorch实现示例
import torch
from torch import nn
net = nn.Sequential(
# 第1层卷积
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),
# 第3-5层卷积
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),
# Flatten
nn.Flatten(),
# 全连接层
nn.Linear(6400, 4096), nn.ReLU(), nn.Dropout(p=0.5),
nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p=0.5),
nn.Linear(4096, 10) # 10类输出(Fashion-MNIST)
)
查看每层输出形状
X = torch.randn(1, 1, 224, 224)
for layer in net:
X = layer(X)
print(layer.__class__.__name__, 'output shape:\t', X.shape)
六、训练技巧
优化器配置
- 使用SGD优化器
- 学习率: 0.01
- 动量: 0.9
- 权重衰减: 0.0005
批量大小
- 批量大小: 128
- 受限于当时GPU显存(3GB)
学习率调度
- 当验证集错误率不再下降时,学习率除以10
- 训练过程中调整3次学习率
七、性能与影响
ImageNet竞赛成绩
- Top-5错误率: 15.3% (第二名26.2%)
- 巨大领先优势: 证明了深度学习的强大潜力
深远影响
- 开启深度学习革命: 激发了学术界和工业界对深度学习的兴趣
- GPU成为标配: GPU成为深度学习训练的必备硬件
- 启发后续研究: VGG、ResNet等模型都受其启发
- 迁移学习: 预训练的AlexNet成为迁移学习的基础模型
局限性
- 全连接层参数过多(占总参数90%)
- 对输入尺寸要求严格
- 双GPU并行训练设计复杂
八、总结
AlexNet的成功证明了三个关键要素:
- 大数据: ImageNet的规模让深度网络充分学习
- 深度: 更深的网络能够学习更复杂的特征
- 算力: GPU使得训练深度网络成为可能
虽然现代模型已经超越了AlexNet,但它在深度学习历史上的地位不可撼动。它开启了一个新时代,让研究者们相信:更深、更大的网络 + 更多数据 + 更强算力 = 更好的性能。