ImageNet Classification with Deep Convolutional Neural Networks 是我读 AlexNet 时的原始材料,另参考了这份中文翻译。这篇只记我真正想带走的几个设计,不再把论文内容逐段搬过来。

ReLU 为什么重要

论文用 CIFAR-10 做了一个很直观的对比:在达到相同训练误差时,使用 ReLU 的网络比使用 tanh 的网络快很多。f(x) = max(0, x) 的计算简单,正区间也不会像 sigmoid、tanh 那样进入饱和区。对当时更深、更大的网络来说,训练速度不是小优化,而是模型能不能训出来的问题。

现在 ReLU 已经很常见,容易让人低估这一步在 2012 年的意义。AlexNet 并不是第一个提出 ReLU 的工作,但它证明了 ReLU 放进大规模 CNN 后确实有效。

双 GPU 结构是硬件条件留下的痕迹

训练使用的 GTX 580 只有 3 GB 显存,作者把通道分到两块 GPU 上。大多数卷积层只读取同一块 GPU 的上一层特征图,第三个卷积层会读取两边的全部特征图,形成一次跨 GPU 信息交换。

所以结构图看起来像上下两个网络。它们并非独立模型,而是受显存和通信条件限制的模型并行方案。今天复现 AlexNet 时通常不会照搬这种分组方式,但理解它有助于读懂原图中的通道数和连接关系。

LRN:有效过,但没有留下来

局部响应归一化(Local Response Normalization,LRN)会在相邻通道的同一空间位置上制造竞争,让响应较大的值相对更突出。论文报告它能降低一些错误率。

LRN 计算公式

我第一次读时把 LRN 和今天常见的 Batch Normalization 混在了一起,其实两者不是一回事。LRN 没有减去批次均值,也不处理批次统计量。后来的网络很少再使用它,因此复现论文可以保留,搭建新模型则没有必要把它当成标准组件。

重叠池化

普通池化常让步长等于窗口尺寸,窗口之间互不重叠。AlexNet 使用 kernel_size = 3stride = 2 的最大池化,相邻窗口会共享一部分输入。论文中的实验显示,这样的设置让错误率略有下降。

“减少信息损失”可以作为直觉理解,但这不是严密解释。对我来说,更实用的记法是:池化窗口和步长是两个独立参数,不必总设成相同数值。

Dropout 放在全连接层

AlexNet 的前两个全连接层使用概率为 0.5 的 Dropout。训练时随机将部分激活置零,测试时使用完整网络并按实现规则缩放输出,以减少神经元之间的共同适应。代价是训练需要更多迭代。

这一点也能解释为什么 Dropout 没有被随意塞进所有卷积层。AlexNet 的参数主要集中在全连接层,过拟合压力也集中在那里。

读完后的判断

AlexNet 的影响来自一整套能落地的组合:ImageNet 规模的数据、GPU 训练、ReLU、数据增强和 Dropout。LRN、双 GPU 分组这些细节带着很强的时代背景;ReLU 和 Dropout 则真正进入了后续模型的常用工具箱。读论文时把这两类设计分开,比机械记住每一层更有用。

参考阅读: