
各位,又是好久不见~
你可能在无数的论文或者博客里见过这个公式:
乍一看,这不就是个加法吗?有什么好讲的?

但就是这轻轻的一“加”,把深度学习从 20 层的泥潭里拉了出来,一路推到了今天 LLM 的几百层、甚至上千层。可以说,如果没有这个加法,什么大语言模型、什么生成式 AI,大概率都还只是科幻小说里的桥段。
残差连接是一种在神经网络层间添加捷径(shortcut)的设计,它允许输入信号直接跳过某些计算层,并与经过计算的输出相加,从而形成最终输出。具体而言,在 Transformer 中,残差连接表现为在自注意力(Self-Attention)模块和前馈网络(Feed-Forward Network,FFN)模块后,通过 “Add” 操作将输入与模块输出相融合。
所以本文作为拆解 Transformer 的第三篇,今天咱们就聊聊 残差连接(Residual Connection),把它的前世今生、它背后的那些恩怨情仇,以及它到底是怎么把 AI 的任督二脉给打通的,给大伙儿捋一捋。
从 2012 年 AlexNet 在 ImageNet比赛上一战成名后,大家都尝到了“深度” 的甜头。人们发现,神经网络这东西,好像层数越多,效果就越好。于是,各路大神开始疯狂地往网络里加层数,恨不得把楼盖到天上去。最典型的代表就是 VGG 网络,现在看来,VGG-19(19 层)可能连“深”的门槛都摸不着,但在当年,那就是巨无霸级别的存在。大家心里都有个信念:Deeper is Better(越深越好)。只要显卡塞得下,层数我就往死里加。
好景不长,当各家兴冲冲地试图把网络堆到 30 层、50 层甚至更深的时候,突然发现路走不通了。你可能会想,是不是 Overfitting了?毕竟模型参数那么多,数据不够用,记住了训练集,在测试集上翻车?。
错! 最让科学家们抓狂的就在这儿。
当时微软亚洲研究院的 He Kaiming 团队做了一组实验,他们发现了一个完全反直觉的现象:当你把网络层数增加(比如从 20 层加到 56 层),不仅仅是测试误差变高了,连训练误差(Training Error)也变高了 。
这事儿太离谱了,你想想,如果深层网络只是单纯地 “学不到新东西” ,那它至少应该能把后面加的那些层变成“透明”的?也就是我们常说的 恒等映射(Identity Mapping),前面学啥样,后面照搬就行。这样一来,深层网络的效果最差也就是和浅层网络持平,怎么可能反而变差呢?
这就好比你找了个技术专家(浅层网络)来干活,干得挺好;后来你觉得不够,又给这个高手配了几个实习生(增加了层数),结果这帮人凑在一起,不仅没干出更多的活,反而连原来的活都干不利索了,效率直接跳水。
这个现象就是 退化问题(Degradation Problem) 。
说到这儿,可能有的老铁会问:“这不就是梯度消失吗?” 。仔细想想好像还真不是一回事儿。
梯度消失是指梯度在反向传播的时候,因为连乘效应,传到前面几层就变成 0 了,导致前面的层没法更新。这个问题,早在 2015 年之前,通过 归一化(Batch Normalization) 和更合理的 初始化方法,其实已经解决得七七八八了。
He Kaiming 他们在论文里写得很清楚,他们用的网络加了 Batch Norm,梯度在反向传播时并没有消失,信号是健康的。但网络就是训练不出来,就是不收敛,准确率就是上不去 。
就像是你修了一条路,路面挺宽(梯度没消失),车也没坏(模型没问题),但车队就是堵在路上动不了,死活到不了终点。
整个深度学习界,在 2015 年之前,就被这一堵看不见的墙,死死地挡在了 30 层的大门口,直到 ResNet 的横空出世。
面对这个问题,He Kaiming 团队选择了一个看似简单却极具创新性的方向。既然深层网络难以直接学习目标映射 ,那就不强迫模型硬着头皮去拟合复杂函数,而是 将学习任务重新表述为“在已有输入基础上做出必要的增量修正”。
换句话说,模型不再从零开始构建完整的表示,而是围绕输入 学习一个较易优化的残差函数
这种重新定义目标的方式,使得深层网络可以专注于学习 “差异” 而不是学习 “全部”,从而显著降低了优化难度。
在深层神经网络中,可以将某一层理解为一个功能模块:它接收输入 ,并需要输出一个经过变换后的表示 。然而,当网络深度不断增加时,直接从输入学习到目标映射 并非易事。这类直接拟合往往导致优化困难,甚至在训练中出现性能退化。
残差网络(ResNet)提出了一种结构化的解决方式:为每一层引入一条 捷径(Shortcut) 或 跳跃连接(Skip Connection)。其核心思想不是让每一层都去独立构造完整的表示,而是将学习任务重新表述为 在输入 的基础上进行必要的增量修正。

数学形式如下:
其中, 通过捷径直接传递, 则表示这一层需要学习的“残差”。原本的目标是学习复杂映射 ,现在转化为学习相对简单的差分函数:
这种重新表述带来了本质性的好处。例如,当某一层的最佳行为是“保持输入不变”(即实现恒等映射)时,在传统结构中,网络需要通过大量参数的精确配合,才能让非线性变换近似为线性恒等操作,训练难度极高;而在残差结构中,只需让残差部分 收敛到 0,输出便自然回到 。
换言之:
这一设计使深层网络的优化过程简化很多,反向传播更加稳定,也避免了随深度增加而出现的性能退化。残差连接通过“保留输入”这一策略,使模型更容易学习到有效的表示,进而推动了更深层网络的可训练性与性能突破。
在残差结构中,输出形式为:
这里采用的是加法(addition),而不是乘法、拼接等其他连接方式,这种设计直接关系到梯度的稳定性与深层网络的可训练性。
从反向传播的角度来看,如果层间的组合方式是乘法或包含较强的非线性,当梯度沿深度方向回传时,会出现典型的链式相乘效应:
当网络足够深时,即使参数规模适中,这种重复相乘也会不可避免地导致梯度消失或爆炸,使得深层结构难以有效训练。
而残差连接采用的加法结构具有不同的梯度传递性质。对输入 求导:
式中的常数项 1 是残差结构的关键。它确保了在任何情况下,均存在一条不依赖 的梯度通路。即便残差分支内部由于多层非线性而导致梯度显著衰减,这个常数项依然能保证梯度稳定地向前传播,从而避免梯度在深层网络中完全消失。

PS: 排版不如图~
换言之,如果没有残差的深层网络,梯度要走 100 个弯弯曲曲的小巷,途中可能迷路了;有残差结构突然多了一条:“从第 100 层回到第 1 层的笔直高速公路”;而这条高速公路的通行能力,永远是 1(不会变、不会损耗) 它能强力保障 “至少有一部分梯度” 能顺利传到最底部。
相比之下:
加法结构在保持模型规模稳定的同时,又能提供稳健的梯度传递路径,使其成为残差学习最简洁且最有效的实现方式。
为了让大家更有体感,聊个小时候都玩过的游戏:传声筒 。
一群人站成一排,第一个人说句话,悄悄传给第二个,以此类推。大家都知道,传到最后,那句话往往面目全非,“今晚吃鸡” 能传成 “这娃真急”。这就好比没有残差连接的深层网络,信息在层层传递中丢失、扭曲了。
现在的 ResNet 是怎么玩的呢?
每个人除了听上一个人悄悄话(经过处理的特征),手里还拿了一张纸条,上面写着原始的那句话(或者上一轮的确切信息)。轮到你的时候,你不仅听到了悄悄话,还看到了纸条。你可以选择把悄悄话里的新信息加进去,也可以直接把纸条递给下一个人。
这样一来,哪怕中间有个人睡着了(某层没学好),纸条上的信息依然能准确无误地传下去。这就是为什么 ResNet 能堆到 1000 层还依然稳如老狗的原因。
说了这么多直观的理解,那 ResNet 到底在数学和几何层面上改变了什么?
2016 年,康奈尔大学的 Veit 等人提出:ResNet 虽然看起来很深,但它并不是一个单纯的串行长链。
咱们来拆解一下这个拓扑结构。
在传统的 VGG 网络里,数据只有一条路:
如果中间断了一层,整个网络就废了。
但在 ResNet 里,每一个 “块” 都有两个选择:经过计算层(Conv),或者直接跳过(Skip)。
这意味着,对于一个有 个块的网络,数据从输入流向输出,理论上存在 条不同的路径。
Veit 的研究发现,ResNet 其实是这 个不同深度的网络的 Implicit Ensemble。更关键的是,在训练过程中,梯度并不是均匀分布的,绝大部分梯度其实是沿着那些 较短的路径(即跳过了许多层的路径)传播的。
所以,当我们训练一个 100 层的 ResNet 时,我们并不是在训练一个深度为 100 的庞然大物,而是在同时训练成千上万个不同深度的 浅层网络。这解释了为什么 ResNet 如此耐造,即使你删掉某一层,只是切断了无数并联路径中的一小部分,网络依然能正常工作,而不会像传统网络那样直接瘫痪。
另一个更直观的数学视角,来自于 Tom Goldstein 团队对 Loss Landscape 的可视化研究。
想象一下,我们在训练模型时,其实是在一个高维的山脉中寻找最低点(Loss 最小点)。这个地形的形状,决定了训练的难易程度。
ResNet 的损失地形变得非常平滑(Smooth),并且呈现出一种类似 凸函数(Convex-like) 的大碗形状。这种几何性质的改变才是本质。它消除了那些阻碍优化的高频震荡,让梯度方向变得一致且可靠。优化器在这个平滑的碗里,哪怕闭着眼睛滚,大概率也能顺滑地滚到谷底。这就是 ResNet 的真正魔力:它不是在教你在乱石滩里怎么走,而是直接把乱石滩铲平,铺成了一条平坦的大道。

2017 年,Google 的 Transformer 也继承了 ResNet 的衣钵,在每个 Attention 层和 MLP 层外面都套上了残差连接。
但是,这故事还没完,在 Transformer 里,残差连接和 层归一化(Layer Normalization, LN) 的摆放位置,引发了一场长达数年的 “路线之争”。这场争论的双方,分别叫 Post-Norm(后归一化) 和 Pre-Norm(前归一化)。

在最初的 Transformer 设计中,各层的结构采用的是 Post-Norm,也就是 LayerNorm 放在残差相加之后。它的形式为:
流程可以理解为: 先进行子层的计算(如多头注意力或前馈网络),再把这个结果与原始输入相加,最后统一进行归一化处理。
这一设计的优点在于,如果训练顺利,模型往往能获得更细致的表达能力,性能上限也较高。但它同时带来了明显的训练风险——稳定性较差。
由于归一化被放在所有计算的末尾,残差分支中传递的梯度在反向传播时缺少及时的调节机制,容易在靠近输出的位置出现梯度过大、训练发散的问题。因此,使用 Post-Norm 的模型通常需要在训练初期采取非常谨慎的策略,例如将学习率设置得极低,通过缓慢 Warm-up 的方式让网络逐步进入稳定状态。如果学习率上升过快,模型往往会出现数值异常,直接导致训练失败。
这种不稳定性是早期 Transformer 模型训练中最常见的问题之一,也促使后续研究提出更稳健的替代方案。
在使用 Post-Norm 的早期 Transformer 中,随着网络不断加深,训练稳定性成了一个棘手的问题。为改善这一状况,研究者尝试调整 LayerNorm 的位置。于是,一种新的 Pre-Norm 结构逐渐被采用。
其计算方式为:
与 Post-Norm 最大的不同在于:归一化操作被移到了子层(Attention 或 FFN)计算之前。
原始输入 直接走主分支,不再经过 LayerNorm;LayerNorm 仅作用于残差分支,使子层在计算前就已获得稳定、规范化的输入。
这个调整带来的好处在于:
LayerNorm 放在前面能够及时控制每一层的输入尺度,从而减少梯度在深层网络中累积放大的风险;Warm-up 的依赖明显降低;得益于这些特性,Pre-Norm 很快成为深度 Transformer 的主流设计。从 GPT-3、PaLM 到 LLaMA 等大型语言模型,都采用了这一结构,并将其视为构建稳定大模型训练体系的重要组成部分。
虽然 Pre-Norm 在稳定训练方面表现突出,但它也引入了一个新的问题:表征坍塌。
产生这一现象的原因可以从数值尺度的演变来理解。在 Pre-Norm 结构中,主分支 不会经过 LayerNorm,它在每一层中都与子层输出相加,因而其数值尺度会在网络深度累积下不断增大。而残差分支 在进入子层之前会先经过 LayerNorm,其输出始终保持在一个相对稳定的范围内。
当网络足够深时,就会出现以下情况:
此时,主分支的幅值已经显著大于残差分支,导致 的贡献被不断削弱。换言之,尽管深层的残差块仍在进行复杂计算,但它们对最终表征的影响变得极其有限。
这种现象带来的结果是:深层网络的后段表达能力逐渐被“淹没”,模型的有效深度下降,结构名义上很深,但部分层的作用被弱化。
因此,Pre-Norm 在强化可训练性的同时,也在一定程度上牺牲了深层表达的有效性。这也是为什么在相同参数规模下,经过精细调参的 Post-Norm 可能具备更高的收敛上限。
前面讨论的两种结构分别存在明显短板:
二者都难以支撑真正意义上的超深 Transformer,如果目标是构建 上千层规模 的深度网络,传统结构难以满足要求。
2022 年,微软团队提出 DeepNorm,试图通过严格的数学约束来突破这一瓶颈。
DeepNorm 的核心思想是:保留 Post-Norm 的优势,但通过数值尺度的再设计解决其训练不稳定的问题。
他们提出了如下新的残差更新公式:
关键的改动有两点:
微软团队通过严密的数学推导,得出一组随网络深度变化的 配置,使得梯度在整个训练阶段都具有一致且可控的方差。
这套策略有效避免了 Post-Norm 中常见的梯度爆炸问题。
最终实验表明,DeepNorm 支持 1000 层级别的 Transformer 稳定训练,无需 Warm-up,并保持良好的收敛性。这在当时是一个里程碑式的结果。
除 DeepNorm 外,另一条更直接的实践路线是 Sandwich Norm 。这一结构在部分多模态模型(如 CogView 系列)中应用较多。
其核心做法是:同时在子层输入与输出位置施加 LayerNorm,形成双向约束。
这种方式同时控制了子层的输入尺度和残差相加后的输出尺度,有助于在复杂任务和大规模数据训练中保持稳定性,尤其适合多模态等信息分布更复杂的场景。虽然计算量略有增加,但整体训练过程更加可靠。
为便于理解,下表对主流结构作系统性比较:
特性 | Post-Norm(原始) | Pre-Norm(GPT/LLaMA) | DeepNorm(微软) |
|---|---|---|---|
归一化位置 | 残差相加之后 | 残差相加之前 | Post-Norm 变体(增加缩放因子) |
训练稳定性 | 较差,易出现梯度爆炸 | 稳定 | 非常稳定(有数学保证) |
是否依赖 Warm-up | 需要,并且需谨慎调节 | 通常不需要 | 不需要 |
深层表达能力 | 上限高(若能稳定训练) | 深层易出现表征坍塌 | 适用于极深网络(千层规模) |
典型模型 | BERT,初版 Transformer | GPT-3、LLaMA、PaLM | DeepNet |
回到最初的残差公式:
看似简单的一笔,却深刻影响了深度学习的整个发展方向。
在模型训练仍充满不确定性、优化方法远未成熟的年代,残差结构的提出没有依赖全新的算子,也没有引入复杂的数学工具,而是回到一个朴素但极具创新力的原则:在探索更复杂的函数空间时,应始终保留一条通往原始状态的通路。换句话说,当我们试图让模型具备更强表达能力时,首先要确保已有的信息不会被破坏。
这个简单的加法,体现了一种具备高度启发意义的“增量式”思维:在保留原始表征的前提下,通过逐层累积细微而稳定的改进,让网络得以逐步获得更强的能力。
当我们看到大型模型展现出复杂推理、长文本生成或多模态理解能力时,它们背后依赖的正是这条贯穿始终的结构化路径。残差连接确保了极深网络不会在训练早期就因梯度消失或爆炸而陷入停滞,使庞大参数空间真正“可用”。
可以说,如果没有这项设计,现代规模的 Transformer 很难成立,模型也无法在几十层之后仍保持有效学习,更不可能支撑今天超大规模语言模型的出现。