1. 背景与动机

在 ResNet 提出之前,人们发现简单堆叠更多卷积层并不能让网络性能持续提升。当网络深度增加到一定程度后,主要面临两个问题:

梯度消失/爆炸:在反向传播过程中,梯度会随着层数加深而指数级衰减或增长,导致浅层参数几乎无法更新。

退化问题:更出乎意料的是,即使解决了梯度消失,深度网络在训练集上的误差不但不降,反而升高。这不是过拟合,而是网络在优化上变得更加困难,难以学到理想的映射。

ResNet 的核心思路是通过残差学习来克服退化问题,同时结合批量规范化(BN)缓解梯度消失,从而让极深网络的训练成为可能。

2. ResNet 的整体设计风格

ResNet 在设计上借鉴了 VGGNet 的简洁理念:

大量使用 3×3 卷积核

引入批量规范化层,加速训练并稳定梯度。

3. 残差块结构

残差块是 ResNet 的基本单元,其标准结构(以 BasicBlock 为例)如下:

具体流程:

输入经过 3×3 卷积,然后经过 BN 和 ReLU 激活;

再经过第二个 3×3 卷积 和 BN(此时还不激活);

在第二个 ReLU 之前,将当前结果与跳跃连接过来的原始输入逐元素相加;

相加后的结果再通过 ReLU 得到最终输出。

跳跃连接的维度匹配

相加操作要求两个张量的空间尺寸(高、宽)和通道数完全一致

当两者的通道数不同,或者特征图尺寸需要缩减(如步长不为 1)时,捷径连接上会加入一个 1×1 卷积,用合适的步长和输出通道数来调整输入,使其与主路径的输出维度匹配,然后再相加。

当网络较深时,靠近数据的网络层通过一系列的链式法则梯度计算后取得的梯度可能过小导致学习效果变差,加入残差块后,由于会把输入直接加到输出,进行梯度计算时也会在一定程度上缓解这一问题,促使更深层的网络模型成为可能。

4. 批量规范化层

BN 以每个 mini-batch 为单位对数据进行归一化,步骤为:

计算批次的均值 μ 与方差 σ²;

对输入进行归一化:
 

引入可学习的尺度参数 γ 和偏移参数 β,进行线性变换:

这样做的好处:

稳定训练:BN 使中间层的数据分布保持在较稳定的范围,缓解了训练过程中由于参数更新导致的数据分布剧烈变化(内部协变量偏移);

缓解梯度消失:归一化后数据不会掉入激活函数的饱和区,梯度能更有效地回传;

恢复表达能力:如果仅做归一化,数据会集中在 0 附近,对于 Sigmoid 这类激活函数,0 附近的梯度虽然不小但非线性弱;通过让网络自己学习 γ 和 β,可以将数据平移到非线性更强的区域,从而保持网络的表达能力。

z

5. 总结

残差块的跳跃连接让网络可以容易地学习恒等映射,解决了深度网络中的退化问题,使数百甚至上千层的网络成为可能;

批量规范化有效对抗梯度消失、加速收敛,并降低对初始化的敏感性;

两者的结合,共同成就了 ResNet 在深度学习和计算机视觉领域的里程碑地位。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐