以下内容由AI辅助生成
1. 引言:一个看似显然却失败的直觉
在深度学习中,一个最自然的想法是:
神经网络越深,模型的表达能力越强,性能应该越好。
然而,大量实验表明,当网络深度不断增加时(例如从几十层到上百层),模型往往会出现一个反直觉现象:
- 训练误差上升
- 即使在训练集上,也无法达到较浅网络的性能
这种现象被称为深层网络退化问题(Degradation Problem)。
重要的是,这并不是由于过拟合,也不仅仅是梯度消失或爆炸,而是一个深层模型在优化层面“学不动”的问题。
2. 问题的本质:为什么深层网络会“退化”?
从理论上看,一个更深的网络至少应该能够模拟一个浅层网络:
- 只要新增的层学会恒等映射(Identity Mapping)
- 网络性能就不应下降
但实践中发现:
普通神经网络并不擅长学习“恒等变换”
也就是说,让几层网络保持输出与输入一致(y = x),在数值优化上并不容易。
这揭示了退化问题的本质:
- 不是模型不够强
- 而是优化目标本身不友好
3. 残差连接的直观思想
残差连接的核心思想可以用一个非常生活化的比喻来理解。
传统网络:
从零开始学习一个完整映射
残差思想:
在原有输入的基础上,只学习“需要修正的部分”
换句话说,与其直接学习目标函数
4. 形式化定义:什么是残差连接?
在数学上,残差学习通过一次重参数化来实现。
传统形式:
残差形式:
其中:
:输入 :残差函数 - 从
直接加到输出的通路称为 残差连接(Residual / Skip Connection)
5. 为什么残差连接有效?
5.1 恒等映射变得容易
如果某些层对任务无贡献:
- 普通网络:很难逼近恒等映射
- 残差网络:只需令
这使得:
“零修正”成为一种稳定解
从而保证深层网络至少不会比浅层网络更差。
5.2 梯度传播更顺畅
对于残差结构:
反向传播时:
这个恒定的 “+1”:
- 为梯度提供了一条直接通路
- 显著缓解了梯度消失问题
5.3 优化过程更友好
经验和理论分析表明:
- 残差结构使损失函数的优化景观更加平滑
- 梯度下降类方法更容易收敛
这是极深网络得以成功训练的关键。
6. 一个重要澄清:是不是每一层都应该用残差?
答案是否定的。
现代神经网络并不是对每一层使用残差,而是:
在“模块(Block)级别”使用残差连接
原因在于:
- 层层残差会削弱非线性表达能力
- 有些层的目标是“改变表示空间”,并不适合残差
7. 残差连接在经典模型中的使用
7.1 ResNet
ResNet 的基本单元不是单层,而是一个残差块:
- 2~3 层卷积 + 非线性
- 外部包裹一条 shortcut
残差连接作用于整个模块,而非每一层。
7.2 Transformer
在 Transformer 中:
- Attention 子层
- Feed-Forward 子层
每一个子层外部都配有残差连接,但子层内部仍然是传统结构。
这说明:
残差是一种结构设计原则,而不是具体算子。
8. 什么时候不适合使用残差连接?
通常不使用残差的地方包括:
- 输入嵌入层
- 下采样或维度剧烈变化的层
- 输出层(分类 / 回归头)
- 非常浅的网络
残差更适合用于:
在同一表示空间内逐步精炼特征
9. 总结
残差连接的核心价值在于:
- 重参数化学习目标,使优化更容易
- 为梯度提供稳定通路
- 保证深层模型不发生性能退化
因此,现代深度学习模型的设计范式可以概括为:
用传统网络层构建表示,用残差连接保证这些表示能被有效优化。
这也是为什么,从 ResNet 到 Transformer,残差连接已经成为深度模型的基础组件。