残差神经网络(ResNet)
残差神经网络(Residual Neural Network,简称 ResNet)是深度学习领域的里程碑式模型,由何凯明等人在 2015 年提出,成功解决了深层神经网络训练中的梯度消失 / 爆炸问题,使训练超深网络(如 152 层)成为可能。以下从核心原理、结构设计、优势与应用等方面进行详解。
一、核心问题:深层网络的训练困境
在 ResNet 提出前,随着网络层数增加,模型性能会先提升,然后迅速下降 —— 这种下降并非由过拟合导致,而是因为深层网络的梯度难以有效传递到浅层,导致浅层参数无法被充分训练(梯度消失 / 爆炸)。
ResNet 通过引入 “残差连接”(Residual Connection)解决了这一问题。
二、核心原理:残差连接与恒等映射
1. 传统网络的映射方式
传统深层网络中,每一层的目标是学习一个 “直接映射”(Direct Mapping):
设输入为x,经过多层非线性变换后,输出为H(x),即网络需要学习H(x)。
2. 残差网络的映射方式
ResNet 提出:不直接学习H(x),而是学习 “残差”F(x)=H(x)−x。
此时,原映射可表示为:H(x)=F(x)+x
其中,F(x)是残差函数(由若干卷积层 / 激活函数组成),x通过 “跳跃连接”(Skip Connection)直接与F(x)相加,形成最终输出。
3. 为什么残差连接有效?
- 梯度传递更顺畅:反向传播时,梯度可通过x直接传递到浅层(避免梯度消失)。例如,若F(x)=0,则H(x)=x,形成 “恒等映射”,网络可轻松学习到这种简单映射,再在此基础上优化残差。
- 简化学习目标:学习残差F(x)比直接学习H(x)更简单。例如,当目标映射接近恒等映射时,F(x)接近 0,网络只需微调即可,无需重新学习复杂的映射。
三、ResNet 的基本结构:残差块(Residual Block)
残差块是 ResNet 的基本单元,分为两种类型:
1. 基本残差块(Basic Block,用于 ResNet-18/34)
由 2 个卷积层组成,结构如下:x→Conv2d(64,3x3)→BN→ReLU→Conv2d(64,3x3)→BN→(+x)→ReLU
- 输入x先经过两个 3x3 卷积层(带批归一化 BN 和 ReLU 激活),得到残差F(x)。
- 若输入x与F(x)的维度相同(通道数、尺寸一致),则直接相加(恒等映射);若维度不同(如 stride > 1 或通道数变化),则需通过 1x1 卷积调整x的维度(称为 “投影捷径”,Projection Shortcut):x→Conv2d(out_channels,1x1,stride)→BN→(+F(x))
2. 瓶颈残差块(Bottleneck Block,用于 ResNet-50/101/152)
为减少计算量,用 3 个卷积层(1x1 + 3x3 + 1x1)组成,结构如下:x→Conv2d(C,1x1)→BN→ReLU→Conv2d(C,3x3)→BN→ReLU→Conv2d(4C,1x1)→BN→(+x′)→ReLU
- 1x1 卷积用于 “降维”(减少通道数),3x3 卷积用于提取特征,最后 1x1 卷积 “升维”(恢复通道数),显著降低计算量。
- 同样支持投影捷径(当维度不匹配时)。
四、完整 ResNet 的网络架构
ResNet 通过堆叠残差块形成深层网络,不同层数的 ResNet 结构如下表:
网络类型 | 残差块类型 | 卷积层配置(每个阶段的残差块数量) | 总层数 |
---|