论文解读:ResNet - 深度残差网络用于图像识别
条评论ResNet ImageNet LSVRC-2015竞赛冠军,152层残差网络结构,将Top5错误率降到3.57,已经超过人眼水平,此后ImageNet大赛不再举办。解决了梯度消失的问题。
ResNet 是计算机视觉发展史上最关键的模型之一。它不只是把网络做得更深,而是第一次系统性地解决了一个困扰深层神经网络很久的问题:为什么网络堆得越来越深,训练反而会变差?
论文:Deep Residual Learning for Image Recognition
一、论文解决了什么问题
在 ResNet 之前,AlexNet 和 VGG 已经证明了深层卷积网络很有效,大家的一个自然想法就是:
既然深一点通常更强,那是不是继续往上堆层数就行?
但实际训练中出现了一个很反直觉的现象:
- 浅层网络能收敛;
- 更深的网络按理说表达能力更强;
- 可是把层数继续加上去,训练误差反而更高。
注意,这里不是单纯的过拟合,而是退化问题。
也就是说,更深模型连训练集都没学好,说明麻烦出在优化,而不只是泛化。
论文想回答的正是这个问题:
如何让非常深的神经网络更容易训练?
这是一个比“再提一点精度”更底层的问题,因为它关系到之后几乎所有深层视觉模型的可扩展性。
二、为什么“更深”会变成问题
从理论上讲,一个更深的网络至少可以模拟浅层网络。
最简单的想法是:新增的层如果学不到东西,那就学成恒等映射,输出和输入一样,总不至于比浅层更差。
但实际中,普通堆叠网络很难真的学成这个“理想恒等映射”。于是就会出现:
- 梯度传播困难;
- 参数优化困难;
- 训练过程不稳定;
- 深层网络反而比浅层网络误差更高。
论文用 plain network 和 residual network 的对比实验说明了这一点:
问题不在于“深层网络没有潜力”,而在于“普通参数化方式让这个潜力很难被优化出来”。
三、ResNet 的核心思想是什么
ResNet 的做法非常漂亮:
不直接学习目标映射 $H(x)$,而是去学习残差映射 $F(x)$,使得输出写成:
$$
H(x) = F(x) + x
$$
或者写成:
$$
y = F(x, {W_i}) + x
$$
其中:
| 符号 | 含义 |
|---|---|
| $x$ | 输入特征 |
| $F(x)$ | 残差分支要学习的变化量 |
| $x$ 的直接相加 | shortcut / identity mapping |
| $y$ | 残差块输出 |
这件事的直觉是:
- 如果最优映射接近恒等映射,那么直接去学 $H(x)$ 不容易;
- 但去学 “在输入基础上还需要补多少” 的 $F(x)$ 往往更容易;
- 即使残差分支暂时学不到什么,只要让 $F(x) \approx 0$,网络至少还能保留输入信息。
也就是说,ResNet 把深层网络的学习目标从“重新造一遍表示”变成了“在已有表示上做增量修正”。
四、shortcut connection 为什么这么重要
ResNet 里最经典的结构就是 shortcut connection。
它不经过复杂参数变换,直接把输入跨层送到后面去。
它的作用可以从两个角度理解:
1. 前向传播角度
原始信息可以更稳定地传下去,不必每一层都重新编码一次。
2. 反向传播角度
梯度可以沿着 shortcut 更直接地往前传,缓解深层网络中的梯度衰减和优化困难。
所以残差连接不是一个“装饰性跳线”,而是让超深网络可训练的关键机制。
五、残差块具体长什么样
ResNet 里主要有两类残差块。
1. Basic Block
用于 ResNet-18 和 ResNet-34。
基本形式是两层 3 x 3 卷积:
1 | 3x3 conv -> BN -> ReLU -> 3x3 conv -> BN |
这个结构相对简单,适合中等深度网络。
2. Bottleneck Block
用于 ResNet-50、101、152。
典型形式是:
$$
1 \times 1 \rightarrow 3 \times 3 \rightarrow 1 \times 1
$$
它的含义是:
- 第一个
1 x 1负责降维; - 中间
3 x 3负责主要特征提取; - 最后一个
1 x 1负责升维。
这样做能在保持表达能力的同时,显著控制计算量,所以 ResNet 才能堆到 50、101、152 层。
六、当输入输出维度不同怎么办
不是所有残差块都能直接做 x + F(x)。
如果通道数不同,或者特征图尺寸因为步长变化而不同,就必须先把 shortcut 调整到可相加的形状。
论文里主要有两种方式:
- identity shortcut + zero padding:尽量少引入参数;
- projection shortcut:使用
1 x 1卷积对 shortcut 做线性投影。
工程上,projection shortcut 更常见,因为它更直接,也更稳定。
七、网络整体结构怎么理解
以 ImageNet 版 ResNet 为例,整体通常是:
- 开头一个较大卷积层和池化层;
- 然后进入四个 stage;
- 每个 stage 内堆叠多个残差块;
- 最后全局平均池化,再接全连接分类器。
如果按表征演化理解,大致过程是:
- 低层提取边缘、纹理;
- 中层提取局部形状和部件;
- 高层提取语义级目标结构;
- 残差连接让这一过程在更深层数下仍然可优化。
所以 ResNet 并不是放弃层级特征,而是让更深的层级特征学习变得现实。
八、论文实验结果应该怎么看
1. Plain Net 变深会退化
作者先用没有残差连接的 plain net 做实验,发现 34 层 plain net 比 18 层 plain net 更难训练,误差更高。
这说明问题不是“深层无意义”,而是“普通结构训练不了”。
2. Residual Net 变深还能继续变好
换成残差网络后,34 层明显优于 18 层;更进一步,50、101、152 层继续提升。
这说明残差学习确实让更深网络的优化变得可行。
3. ImageNet 上的结果很强
ResNet-152 在 ImageNet 上取得了非常强的成绩,Top-5 error 达到 3.57%,成为 ILSVRC 2015 冠军模型。
更值得注意的是:
- 它比 VGG 深得多;
- 但复杂度没有线性爆炸;
- 而且迁移到检测、分割任务也非常有效。
这直接推动了 ResNet 成为后续视觉任务里最常见的 backbone 之一。
九、为什么说 ResNet 改变了整个视觉领域
ResNet 影响大的原因,不只是它拿了一个比赛冠军,而是它改变了大家设计网络的方式。
在它之前,研究者会担心:
- 网络太深会不会训不动;
- 再加层数是不是没有意义;
- 优化问题会不会先于表达能力成为瓶颈。
在它之后,大家开始有了一个很强的共识:
只要结构设计得当,深度本身仍然是很重要的增长维度。
这件事后来影响了很多分支:
- 检测模型里的 ResNet backbone;
- 分割模型里的 ResNet backbone;
- DenseNet、ResNeXt、Highway/Residual 变体;
- Transformer 里的残差连接设计。
可以说,残差思想已经从一个具体 CNN 结构,变成了深度模型的通用设计语言。
十、怎么更直观地理解“残差”
我更喜欢把残差块理解成一句话:
输入已经提供了一个基础答案,卷积分支只负责告诉模型“还差什么”。
这比“每一层都重新生成完整答案”要轻很多。
比如一张图前面几层已经学到了“像狗的轮廓”,后面某个残差块可能不需要推翻前面结论,只需要补充:
- 耳朵朝向;
- 毛发纹理;
- 鼻口局部结构;
- 背景对类别判断的辅助信息。
这样网络会更稳定,也更符合“逐步 refinement”的直觉。
十一、这篇论文也有容易被误解的地方
1. ResNet 不是只解决梯度消失
很多资料会简单说它“解决了梯度消失”。这不算错,但不完整。
论文最强调的是退化问题和优化难度,梯度传递只是其中一个方面。
2. 残差连接不意味着越深越一定更好
ResNet 让深层训练变得可行,但不代表层数可以无限堆。
层数、宽度、计算量、数据规模、正则化方式都仍然重要。
3. shortcut 不是魔法
它不会自动让模型无敌,只是显著降低了深层网络优化的门槛。
十二、这篇论文的局限
从今天回头看,ResNet 当然也有时代局限:
- 它仍然是纯卷积结构,对全局关系建模不如后来的注意力模型直接;
- 当分辨率和任务变复杂时,单一 backbone 还需要配合 FPN、dilation、attention 等增强模块;
- 更深不一定更省算力,工程部署仍要考虑效率。
但这些都不影响它的里程碑地位。因为它解决的是“能不能把网络稳定做深”这个最基础的问题。
十三、和 3D ResNet 放在一起看会更清楚
2D ResNet 解决的是:
图像任务里,超深卷积网络怎样训练。
3D ResNet 解决的是:
视频任务里,超深时空卷积网络在大规模数据上怎样训练和迁移。
所以 3D ResNet 其实是在继承这篇论文的方法论。
没有 2D ResNet 的成功经验,后面视频领域那条“更深 + 预训练 + 迁移”的路线也不会这么顺。
十四、简短总结
如果要把 ResNet 的贡献压缩成一句话:
它把深层神经网络从“理论上可以更强”变成了“实践上真的能训出来”。
这就是为什么直到今天,哪怕 Transformer 已经很成熟,残差连接仍然是现代深度网络最基础、最核心的结构之一。