本文解读的是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 $$
关键改进:
- 恒等映射 $x$ 直接参与加法,不经过任何变换
- 残差函数 $\mathcal{F}$ 的输入经过预激活(BN + ReLU)
- 输出 $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%
关键发现:
- 预激活设计在所有深度上都优于后激活
- 深度越深,预激活的优势越明显
- 预激活使训练更加稳定,收敛更快
梯度流动分析
实验验证:通过分析梯度的范数,验证了预激活确实改善了梯度流动:
- 预激活:梯度在深层网络中保持稳定
- 后激活:梯度在深层网络中有所衰减
恒等映射的使用
实验分析:通过分析残差函数的输出,发现:
- 预激活设计中,残差函数的输出更接近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)$
恒等映射的优势
理论优势:
- 易学习性:学习 $F(x) = 0$ 比学习 $H(x) = x$ 容易
- 梯度保证:即使 $F(x)$ 的梯度为0,恒等路径的梯度仍然为1
- 信息保证:即使 $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