IT 论文精读 · PAPER 2

Deep Residual Learning(ResNet)

He 等 · Microsoft Research · CVPR 2016

EN →

这篇论文干了什么?

2015 年,微软亚洲研究院一队人(何恺明等)提出了 ResNet(残差网络),靠一个极小的改动,让神经网络从「最多堆二十几层」一下能堆到上百层、还越堆越强。它拿下当年 ImageNet 图像识别大赛冠军,错误率低到 3.57%。今天几乎每个深度网络——包括上一篇的 Transformer、以及 ChatGPT——都在用它这个小改动。

先说个怪事

直觉上,网络越深应该越聪明(能看的层次更多)。可当时人们发现:层数堆多了,效果反而变差。奇怪的是,这不是「学得太细、把训练题背下来」那种情况——而是连训练题都做不好了。这更反直觉:一个更深的网络,哪怕多出来的层啥也不干、把信息原样往下传,也不该比浅网络差啊。可它偏偏学不会「啥也不干」这件事。

那个小改动

ResNet 的点子特别朴素:别让每一层去「重画整张画」,只让它说「要改哪儿」,再把这点改动加回原图上。做法是给每一小段网络架一条「旁路」(跳跃连接 skip connection):原始信息顺着旁路原封不动地流过去,中间那几层只负责学一个「微调」,最后把微调加回到原始信息上。

打个比方:改一份文稿,你不用把整页重抄一遍,只在原稿上批注「这里加一句、那里删一词」——改动小、又不会把原文弄丢。ResNet 就是让每层只学这份「修改批注」(这份批注就叫残差)。

好处立刻来了:如果某段其实不需要改动,它只要把「批注」学成空白,原始信息就顺着旁路完好流过——于是多加层永远不会让结果变差。而「学出一片空白」比「从零学会把原样照抄一遍」容易太多了,前面那个怪事就此解决。

「批注」到底在学什么?

先说为什么「学出一片空白」容易、「原样照抄」难。网络的每一层都是一次连揉带搓的变换——要它把输入原封不动地复原,就像让五个翻译接力把一句话译过五种语言、最后还得一字不差地变回原文,几乎不可能;而「什么都别改」只要把手里的旋钮全拧到零就行。旁路的妙处,是把「保持原样」这个难题从层的肩上卸下来,交给一根导线。

那批注里写的到底是什么?深度网络是一层层加深理解的:靠前的层看出「哪里有边缘和线条」,中间的层认出「这是耳朵、那是轮子」,靠后的层才拼出「这是一只猫」。有了旁路,每一段不必重建全部理解,只需在前面已有的理解上补一点新看出来的东西——那份「批注」,就是这一层新增的那点认识。层数多,就是「反复细看、每次多懂一点」的次数多。

也说句诚实的:这招不是无限灵——堆到几百层之后再往上,收益越来越小;后来还有研究发现,这种网络的行为更像「很多条深浅不一的小路一起投票」,而不是一条真正走到底的深路。

那它到底怎么帮上忙?

两个好处。一是加层不再有风险:需要就学个微调、不需要就让旁路原样过,网络于是可以放心堆到几百层,还越堆越强。二是学习信号更顺:网络训练时,要靠一股「纠错信号」从最后一层一路传回最前面来调参;网络太深时这股信号会越传越弱(前面的层就学不动了)。而那条旁路等于给纠错信号修了一条「高速公路」,让它畅通地传回底层。

一句话记住

给网络每一小段架一条「旁路」让原始信息原样流过,中间几层只学一个「要改哪儿」的微调、再加回去——于是「多加层」永远不会更差、能一口气堆到上百层,纠错信号也畅通。这条「跳跃连接」如今是几乎所有深度网络(含 Transformer)的标配。

想看残差块的结构图、公式和实验数字? → 切到精读版