IT 论文精读 · PAPER 2
He 等 · Microsoft Research · CVPR 2016
2015 年,微软亚洲研究院一队人(何恺明等)提出了 ResNet(残差网络),靠一个极小的改动,让神经网络从「最多堆二十几层」一下能堆到上百层、还越堆越强。它拿下当年 ImageNet 图像识别大赛冠军,错误率低到 3.57%。今天几乎每个深度网络——包括上一篇的 Transformer、以及 ChatGPT——都在用它这个小改动。
直觉上,网络越深应该越聪明(能看的层次更多)。可当时人们发现:层数堆多了,效果反而变差。奇怪的是,这不是「学得太细、把训练题背下来」那种情况——而是连训练题都做不好了。这更反直觉:一个更深的网络,哪怕多出来的层啥也不干、把信息原样往下传,也不该比浅网络差啊。可它偏偏学不会「啥也不干」这件事。
ResNet 的点子特别朴素:别让每一层去「重画整张画」,只让它说「要改哪儿」,再把这点改动加回原图上。做法是给每一小段网络架一条「旁路」(跳跃连接 skip connection):原始信息顺着旁路原封不动地流过去,中间那几层只负责学一个「微调」,最后把微调加回到原始信息上。
打个比方:改一份文稿,你不用把整页重抄一遍,只在原稿上批注「这里加一句、那里删一词」——改动小、又不会把原文弄丢。ResNet 就是让每层只学这份「修改批注」(这份批注就叫残差)。
好处立刻来了:如果某段其实不需要改动,它只要把「批注」学成空白,原始信息就顺着旁路完好流过——于是多加层永远不会让结果变差。而「学出一片空白」比「从零学会把原样照抄一遍」容易太多了,前面那个怪事就此解决。
先说为什么「学出一片空白」容易、「原样照抄」难。网络的每一层都是一次连揉带搓的变换——要它把输入原封不动地复原,就像让五个翻译接力把一句话译过五种语言、最后还得一字不差地变回原文,几乎不可能;而「什么都别改」只要把手里的旋钮全拧到零就行。旁路的妙处,是把「保持原样」这个难题从层的肩上卸下来,交给一根导线。
那批注里写的到底是什么?深度网络是一层层加深理解的:靠前的层看出「哪里有边缘和线条」,中间的层认出「这是耳朵、那是轮子」,靠后的层才拼出「这是一只猫」。有了旁路,每一段不必重建全部理解,只需在前面已有的理解上补一点新看出来的东西——那份「批注」,就是这一层新增的那点认识。层数多,就是「反复细看、每次多懂一点」的次数多。
也说句诚实的:这招不是无限灵——堆到几百层之后再往上,收益越来越小;后来还有研究发现,这种网络的行为更像「很多条深浅不一的小路一起投票」,而不是一条真正走到底的深路。
两个好处。一是加层不再有风险:需要就学个微调、不需要就让旁路原样过,网络于是可以放心堆到几百层,还越堆越强。二是学习信号更顺:网络训练时,要靠一股「纠错信号」从最后一层一路传回最前面来调参;网络太深时这股信号会越传越弱(前面的层就学不动了)。而那条旁路等于给纠错信号修了一条「高速公路」,让它畅通地传回底层。
给网络每一小段架一条「旁路」让原始信息原样流过,中间几层只学一个「要改哪儿」的微调、再加回去——于是「多加层」永远不会更差、能一口气堆到上百层,纠错信号也畅通。这条「跳跃连接」如今是几乎所有深度网络(含 Transformer)的标配。
想看残差块的结构图、公式和实验数字? → 切到精读版
ResNet 用一个几乎不花额外参数的「跳跃连接(skip connection)」,让每一小段网络只学「目标与输入之差」(残差)、而不是直接学目标,从而解决了「网络越深、训练误差反而越高」的退化问题,第一次把卷积网络稳定地训到上百层,拿下 2015 年 ImageNet 冠军(top-5 错误率 3.57%)。它的跳跃连接后来成了几乎所有深度网络(包括 Transformer)的基本构件。
作者是何恺明(Kaiming He)、张祥雨、任少卿、孙剑,来自微软亚洲研究院,论文发在 CVPR 2016(2015 年底放出)。它上承 AlexNet(2012)、VGG(2014)「把网络越做越深」的路线,却正面回答了当时的拦路问题——为什么不能无脑加深;下启之后几乎所有深网络:残差 / 跳跃连接成了通用积木,连 Transformer 每个子层外的「残差连接」也是同一个东西。
2012 年起,让网络更深似乎总能更强(AlexNet 8 层 → VGG 19 层)。但继续加深会撞上两堵墙。第一堵是梯度消失 / 爆炸——已被合适的初始化与归一化大体缓解。真正棘手的是第二堵:退化(degradation)。
作者观察到一个反直觉现象:把网络从 20 层加到 56 层,训练误差不降反升——注意是训练误差,所以这不是过拟合,而是「更深的网络反而更难优化」。这尤其奇怪,因为理论上更深的网络存在一个「不会更差」的解:让多出来的层学成恒等映射(原样输出),它就等价于那个浅网络。可实践中,优化器很难让一堆非线性层学出「原样照抄」。问题不在表达能力,而在「优化学不出来」。
既然让层学出恒等映射很难,那就把恒等映射「送」给它。设一小段网络本来要学的目标是映射 H(x);ResNet 不直接学 H(x),而是让这几层去学残差 F(x) = H(x) − x,再通过一条跳跃连接把输入 x 加回来:输出 = F(x) + x。
白话说:原始信息 x 顺着旁路原样流过,中间几层只学「该在 x 上改动多少」。如果最优解接近恒等(不用改),只需把 F(x) 学成接近 0——这比从零学会「原样照抄」容易得多。恒等这个「保底解」被免费提供,所以加层至少不会更差,怪事被治好了。
这条跳跃连接就是把输入逐元素相加到输出上,不引入额外参数、几乎不增加计算。当旁路两端维度不一致时,用一个 1×1 卷积做一次线性投影对齐即可。
为把网络堆到 50 / 101 / 152 层还不至于太贵,深层版本用瓶颈块(bottleneck):先用 1×1 卷积把通道压窄、再用 3×3 卷积处理、最后用 1×1 卷积还原——把计算集中在窄的中间层,省下算力。靠它,ResNet-152 比 VGG 深 8 倍,计算复杂度却更低。
还有一个被广泛接受的直觉:跳跃连接给了梯度一条「高速公路」——反向传播时纠错信号能顺着旁路几乎无衰减地回到底层,这也是深网络能训起来的关键。(这条「梯度畅通」是社区常用的解释;论文本身的核心论证则是上面的「优化更容易 / 恒等保底」。)
在 ImageNet 上,152 层 ResNet 拿到 top-5 错误率 3.57%(集成),赢得 ILSVRC 2015 分类冠军,并横扫检测、定位与 COCO 多项任务。对照实验很有说服力:34 层普通网络的训练误差比 18 层还高(退化重现),而加上跳跃连接后,34 层 ResNet 明显优于 18 层、且更深更好。作者还在 CIFAR-10 上试到上千层仍能训练。「加深真的带来更好」——这个本该成立、却一度失灵的结论,被它重新兑现。
它把「深」这条路重新打通,且给出的工具极其通用。跳跃连接从此无处不在:后续的视觉骨干(ResNeXt、DenseNet 等)、几乎所有现代深网,乃至 Transformer 每个子层外的残差连接,用的都是同一个想法。可以说,今天能把模型堆到成百上千层、上千亿参数,残差连接是绕不开的地基之一。它也让何恺明等成为深度学习最有影响力的研究者之列。
① 一句话:给每小段网络加一条跳跃连接、让它只学「残差 F(x)=H(x)−x」再加回 x,解决深网络的退化问题。
② 痛点:网络加深后训练误差反升(退化,不是过拟合);理论上「多余层学成恒等就不会更差」,但优化器学不出恒等。
③ 机制:输出 = F(x) + x,恒等被免费提供——不用改就把 F 学成 0,比从零学会照抄容易得多;跳跃连接不加参数、几乎不加算力。
④ 深层用瓶颈块(1×1→3×3→1×1)省算力;ResNet-152 比 VGG 深 8 倍却复杂度更低。
⑤ 直觉加成:跳跃连接给梯度一条「高速公路」,纠错信号畅通回传。
⑥ 结果:ImageNet top-5 错误率 3.57%,ILSVRC 2015 冠军;对照实验重现退化、并证明残差能救;CIFAR 试到上千层可训。
⑦ 影响:跳跃连接成为几乎所有深网络(含 Transformer 的残差连接)的标配地基。
⑧ 局限:很深后收益递减;可能更像「多路径集成」;有效原因仍有争论;预激活等后续改进说明原版非最优。