共计 2273 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍:计算机视觉的前 AlexNet 时代
在 AlexNet 问世之前(2012 年),计算机视觉领域主要依赖手工设计特征(如 SIFT、HOG)配合浅层机器学习模型(如 SVM)。这种传统方法存在两大瓶颈:
- 特征表达有限 :手工特征难以捕捉图像中的层次化信息,尤其对复杂纹理、光照变化的适应性差
- 泛化能力不足 :特征工程高度依赖领域知识,不同任务需要重新设计特征提取流程
网络架构解析:AlexNet 的五大创新

- ReLU 激活函数 :
- 传统使用 tanh/sigmoid 存在梯度消失问题
- ReLU($f(x)=max(0,x)$)计算简单且缓解梯度消失
-
实验表明训练速度比 tanh 快 6 倍
-
局部响应归一化(LRN):
- 对局部神经元活动进行抑制,增强泛化能力
- 公式:$b_{x,y}^i = a_{x,y}^i / (k+α\sum_{j=max(0,i-n/2)}^{min(N-1,i+n/2)}(a_{x,y}^j)^2)^β$
-
现代网络更常用 BatchNorm 替代
-
重叠池化 :
- 传统池化 stride 等于 kernel size
-
AlexNet 采用 3×3 核,stride=2,提升特征丰富性
-
双 GPU 并行 :
- 受当时硬件限制,网络切分到两块 GTX 580 GPU
-
现代实现可忽略此设计
-
分层结构 :
- 5 个卷积层 + 3 个全连接层的深度架构
- 首次证明深度对视觉任务的关键作用
训练技巧:稳定训练深度网络的秘密
- Dropout:
- 在全连接层以 0.5 概率随机丢弃神经元
-
防止神经元过度协同,类似模型集成效果
-
数据增强 :
- 随机裁剪(256→224)、水平翻转
-
PCA 颜色扰动(对 RGB 通道进行主成分扰动)
-
动量梯度下降 :
- 使用动量系数 0.9 加速收敛
- 权重衰减(L2 正则)系数 0.0005
PyTorch 实现简化版 AlexNet
import torch
import torch.nn as nn
class AlexNet(nn.Module):
def __init__(self, num_classes=10):
super().__init__()
self.features = nn.Sequential(
# 卷积层 1: 输入 3 通道, 输出 96, kernel_size=11, stride=4
nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
# 卷积层 2: 输入 96, 输出 256, kernel_size=5
nn.Conv2d(96, 256, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
# 连续 3 个卷积层
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(p=0.5),
nn.Linear(256*6*6, 4096), # 原论文输入是 256*6*6
nn.ReLU(inplace=True),
nn.Dropout(p=0.5),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, num_classes),
)
def forward(self, x):
x = self.features(x)
x = torch.flatten(x, 1)
x = self.classifier(x)
return x
性能对比:CIFAR-10 实验结果
| 模型 | 准确率 | 训练时间 (epoch) |
|---|---|---|
| 传统 SVM | 62.3% | – |
| 浅层 CNN | 78.1% | 25min |
| AlexNet | 85.6% | 48min |
| (数据增强版) | 88.2% | 55min |
现代演进:AlexNet 的遗产
- ResNet:
- 延续了卷积堆叠思想,加入残差连接解决梯度消失
-
证明网络深度可以远超 AlexNet 的 8 层
-
EfficientNet:
- 继承复合缩放思想(AlexNet 已尝试调整卷积核尺寸)
-
系统化平衡深度 / 宽度 / 分辨率
-
Attention 机制 :
- 类似 LRN 的局部交互思想发展为自注意力
- 如 Vision Transformer 中的 patch 处理
避坑指南:训练深度 CNN 的常见问题
- 梯度消失 / 爆炸 :
- 解决方案:使用 BatchNorm 层、残差连接、梯度裁剪
-
案例:训练初期 loss 不变→检查初始化方式
-
过拟合 :
- 解决方案:增强数据增强、早停、增加 Dropout 率
-
案例:训练准确 95% 但验证只有 70%→添加 MixUp 增强
-
显存不足 :
- 解决方案:减小 batch size、使用梯度累积
- 案例:RTX 3060 跑不动 224×224 输入→尝试 192×192
思考题
如果要改进 AlexNet 处理更高分辨率图像(如 512×512),可以从以下几个方向调整结构:
- 增加卷积层数(如从 5 层到 7 层)以扩大感受野
- 在底层使用更大的 stride(如 stride=4)减少计算量
- 引入空洞卷积(dilated convolution)保持分辨率
- 使用步长卷积(strided conv)替代池化层
- 添加注意力模块处理长距离依赖关系
正文完
