你可以把深度学习网络想象成一条很长的“学习流水线”。输入一张图片,它就像一件产品,经过流水线上每个工人的处理(每个网络层),最终得出结果(比如认出这是猫还是狗)。
1. 核心问题:为什么需要 ResNet?
在 ResNet 出现之前,大家发现一个问题:网络不是越深越好。
当网络层数增加到几十层时,效果反而变差了,训练误差和测试误差都升高了。
这很奇怪,就像你给一个学生更多的学习资料和更长的学习时间,他反而考得更差了。
研究人员发现,这主要是因为“梯度消失/爆炸”和“网络退化”。
梯度消失/爆炸:可以理解为,信息在长长的流水线中传递时,越到后面越模糊(消失)或者被过度放大(爆炸),导致后面的工人无法有效学习。
(这个问题通过一些技术如 BatchNorm 已经部分解决)
“网络退化”是更关键的问题:即使梯度正常,增加层数后,网络连恒等映射都学不会了。也就是说,一个更深的网络,连一个较浅网络的效果都复制不了(让后面新增的层什么事都不干,直接输出前一层的输入,这不难吧?),但实际训练中它却学不到这个简单的“偷懒”策略。
2. ResNet 的革命性思想:跳跃连接
2015年,何恺明等人提出的ResNet用一个非常巧妙的办法解决了“网络退化”问题,让网络可以做到几百层、上千层而依然有效。
它的核心思想叫“跳跃连接”或“残差块”。
残差块的比喻:
想象一下,在流水线上,工人A处理完产品后交给工人B。传统网络要求B从头开始理解这个产品。但在ResNet中,我们让工人B只需要学习“从A那里拿到的产品”和“理想产品”之间的“差异”(残差)。
更妙的是,工人A处理完的产品会直接抄近道(跳跃连接)送到工人B的输出端,和B学习到的“差异”相加。
公式表达(核心精髓):输出 = 输入 + 学到的残差
这里的“输入”就是跳跃连接过来的信号。
这样做的好处是什么?
防止梯度消失:梯度可以通过跳跃连接这条“高速公路”毫无阻碍地传回浅层。
易于学习恒等映射:如果新增的层是没用的,那么它只需要把“残差”学习为0就好了(
输出 = 输入 + 0)。这比让一个传统网络层直接拟合输出 = 输入要容易得多!集成不同深度的网络:由于跳跃连接的存在,ResNet 可以看作许多不同深度子网络的集合体,训练一个 ResNet 相当于同时训练了多个网络,具有很好的稳定性。
正是这个简单的设计,让 ResNet 在 ImageNet 等大赛中夺冠,并成为至今最基础、最流行的网络骨架之一。
3. ResNet 家族成员演变
ResNet 就像一个家族,最初的核心思想被后辈们不断优化。
a) 初代目:ResNet (v1)
做了什么:提出了残差块的基本结构,构建了 ResNet-34, 50, 101, 152 等经典网络(数字代表层数)。
结构:使用两种基本的残差块。
基础块:用于较浅的网络(如 ResNet-34),包含两个 3x3 卷积。
瓶颈块:用于很深的网络(如 ResNet-50 及以上)。它的结构是1x1(降维) -> 3x3(卷积) -> 1x1(升维),目的是减少计算量。这是最常用的块。
b) 优化版:ResNet v2
做了什么:调整了残差块内部组件的顺序,让训练更稳定、效果更好。
核心调整:将激活函数和批归一化层的顺序,从
卷积 -> BN -> ReLU改为BN -> ReLU -> 卷积,并且将跳跃连接路径也进行BN处理。这被称为“预激活”结构,让信息流动更加顺畅。
c) 变宽版:Wide ResNet
思想:ResNet 的成功主要源于残差连接,而非单纯的深度。那么,减少深度、增加每一层的宽度(通道数)会怎样?
结果:更宽的 ResNet 通常比更深但更窄的 ResNet 效果更好,且因为并行度高,训练更快。这启发了后续很多“宽网络”的研究。
d) 进化版:ResNeXt
思想:在残差块中引入“分组卷积”和“基数”的概念。
比喻:传统的残差块像一个“大专家”,而 ResNeXt 块像一组(例如32个)小专家委员会。每个小专家处理输入数据的一小部分(分组卷积),最后把所有人的意见汇总。这种方式在增加模型容量的同时,计算量增加不多,效果显著提升。
核心结构:采用了“分割-转换-合并”的策略,是 ResNet 向更高效架构演进的重要一步。
e) 极致版:ResNet-D & ResNet in ResNet
这些是更细致的结构改进。例如ResNet-D把下采样跳跃连接路径上的 1x1 卷积的步长修改,并额外添加一个平均池化层,以保留更多信息,进一步提升精度。
f) 近期明星:ResNet 的“近亲” —— DenseNet
虽然不严格属于 ResNet 家族,但思想一脉相承且更进一步。
核心:每一层都接收前面所有层的输出作为输入,并把自己的输出传给后面所有层。建立了层与层之间极致密集的连接。
好处:特征复用性极强,参数更少,效果很好。但非常消耗内存。
总结与对比
| 网络 | 核心创新点 | 通俗理解 |
|---|---|---|
| ResNet (v1) | 跳跃连接(残差学习) | 工人B只学“差异”,学不会就输出0,保证不拖后腿。 |
| ResNet v2 | “预激活”结构 | 优化流水线工序,让信息流动更顺畅。 |
| Wide ResNet | 深度减,宽度增 | 少招几个工人,但给每个工人配更多助手(增加通道)。 |
| ResNeXt | 分组卷积,基数 | 把一个大专家,换成一个小专家委员会来投票决策。 |
| DenseNet | 密集连接 | 每个工人都能和之前所有工人交流,信息共享最大化。 |
ResNet 家族的意义:
它解决了深度网络的训练难题,其“跳跃连接”的思想已经成为现代深度学习架构的标准组件,出现在Transformer(如BERT、GPT)、生成模型等众多领域,是深度学习发展史上最重要的基石之一。
简化演变关系图
演变路径分析
第一代:基础创新(2015)
原始问题 → 跳跃连接 → 深度网络可训练 ↓ ResNet-18/34/50/101/152
第二代:结构优化(2016)
ResNet v1 → 预激活顺序优化 → ResNet v2 ↓ 宽度方向探索 → Wide ResNet ↓ 连接极致化 → DenseNet
第三代:架构进化(2017)
残差块 → 分组多路径 → ResNeXt ↓ 更强的特征提取能力
第四代:细节完善(2018)
基础结构 → 下采样优化 → ResNet-D ↓ 更高的精度表现
核心创新对比表
| 阶段 | 架构 | 核心改进 | 解决的问题 |
|---|---|---|---|
| 奠基 | ResNet v1 | 跳跃连接 | 深度网络退化 |
| 优化 | ResNet v2 | 预激活顺序 | 训练稳定性 |
| 拓展 | Wide ResNet | 宽度>深度 | 训练效率 |
| 进化 | ResNeXt | 多路径分组 | 特征多样性 |
| 精炼 | ResNet-D | 下采样优化 | 信息保留 |
| 极致 | DenseNet | 密集连接 | 特征复用 |
演变特点总结
从深度到宽度:早期追求层数深度,后期平衡宽度
从单一到多样:单一残差块→多路径并行
从粗略到精细:整体架构→局部细节优化
从专用到通用:图像识别→成为通用架构组件
这个演变过程体现了深度学习架构设计的渐进优化思路:先解决根本问题(跳跃连接),再优化细节(结构顺序),然后探索新维度(宽度/分组),最后完善局部(下采样),最终形成通用范式。