残差映射是什么?让网络学“改动量”而不是整个映射
残差映射(Residual Mapping)是残差网络(ResNet)的核心思想:不再让神经网络中的若干层直接学习从输入到输出的完整映射,而是让它们学习输出与输入之间的差值,也就是“残差”,再把输入直接加回来得到最终的输出。这一思想由何恺明、张祥雨、任少卿和孙剑在 2015 年提出,本站另有词条专门介绍残差网络,这里重点解释残差映射本身的原理。
从“学整体”到“学改动”
设想神经网络中的某几层,希望学到的理想映射是 H(x),也就是对于输入 x,应该输出 H(x)。在普通的网络中,这几层要直接去逼近 H(x)。残差映射的做法是:让这几层去学习另一个函数 F(x),它等于 H(x) 减去 x,也就是理想输出与输入之间的差别;然后通过一条“捷径”,把输入 x 原封不动地加到这几层的输出上,最终的输出就是 F(x) 加上 x,正好等于 H(x)。这条捷径不包含任何需要学习的参数,只是一个恒等映射,叫作恒等捷径连接。
打个比方:普通的网络像是每次都要从一张白纸开始画一幅画;残差映射则像是在一幅已有的画上进行修改,只需要画出需要改动的地方。如果原来的画已经很好了,什么都不改就行。
为什么学残差更容易
研究者发现,在很深的普通网络中会出现“退化”现象:网络更深,训练误差反而更大。理论上,一个更深的网络至少应该能做得和较浅的网络一样好,只要让多出来的层什么都不做,也就是学成恒等映射。但实验表明,由多个非线性层堆叠而成的网络,很难精确地学会恒等映射。
残差映射正好解决了这个问题:如果最理想的映射接近于恒等映射,也就是这几层几乎不需要改变输入,那么在残差的形式下,网络只需要把 F(x) 推向零就可以了,这比用一堆非线性层去拟合一个恒等映射要容易得多,比如只要把相关的权重都变得很小就行。何恺明等人的实验还发现,在训练好的残差网络中,各层学到的残差响应普遍很小,这说明恒等映射确实为这些层提供了一个很好的起点,各层只需要在此基础上做细微的调整。
梯度的“直通道”
残差映射的另一个好处体现在训练的过程中。在反向传播时,梯度需要从输出层逐层地传回到前面的层。在普通的深层网络中,梯度要经过每一层的层层相乘,很容易变得越来越小,导致前面的层几乎学不到东西,这就是梯度消失。而在残差结构中,由于输出等于 F(x) 加上 x,对 x 求导时,除了经过 F 的那一部分,还有一个恒等的部分直接等于 1。这意味着梯度可以通过捷径毫无衰减地直接传回到前面的层。何恺明等人在 2016 年的后续论文中进一步分析了这一点,并提出了把归一化和激活函数放在残差分支内部、让捷径保持“纯净”的恒等映射的改进结构,使得训练上千层的网络成为可能。
维度不一致时怎么办
当残差分支改变了特征的维度,比如通道数增加或者特征图的尺寸缩小时,输入 x 与 F(x) 的形状不一致,无法直接相加。这时,捷径上需要加一个简单的线性投影,通常是一个一乘一的卷积,把 x 变换到相同的维度,再进行相加。
影响
残差映射的思想如今几乎无处不在:Transformer 中的每一个注意力子层和前馈子层都配有残差连接,大语言模型中层与层之间传递的“残差流”正是基于这一结构。研究者还从残差流的角度来分析大模型内部的信息是如何被逐层读取和写入的,这成为机制可解释性研究中的一个重要视角。