共计 1638 个字符,预计需要花费 5 分钟才能阅读完成。
背景与痛点:传统计算机视觉的困局
在 AlexNet 出现前,计算机视觉领域长期依赖手工设计特征(如 SIFT、HOG)和浅层机器学习模型(如 SVM)。这些方法存在三个致命缺陷:

- 特征工程成本高 :每个新任务都需要重新设计特征提取流程,耗时长且泛化性差
- 层次化表达缺失 :传统方法无法自动构建从边缘→纹理→局部→整体的层次化特征表示
- 性能天花板明显 :在 ImageNet 等大数据集上,2011 年最佳模型的 top- 5 错误率仍高达 25.8%
AlexNet 的范式革命
2012 年 Hinton 团队提出的 AlexNet 在 ImageNet 竞赛中以 15.3% 的错误率碾压第二名,其创新设计至今仍是 CNN 的基石:
- ReLU 激活函数 :替代传统的 sigmoid/tanh,解决梯度消失问题
- GPU 并行训练 :首次使用双 GTX 580 GPU 实现大规模网络训练
- 局部响应归一化 (LRN):增强特征间的竞争性(后被 BN 层取代)
- 重叠池化 :3×3 池化窗口配合 stride=2,提升特征鲁棒性
- Dropout 正则化 :以 0.5 概率随机失活神经元,有效防治过拟合
PyTorch 实现核心结构
import torch
import torch.nn as nn
class AlexNet(nn.Module):
def __init__(self, num_classes=1000):
super().__init__()
self.features = nn.Sequential(
# 卷积层 1: 输入 3 通道, 输出 96, kernel_size=11, stride=4
nn.Conv2d(3, 96, 11, 4),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, 2), # kernel_size=3, stride=2
# 卷积层 2: 输入 96, 输出 256, kernel_size=5, padding=2
nn.Conv2d(96, 256, 5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, 2),
# 后续 3 个卷积层...
nn.Conv2d(256, 384, 3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 384, 3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 256, 3, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(3, 2)
)
self.classifier = nn.Sequential(nn.Dropout(p=0.5),
nn.Linear(256*6*6, 4096), # 原始输入图像尺寸 224x224
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
训练优化实战技巧
数据增强策略
- 随机裁剪 :从 256×256 图像中裁剪 224×224 区域
- 水平翻转 :以 0.5 概率镜像图像
- PCA 扰动 :对 RGB 通道进行主成分颜色偏移(现已少用)
学习率调度
scheduler = torch.optim.lr_scheduler.StepLR(
optimizer,
step_size=30, # 每 30epoch 衰减
gamma=0.1 # 学习率×0.1
)
现代 CV 模型中的传承
- VGG:延续小卷积核堆叠思想(3×3 卷积)
- ResNet:保留 ReLU 和最大池化基础结构
- EfficientNet:继承多尺度特征融合思路
开放思考
- 如何将 AlexNet 压缩到 1 /10 参数量而不损失精度?
- 在现代 Transformer 架构下,卷积操作是否仍有不可替代性?
- 数据增强策略如何适应自监督学习范式?
正文完
发表至: 未分类
近两天内
