如果你听过”深度学习”,一定听过这个名字:ResNet。
它是深度学习史上被引用最多的论文之一,作者是华人科学家何恺明。
今天用最通俗的语言,带你理解这篇改变 AI 历史的论文。
一、一个反直觉的问题
1.1 网络越深越好?
直觉上,神经网络越深,能力越强。
就像盖楼一样——
3 层楼能看多远?100 层楼能看到整个城市。
所以大家拼命堆层数:
| 年份 | 模型 | 层数 | ImageNet 错误率 |
|---|---|---|---|
| 2012 | AlexNet | 8 层 | 16.4% |
| 2014 | VGGNet | 19 层 | 7.3% |
| 2014 | GoogLeNet | 22 层 | 6.7% |
看起来层数越多,效果越好。
但是,当大家继续加深网络时,奇怪的事情发生了。
1.2 退化问题
何恺明团队发现了一个诡异的现象:
56 层网络的训练误差,比 20 层网络还高。
注意——这不是过拟合(测试集差但训练集好),而是训练集上就更差。
按理说,56 层网络至少可以把前 20 层学成和 20 层网络一样,后面 36 层什么都不做(恒等映射),结果应该不比20 层差才对。
但实际训练中,网络连”什么都不做”都学不会。
这就像你给了一个学生更多的时间考试,他反而考得更差了——不是因为他不会,而是因为他连”保持原来的答案”都做不到。
二、ResNet 的核心思想
2.1 残差学习
何恺明提出了一个天才的想法:
既然网络学不会”什么都不做”,那我直接帮它接一条捷径。
传统网络学习的是:
输入 x → 网络 → 输出 H(x)
ResNet 学习的是:
输入 x → 网络 → 输出 F(x)
最终结果 = F(x) + x
区别在哪?
- 传统网络:网络需要直接学会目标输出
H(x) - ResNet:网络只需要学会差值
F(x) = H(x) - x,也就是”在输入基础上改了多少”
这个差值就叫残差(Residual)——ResNet 的名字就是这么来的。
2.2 为什么这样做有效?
举个例子:
你要从北京去上海,传统方式是让你直接画出整条路线。
ResNet 的方式是:告诉你”你现在在北京”,只需要画出从北京到上海的偏移量。
哪个更容易?
显然是后者。
再举一个更直观的例子:
老师让你背诵整篇课文(传统网络)
老师让你在已有课文上修改几个错别字(ResNet)
修改几个错别字,比从零背诵一篇课文容易太多了。
2.3 跳跃连接
那条”捷径”有个专业名字:跳跃连接(Skip Connection)。
# 传统网络
output = layer(x)
# ResNet
output = layer(x) + x # 直接把输入加回来
就这么简单——把输入直接加到输出上。
这个”加回来”的操作,让梯度可以直接流回去,解决了深层网络的训练难题。
三、ResNet 的架构
3.1 残差块(Residual Block)
ResNet 的基本单元是残差块:
输入 x
│
├──────────────────┐
│ │
▼ │
[Conv → BN → ReLU] │
│ │
▼ │
[Conv → BN] │
│ │
▼ │
[+] ←───────────────┘
│
▼
[ReLU]
│
▼
输出
关键点:
- 两层卷积:学习残差
F(x) - 跳跃连接:把
x直接加到F(x)上 - ReLU 激活:加完之后再过一次激活函数
3.2 两种残差块
何恺明论文里设计了两种残差块:
| 类型 | 结构 | 适用场景 |
|---|---|---|
| Basic Block | 两层 3×3 卷积 | ResNet-18, ResNet-34 |
| Bottleneck Block | 1×1 → 3×3 → 1×1 卷积 | ResNet-50, ResNet-101, ResNet-152 |
Bottleneck 的设计非常巧妙:
输入 256 维
│
▼
[1×1 Conv] → 降维到 64 维 ← 先压缩
│
▼
[3×3 Conv] → 64 维 ← 再做主要计算
│
▼
[1×1 Conv] → 升维到 256 维 ← 最后还原
先降维再升维,计算量大幅减少,同时保持了表达能力。
3.3 网络整体架构
完整的 ResNet 是这样组成的:
输入图像 (224×224)
│
▼
[7×7 Conv, stride=2] → [MaxPool]
│
▼
[Stage 1] × 3 个残差块 → 64 通道
│
▼
[Stage 2] × 4 个残差块 → 128 通道
│
▼
[Stage 3] × 6 个残差块 → 256 通道
│
▼
[Stage 4] × 3 个残差块 → 512 通道
│
▼
[Global Average Pool]
│
▼
[Fully Connected] → 1000 类
不同深度的 ResNet 配置:
| 模型 | 层数 | Stage 1 | Stage 2 | Stage 3 | Stage 4 | 参数量 |
|---|---|---|---|---|---|---|
| ResNet-18 | 18 | 2 | 2 | 2 | 2 | 11.7M |
| ResNet-34 | 34 | 3 | 4 | 6 | 3 | 21.8M |
| ResNet-50 | 50 | 3 | 4 | 6 | 3 | 25.6M |
| ResNet-101 | 101 | 3 | 4 | 23 | 3 | 44.5M |
| ResNet-152 | 152 | 3 | 8 | 36 | 3 | 60.2M |
四、为什么 ResNet 这么强?
4.1 解决了梯度消失
深度网络最大的敌人是梯度消失——信号经过太多层后,梯度趋近于零,网络无法学习。
跳跃连接让梯度可以直接”跳”回去:
传统网络:梯度必须经过每一层 → 越来越小 → 消失
ResNet:梯度可以通过捷径直接流回 → 不会消失
就像高速公路——如果每个出口都要经过收费站(层层传递),车流会越来越慢。但如果有一条免费快速通道(跳跃连接),车流就能快速通过。
4.2 集成学习视角
有研究发现,ResNet 本质上是一个隐式的集成学习。
一个 ResNet-152 可以看作是 2^152 条路径的集成——每条残差块都可以选择”走捷径”或”走卷积层”。
就像一个由很多专家组成的委员会,每个专家投票,最终取平均——结果自然比单个专家更可靠。
4.3 恒等映射更容易
当网络不需要额外学习时,最优解就是让 F(x) = 0,即输出等于输入。
对于网络来说,让权重趋近于零比学习一个恒等映射容易得多。
传统网络:请学会”什么都不变” → 很难
ResNet:请学会”什么都不做”(F(x)=0)→ 很容易
五、ResNet 的影响
5.1 打破纪录
ResNet 在 2015 年 ImageNet 竞赛中取得了3.57% 的错误率,首次超越人类水平(5.1%)。
这是一个里程碑式的时刻——机器在图像识别上超过了人类。
5.2 无处不在
ResNet 的跳跃连接思想被广泛应用:
| 应用 | 说明 |
|---|---|
| 目标检测 | Faster R-CNN, YOLO 都用 ResNet 作为骨干网络 |
| 语义分割 | U-Net, DeepLab 用跳跃连接融合多尺度特征 |
| 风格迁移 | 深层特征提取 |
| GAN | 生成器和判别器都用残差块 |
| NLP | Transformer 的 Add & Norm 就是残差连接 |
| 语音识别 | 深层声学模型 |
5.3 何恺明的传奇
何恺明的履历堪称传奇:
| 成就 | 说明 |
|---|---|
| 2009 | ImageNet 竞赛冠军(当时还是实习生) |
| 2015 | ResNet,深度学习史上被引用最多的论文之一 |
| 2015 | Faster R-CNN,目标检测的里程碑 |
| 2017 | Mask R-CNN,实例分割的里程碑 |
| 2023 | MAE(Masked Autoencoders),自监督学习新范式 |
他本科毕业于清华大学,博士毕业于香港中文大学,曾任 Meta(Facebook)AI 研究院首席科学家,现在是 MIT 教授。
六、动手实践
想亲自体验 ResNet?推荐这些资源:
| 资源 | 说明 |
|---|---|
| torchvision.models | PyTorch 官方预训练模型,一行代码加载 |
| ResNet 论文原文 | ”Deep Residual Learning for Image Recognition” |
| d2l.ai ResNet 章节 | 动手学深度学习,带代码 |
| 何恺明 MIT 主页 | 论文列表和最新研究 |
用 PyTorch 加载预训练 ResNet 只需要一行代码:
import torchvision.models as models
# 加载预训练 ResNet-50
model = models.resnet50(pretrained=True)
# 用它提取特征
features = model(image)
七、总结
ResNet 的核心要点:
- 退化问题:网络越深,训练误差反而越高
- 残差学习:学习差值
F(x) = H(x) - x,而不是直接学H(x) - 跳跃连接:把输入直接加到输出,让梯度可以快速流回
- 恒等映射:网络不需要时,轻松”什么都不做”
- 深远影响:跳跃连接成为深度学习的标配
记住这句话:
ResNet 的本质是让网络学会”改了多少”,而不是”变成什么”。
就像你不需要从零开始写一篇文章,只需要在已有草稿上修改几处——这就是残差学习的精髓。
参考文献:
- He et al., “Deep Residual Learning for Image Recognition”, CVPR 2016
- He et al., “Identity Mappings in Deep Residual Networks”, ECCV 2016
- Veit et al., “Residual Networks Behave Like Ensembles of Relatively Shallow Networks”, NeurIPS 2016