引言
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 错误率 |
|---|---|---|
| AlexNet | 6000 万 | 15.3% |
| VGG-16 | 1.38 亿 | 7.3% |
| GoogLeNet | 700 万 | 6.7% |
GoogLeNet 用不到 VGG 1/20 的参数量达到了更好的性能——效率很重要。
ResNet(2015)——深度的突破与一个反直觉的发现
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%,机器在图像识别上第一次超越了人类。这是深度学习最辉煌的胜利之一。
架构演进总结
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 小卷积核,简洁有效 |
| GoogLeNet | Inception 模块,多尺度并行,参数效率高 |
| ResNet | 何恺明的残差连接解决深层网络训练难题,152 层超越人类 |
| 架构趋势 | 从深(VGG)→ 宽(GoogLeNet)→ 残差(ResNet),三年内超越人类 |
| 迁移学习 | 预训练模型 + 微调,大幅减少所需数据量 |
思考题
- 为什么残差连接能解决「网络越深越难训练」的问题?用梯度流动的角度解释。
- 迁移学习在自然语言处理中有对应的做法吗?(提示:预训练语言模型)
- 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