概述
- ResNet 即残差网络,是由何凯明等人在2015年提出的深度神经网络架构,用于解决深度神经网络的退化问题。如今残差结构已经被广泛地应用在各类神经网络之中,比如AlphaGo Zero 的神经网络部分和Transformer的架构之中。
- 今年上课时,我的老师提出可以尝试自己跑一跑ResNet,作为入门深度学习的一条路径。我自己对ResNet也是早有耳闻,但是从来没有深入学习过,所以也想趁这次机会了解一下。
关于网络退化的三种说法
- 对于 ResNet 所解决的深度神经网络的退化问题,我在互联网上看到了三种说法:
- 随着网络层数加深,参数量增大,神经网络在训练过程中发生了过拟合,所以退化。这种说法常常被否定,因为网络退化过程中训练集上的性能也会下降。
- 随着网络层数加深,浅层网络上发生了梯度消失或者梯度爆炸,导致浅层网络参数优化困难,所以模型性能下降。
- 随着神经网络层数的增加,深层特征丢失了大量来自原始输入的信息,导致模型缺少可以用于判断分类的信息
我的设想
- 看到上述三种说法以后,我想通过实验的手段验证一下它们,看看哪种说法比较符合实际情况。
- 过拟合的明显特征就是模型在训练集上表现良好,但是在测试集上表现不佳。所以,如果我们在实验中没有发现这种特性,就能说明模型的退化可能与过拟合无关,否则反之。
- 梯度消失或爆炸会使模型前几层的梯度值显得特别大或者特别接近0,在模型训练过程中可以记录前几层的梯度,从而观察是否发生了梯度消失或爆炸。
- 训练结束后,可以找到无残差连接模型的不同卷积块的输出,根据可分性判据比较分析其可分性。从而判断深层特征是否丢失了有用信息。
- 这里需要注意的是,限于个人的时间和精力以及我的知识储备并不丰富,我的上述设想和后续设计的实验,其实是相当粗糙的,并不能当作严格的科学实验来看待,其结果也并不具有严谨和客观性,不能用于得出任何结论,只是我个人的一些探索。
实验
搭建和训练神经网络
- 通过在互联网上的学习,我了解到了 ResNet18 和 ResNet50 的网络结构,并且采用 CIFAR-10 图像数据集作为此次探索的训练和测试数据集。
- 我训练了以下8个模型,其中 “FULL” 类型代表的是完整版的 ResNet 模型,而其他模型则分别缺失了网络结构中的残差连接或BatchNorm层用于对比:
| 模型编号 | 模型深度(卷积层数) | 残差连接 | BatchNorm |
|---|---|---|---|
| ResNet50_FULL | 50 | 有 | 有 |
| ResNet50_Nres | 50 | 无 | 有 |
| ResNet50_Nbn | 50 | 有 | 无 |
| ResNet50_Nboth | 50 | 无 | 无 |
| ResNet18_FULL | 18 | 有 | 有 |
| ResNet18_Nres | 18 | 无 | 有 |
| ResNet18_Nbn | 18 | 有 | 无 |
| ResNet18_Nboth | 18 | 无 | 无 |
验证说法一
- 绘制折线图,分别绘制8种网络在训练集和测试集上的分类正确率与训练代数的关系。
- 比较网络在训练集和测试集上的正确率,判断是否存在过拟合的特征。
验证说法二
- 绘制散点图,分别绘制8种网络在每一次反向传播时,Stage0 和 Stage4 的梯度平均绝对值(绝对值的平均值)。观察哪种模型会出现梯度爆炸或者梯度消失的情况
验证说法三
- 采用测试集种的500份数据,分别使用 ResNet50_FULL 、 ResNet50_Nres 、ResNet18_FULL、ResNet18_Nres进行前向传播。
- 采集每种网络Stage0和Stage4的输出特征图,使用Fisher准则判断其可分性,比较每种网络的深层特征图的可分性较之浅层特征图是否会有下降,从而判断说法三是否成立。
实验结果
过拟合与准确率问题
- 如下方两图所示,训练集表现良好的红色线(FULL)和蓝色线(Nres)都存在着一定程度上的过拟合问题:训练集上的准确率在训练末期已经达到或接近 100% ,然而测试集上的准确率却停留在80% 上下。这似乎能体现出残差连接的存在并没有对过拟合现象产生较大的缓解。
- 另外,如果单独比较红蓝两线,会发现它们的准确率差距并不是特别大,尤其是在训练末期。
- 但是,如果比较绿黄两线,我们会发现,在缺失BatchNorm的情况下,残差连接的存在就显得相当重要。一旦缺失残差连接,模型无法有效地通过训练提高性能。
- 通过这一实验结果,似乎无法明确地表明ResNet是否通过缓解过拟合来防止网络退化,因为发生过拟合的红蓝两线的网络性能差距不大,而黄绿两线更多是欠拟合而非过拟合。


梯度消失或爆炸问题
- 如下方两图所示,无论是ResNet50,还是ResNet18,Stage4的梯度都能在一定程度上保持齐平,但是Stage1的黄色线则有所不同。
- 由于我对梯度消失现象的认识并不充分,所以我无法判定图中Stage1黄色线的表现是否属于梯度消失,但是可以确定的是,在同时缺失BatchNorm和残差连接的情况下,网络的浅层梯度绝对值的确远远小于深层梯度绝对值。
- 从这一份实验结果似乎能看出,残差连接在没有BatchNorm的情况下,确实能够有效缓解网络浅层梯度大幅变小的问题,而BatchNorm似乎也有这种能力,从而使得单独缺失残差连接的模型并没有出现明显的网络浅层梯度绝对值大幅变小现象。


特征图可分性问题
- 如下方两图所示,对 ResNet18 而言,是否存在残差连接,对网络 Stage1 和 Stage4 输出的特征图的可分性的影响似乎不大,并且没有出现深层特征图的可分性反低于浅层特征图的情况。
- 但对于 ResNet50 来说,情况就显得有些诡异,缺失残差连接的情况下,浅层和深层特征图的可分性都大幅领先于包含残差连接的情况。
- 不过,我们也可以看到,在缺失残差连接的情况下,ResNet50 深层特征图的可分性小于浅层特征图,似乎在一定程度上印证了说法三,深层特征丢失了一部分可以用来分类的信息。

没有结论,只有反思
- 正如前文所说,这次实验只是我个人对所学知识的一些扩展性探索,有很多粗疏之处,并不是严谨客观的科学实验。所以不能根据这次实验的结果,武断地对残差网络或残差连接技术下任何结论。
- 但是,作为自己的一次探索,我还是可以针对实验的设计、过程和结果,做出一定程度的反思或者复盘,让这次实验更加有意义。
实验的连贯性
- 进行这次实验的设想产生于 2025年2月21日 ,可是这篇笔记的最终撰写时间则是 2025年4月16日 。这样一个小规模的实验根本没有必要迁延两个月之久,在这个过程中,我将注意力多次转移到其他地方,直到近日,才重新完成了这次实验。
- 在重新实验时,我对之前进行过的工作已经遗忘得七七八八,花了很长时间才重新拾起之前的进度。
- 这足以反映出我的日常事务管理是有巨大漏洞的,两个月内我多次有足够的时间完成实验,但总是先去完成一些琐碎的事情。有两个原因:
- 因为我错误地估计了这个项目所需的时间,认为当时的时间不足以完成这次实验。
- 因为我想到了这次实验的结果可能并不能得出有价值的结论,所以内心对完成实验有犹疑,我宁愿不做完,也不愿意看到实验结果和理想状况的不符。我想这是错误的,虽然完美好于完成,但完成总好过不完成。
- 如果有下一次实验或者其他项目,一旦确定有做完的价值,那么应该倾向于将一段较长的连续时间分配给项目,避免中断工作流程,尽管做下去可能看不到最理想的结果。
实验的广度
- 我分析,这次实验的结果不能用来得出结论有三大原因:
- 第一,我没有调整随机种子并重复多次进行实验。当然这一点是限于我的时间和计算资源。但是单次实验的随机性实在太大,或许调整一下代码中的随机种子,就会得到完全不一样的结果。
- 第二,我没有采用更深的网络和更难拟合的数据集进行实验,神经网络退化是在神经网络变深后才发生的。而我的实验结果反映出,单纯缺失残差连接对模型准确率的影响并不大。这很有可能是由于网络层数不够深或者数据集相对容易拟合,导致没有残差连接也能有不错的效果。
- 第三,在可分性的问题上,我只采用了 Fisher 准则判断,这种方法是基于距离的可分性判据。然而,还存在基于概率、基于熵以及其他多种可分性判据。所以,单纯使用Fisher准则无法真实地反映网络特征图的可分性。
- 如果希望该实验的结果更有说服力,上述三点就是需要解决的问题。
下一步的学习方向
- 从实验结果可以看出:在本次实验中,相比于残差连接,BatchNorm对模型的性能影响更大。
- 但是,我对 BatchNorm 的理解仅限于在 Pytorch 中调用它,对其原理和发挥作用的机制并不了解。所以,下一步可以深入了解一下 BatchNorm,填补一下知识空白。