返回文章列表
技术

ResNet 小白讲解:为什么网络越深反而越差?何恺明用一个"抄近道"解决了

用最通俗的语言讲解深度学习史上被引用最多的论文——ResNet,理解残差连接如何让神经网络突破深度极限。

ResNet 深度学习 计算机视觉 何恺明
目录

如果你听过”深度学习”,一定听过这个名字:ResNet

它是深度学习史上被引用最多的论文之一,作者是华人科学家何恺明

今天用最通俗的语言,带你理解这篇改变 AI 历史的论文。

一、一个反直觉的问题

1.1 网络越深越好?

直觉上,神经网络越深,能力越强。

就像盖楼一样——

3 层楼能看多远?100 层楼能看到整个城市。

所以大家拼命堆层数:

年份模型层数ImageNet 错误率
2012AlexNet8 层16.4%
2014VGGNet19 层7.3%
2014GoogLeNet22 层6.7%

看起来层数越多,效果越好。

但是,当大家继续加深网络时,奇怪的事情发生了。

1.2 退化问题

何恺明团队发现了一个诡异的现象:

56 层网络的训练误差,比 20 层网络还高

ResNet 架构与退化问题

注意——这不是过拟合(测试集差但训练集好),而是训练集上就更差

按理说,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]


输出

关键点:

  1. 两层卷积:学习残差 F(x)
  2. 跳跃连接:把 x 直接加到 F(x)
  3. ReLU 激活:加完之后再过一次激活函数

3.2 两种残差块

何恺明论文里设计了两种残差块:

两种残差块对比

类型结构适用场景
Basic Block两层 3×3 卷积ResNet-18, ResNet-34
Bottleneck Block1×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 是这样组成的:

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 1Stage 2Stage 3Stage 4参数量
ResNet-1818222211.7M
ResNet-3434346321.8M
ResNet-5050346325.6M
ResNet-1011013423344.5M
ResNet-1521523836360.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%)

ResNet 在 ImageNet 上的表现

这是一个里程碑式的时刻——机器在图像识别上超过了人类。

5.2 无处不在

ResNet 的跳跃连接思想被广泛应用:

应用说明
目标检测Faster R-CNN, YOLO 都用 ResNet 作为骨干网络
语义分割U-Net, DeepLab 用跳跃连接融合多尺度特征
风格迁移深层特征提取
GAN生成器和判别器都用残差块
NLPTransformer 的 Add & Norm 就是残差连接
语音识别深层声学模型

5.3 何恺明的传奇

何恺明的履历堪称传奇:

成就说明
2009ImageNet 竞赛冠军(当时还是实习生)
2015ResNet,深度学习史上被引用最多的论文之一
2015Faster R-CNN,目标检测的里程碑
2017Mask R-CNN,实例分割的里程碑
2023MAE(Masked Autoencoders),自监督学习新范式

他本科毕业于清华大学,博士毕业于香港中文大学,曾任 Meta(Facebook)AI 研究院首席科学家,现在是 MIT 教授。

六、动手实践

想亲自体验 ResNet?推荐这些资源:

资源说明
torchvision.modelsPyTorch 官方预训练模型,一行代码加载
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 核心要点总结图

ResNet 的核心要点:

  1. 退化问题:网络越深,训练误差反而越高
  2. 残差学习:学习差值 F(x) = H(x) - x,而不是直接学 H(x)
  3. 跳跃连接:把输入直接加到输出,让梯度可以快速流回
  4. 恒等映射:网络不需要时,轻松”什么都不做”
  5. 深远影响:跳跃连接成为深度学习的标配

记住这句话:

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
所有文章

评论