深度神经网络,包括包含多头注意力机制和前馈网络的 Transformer 编码器和解码器层,通常面临一个与训练效果相关的基本挑战。堆叠多层可以增加模型能力,但也可能使优化变得困难。梯度,即学习过程中使用的信号,在通过多层反向传播时可能会减弱或消失,阻碍了前面层的更新。同样地,梯度有时也可能变得过大,导致不稳定。为了解决这些问题,并使得训练 Transformer 典型的深层架构成为可能,采用了残差连接,也叫跳跃连接。这种技术因计算机视觉中的残差网络 (ResNets) 而广为人知,它为梯度在网络中传输提供了一条直接通路。残差连接的原理在 Transformer 层中,每个主要子层(多头自注意力机制和逐位置前馈网络)都包裹在残差连接中。核心思路非常直观:将子层的输入与其输出相加。令 $x$ 表示子层的输入(例如,来自前一层的输出或初始嵌入)。令 $SubLayer(x)$ 表示子层本身实现的函数(例如,多头注意力或 FFN)。该操作的输出,在 归一化之前,计算方法如下:$$ \text{残差输出} = x + SubLayer(x) $$这种相加操作通常紧接着层归一化,构成了 Transformer 图示中常见的“加和归一化”模块。digraph G { rankdir=TB; node [shape=box, style=rounded, fontname="Arial", fontsize=10, margin=0.2]; edge [fontname="Arial", fontsize=10]; input [label="输入 (x)", color="#495057", style="filled, rounded", fillcolor="#dee2e6"]; sublayer [label="子层\n(例如,多头注意力\n或前馈网络)", color="#1c7ed6", style="filled, rounded", fillcolor="#a5d8ff"]; add [label="+", shape=circle, width=0.3, height=0.3, fixedsize=true, color="#37b24d", style="filled, rounded", fillcolor="#b2f2bb"]; output [label="输出\n(至层归一化)", color="#495057", style="filled, rounded", fillcolor="#dee2e6"]; input -> sublayer [label=" "]; sublayer -> add [label=" SubLayer(x)"]; input -> add [label=" x ", constraint=false]; // 使用空格定位 add -> output; }残差连接跳过一个子层,并将原始输入 $x$ 添加到子层的输出 $SubLayer(x)$。残差连接为何有效改善梯度传输: 在反向传播时,残差块的梯度计算包含一条通过加法操作的直接回传路径。输出对输入 $x$ 的梯度包含来自该直接连接的 $+1$ 项。这确保了即使通过 $SubLayer(x)$ 路径的梯度变得非常小,仍然有梯度信号通过恒等连接 ($x$) 相对不受阻碍地回传。这大大缓解了梯度消失问题,使得信息能够更有效地在多层之间传递。促进恒等映射学习: 残差连接使得层更容易学习恒等函数。如果给定层的理想变换仅仅是保持输入不变,网络可以通过将 $SubLayer$ 内的权重趋近于零来实现这一点。没有残差连接,使用复杂的非线性变换来学习精确的恒等映射会很困难。这一特性使得可以在不一定损害性能的情况下增加层;如果需要,网络可以有效地“忽略”一个层。实现更深网络: 通过缓解梯度问题和简化恒等映射的学习,残差连接在成功训练那些代表强大 Transformer 模型特性的非常深的网络(编码器和解码器堆栈中通常有 6、12、24 或更多层)方面发挥着重要作用。在 Transformer 层中的实现在标准 Transformer 的编码器和解码器层中,你会发现两个主要子层,每个子层后面都跟着这个“加和归一化”步骤:多头注意力: 输入 $x$ 传入多头注意力机制。其输出 $Attention(x)$ 随后与原始输入 $x$ 相加。层归一化应用于这个和。 $$ Output_{Attn} = LayerNorm(x + MultiHeadAttention(x)) $$前馈网络: 第一个归一化步骤的输出,我们称之为 $y = Output_{Attn}$,作为逐位置前馈网络的输入。FFN 的输出 $FFN(y)$ 与其输入 $y$ 相加。应用最终的层归一化。 $$ Output_{Layer} = LayerNorm(y + FFN(y)) $$这些残差连接是一种看似简单却极度有效的技术,它们构成了 Transformer 设计中不可或缺的一部分,并对其在建模复杂序列数据方面的成功起到了很大作用。没有它们,训练现代大型语言模型中常见的深层堆栈会困难得多。