6.1概述此前的Seq2Seq模型通过注意力机制取得了一定提升但由于整体结构仍依赖 RNN依然存在计算效率低、难以建模长距离依赖等结构性限制。为了解决这些问题Google在2017 年发表一篇论文《Attention Is All You Need》提出了一种全新的模型架构——Transformer。该模型完全摒弃了 RNN 结构转而使用注意力机制直接建模序列中各位置之间的关系。通过这种方式Transformer不仅显著提升了训练效率也增强了模型对长距离依赖的建模能力。Transformer 的提出对自然语言处理产生了深远影响。在机器翻译任务中它首次超越了 RNN 模型的表现并成为后续各类预训练语言模型的基础框架如 BERT、GPT 等。这些模型推动 NLP 进入了“预训练 微调”的新时代极大地提升了模型在多种任务上的通用性与性能。如今Transformer 架构不仅广泛应用于 NLP还扩展至语音识别、图像处理、代码生成等多个领域成为现代深度学习中最具代表性的通用模型之一。6.2模型结构详解6.2.1核心思想在 Seq2Seq 模型中注意力机制的引入显著增强了模型的表达能力。它允许解码器在生成每一个目标词时根据当前解码状态动态选择源序列中最相关的位置并据此融合信息。这一机制有效缓解了将整句信息压缩为固定向量所带来的信息瓶颈显著提升了翻译等任务中的建模效果。进一步分析可以发现注意力机制不仅是信息提取的工具其本质是在每一个目标位置上显式建模该位置与源序列中各位置之间的依赖关系。与此同时循环神经网络RNN作为 Seq2Seq 模型的核心结构其作用也在于建模序列中的依赖关系。通过隐藏状态的递归传递RNN 使当前位置的表示能够整合前文信息从而隐式捕捉上下文依赖。从功能角度看RNN 与注意力机制完成的是同一类任务建立序列中不同位置之间的依赖联系。既然注意力机制也具备建模依赖关系的能力那么理论上它就可以在功能上替代 RNN。此外相比 RNN注意力机制在结构上具备明显优势无需顺序计算便于并行处理任意位置间可直接建立联系更适合捕捉长距离依赖。因此它不仅具备替代的可能也在效率与效果上表现更优。既然如此是否可以将 Seq2Seq 中的 RNN 结构全部替换为注意力机制Transformer 模型正是在这一思路下诞生的。它摒弃了传统的递归结构仅依靠注意力机制完成输入序列和输出序列中所有位置之间的依赖建模任务。这一结构上的彻底变革也正是论文标题 Attention is All You Need 所体现的核心理念。6.2.2整体结构Transformer 的整体结构延续了 Seq2Seq 模型中 “编码器-解码器” 的设计理念其中编码器Encoder负责对输入序列进行理解和表示而解码器Decoder则根据编码器的输出逐步生成目标序列。与基于 RNN 的 Seq2Seq 模型一样Transformer 的解码器采用自回归方式生成目标序列。不同之处在于每一步的输入是此前已生成的全部词模型会输出一个与输入长度相同的序列但我们只取最后一个位置的结果作为当前预测。这个过程不断重复直到生成结束标记 。此外Transformer 的编码器和解码器模块分别由多个结构相同的层堆叠而成。通过层层堆叠模型能够逐步提取更深层次的语义特征从而增强对复杂语言现象的建模能力。标准的 Transformer 模型通常包含 6个编码器层和 6 个解码器层。6.2.3编码器6.2.3.1概述Transformer 的编码器用于理解输入序列的语义信息并生成每个token的上下文表示为解码器生成目标序列提供基础。编码器由多个结构相同的编码器层Encoder Layer堆叠而成。每个 Encoder Layer的主要任务都是对其输入序列进行上下文建模使每个位置的表示都能融合来自整个序列的全局信息。每个 Encoder Layer都包含两个子层sublayer分别是自注意力子层Self-Attention Sublayer和前馈神经网络子层Feed-Forward Sublayer。各层作用如下Self-Attention用于捕捉序列中各位置之间的依赖关系。Feed-Forward用于对每个位置的表示进行非线性变换从而提升模型的表达能力。6.2.3.2自注意力层自注意力机制Self-Attention是 Transformer 编码器的核心结构之一它的作用是在序列内部建立各位置之间的依赖关系使模型能够为每个位置生成融合全局信息的表示。之所以被称为“自”注意力是因为模型在计算每个位置的表示时所参考的信息全部来自同一个输入序列本身而不是来自另一个序列。1自注意力计算过程自注意力的完整计算过程如下1生成Query、Key、Value向量自注意力机制的第一步是将输入序列中的每个位置表示映射为三个不同的向量分别是 查询Query、键Key 和 值Value。这些向量的作用如下Query表示当前词的用于发起注意力匹配的向量Key表示序列中每个位置的内容标识用于与 Query 进行匹配Value表示该位置携带的信息用于加权汇总得到新的表示。自注意力的核心思想是每个位置用自身的 Query 向量与整个序列中所有位置的 Key 向量进行相关性计算从而得到注意力权重并据此对对应的 Value 向量加权汇总形成新的表示。三个向量的计算公式如下其中Wq,Wk,Wv均为可学习的参数矩阵。2计算位置间相关性完成 Query、Key、Value 向量的生成后模型会使用每个位置的 Query 向量与所有位置的 Key 向量进行相关性评分。3计算注意力权重在得到每个位置与所有位置之间的相关性评分后模型会使用 softmax 函数进行归一化确保每个位置对所有位置的关注程度之和为 1从而形成一个有效的加权分布。对于整个序列模型要做的是对之前得到的注意力评分矩阵的每一行进行softmax归一化。4加权汇总生成输出最后模型会根据注意力权重对所有位置的 Value 向量进行加权求和得到每个位置融合全局信息后的新表示。对于整个序列同样可以通过矩阵运算一次性计算所有位置的输出如下图所示综上所述可得整个自注意力机制的完整的计算公式如下2多头自注意力计算过程自注意力机制通过 Query、Key 和 Value 向量计算每个位置与其他位置之间的依赖关系使模型能够有效捕捉序列中的全局信息。然而自然语言本身具有高度的语义复杂性一个句子往往同时包含多种类型的语义关系。例如句子“那只动物没有过马路因为它太累了”中就涉及多个层面的语言关系“它”指代“那只动物”属于跨句的代指关系“因为”连接前后两个分句体现语义上的因果逻辑“过马路”构成动词短语属于固定的动宾结构。要准确理解这类句子模型需要同时识别并建模多种层次和类型的依赖关系。但这些信息很难通过单一视角或一套注意力机制完整捕捉。为此Transformer 引入了多头注意力机制Multi-Head Attention。其核心思想是通过多组独立的 Query、Key、Value 投影让不同注意力头分别专注于不同的语义关系最后将各头的输出拼接融合。多头注意力的计算过程如下1分别计算各头注意力每个 Self-Attention Head 独立计算一套注意力输出。2合并多头注意力多个输出矩阵按维度拼接再乘以Wo得到最终多头注意力的输出。6.2.3.3前馈神经网络层前馈神经网络Feed-Forward Network简称 FFN是 Transformer 编码器中每个子层的重要组成部分紧接在多头注意力子层之后。它通过对每个位置的表示进行逐位置、非线性的特征变换进一步提升模型对复杂语义的建模能力。一个标准的 FFN 子层包含两个线性变换和一个非线性激活函数中间通常使用 ReLU激活。其计算公式如下FFN(x)Linear2(ReLU(Linear1(x)))W2∙ReLU(W1xb1)b2计算图如下6.2.3.4残差连接与层归一化在 Transformer 的每个编码器层中每个子层包括自注意力子层和前馈神经网络子层其输出都要经过残差连接Residual Connection和层归一化Layer Normalization处理。这两者是深层神经网络中常用的结构用于缓解模型训练中的梯度消失、收敛困难等问题对于Transformer能够堆叠多层至关重要。1残差连接残差连接Residual Connection也称“跳跃连接”或“捷径连接”最初在计算机视觉领域被提出用于缓解深层神经网络中的梯度消失问题。其核心思想是将子层的输入直接与其输出相加形成一条跨越子层的“捷径”其数学形式为yxSubLayer(x)具体计算过程如图所示残差连接确保反向传播时梯度至少有一条稳定通路可回传是深层网络可稳定训练的关键结构。2层归一化每个子层在残差连接之后都会进行层归一化Layer Normalization简称 LayerNorm。它的主要作用是规范输入序列中每个token的特征分布某个token的表示可能在不同维度上有较大数值差异提升模型训练的稳定性。该操作会将每个token的向量调整为均值为 0、方差为 1 的规范分布具体效果如下图所示6.2.3.5位置编码Transformer 模型完全摒弃了 RNN 结构意味着它不再按顺序处理序列而是可以并行处理所有位置的信息。尽管这带来了显著的计算效率提升却也引发了一个问题Transformer 无法像 RNN 那样天然地捕捉词语之间的顺序关系。换句话说在没有额外机制的情况下Transformer 无法区分“猫吃鱼”和“鱼吃猫”这类语序不同但词汇相同的句子。为了解决这一问题Transformer 引入了一个关键机制——位置编码Positional Encoding。该机制为每个词引入一个表示其位置信息的向量并将其与对应的词向量相加作为模型输入的一部分。这样一来模型在处理每个词时既能获取词义信息也能感知其在句子中的位置从而具备对基本语序的理解能力。位置编码最直接的方式是使用绝对位置编号来表示每个词的位置例如第一个词用 0第二个词用 1依此类推这样做虽然简单但有一个明显的问题越靠后的 token 位置编码就越大若直接与词向量相加会造成数值倾斜让模型更关注位置而忽视词义。为缓解这一问题可以考虑将位置编号归一化为[0, 1]区间例如用posT表示位置其中 T是句子长度。这种方式虽然使数值范围更平稳但也引入了一个严重的问题相同位置的词在不同长度句子中的位置编码不再一致。例如位置 5 在长度为 10 的句子中被编码为510在长度为 1000 的句子中则为51000。这种依赖输入长度的表示方式会导致模型难以形成稳定的位置感知能力。理想的做法是每个位置都拥有一个唯一且一致的编码与句子长度无关。为了解决上述问题Transformer 使用了一种基于正弦sin和余弦cos函数的位置编码方式具体定义如下6.2.3.6小结Transformer 编码器通过多个结构一致的编码器层堆叠构成每一层由两个核心子层组成1自注意力子层Self-Attention通过 Query、Key、Value 向量机制计算全序列中各位置之间的相关性提取全局上下文信息使每个词的表示能够融合整个序列的信息。2前馈神经网络子层Feed-Forward Network对每个位置独立进行非线性特征变换增强模型的表示能力。另外在这两个子层之后Transformer 引入了两个关键结构残差连接Residual Connection缓解深层网络中的梯度消失问题层归一化Layer Normalization规范向量分布提升训练稳定性。最后为弥补模型并行结构下缺乏顺序感的缺陷Transformer 使用基于正余弦函数的位置编码来提供序列中每个词的位置信息。编码器的完整结构如下图所示关注公众号开源创富指南第一时间解锁更多技术。创作不易感谢您的点赞关注祝您成功祝您发财