Transformer模型中的残差连接(Residual Connection)原理与作用详解
字数 2894 2025-12-15 07:41:48

Transformer模型中的残差连接(Residual Connection)原理与作用详解

这是一个在Transformer模型中至关重要,却常常被初学者低估的机制。让我们一步步来剖析它。

1. 问题描述:深层网络的退化与梯度传播难题

在深入Transformer之前,我们需要理解一个更基础的问题。理论上,更深的神经网络应该能学到更复杂、更抽象的特征,从而获得更好的性能。但实践发现,当网络层数增加到一定程度后,模型的性能不升反降——这就是 “网络退化” 问题。

这并非简单的过拟合,因为即使在训练集上,深层网络的训练误差也高于较浅的网络。其核心原因之一是 “梯度消失/爆炸”:在反向传播过程中,梯度需要逐层相乘。如果每层传递的梯度略小于1,多层累乘后,浅层网络的梯度会趋近于零(梯度消失);反之,若略大于1,则会指数级增长(梯度爆炸)。这使得深层网络难以训练。

残差连接 就是为了解决这一问题而被提出的革命性思想。

2. 残差连接的核心思想:恒等快捷路径

残差连接的精髓可以用一个公式概括:
输出 = 非线性变换(输入) + 输入
更正式地,对于一个由若干层构成的“块”(Block),其计算如下:
y = F(x, {W_i}) + x
其中:

  • x:块的输入。
  • y:块的输出。
  • F(x, {W_i}):我们希望该块学习的残差映射(Residual Mapping),它包含了层的权重W_i和非线性激活函数(如ReLU)。
  • + x:这就是快捷连接(Shortcut Connection)或恒等映射(Identity Mapping),它将输入x直接“绕道”加到输出上。

关键洞察:与其让这个多层非线性变换块F直接去学习一个复杂的目标映射H(x),不如让它去学习目标映射与输入之间的残差 H(x) - x。即 H(x) = F(x) + x

3. 在Transformer模型中的具体应用

Transformer模型由编码器(Encoder)和解码器(Decoder)堆叠而成,每个编码器/解码器层都包含两个核心的子模块,并且每个子模块都严格使用了残差连接,然后再进行层归一化(LayerNorm)。这是Transformer的原始设计,顺序为:子模块输出 -> 残差连接 -> 层归一化

a) 编码器层中的残差连接
一个编码器层主要包含两个子模块:

  1. 多头自注意力层(Multi-Head Self-Attention)
    AttentionOutput = MultiHeadAttention(x)
    y = LayerNorm(x + AttentionOutput)
    这里,x是注意力层的输入,直接加到注意力输出上。

  2. 前馈神经网络层(Feed-Forward Network)
    FFNOutput = FeedForward(y) (注意:这里的输入y是上一个子模块的输出)
    z = LayerNorm(y + FFNOutput)
    这里,上一个子模块的输出y直接加到FFN的输出上。

b) 解码器层中的残差连接
解码器层包含三个子模块(两个自注意力,一个编码器-解码器注意力),每个都遵循相同的“子模块 + 残差连接 + 层归一化”模式。

直观图示: 输入 x → [ 子模块计算 F(x) ] → 与原始输入 x 相加 → x + F(x) → 层归一化 → 输出。

4. 残差连接的核心作用与优势(循序渐进解释)

第一步:缓解梯度消失,使超深网络可训练
这是最根本的作用。在反向传播时,假设损失函数为 L,我们来计算梯度如何传到输入x
根据链式法则:∂L/∂x = ∂L/∂y * (∂y/∂x)
其中 y = F(x) + x
那么 ∂y/∂x = ∂F(x)/∂x + ∂x/∂x = ∂F(x)/∂x + 1
因此,∂L/∂x = ∂L/∂y * (∂F(x)/∂x + 1)

关键点:无论∂F(x)/∂x这个梯度有多小(甚至趋于0),因为有一个 “+1” 项的存在,梯度∂L/∂x至少能保持和∂L/∂y同量级,而不会衰减到零。这确保了梯度可以有效地反向传播到最浅层,使得成百上千层的网络训练成为可能。Transformer通常只有十几或几十层,但残差连接为其稳定训练提供了坚实基础。

第二步:提供模型结构上的“解耦”与信息高速公路

  • 解耦:残差连接让每个子模块(如注意力层、FFN层)不必再费力地学习完整的输出,而只需学习一个“增量”或“修正”(即残差F(x))。这降低了学习的难度。
  • 信息高速公路:快捷连接x构成了一条无损(或低损)的信息传递通道。即使某个子模块的F(x)学习效果不佳或暂时失效,输入x的信息依然能直接流向下一层,保证了网络最起码的基线性能,增强了模型的鲁棒性

第三步:促进特征重用与组合
原始输入x的低层特征(如局部信息、词元信息)可以通过残差连接逐层传递,并与深层网络学到的高层特征(如全局语义、句法关系)直接相加融合。这种特征叠加而非完全替换的方式,使得网络能同时利用不同抽象层次的特征,丰富了最终的表示。

第四步:与层归一化的协同效应
在Transformer中,残差连接位于层归一化之前。这种设计(LayerNorm(x + Sublayer(x)))被称为“后归一化”(Post-LN)。它的好处是:

  1. 稳定训练初期:训练开始时,子模块的参数是随机的,其输出F(x)可能很“混乱”或不稳定。将其与相对稳定的输入x相加,再进行归一化,可以让激活值在训练初期就保持在一个相对合理的范围内,加速收敛。
  2. 平滑优化地形:有研究认为,这种结构能产生更平滑的损失函数优化曲面,使优化过程更稳定。

5. 一个简单的比喻

想象你在学习画一幅复杂的画(目标函数H(x))。

  • 没有残差连接(普通网络):你每次都必须在一张全新的白纸上从头开始画,每一笔的误差都会累积。
  • 有残差连接:你先得到一张草稿(输入x)。你的任务(F(x))不是重画,而是在这张草稿上进行修改和润色,比如加深阴影、添加细节。即使你某次修改得不好(F(x)效果差),底稿还在,画作不会完全毁掉。同时,老师(梯度)可以直接告诉你“草稿的这个地方需要怎么改”,因为你和草稿之间有直接的联系(+1项)。

总结

残差连接是Transformer乃至现代深度学习的基石技术之一。它通过引入一个简单的恒等快捷路径+ x),巧妙地解决了深层网络的梯度传播难题,使超深模型的训练变得稳定可行。在Transformer中,它为每个子模块(注意力、FFN)提供了信息直通车,降低了学习难度,促进了不同层次特征的融合,并与层归一化协同工作,共同保障了模型训练的效率和最终性能。理解它,是理解Transformer如何能堆叠多层并有效工作的关键。

Transformer模型中的残差连接(Residual Connection)原理与作用详解 这是一个在Transformer模型中至关重要,却常常被初学者低估的机制。让我们一步步来剖析它。 1. 问题描述:深层网络的退化与梯度传播难题 在深入Transformer之前,我们需要理解一个更基础的问题。理论上,更深的神经网络应该能学到更复杂、更抽象的特征,从而获得更好的性能。但实践发现,当网络层数增加到一定程度后,模型的性能不升反降——这就是 “网络退化” 问题。 这并非简单的过拟合,因为即使在训练集上,深层网络的训练误差也高于较浅的网络。其核心原因之一是 “梯度消失/爆炸” :在反向传播过程中,梯度需要逐层相乘。如果每层传递的梯度略小于1,多层累乘后,浅层网络的梯度会趋近于零(梯度消失);反之,若略大于1,则会指数级增长(梯度爆炸)。这使得深层网络难以训练。 残差连接 就是为了解决这一问题而被提出的革命性思想。 2. 残差连接的核心思想:恒等快捷路径 残差连接的精髓可以用一个公式概括: 输出 = 非线性变换(输入) + 输入 更正式地,对于一个由若干层构成的“块”(Block),其计算如下: y = F(x, {W_i}) + x 其中: x :块的输入。 y :块的输出。 F(x, {W_i}) :我们希望该块学习的 残差映射 (Residual Mapping),它包含了层的权重 W_i 和非线性激活函数(如ReLU)。 + x :这就是 快捷连接 (Shortcut Connection)或 恒等映射 (Identity Mapping),它将输入 x 直接“绕道”加到输出上。 关键洞察 :与其让这个多层非线性变换块 F 直接去学习一个复杂的目标映射 H(x) ,不如让它去学习目标映射与输入之间的 残差 H(x) - x 。即 H(x) = F(x) + x 。 3. 在Transformer模型中的具体应用 Transformer模型由编码器(Encoder)和解码器(Decoder)堆叠而成,每个编码器/解码器层都包含两个核心的子模块,并且每个子模块都严格使用了残差连接,然后再进行层归一化(LayerNorm)。这是Transformer的原始设计,顺序为: 子模块输出 -> 残差连接 -> 层归一化 。 a) 编码器层中的残差连接 一个编码器层主要包含两个子模块: 多头自注意力层(Multi-Head Self-Attention) : AttentionOutput = MultiHeadAttention(x) y = LayerNorm(x + AttentionOutput) 这里, x 是注意力层的输入,直接加到注意力输出上。 前馈神经网络层(Feed-Forward Network) : FFNOutput = FeedForward(y) (注意:这里的输入 y 是上一个子模块的输出) z = LayerNorm(y + FFNOutput) 这里,上一个子模块的输出 y 直接加到FFN的输出上。 b) 解码器层中的残差连接 解码器层包含三个子模块(两个自注意力,一个编码器-解码器注意力),每个都遵循相同的“子模块 + 残差连接 + 层归一化”模式。 直观图示 : 输入 x → [ 子模块计算 F(x) ] → 与原始输入 x 相加 → x + F(x) → 层归一化 → 输出。 4. 残差连接的核心作用与优势(循序渐进解释) 第一步:缓解梯度消失,使超深网络可训练 这是最根本的作用。在反向传播时,假设损失函数为 L ,我们来计算梯度如何传到输入 x 。 根据链式法则: ∂L/∂x = ∂L/∂y * (∂y/∂x) 其中 y = F(x) + x 。 那么 ∂y/∂x = ∂F(x)/∂x + ∂x/∂x = ∂F(x)/∂x + 1 。 因此, ∂L/∂x = ∂L/∂y * (∂F(x)/∂x + 1) 。 关键点 :无论 ∂F(x)/∂x 这个梯度有多小(甚至趋于0),因为有一个 “+1” 项的存在,梯度 ∂L/∂x 至少能保持和 ∂L/∂y 同量级,而不会衰减到零。这确保了梯度可以有效地反向传播到最浅层,使得成百上千层的网络训练成为可能。Transformer通常只有十几或几十层,但残差连接为其稳定训练提供了坚实基础。 第二步:提供模型结构上的“解耦”与信息高速公路 解耦 :残差连接让每个子模块(如注意力层、FFN层)不必再费力地学习完整的输出,而只需学习一个“增量”或“修正”(即残差 F(x) )。这降低了学习的难度。 信息高速公路 :快捷连接 x 构成了一条无损(或低损)的信息传递通道。即使某个子模块的 F(x) 学习效果不佳或暂时失效,输入 x 的信息依然能直接流向下一层,保证了网络最起码的基线性能,增强了模型的 鲁棒性 。 第三步:促进特征重用与组合 原始输入 x 的低层特征(如局部信息、词元信息)可以通过残差连接逐层传递,并与深层网络学到的高层特征(如全局语义、句法关系)直接相加融合。这种 特征叠加 而非完全替换的方式,使得网络能同时利用不同抽象层次的特征,丰富了最终的表示。 第四步:与层归一化的协同效应 在Transformer中,残差连接位于层归一化之前。这种设计( LayerNorm(x + Sublayer(x)) )被称为“后归一化”(Post-LN)。它的好处是: 稳定训练初期 :训练开始时,子模块的参数是随机的,其输出 F(x) 可能很“混乱”或不稳定。将其与相对稳定的输入 x 相加,再进行归一化,可以让激活值在训练初期就保持在一个相对合理的范围内,加速收敛。 平滑优化地形 :有研究认为,这种结构能产生更平滑的损失函数优化曲面,使优化过程更稳定。 5. 一个简单的比喻 想象你在学习画一幅复杂的画(目标函数 H(x) )。 没有残差连接(普通网络) :你每次都必须在一张全新的白纸上从头开始画,每一笔的误差都会累积。 有残差连接 :你先得到一张草稿(输入 x )。你的任务( F(x) )不是重画,而是在这张草稿上进行 修改和润色 ,比如加深阴影、添加细节。即使你某次修改得不好( F(x) 效果差),底稿还在,画作不会完全毁掉。同时,老师(梯度)可以直接告诉你“草稿的这个地方需要怎么改”,因为你和草稿之间有直接的联系(+1项)。 总结 残差连接 是Transformer乃至现代深度学习的基石技术之一。它通过引入一个简单的 恒等快捷路径 ( + x ),巧妙地解决了深层网络的梯度传播难题,使超深模型的训练变得稳定可行。在Transformer中,它为每个子模块(注意力、FFN)提供了信息直通车,降低了学习难度,促进了不同层次特征的融合,并与层归一化协同工作,共同保障了模型训练的效率和最终性能。理解它,是理解Transformer如何能堆叠多层并有效工作的关键。