ResNet残差连接为何有效?深层网络退化问题实验复现

一个反直觉的实验:深层网络为何学不好
一位正在撰写PyTorch教程书籍的开发者,在编写ResNet章节时并不满足于告诉读者"深层普通网络会变差"这一结论,而是决定亲自复现这一现象。他在CIFAR-10数据集上训练了四个网络,使用完全相同的训练配方和随机种子,唯一变化的只有网络深度和是否加入跳跃连接(skip connection)。
CIFAR-10是由Alex Krizhevsky和Geoffrey Hinton于2009年发布的经典图像分类基准数据集,包含10个类别(飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车)共60,000张32×32像素的彩色图像,其中50,000张用于训练,10,000张用于测试。虽然以今天的标准看这个数据集规模很小且图像分辨率很低,但正因如此它成为了验证网络架构设计理念的理想试验场——训练成本低、实验周转快,同时又保留了足够的复杂度来暴露深度学习中的核心问题。ResNet原始论文也正是在CIFAR-10上首次展示了退化问题。
这个实验设计的精妙之处在于变量控制的极致严格:相同的recipe、相同的seed、相同的40个epoch,排除了几乎所有干扰因素,只留下"深度"和"残差连接"两个变量。

退化问题的数据对比:更深反而更差
实验在PyTorch 2.11上运行,每个模型训练40个epoch,结果如下:
| 模型 | 参数量 | 训练准确率 | 测试准确率 |
|---|---|---|---|
| plain-20 | 269,722 | 95.1% | 88.7% |
| plain-56 | 853,018 | 84.0% | 79.9% |
| ResNet-20 | 272,474 | 97.4% | 90.4% |
| ResNet-56 | 855,770 | 99.0% | 91.7% |
关键点不在测试准确率,而在训练准确率。请注意plain-20和plain-56这两行:56层的普通网络在训练集上只达到84%,而20层的网络却达到了95%。更深的网络在它已经"看过几百遍"的照片上表现反而更差。
这不是过拟合。过拟合是训练准确率高、测试准确率低的现象;而这里连训练准确率本身都下降了。用作者的话说,这个更大的网络"连自己的作业都学不会"。这一现象正是何恺明等人在其里程碑式的论文中所指出的"退化问题"(degradation problem)的经典复现。ResNet(Residual Network)由何恺明、张翔宇、任少卿和孙剑于2015年提出,论文《Deep Residual Learning for Image Recognition》在当年的ImageNet大规模视觉识别挑战赛(ILSVRC)中以3.57%的Top-5错误率夺冠,首次在ImageNet上超越了人类评估者约5.1%的错误率。这篇论文至今被引用超过20万次,是深度学习历史上被引用最多的论文之一。在ResNet之前,VGGNet(19层)和GoogLeNet(22层)已经开始探索更深的网络,但都遭遇了深度增加后性能饱和甚至退化的瓶颈。何恺明团队直接将网络深度推到了152层,并通过残差连接优雅地解决了这一问题。
为什么退化问题在数学上"不应该"发生
这个现象最令人费解的地方在于其数学上的矛盾性。理论上,一个56层网络完全可以精确复制20层网络的行为——只需将多出来的36层全部设置为恒等映射(identity mapping)。
恒等映射是指输入等于输出的变换,即f(x) = x。在神经网络的理论框架中,通用近似定理(Universal Approximation Theorem)告诉我们,具有足够宽度的单隐层网络理论上可以近似任意连续函数。推广到深度维度,更深的网络具有更大的函数空间表达能力——这就是所谓的网络容量(capacity)。按照这一逻辑,56层网络的解空间严格包含20层网络的解空间:只要额外的36层各自学到恒等映射,56层网络就退化为20层网络。然而这种"构造性证明"只说明解的存在性,完全不涉及优化算法能否在有限时间内找到这个解。这种"存在性"与"可达性"之间的鸿沟,正是退化问题揭示的深度学习中理论与实践的核心矛盾之一。
换句话说,一个能达到95%训练准确率的解在56层网络的参数空间里本就存在,SGD只是没能找到它而已。
SGD(Stochastic Gradient Descent,随机梯度下降)是深度学习中最基础也最重要的优化算法。它通过在每个训练步骤中随机采样一小批数据来估计梯度方向,然后沿梯度的反方向更新参数。然而SGD本质上是一种局部搜索算法——它只能看到当前位置附近的梯度信息,无法感知全局损失曲面的地形。损失曲面(loss surface)是指所有可能的参数组合与对应损失值构成的高维空间,其几何结构决定了优化的难度。研究表明,深层普通网络的损失曲面可能充满了"平坦区域"(plateaus)和"鞍点"(saddle points),使得SGD容易陷入次优解而无法找到理论上存在的更优解。Li等人2018年的可视化工作《Visualizing the Loss Landscape of Neural Nets》直观地展示了残差连接如何将损失曲面从崎岖不平变得光滑平坦,从而使优化变得可行。
这正是问题的核心:问题从来不在于网络容量(capacity)。网络的容量绰绰有余,真正的障碍在于深层普通网络难以优化。这正是何恺明等人在ResNet论文中提出的"退化问题"(degradation problem)的经典再现。
排除模型规模的干扰因素
作者特意强调了一个容易被质疑的点:plain-56和ResNet-56之间仅相差2752个参数,占比约0.3%。这意味着两者的模型规模几乎完全相同。
更有说服力的是趋势的方向性:从20层到56层,普通网络家族在训练集上变差(95.1% → 84.0%),而残差网络家族却变好(97.4% → 99.0%)。同样的两个规模,两个家族的表现却朝着相反的方向移动。
作者一针见血地指出:"规模论证无法在相同规模上给出相反的符号。"既然规模相同却出现了相反的结果,那么真正起作用的只能是跳跃连接(skip connection)。
ResNet跳跃连接的作用机制
残差块的公式是 y = x + F(x)。这个看似简单的结构带来了两个关键优势:
梯度反向传播的"高速公路"
在反向传播时,梯度会经过 (1 + dF/dx) 中的那个"1",从而以一条直通的路径抵达早期层,而不必"幸存"于整个网络堆栈的层层衰减。残差连接为梯度流动提供了一条不会消失的捷径。
要理解这一点的重要性,需要了解梯度消失(vanishing gradients)和梯度爆炸(exploding gradients)这两个深层网络训练中的经典病理现象。在反向传播过程中,梯度需要通过链式法则逐层相乘传递。如果每一层的梯度乘子略小于1,经过数十层累积后梯度会指数级衰减至接近零,导致早期层几乎无法更新——这就是梯度消失。反之,如果乘子略大于1,梯度则会指数级膨胀——这就是梯度爆炸。虽然BatchNorm(批归一化,由Ioffe和Szegedy于2015年提出)在一定程度上缓解了这两个问题,通过对每层的输出进行归一化来稳定梯度的数值范围,但有研究(如Yang等人2019年的工作)指出,BatchNorm在训练初期可能反而引入新的梯度不稳定性,这使得退化问题的根本原因至今仍存在争议。而残差连接中恒定的"1"为梯度提供了一条不受层数影响的传播通道,从根本上绕过了这一困境。
恒等映射成为默认解
残差结构让 F = 0 成为一个廉价的默认选项。网络可以"免费"保留恒等映射,只有在真正有帮助时才去学习额外的变换。这从根本上解决了前面提到的"SGD找不到恒等解"的优化困境。从优化的角度看,让一个由卷积层和非线性激活函数组成的网络层学习精确的恒等映射是出奇地困难——网络需要将所有权重精确调整到特定值。但在残差结构中,恒等映射是"免费的":只要F(x)的权重接近零,整个残差块就自动退化为恒等映射。这意味着默认状态下额外的层不会造成任何伤害,网络只需要学习"在恒等映射的基础上做多少修正",而非从头学习整个变换。
值得一提的是,Transformer架构在注意力机制和MLP周围复用了完全相同的技巧——残差连接早已成为现代深度学习架构不可或缺的基础设施。2017年Vaswani等人提出的Transformer架构(论文《Attention Is All You Need》)在每个子层(自注意力层和前馈网络层)周围都使用了残差连接加层归一化(Layer Normalization)的组合,即output = LayerNorm(x + Sublayer(x))。在GPT、BERT、LLaMA等现代大语言模型中,模型深度动辄达到数十甚至上百层Transformer块,如果没有残差连接,这些模型根本无法训练。事实上,近年来围绕残差连接的改进仍在活跃进行,例如Pre-Norm(将LayerNorm移到子层之前)与Post-Norm的选择、DeepNorm(微软提出的深层Transformer稳定训练方案)等,都说明残差连接的具体实现方式对超深网络的可训练性仍有深远影响。
诚实的科学态度:测量了"什么"而非"为什么"
关于普通深层网络为何难以优化,作者展现了难得的严谨态度。他坦言,这在学术界仍有争议:有人归因于梯度消失问题,有人认为是初始化时的BatchNorm导致梯度爆炸,还有人认为是损失曲面(loss surface)的几何结构问题。
作者明确表示:"我在这里测量的是'什么'——即训练误差随深度上升这一现象。我没有亲自测量梯度,所以不会宣称一个我没有运行验证过的机制。"他甚至公开征求,希望有人能分享普通网络与残差网络在这一深度下的逐层梯度范数日志。
这种区分"现象"和"机制"的态度在深度学习研究中尤为珍贵。深度学习领域存在大量"后验解释"(post-hoc explanations),即在观察到实验结果后构造看似合理的理论解释,但这些解释未必经得起严格验证。例如,关于BatchNorm为何有效的解释就经历了从"减少内部协变量偏移"到"平滑损失曲面"的范式转变。作者选择只报告自己亲手测量的数据,不做超出证据的推论,这恰恰是最可靠的科学方法。
实验局限与开放讨论
作者也如实列出了实验的注意事项:单一数据集(CIFAR-10)、单一配方、40个epoch、小型网络。他强调91.7%并非CIFAR-10上的最优结果,调优后的网络能达到更高。他的主张仅限于"两个网络家族在完全相同训练条件下的方向性差异"。
最后,他向社区抛出了开放性问题:有没有人见过退化现象不出现的情况?比如某个深度下普通网络不再变差,或者某种不依赖跳跃连接就能修复退化问题的训练配方?
这些问题并非没有先例。例如,有研究者发现特定的初始化方案(如LSUV,Layer-Sequential Unit-Variance initialization)或特定的归一化策略可以在一定程度上缓解退化问题。此外,2020年提出的NFNet(Normalizer-Free Networks)展示了在没有BatchNorm的情况下通过精心设计的初始化和自适应梯度裁剪训练极深网络的可能性,但值得注意的是NFNet仍然依赖残差连接。这些后续工作从侧面印证了退化问题的复杂性以及残差连接的不可替代性。
这种"亲手复现经典、坦诚承认未知边界"的实证精神,正是技术写作中最值得推崇的态度。它把一个教科书上的结论,还原成了一个可观察、可验证、仍值得深入探究的科学问题。
核心要点
相关推荐

Vibe Coding进阶:从玩具项目到企业级AI编程实战指南
深入解析Vibe Coding的天花板与突破路径,涵盖Claude Code、Codex工具选型,SuperPower插件与SDD规范驱动开发三种递进模式,助你掌握AI工程化编程方法论,真正落地企业级项目开发。

Entropic Scree:用信息熵替代方差重构PCA降维方法
Entropic Scree是一种基于信息论的降维新方法,用信息熵替代线性方差来估计数据内在维度。本文详解其核心原理、相对传统PCA的优势,以及在神经网络瓶颈层设计中的实际应用。

Hansel:自托管加密邮件服务,替代Gmail的隐私方案
Hansel by Seedling 是一款自托管加密邮件服务,用户自持服务器与密钥,从架构层面保障隐私与数据主权。集成加密消息、日历、笔记等协作功能,适合重视数据安全的团队使用。