本文解读的是Kaiming He、Xiangyu Zhang、Shaoqing Ren和Jian Sun于2016年发表的改进论文《Identity Mappings in Deep Residual Networks》,该论文深入分析了ResNet中恒等映射的作用机制,提出了预激活(Pre-activation)的残差块设计,进一步优化了ResNet的训练稳定性和性能。这一改进不仅完善了ResNet的理论基础,更为理解残差连接的本质提供了深刻的洞察。

“恒等映射是残差网络成功的关键。"——这是He等人在ResNet改进论文中提出的核心观点。在原始ResNet中,残差块的设计虽然有效,但恒等映射的实现方式(激活函数的位置)对性能有重要影响。通过系统性的实验和理论分析,论文发现预激活(在卷积之前应用BatchNorm和ReLU)比后激活(在卷积之后应用)效果更好。

论文的核心创新是预激活残差块:将BatchNorm和ReLU移到卷积之前,使恒等映射的路径更加"干净”,梯度流动更加顺畅。这种设计不仅提高了训练稳定性,还进一步提升了模型性能,在ImageNet上取得了更好的结果。

在当今大模型时代,这一改进的思想仍然重要:理解恒等映射的本质,优化信息流动路径,这些原则仍然是深度网络设计的核心。理解ResNet改进,就是理解如何进一步优化残差连接。

本文将从问题根源、核心机制、解决方案、实践评估四个维度深度解读ResNet改进,包含完整的数学推导、梯度流动分析和实验评估,并在文末提出开放性问题与未来研究方向。


本文属于 论文阅读开篇:Ilya 30u30 阅读计划 系列,可前往该页查看完整目录、阅读顺序与发布状态。


原始ResNet的恒等映射问题

问题一:激活函数位置的影响

在原始ResNet中,残差块的设计为:

$$ y = \mathcal{F}(x, {W_i}) + x $$

其中 $\mathcal{F}$ 通常包含:Conv → BN → ReLU → Conv → BN,然后输出与 $x$ 相加,最后再应用ReLU。

后激活设计:激活函数在残差函数之后,恒等映射 $x$ 直接参与加法,然后应用激活函数。

问题分析:当 $x$ 经过ReLU激活时,如果 $x$ 的某些元素为负,会被置为0,破坏了恒等映射的性质。这导致恒等映射路径不够"干净",梯度流动可能受阻。

问题二:梯度流动的阻塞

在原始设计中,梯度需要通过激活函数的导数传播:

$$ \frac{\partial y}{\partial x} = \frac{\partial \text{ReLU}(\mathcal{F}(x) + x)}{\partial x} = \text{ReLU}’(\mathcal{F}(x) + x) \left(1 + \frac{\partial \mathcal{F}}{\partial x}\right) $$

如果 $\text{ReLU}’(\mathcal{F}(x) + x) = 0$(即 $\mathcal{F}(x) + x < 0$),梯度会被阻断,无法传播到恒等映射路径。

数学分析:当 $\mathcal{F}(x) + x < 0$ 时,$\text{ReLU}’ = 0$,梯度为0,恒等映射的优势无法发挥。

问题三:恒等映射的扭曲

在原始设计中,恒等映射 $x$ 在加法后还要经过ReLU,这可能导致信息丢失:

  • 如果 $x$ 的某些元素为负,经过ReLU后变为0
  • 如果 $\mathcal{F}(x) + x < 0$,整个输出被置为0

这种设计扭曲了恒等映射,使其无法真正实现"恒等"的作用。


预激活残差块的设计

预激活的核心思想

预激活设计:将BatchNorm和ReLU移到卷积之前:

$$ y = \mathcal{F}(\text{ReLU}(\text{BN}(x)), {W_i}) + x $$

关键改进

  1. 恒等映射 $x$ 直接参与加法,不经过任何变换
  2. 残差函数 $\mathcal{F}$ 的输入经过预激活(BN + ReLU)
  3. 输出 $y = \mathcal{F}(x’) + x$ 不再经过激活函数

梯度流动的改善

在预激活设计中,梯度流动为:

$$ \frac{\partial y}{\partial x} = \frac{\partial \mathcal{F}}{\partial x} + 1 $$

关键优势

  • 梯度可以直接通过恒等映射路径传播(+1项)
  • 即使 $\frac{\partial \mathcal{F}}{\partial x} \approx 0$,梯度仍然为1,不会消失
  • 梯度流动更加顺畅,不受激活函数的影响

恒等映射的保证

数学保证:在预激活设计中,如果 $\mathcal{F}(x’) = 0$,则 $y = 0 + x = x$,完美实现恒等映射。

实验验证:预激活设计在训练过程中,恒等映射路径的使用更加频繁,说明网络确实在学习利用恒等映射。


预激活设计的变体

变体一:全预激活(Full Pre-activation)

所有激活函数都在卷积之前:

x → BN → ReLU → Conv → BN → ReLU → Conv → + → y
                                    ↑
                                    └── x (恒等映射)

优势:恒等映射路径最干净,梯度流动最顺畅。

变体二:部分预激活(Partial Pre-activation)

只在某些层使用预激活:

x → Conv → BN → ReLU → Conv → BN → + → ReLU → y
                                    └── x

权衡:在保持恒等映射优势的同时,保留一定的非线性。

变体三:后激活(Original Post-activation)

原始设计,激活函数在卷积之后:

x → Conv → BN → ReLU → Conv → BN → + → ReLU → y
                                    └── x

问题:恒等映射路径不够干净,梯度流动可能受阻。


实验评估与分析

ImageNet实验结果

主要结果

  • 原始ResNet-110:错误率 6.61%
  • 预激活ResNet-110:错误率 6.37%(相对改进3.6%)
  • 预激活ResNet-164:错误率 5.46%
  • 预激活ResNet-1001:错误率 4.62%

关键发现

  1. 预激活设计在所有深度上都优于后激活
  2. 深度越深,预激活的优势越明显
  3. 预激活使训练更加稳定,收敛更快

梯度流动分析

实验验证:通过分析梯度的范数,验证了预激活确实改善了梯度流动:

  • 预激活:梯度在深层网络中保持稳定
  • 后激活:梯度在深层网络中有所衰减

恒等映射的使用

实验分析:通过分析残差函数的输出,发现:

  • 预激活设计中,残差函数的输出更接近0(说明更多使用恒等映射)
  • 后激活设计中,残差函数的输出较大(说明较少使用恒等映射)

预激活设计的理论分析

信息流动路径

在预激活设计中,信息可以通过两条路径流动:

路径1(残差路径):$x \rightarrow \text{BN} \rightarrow \text{ReLU} \rightarrow \text{Conv} \rightarrow \cdots \rightarrow \mathcal{F}(x’)$ 路径2(恒等路径):$x \rightarrow y$(直接)

两条路径在加法处汇合:$y = \mathcal{F}(x’) + x$

梯度传播路径

梯度反向传播时,也通过两条路径:

路径1:$\frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \cdot \frac{\partial \mathcal{F}}{\partial x}$ 路径2:$\frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \cdot 1$

总梯度:$\frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \left(1 + \frac{\partial \mathcal{F}}{\partial x}\right)$

恒等映射的优势

理论优势

  1. 易学习性:学习 $F(x) = 0$ 比学习 $H(x) = x$ 容易
  2. 梯度保证:即使 $F(x)$ 的梯度为0,恒等路径的梯度仍然为1
  3. 信息保证:即使 $F(x)$ 学习失败,$x$ 仍然可以传递信息

ResNet改进与现代AI的关系

对残差连接理解的深化

ResNet改进论文深化了我们对残差连接的理解:

  • 恒等映射的实现方式对性能有重要影响
  • 预激活设计使恒等映射更加"干净"
  • 梯度流动的优化是深度网络成功的关键

对后续架构的影响

预激活的思想在后续架构中广泛应用:

  • Transformer:虽然使用LayerNorm而非BatchNorm,但残差连接的设计思想类似
  • 生成模型:U-Net等架构的跳跃连接也遵循类似原则
  • 大模型:GPT、BERT等模型的残差连接设计都考虑了信息流动的优化

开放性问题与未来研究方向

问题一:预激活的理论最优性

当前挑战:预激活是否是最优设计?是否存在更好的激活函数位置安排?

研究方向

  • 研究不同激活函数位置的理论性质
  • 探索自适应激活函数位置
  • 设计理论指导下的最优架构

问题二:BatchNorm与恒等映射

当前挑战:BatchNorm在预激活设计中的作用是什么?能否用其他归一化方法替代?

研究方向

  • 研究LayerNorm、GroupNorm等替代方案
  • 探索归一化与恒等映射的关系
  • 设计不需要归一化的残差块

问题三:预激活与注意力机制

当前挑战:如何结合预激活设计和注意力机制?能否设计基于注意力的预激活?

研究方向

  • 研究注意力引导的预激活
  • 探索预激活中的注意力机制
  • 设计统一的预激活-注意力框架

问题四:预激活的压缩

当前挑战:如何在保持性能的同时压缩预激活ResNet?

研究方向

  • 预激活ResNet的剪枝方法
  • 预激活块的共享和复用
  • 高效的预激活网络设计

问题五:预激活的可解释性

当前挑战:如何理解预激活的作用机制?哪些层主要使用恒等映射?

研究方向

  • 预激活的可视化分析
  • 恒等映射使用模式的研究
  • 预激活的可解释性工具

问题六:预激活与持续学习

当前挑战:预激活如何影响模型的持续学习能力?

研究方向

  • 预激活与灾难性遗忘的关系
  • 基于预激活的持续学习方法
  • 预激活在元学习中的应用

问题七:预激活的生物学启发

当前挑战:预激活是否模拟了生物神经网络的某些机制?

研究方向

  • 研究预激活与生物神经网络的对应关系
  • 从神经科学中获取设计灵感
  • 设计更符合生物学原理的预激活

问题八:预激活的未来演进

当前挑战:预激活的未来发展方向是什么?

研究方向

  • 探索预激活的新形式
  • 研究预激活与其他技术的结合
  • 设计下一代预激活架构

参考文献

  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Identity mappings in deep residual networks. European conference on computer vision, 630-645.
  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. Proceedings of the IEEE conference on computer vision and pattern recognition, 770-778.
  • Ioffe, S., & Szegedy, C. (2015). Batch normalization: Accelerating deep network training by reducing internal covariate shift. International conference on machine learning, 448-456.
  • ResNet Improvement Paper
  • ResNet Implementation