残差连接为什么有效:从 ResNet 到深层模型的优化

原载:荒岛书生 · 原文 · 作者:荒岛编辑部 · 原始发布日期:2026-09-05。 迁移核对:2026-11-07,依据当前公开正文;保留原文资料截止日期、作者观点与核验说明,不将历史资料视作今日消息。

问题不只是梯度消失

ResNet 的出发点是深层网络的优化困难:网络更深,理论表达能力可以更强,但训练误差有时反而升高。这个现象不能简单归结为过拟合,因为过拟合通常表现为训练集很好、泛化变差。

2015 年何恺明、张祥雨、任少卿与孙剑提出残差学习,2016 年的后续工作进一步研究恒等映射。虽然首篇略早于严格的“近十年”,它是理解此后架构的必要前置知识。

不从头重建,先学需要改什么

普通模块可以写成 y = H(x)。残差模块写成:

y = x + F(x)
F(x) = H(x) - x

这是一种参数化选择:学习对已有表示的增量。在维度相同的情况下,如果新增模块暂时只需要保留输入,那么让 F 接近零就是一个自然选择。

用一个人为构造的小例子:输入特征 x 是 [2, -1],目标变成 [2.1, -0.8]。普通变换需要学出整个目标;残差分支只需学 [0.1, 0.2]。真实网络的优化远比这复杂,这个例子仅说明“修正已有信息”的含义,并不证明任意任务都更容易。

梯度为什么多了一条路

在最简化、相加之后没有额外非线性的标量情形中:

dy/dx = 1 + dF/dx
dL/dx = dL/dy × (1 + dF/dx)

其中的 1 来自恒等路径。反向传播时,梯度不必完全依赖残差分支里一连串变换的乘积。在向量情形中,这个 1 对应单位矩阵。

然而“有 1”不等于梯度永不消失。如果残差分支的导数与它抵消,或者整体网络包含归一化、激活和不合适的尺度,仍然可能出现问题。它改善了优化结构,没有取消优化问题本身。

维度变化时,不能直接相加

相加要求张量形状兼容。如果通道数或空间分辨率发生变化,需要让捷径分支也进行相应变换,例如投影或下采样。

相同形状:y = x + F(x)
不同形状:y = P(x) + F(x)

P 一旦变成可学习投影,就不再是严格的恒等路径。工程上常见的 bug 不是理论复杂,而是广播悄悄发生、维度对错却语义不对,或主分支与捷径的下采样方式不一致。

激活放在哪里也会改变传播

2016 年 Identity Mappings 研究了残差单元的信息传播,并提出预激活设计。理解它时,可以先问:沿捷径走到更深层的信号,途中是否不断被额外运算截断或改变?

Transformer 同样使用残差连接,但 LayerNorm 的前后位置、残差尺度和初始化都有各自影响。不能把视觉网络中的一张结构图照搬过来,就认定所有深层模型的训练行为相同。

为什么没有增加层数就自动变好

深层模型需要足够的数据、合理的训练预算和适合的归纳偏置。残差连接让“更深”更容易成为可探索的选项,但它没有保证新增容量一定被有效利用。

如果训练损失不下降,先检查学习率、数值精度和梯度;如果训练很好而验证变差,检查数据泄漏、过拟合和分布变化;如果离线评测好而上线慢,检查计算量与数据搬运。不要把所有问题都归给网络深度。

实践中怎样验证自己的理解

做一个小型受控实验:固定数据划分和训练步数,比较普通模块与残差模块,记录训练损失、验证指标和梯度范数。不要只比较最后一个准确率数字,也不要把不同算力预算下的结果当作公平对照。

残差连接最值得记住的启发是:模型设计不仅是在增加表达能力,也是在为优化过程铺设更容易到达好解的路径。

原始资料与阅读路径

本文为荒岛编辑部原创技术解读,公式示例与工程判断用于解释原理,不是对论文实验的独立复现。历史事实按上述原始资料核验,资料截止 2026 年 9 月 5 日。