Skip to content

引言

AlexNet 之后,整个计算机视觉领域陷入了一种狂热。如果说 2012 年之前,神经网络只是众多方法中的一种,那么 2012 年之后,它成了唯一的方向。

接下来的三年里,一场前所未有的架构军备竞赛爆发了。从 AlexNet 的 8 层,到 VGG 的 19 层,再到 ResNet 令人瞠目的 152 层。每一次突破都不是简单的堆叠,而是伴随着深刻的洞察和优雅的设计。

这场竞赛的核心驱动力只有一个问题:网络究竟能多深?


CNN 的核心组件回顾

卷积层

输入特征图        卷积核           输出特征图
(高 H × 宽 W × C)  (K × K × C)     (H' × W' × F)

每个卷积核在输入上滑动,计算局部区域的点积
输出通道数 = 卷积核数量 F
感受野 = 卷积核大小 K × K

关键参数:

参数说明典型值
卷积核大小每次看多大面积3×3, 5×5, 7×7
步长(Stride)每次移动多少像素1, 2
填充(Padding)边缘补零保持尺寸same, valid
输出通道数卷积核数量64, 128, 256, 512

池化层

最大池化(2×2,步长 2):

  1  3 │ 2  4          3  4
  5  6 │ 7  8    →     6  8
  ─────┼──────
  9  2 │ 3  1          9  7
  4  7 │ 8  5

每个 2×2 区域取最大值 → 特征图尺寸减半

架构演进:三年三级跳

VGG(2014)——简洁的力量

Oxford 大学 Visual Geometry Group 提出。VGG 的哲学很简单:如果 3×3 的卷积核有效,那就全部用 3×3。

AlexNet 的做法:使用 11×11, 5×5 等大卷积核

VGG 的做法:全部使用 3×3 卷积核

为什么 3×3 更好?
  两个 3×3 卷积 = 一个 5×5 的感受野
  三个 3×3 卷积 = 一个 7×7 的感受野

优势:
  ├── 参数更少:3×(3×3×C²) = 27C²  vs  7×7×C² = 49C²
  ├── 非线性更强:3 次 ReLU vs 1 次 ReLU
  └── 更容易优化

VGG 团队用一种近乎偏执的简洁性证明了:规则、统一、重复,往往比花哨的设计更有效。

VGG-16 架构:
  [Conv3-64] ×2 → Pool
  [Conv3-128] ×2 → Pool
  [Conv3-256] ×3 → Pool
  [Conv3-512] ×3 → Pool
  [Conv3-512] ×3 → Pool
  FC-4096 → FC-4096 → FC-1000

总参数量:约 1.38 亿(比 AlexNet 大一倍多)

GoogLeNet / Inception(2014)——宽度的探索

Google 团队提出,又称 Inception v1。团队提出了一个深刻的问题:为什么只往"深"走?为什么不也往"宽"走?

核心思想:与其只加深网络,不如同时在多个尺度上提取特征。

Inception 模块:

  输入
  ├── 1×1 卷积 ──────┐
  ├── 1×1 卷积 → 3×3 ─┤
  ├── 1×1 卷积 → 5×5 ─┼→ 通道拼接 → 输出
  └── 3×3 池化 → 1×1 ─┘

  多个尺度的特征并行提取,再合并

关键创新:1×1 卷积用于降维(减少通道数),大幅降低了计算量。

模型参数量Top-5 错误率
AlexNet6000 万15.3%
VGG-161.38 亿7.3%
GoogLeNet700 万6.7%

GoogLeNet 用不到 VGG 1/20 的参数量达到了更好的性能——效率很重要

ResNet(2015)——深度的突破与一个反直觉的发现

何H1984-
何恺明(Kaiming He)
前微软亚洲研究院研究员,现 MIT 教授
"如果你优化的目标映射接近恒等映射,那么学习一个残差(差值)比学习完整的映射要容易得多。"

2015 年,一个年轻的 researcher 在 Microsoft Research 做了一项实验,发现了一个反直觉的事实:

网络越深越好吗?不。56 层网络的训练误差竟然比 20 层网络还高。

这不是过拟合——连训练误差都更高。更深的网络反而更难优化了。

实验发现(反直觉):
  56 层网络的训练误差 > 20 层网络的训练误差

  不是过拟合(测试误差也更高)
  而是更深的网络更难优化!

这个发现让许多人困惑。但何恺明想到了一个精妙的解决方案——残差连接:

解决方案:残差连接(Residual Connection)

普通网络块:               残差块:
  输入 x                     输入 x
    │                          │
    ▼                          ├──→ [两层卷积] ──→ F(x)
  [两层卷积]                    │                    │
    │                          │                    ▼
    ▼                          └──────────────────→ (+) ──→ F(x) + x
  输出 H(x)                                          输出 H(x) = F(x) + x

  H(x) = F(x)              H(x) = F(x) + x
  直接学习完整的映射          只需学习「残差」F(x) = H(x) - x

  如果某一层的最优映射就是恒等映射(x → x),
  残差网络只需让 F(x) = 0,比学一个完整的恒等映射容易得多。

这个想法看似简单——只是在输出上加了一个输入的跳连——但它解决了深层网络训练的核心难题。梯度可以沿着"跳连"直接回流到前面的层,不会在深层网络中消失。

ResNet 的成就

ResNet 架构深度:152 层!(VGG 只有 16-19 层)

ILSVRC 2015 成绩:3.57% Top-5 错误率
(人类水平约 5.1%)
→ 首次超越人类!

从 AlexNet 到 ResNet,三年时间,错误率从 15.3% 降到 3.57%,机器在图像识别上第一次超越了人类。这是深度学习最辉煌的胜利之一。

架构演进总结

2012AlexNet:8 层,15.3%,用 GPU 训练的 CNN 首次碾压传统方法
2014VGG:19 层,7.3%,全部使用 3×3 小卷积核的简洁哲学
2014GoogLeNet:22 层,6.7%,Inception 模块实现多尺度特征提取,仅 700 万参数
2015ResNet:152 层,3.57%,残差连接突破深度瓶颈,首次超越人类!
AlexNet (2012)     8 层    15.3%

    ▼ 更深
VGG (2014)         19 层   7.3%

    ▼ 更宽
GoogLeNet (2014)   22 层   6.7%

    ▼ 残差连接
ResNet (2015)      152 层  3.57% ← 超越人类

迁移学习

核心思想

在大数据集(如 ImageNet)上训练好的模型,包含通用的视觉特征
可以将这些知识迁移到新的、数据量较小的任务上

方法:
  1. 取一个预训练好的模型(如 ResNet)
  2. 冻结前面的卷积层(保留通用特征)
  3. 只训练最后的全连接层(适配新任务)

效果:
  用几千张图片就能达到从零训练需要百万张图片才能达到的效果

为什么迁移学习有效?

CNN 各层学到的特征:
  浅层(前几层):边缘、纹理、颜色(通用特征)
  中层:形状、部件(如眼睛、轮子)
  深层:语义概念(如人脸、汽车)

→ 浅层特征对所有视觉任务都有用,不需要重新学习

本节小结

概念要点
VGG全部使用 3×3 小卷积核,简洁有效
GoogLeNetInception 模块,多尺度并行,参数效率高
ResNet何恺明的残差连接解决深层网络训练难题,152 层超越人类
架构趋势从深(VGG)→ 宽(GoogLeNet)→ 残差(ResNet),三年内超越人类
迁移学习预训练模型 + 微调,大幅减少所需数据量

思考题

  1. 为什么残差连接能解决「网络越深越难训练」的问题?用梯度流动的角度解释。
  2. 迁移学习在自然语言处理中有对应的做法吗?(提示:预训练语言模型)
  3. ResNet 的残差连接与 LSTM 中的「细胞状态直通车」有何相似之处?

延伸阅读

  • Simonyan & Zisserman, Very Deep Convolutional Networks for Large-Scale Image Recognition (VGG), 2014
  • Szegedy et al., Going Deeper with Convolutions (GoogLeNet), CVPR 2015
  • He et al., Deep Residual Learning for Image Recognition (ResNet), CVPR 2016