跳到主要内容

现代卷积网络 — 2012 年的爆发,与它之后的所有套路

这一章讲四件事: AlexNet 为什么偏偏在 2012 年赢(数据与硬件,不是算法); 之后架构演进的四个关键发明(VGG 块、NiN、batch norm、ResNet); 残差连接背后那个深刻得不像工程的想法(函数类嵌套); 以及架构设计如何从手艺变成科学。 读完你会理解:今天看到的所有「大模型结构」,零件大多出自这七年(2012-2017)。

1. AlexNet:算法等了二十年,数据与硬件刚到货

LeNet 1989 年就成功了,为什么 CNN 又等了二十多年才统治视觉? 作者的答案是:缺的不是想法,是两味配料1

缺数据。 1990 年代的研究普遍用几百上千张图的小数据集, 深度模型没有进入「显著优于传统方法」的规模。 2009 年 ImageNet 发布:100 万张、1000 类、224×224 分辨率—— 用 Google 图片搜索预筛,再雇 Amazon Mechanical Turk 众包逐张确认2。 比当时主流数据集大一个数量级以上。

缺硬件。 深网训练是算力黑洞。 GPU 本为游戏而生,恰好擅长卷积需要的矩阵运算。 为什么 GPU 比 CPU 快这么多?作者的解释值得记住: CPU 核强但贵(分支预测、乱序执行吃掉大量芯片面积),一台机器最多几十核; GPU 是上千个简单小核——功耗随时钟频率平方增长, 所以「同样功耗,与其 1 个核跑 4 倍速,不如 16 个核跑 1/4 速」,净赚 4 倍3。 2012 年,Krizhevsky 和 Sutskever 用两块 GTX 580(各 3GB 显存) 写出了高效的 GPU 卷积实现(cuda-convnet),当了几年行业标准4

AlexNet 本身相对 LeNet 是「进化不是革命」: 8 层(5 卷积 + 3 全连接),第一层用 11×11 大核(ImageNet 的图比 MNIST 大八倍); ReLU 换掉 sigmoid(训练变得可行);dropout 管住两个 4096 维的全连接层; 大量数据增强(翻转、裁剪、变色)。 它赢得 2012 年 ImageNet 竞赛的宣言是: 学出来的特征第一次全面超越了手工设计的特征5

两个细节有后劲:两个 4096 全连接层要近 1GB 参数,是效率上的阿喀琉斯之踵 (后面 NiN 与全局平均池化专门治它); 而 4000 多万参数在 6 万张训练图上几乎不过拟合—— 训练与验证损失几乎重合,归功于 dropout 这批现代正则化手段6

2. 三个名字,各记一个想法

VGG(2014):块。 不再一层一层设计,而是设计「VGG 块」 (几个 3×3 卷积 + 一个池化),同构地堆。 小核堆叠替代大核:两个 3×3 的感受野等于一个 5×5,但非线性更多、参数更少。 VGG 是「深而窄」路线的代表,也是第一个「一族模型」(VGG-11/16/19)。

NiN(2013):1×1 卷积 + 全局平均池化。 1×1 卷积不看邻域、只在每个位置跨通道混合——等于逐位置的小 MLP, 给每个位置加了非线性。 更大的刀法在末尾:砍掉巨大的全连接层, 让最后一个卷积层的通道数直接等于类别数, 然后对每个通道做全局平均(整张特征图平均成一个数)当 logits—— 参数量暴降,当时令人惊讶的是精度不降7

GoogLeNet(2014):Inception 块。 一个位置该用多大的核看?答案是「都用」: 四条并行分支(1×1、1×1→3×3、1×1→5×5、池化→1×1), 各自提取不同尺度的信息,输出沿通道拼接; 1×1 在其中负责先降通道、控住成本。

3. batch normalization:一次 minibatch 统计量,三重收益

训练深网难,作者拆出三个原因,而 batch normalization(BN)意外地把三个一起治了8

病一:输入要标准化,层与层之间呢? 我们把输入特征标准化成零均值、单位方差,优化就好做得多—— 那网络内部每一层的输入,为什么不也这么办?

病二:中间层的尺度漂移。 训练过程中,某层的激活值可能是另一层的 100 倍, 学习率被迫互相迁就,收敛变慢。

病三:深网更容易过拟合,需要正则。

BN 的做法:每一层,用当前 minibatch 的均值和标准差,把输入标准化, 再学一个缩放 γ 和偏移 β 恢复自由度9:

BN(x) = γ ⊙ (x − μ̂_batch)/σ̂_batch + β

图说:μ̂、σ̂ 是当前这批数据的统计量;γ、β 是可学习参数。
层输入永远被拉回「零均值、单位方差」附近,再由 γ、β 微调。

三重收益:层输入被预处理(病一);尺度不再漂移,可以用更大的学习率(病二); 而最意外的是第三重——minibatch 统计量本身带噪声,这个噪声正好是正则化。 这解释了为什么 BN 在中等批大小(50-100)效果最好: 大批的统计量太稳、噪声不足;小批的噪声淹没信号10。 (批大小为 1 时 BN 直接失效——减去均值后每个样本都变成 0。)

两个形态要点:

  • 训练模式用 minibatch 统计量,预测模式用全数据集的稳定统计量—— 和 dropout「训练开、测试关」是同一个设计哲学:噪声只在训练时注入11;
  • 卷积层上,BN 按通道做:同一通道跨所有空间位置一起统计—— 这与平移不变假设相容(位置不重要)。

layer normalization(LN) 是它的姊妹:不跨样本,而是对单个样本的所有特征求均值方差。 不依赖批大小、训练和预测行为一致,且尺度不变(LN(αx)≈LN(x))12。 第 13 章会看到,Transformer 全家都用 LN 而不是 BN—— NLP(自然语言处理——让计算机处理人类语言的那一块任务——的缩写)的变长序列上,BN 经验上不如 LN。

4. ResNet:让每一层能轻易「什么都不做」

这是全章最深的一节。问题:加层一定让网络更强吗?

作者的答案是否定的,除非你刻意保证。考虑函数类的视角: 网络架构决定了一个可达函数类 F。 一个更大的架构 F′,如果不包含 F(嵌套), 那么 F′ 里的最优解完全可能比 F 里的更差—— 更大的类不一定离真相更近13只有嵌套的函数类(F₁⊆F₂⊆…),才能保证加层严格更强。

怎样保证嵌套?让新加的层能轻易学成恒等函数 f(x)=x—— 新层最差也就是把输入原样传下去,性能不会比不加时差。 ResNet(2015)的实现惊人地简单14:

普通块:学习 f(x)
残差块:学习 g(x) = f(x) − x,输出 = g(x) + x

x 经「残差连接」直接加到输出上

图说:想学成恒等(f(x)=x),普通块要碰巧拟合出恒等映射;
残差块只要把权重推到零(g(x)=0)——容易得多。

「简单函数」的归纳偏置,从 f(x)=0 换成了 f(x)=x15。 残差块内部:两个 3×3 卷积,各配 BN + ReLU; 输入经 shortcut 加到第二个卷积的输出上(通道数变化时用 1×1 卷积调整输入形状)。 靠着它,网络深度从十几层跳到 152 层,拿下 2015 年 ImageNet 冠军。

残差连接的影响远超 CNN:Transformer、图神经网络(把数据当成「节点+边」的图来处理的网络家族)、现代 RNN 全都用它—— 它是过去十年被复制得最多的结构元件16。 顺带记住两个延伸:ResNeXt 把卷积分成 g 组(分组卷积), 计算量和参数量都降为 1/g;DenseNet 把「加法」换成「拼接」—— 每层的输入是之前所有层输出的拼接,特征复用更彻底。

5. 从手艺到科学:设计空间

VGG、ResNet 都是「天才直觉」的产物。最后一节把架构设计本身变成研究对象17: 不再问「哪个网络最好」,而是定义一族网络的设计空间,优化这族网络的分布

AnyNet 模板统一了前面所有网络:stem(初始处理)→ body(4 个 stage, 每个 stage 分辨率减半)→ head(全局平均池化 + 分类)。 设计参数(各 stage 的深度、宽度、组数、瓶颈比)共 17 个, 暴力搜索不可行——但「优化分布」不需要逐个评测: 从分布中采样几百个网络训练,看分布的哪些区域出好网络,再收缩分布。 产物是 RegNet 一族与一组设计原则 (比如:瓶颈设计其实没必要,宽度该随深度缓慢增长)。 从「赌一个网络」到「优化一族网络的分布」,是这一章的收官。

6. 作者的判断与证据

书里给了证据的: ImageNet 规模与标注方式;GPU/CPU 的功耗-频率论证; BN 的定义与训练/预测双模式;残差块的恒等函数论证;ResNet-18 完整结构。

作者标为经验或未决的: BN 为什么有效——「noise in optimization helps」 是反复观察到的现象,理论刻画不全(他引了贝叶斯先验与惩罚两条解释线); 「batch 50-100 最好」是经验区间;设计空间的结论是分布统计,不保证单个网络最优。

判断(我们的,不是书里的): 这一章真正的主线不是「谁的准确率更高」, 而是每一代架构都在消除一个「梯度或信息流动的障碍」: ReLU 消除激活饱和,BN 消除尺度漂移,残差连接消除深度本身的障碍。 看任何一个新架构,先问「它消除了什么障碍」,比背结构有用。 如果错,会错在: 有些架构的收益来自别的机制(比如 DenseNet 的特征复用、 分组卷积的稀疏(大部分连接被剪掉、只留少数通道相通)归纳偏置),「消障碍」是一个有力但不完备的读法。

7. 边界与局限

  • AlexNet 的「双 GPU 分流」等历史设计已被硬件进步淘汰,书中做了简化;
  • BN 与小批量场景(RNN、在线学习)不合,这是 LN 等变体存在的理由;
  • 残差连接不是万能:超深或极窄的网络仍需配合初始化与归一化;
  • 设计空间方法需要数百次训练,小团队未必负担得起。

8. 可带走的

  1. 2012 年的爆发 = 数据(ImageNet)+ 硬件(GPU);算法 1989 年就在等它们;
  2. VGG = 块;NiN = 1×1 卷积 + 全局平均池化(砍掉全连接);GoogLeNet = 多尺度并行;
  3. BN:minibatch 统计量归一化层输入,预处理+稳尺度+噪声正则三合一;训练/预测双模式;
  4. LN:单样本内归一化,不依赖批大小——NLP/Transformer 的选择;
  5. 加层要保证函数类嵌套:让新层能轻易学成恒等——残差连接因此而生;
  6. 「简单 = f(x)=x」替代「简单 = f(x)=0」,是 ResNet 最深刻的观念转移;
  7. 分组卷积:成本与参数都降 g 倍;DenseNet:拼接替代相加;
  8. 架构设计的科学化:优化一族网络的分布,而不是赌单个网络。

9. 原文地图

主题原书章原文位置
ImageNet 与 Mechanical TurkAlexNettext/46-deep-convolutional-neural-networks-alexnet.txt:162(搜「1 million examples」) · text/46-deep-convolutional-neural-networks-alexnet.txt:167(搜「Mechanical Turk」)
GPU 功耗平方律、GTX 580AlexNettext/46-deep-convolutional-neural-networks-alexnet.txt:233(搜「quadratically」) · text/46-deep-convolutional-neural-networks-alexnet.txt:251(搜「GTX 580s」)
学习特征超越手工特征AlexNettext/46-deep-convolutional-neural-networks-alexnet.txt:264(搜「features obtained by learning」)
8 层、4096、几乎不过拟合AlexNettext/46-deep-convolutional-neural-networks-alexnet.txt:277(搜「eight layers」) · text/46-deep-convolutional-neural-networks-alexnet.txt:297(搜「4096 outputs」)
VGG 块、小核堆叠、VGG-11VGGtext/47-networks-using-blocks-vgg.txt:87(搜「VGG block consists」) · text/47-networks-using-blocks-vgg.txt:237(搜「VGG-11」)
1×1 卷积、全局平均池化NiNtext/48-network-in-network-nin.txt:30(搜「global average pooling」)
Inception 四条并行分支GoogLeNettext/49-multi-branch-networks-googlenet.txt:58(搜「four parallel branches」)
BN 三层动机、100 倍漂移Batch Normalizationtext/50-batch-normalization.txt:76(搜「100 times」)
BN 定义、批大小 1 失效Batch Normalizationtext/50-batch-normalization.txt:96(搜「size 1」)
50-100 的噪声甜区Batch Normalizationtext/50-batch-normalization.txt:154(搜「50--100」)
训练/预测双模式Batch Normalizationtext/50-batch-normalization.txt:176(搜「training mode」)
layer normalizationBatch Normalizationtext/50-batch-normalization.txt:240(搜「layer normalization」) · text/50-batch-normalization.txt:251(搜「scale independent」)
函数类嵌套、恒等函数ResNettext/51-residual-networks-resnet-and-resnext.txt:65(搜「nested function classes」) · text/51-residual-networks-resnet-and-resnext.txt:78(搜「identity function」)
残差映射、shortcutResNettext/51-residual-networks-resnet-and-resnext.txt:102(搜「residual mapping」) · text/51-residual-networks-resnet-and-resnext.txt:114(搜「shortcut connection」)
归纳偏置 f(x)=xResNettext/51-residual-networks-resnet-and-resnext.txt:692(搜「inductive bias」)
ResNeXt 分组卷积、成本降 g 倍ResNet and ResNeXttext/51-residual-networks-resnet-and-resnext.txt:517(搜「grouped convolution」)
DenseNet 拼接替代相加DenseNettext/52-densely-connected-networks-densenet.txt:64(搜「rather than added」)
设计空间Designing Convolution Network Architecturestext/53-designing-convolution-network-architectures.txt:9(搜「design space」)

Footnotes

  1. 出处:「Deep Convolutional Neural Networks (AlexNet)」第 162 段(text/46-deep-convolutional-neural-networks-alexnet.txt:162,搜「1 million examples」)之前的两小节标题即「Missing Ingredient: Data」与「Missing Ingredient: Hardware」。

  2. 出处:「Deep Convolutional Neural Networks (AlexNet)」第 167 段(text/46-deep-convolutional-neural-networks-alexnet.txt:167,搜「Mechanical Turk」)。

  3. 出处:「Deep Convolutional Neural Networks (AlexNet)」第 233 段(text/46-deep-convolutional-neural-networks-alexnet.txt:233,搜「quadratically」)。16 个核 × 1/4 速 = 4 倍性能;还有 GPU 核更简单(无投机执行)与内存带宽宽 10 倍两条。

  4. 出处:「Deep Convolutional Neural Networks (AlexNet)」第 251 段(text/46-deep-convolutional-neural-networks-alexnet.txt:251,搜「GTX 580s」)与第 253 段(text/46-deep-convolutional-neural-networks-alexnet.txt:253,搜「cuda-convnet」)。

  5. 出处:「Deep Convolutional Neural Networks (AlexNet)」第 264 段(text/46-deep-convolutional-neural-networks-alexnet.txt:264,搜「features obtained by learning」)。

  6. 出处:「Deep Convolutional Neural Networks (AlexNet)」第 297 段(text/46-deep-convolutional-neural-networks-alexnet.txt:297,搜「4096 outputs」)与讨论节(40M+ 参数 vs 6 万样本)。

  7. 出处:「Network in Network (NiN)」第 30 段(text/48-network-in-network-nin.txt:30,搜「global average pooling」)。

  8. 出处:「Batch Normalization」第 84 段(text/50-batch-normalization.txt:84,搜「three benefits」)——原文:「quite serendipitously, batch normalization conveys all three benefits: preprocessing, numerical stability, and regularization」。

  9. 出处:「Batch Normalization」第 108 段(text/50-batch-normalization.txt:108,搜「BN」)。

  10. 出处:「Batch Normalization」第 154 段(text/50-batch-normalization.txt:154,搜「50--100」)。引 Teye et al. 2018(贝叶斯先验)与 Luo et al. 2018(惩罚)。

  11. 出处:「Batch Normalization」第 176 段(text/50-batch-normalization.txt:176,搜「training mode」)。

  12. 出处:「Batch Normalization」第 240 段(text/50-batch-normalization.txt:240,搜「layer normalization」)与第 251 段(text/50-batch-normalization.txt:251,搜「scale independent」)。Ba, Kiros & Hinton 2016。

  13. 出处:「Residual Networks (ResNet) and ResNeXt」第 62 段(text/51-residual-networks-resnet-and-resnext.txt:62,搜「non-nested function classes」)与第 65 段(text/51-residual-networks-resnet-and-resnext.txt:65,搜「nested function classes」)。

  14. 出处:「Residual Networks (ResNet) and ResNeXt」第 102 段(text/51-residual-networks-resnet-and-resnext.txt:102,搜「residual mapping」)与第 78 段(text/51-residual-networks-resnet-and-resnext.txt:78,搜「identity function」)。

  15. 出处:「Residual Networks (ResNet) and ResNeXt」第 692 段(text/51-residual-networks-resnet-and-resnext.txt:692,搜「inductive bias」)。

  16. 出处:「Residual Networks (ResNet) and ResNeXt」第 88 段(text/51-residual-networks-resnet-and-resnext.txt:88,搜「highway networks」)。highway networks 在先(带门控旁路),ResNet 胜在参数化更简洁。

  17. 出处:「Designing Convolution Network Architectures」第 9 段(text/53-designing-convolution-network-architectures.txt:9,搜「design space」)。Radosavovic et al. 2020,产物 RegNetX/RegNetY。