Skip to content

Transformers 中的残差连接

Transformer 中的归一化与残差连接

Section titled “Transformer 中的归一化与残差连接”

Transformer 架构是现代自然语言处理(NLP)及其他领域的基石,其卓越性能依赖于几个关键组件。其中,残差连接(Residual Connections)和层归一化(Layer Normalization)的组合,通常以“Add & Norm”块的形式出现,至关重要。这种机制通过稳定学习过程并减轻梯度消失等问题,在训练非常深的 Transformer 模型时发挥着关键作用。

本章将探讨层归一化和残差连接的重要性,解释它们在 Transformer 中的运作机制,讨论它们的优势,并触及实际实现时的考量。

回想一下,Transformer 的编码器或解码器由一系列相同的层(或块)堆叠而成。每个层通常包含两个主要的子层:

  1. 多头自注意力机制 (A Multi-Head Self-Attention mechanism)。
  2. 一个位置维度的全连接前馈网络 (A position-wise Fully Connected Feed-Forward Network (FFN))。

“Add & Norm”操作应用于这两个子层中的每一个。也就是说,每个子层的输出是 LayerNorm(x + Sublayer(x)),其中 Sublayer(x) 是子层本身实现的功能(例如多头注意力或 FFN),x 是该子层的输入。

残差连接(Residual Connections),也称为跳跃连接(skip connections),由 ResNet 推广开来,旨在解决深度神经网络中的梯度消失问题。随着网络层数加深,梯度在反向传播过程中会变得越来越小,使得早期层难以有效学习。

残差连接通过将块的输入 x 直接添加到其输出 F(x) 来绕过一个或多个层。因此,该块的输出变为 F(x) + x。这使得梯度在反向传播过程中可以更直接地流经网络,从而更容易训练更深的架构。

简单来说,网络学习的是一个“残差映射”F(x)。如果恒等映射是最佳选择,那么网络学习使 F(x) 接近于零比用一堆非线性层从零开始学习恒等映射要容易得多。数学表示为:块的输出 = 子层的输出 + 块的输入。

层归一化(Layer Normalization,LN)是一种用于独立地对每个数据样本的特征进行归一化的技术。与批量归一化(Batch Normalization)不同,批量归一化是对批量维度进行归一化,而层归一化则是对单个训练样本在单个层中所有神经元的输入求和后,计算均值和方差进行归一化。

这使得 LN 与批量大小无关,特别适用于循环神经网络和 Transformer 这样序列长度可能变化的架构。它有助于稳定隐藏状态的动态变化,加速训练,并通常能改善泛化能力。

数学上,对于给定输入向量 x(表示单个样本在某个层中的激活值),层归一化通常计算如下: 首先,计算该样本 x 中元素的均值(mu)和标准差(sigma)。 然后,归一化 x 得到 x_hat:x_hat = (x - mu) / sqrt(sigma^2 + epsilon),其中 epsilon 是一个用于数值稳定的小常数。 最后,使用特定于该层的可学习参数 gamma(缩放)和 beta(偏移)对归一化后的输出 y 进行缩放和偏移:y = gamma * x_hat + beta。

这种缩放和偏移允许网络学习对该层而言,归一化是否以及在多大程度上是最佳的,从而保留其表示能力。

在 Transformer 架构中,层归一化通常应用于残差连接之后。每个子层(多头注意力或 FFN)的操作顺序如下:

  1. 输入 x 通过子层(例如多头注意力)得到 Sublayer_Output。
  2. 应用残差连接:Residual_Output = x + Sublayer_Output。
  3. 对这个求和结果应用层归一化:Final_Output = LayerNorm(Residual_Output)。

设 x_0 是 Transformer 层的输入。 第一个子层(多头注意力)的处理过程如下: attn_out = MultiHeadAttention(x_0) add_norm_1_out = LayerNorm(x_0 + attn_out) 然后,这个 add_norm_1_out 成为第二个子层(前馈网络)的输入: ffn_out = FeedForwardNetwork(add_norm_1_out) add_norm_2_out = LayerNorm(add_norm_1_out + ffn_out) 这个 add_norm_2_out 就是 Transformer 层的最终输出。

这种特定的顺序(先相加再归一化,也称为“post-LN”)被用于最初的 Transformer 论文中。诸如“pre-LN”(Sublayer(LayerNorm(x)) + x)的变体也存在,有时被发现在非常深的網絡中提供更稳定的训练,尽管 post-LN 仍然常见。

残差连接和层归一化的结合提供了几个关键优势:

  • 稳定训练:层归一化有助于将激活值保持在合理的范围内,防止梯度爆炸或消失,并使优化过程更平滑。这稳定了训练过程,特别是对于深度网络。
  • 使更深的网络成为可能:残差连接对于训练非常深的网络至关重要,它们确保梯度可以有效地传播到早期层。Transformer 可以拥有几十层。
  • 提高学习速度和收敛性:通过促进梯度流动和稳定激活,“Add & Norm”通常能导致更快的收敛,并允许使用更高的学习率。
  • 增强模型性能和泛化能力:更稳定的训练过程和训练更深模型的能力有助于在未见数据上获得更好的整体性能和泛化能力。

在实现或使用 Transformer 时,请考虑与归一化和残差连接相关的以下几点:

  • 初始化:网络权重的适当初始化(例如 Xavier/Glorot 或 He 初始化)以及层归一化中 gamma 和 beta 参数的初始化(通常 gamma 初始化为1,beta 初始化为0)对于稳定训练很重要。
  • 层归一化的位置:虽然 post-LN 是标准做法,但 pre-LN 是另一种选择,一些研究表明它能提高超深 Transformer 的稳定性和性能。选择可能取决于具体的架构和任务。
  • 超参数调优:模型深度(层数)、隐藏层维度、注意力头数和 dropout 率等参数与归一化和残差连接的效果相互影响。通常需要仔细调优。
  • 计算开销:层归一化会增加每层的计算成本。然而,其在训练稳定性使模型可以更深带来的好处通常 outweigh 这种成本。

“Add & Norm”组件,结合了残差连接和层归一化,是 Transformer 架构的一个基本设计元素。它不仅仅是一个附加功能,而是使 Transformer 在大深度下可训练且有效的一个不可或缺的部分。

通过促进梯度流动、稳定激活并支持更深的模型,这些技术在 Transformer 在广泛的 NLP 和其他序列建模任务中取得成功方面发挥了关键作用。理解它们的作用对于任何使用或开发基于 Transformer 的模型的人来说至关重要。随着研究的进展,新的归一化技术或变体可能会出现,但管理信号传播和稳定学习的核心原则将始终至关重要。

如需进一步学习,请参考原始的 Transformer 论文(“Attention Is All You Need”)以及关于层归一化变体及其对深度学习模型训练影响的研究。