残差网络 ResNet 是什么?加一条捷径,让上百层的网络也能训练
残差网络(Residual Network,ResNet)是一种深度卷积神经网络架构,由当时在微软亚洲研究院的何恺明、张祥雨、任少卿和孙剑在 2015 年提出。它通过引入“残差连接”,成功地训练出了上百层甚至上千层的深度神经网络,在当年的 ImageNet 图像识别比赛中取得了冠军,相关论文获得了 2016 年计算机视觉顶会 CVPR 的最佳论文奖。它是深度学习历史上影响最深远的工作之一,其论文也是被引用次数最多的科学论文之一。
它要解决的问题:越深反而越差
在 ResNet 之前,人们已经发现,增加神经网络的深度通常能提升效果,比如 VGG 网络有 19 层,GoogLeNet 有 22 层。按理说,网络越深,能力越强,效果应该越好。但研究者发现了一个奇怪的现象:当网络深到一定程度之后,再继续加深,效果不升反降,而且不只是在测试集上变差,连在训练集上的误差也变大了。这说明问题并不是过拟合,而是更深的网络更难训练,这被称为“退化”问题。
这让人困惑:一个更深的网络,理论上至少应该能做得和较浅的网络一样好,因为它只要让多出来的那些层什么都不做,原样输出输入,也就是学成一个“恒等映射”就可以了。但实验表明,用普通的方式堆叠的多层网络,很难学会这种恒等映射。
残差连接:加一条捷径
ResNet 的解决办法非常简洁:在每几层之间加一条“捷径”,把这几层的输入直接加到它们的输出上。也就是说,这几层不再需要学习从输入到输出的完整映射,而只需要学习输出与输入之间的差值,也就是“残差”。如果最理想的情况是什么都不改变,那么这几层只需要把残差学成零就可以了,这比学习一个恒等映射要容易得多。这种结构叫作残差块,由残差块堆叠而成的网络就是残差网络。
残差连接还有另一个重要的好处:在反向传播时,梯度可以通过这些捷径直接地传回到前面的层,而不必经过每一层的层层相乘,大大缓解了梯度消失的问题,让很深的网络也能得到有效的训练。
它取得的成果
凭借残差连接,ResNet 训练出了 152 层的网络,在 2015 年的 ImageNet 大规模视觉识别挑战赛中,以 3.57% 的前五错误率赢得了图像分类的冠军,这一成绩低于此前报告的人类水平的约 5%。同时,它还在目标检测、图像分割等多项比赛中取得了第一名。研究者还在实验中训练了超过一千层的网络。ResNet 有多个不同深度的版本,比如 ResNet-18、ResNet-50、ResNet-101 等,至今仍被广泛用作图像任务的基础网络和比较基准。
深远的影响
残差连接的思想很快就超越了图像识别的范畴,成为几乎所有深度神经网络的标准组件。2017 年提出的 Transformer 架构中,每一个注意力模块和前馈网络模块都配有残差连接,正是这一设计让人们能够把 Transformer 堆叠到几十层甚至上百层,构建出今天的大语言模型。DenseNet 等后续的工作也在残差连接的基础上进行了改进。可以说,残差连接是让“深度”学习真正变得深的关键技术之一。