资讯动态

大模型学习15 - npl自然语言处理 - Transformer模型

发布时间:2026/10/14 19:32:52 来源:尧图企业网站定制
1 概述–此前的Seq2Seq模型通过注意力机制取得了一定提升但由于整体结构仍依赖 RNN依然存在计算效率低、难以建模长距离依赖等结构性限制。–为了解决这些问题Google在2017 年发表一篇论文《Attention Is All You Need》提出了一种全新的模型架构——Transformer。通过这种方式Transformer不仅显著提升了训练效率也增强了模型对长距离依赖的建模能力。该模型完全摒弃了 RNN 结构转而使用注意力机制直接建模序列中各位置之间的关系。通过这种方式Transformer不仅显著提升了训练效率也增强了模型对长距离依赖的建模能力。–Transformer 的提出对自然语言处理产生了深远影响。在机器翻译任务中它首次超越了 RNN 模型的表现并成为后续各类预训练语言模型的基础框架如 BERT、GPT 等。这些模型推动 NLP 进入了“预训练 微调”的新时代极大地提升了模型在多种任务上的通用性与性能。如今Transformer 架构不仅广泛应用于 NLP还扩展至语音识别、图像处理、代码生成等多个领域成为现代深度学习中最具代表性的通用模型之一。2 模型结构2.1 核心思想Transformer 最大的特点是完全抛弃了循环RNN和卷积CNN结构仅依赖注意力机制来处理序列数据。在 Seq2Seq 模型中注意力机制的引入显著增强了模型的表达能力。它允许解码器在生成每一个目标词时根据当前解码状态动态选择源序列中最相关的位置并据此融合信息。这一机制有效缓解了将整句信息压缩为固定向量所带来的信息瓶颈显著提升了翻译等任务中的建模效果。进一步分析可以发现注意力机制不仅是信息提取的工具其本质是在每一个目标位置上显式建模该位置与源序列中各位置之间的依赖关系。与此同时循环神经网络RNN作为 Seq2Seq 模型的核心结构其作用也在于建模序列中的依赖关系。通过隐藏状态的递归传递RNN 使当前位置的表示能够整合前文信息从而隐式捕捉上下文依赖。从功能角度看RNN 与注意力机制完成的是同一类任务建立序列中不同位置之间的依赖联系。既然注意力机制也具备建模依赖关系的能力那么理论上它就可以在功能上替代 RNN。此外相比 RNN注意力机制在结构上具备明显优势无需顺序计算便于并行处理任意位置间可直接建立联系更适合捕捉长距离依赖。因此它不仅具备替代的可能也在效率与效果上表现更优。既然如此是否可以将 Seq2Seq 中的 RNN 结构全部替换为注意力机制呢| || |VTransformer 模型正是在这一思路下诞生的。它摒弃了传统的循环结构仅依靠注意力机制完成输入序列和输出序列中所有位置之间的依赖建模任务。这一结构上的彻底变革也正是论文标题 Attention is All You Need 所体现的核心理念。优点并行计算能力强不像 RNN 必须按时间步依次处理Transformer 可以同时处理整个序列。长距离依赖建模好任意两个位置之间的信息传递路径都是 O(1)而 RNN 需要逐步传递。可扩展性好结构规整容易堆叠得很深适合大规模训练。2.2 整体结构Transformer 的整体结构延续了 Seq2Seq 模型中 “编码器-解码器” 的设计理念其中编码器Encoder: 负责对输入序列进行理解和表示解码器Decoder: 则根据编码器的输出逐步生成目标序列。与基于 RNN 的 Seq2Seq 模型一样Transformer 的解码器采用自回归方式生成目标序列。不同之处在于每一步的输入是此前已生成的全部词模型会输出一个与输入长度相同的序列但我们只取最后一个位置的结果作为当前预测。这个过程不断重复直到生成结束标记 。此外Transformer 的编码器和解码器模块分别由多个结构相同的层堆叠而成。通过层层堆叠模型能够逐步提取更深层次的语义特征从而增强对复杂语言现象的建模能力。标准的 Transformer 模型通常包含 6个编码器层和 6 个解码器层。3 编码器3.1 概述Transformer 的编码器用于理解输入序列的语义信息并生成每个token的上下文表示为解码器生成目标序列提供基础。是原始架构中负责“理解输入”的部分。它把输入序列转换成一组富含上下文信息的向量表示供解码器或下游任务使用编码器由多个结构相同的编码器层Encoder Layer堆叠而成。每个 Encoder Layer的主要任务都是对其输入序列进行上下文建模使每个位置的表示都能融合来自整个序列的全局信息。每个 Encoder Layer都包含两个子层sublayer分别是自注意力子层Self-Attention Sublayer和前馈神经网络子层Feed-Forward Sublayer。各层作用如下Self-Attention用于捕捉序列中各位置之间的依赖关系。Feed-Forward用于对每个位置的表示进行非线性变换从而提升模型的表达能力。3.2 自注意力层自注意力机制Self-Attention是 Transformer 编码器的核心结构之一它的作用是在序列内部建立各位置之间的依赖关系使模型能够为每个位置生成融合全局信息的表示。之所以被称为“自”注意力是因为模型在计算每个位置的表示时所参考的信息全部来自同一个输入序列本身而不是来自另一个序列。3.2.1 自注意力计算过程自注意力的完整计算过程如下3.2.1.1生成 Query、Key、Value 向量自注意力机制的第一步是将输入序列中的每个位置表示映射为三个不同的向量分别是 查询Query、键Key 和 值Value。这些向量的作用如下Query表示当前词的用于发起注意力匹配的向量Key表示序列中每个位置的内容标识用于与 Query 进行匹配Value表示该位置携带的信息用于加权汇总得到新的表示。自注意力的核心思想是每个位置用自身的 Query 向量与整个序列中所有位置的 Key 向量进行相关性计算从而得到注意力权重并据此对对应的 Value 向量加权汇总形成新的表示。三个向量的计算公式如下其中 Wq,Wk,Wv 均为可学习的参数矩阵。3.2.1.2计算位置间相关性完成 Query、Key、Value 向量的生成后模型会使用每个位置的 Query 向量与所有位置的 Key 向量进行相关性评分。评分函数采用向量点积形式。由于在高维空间中点积的数值可能过大会影响 softmax 的稳定性因此在实际计算中对结果进行了缩放。最终的评分函数为其中 dk 是 key 向量的维度用于缩放点积的幅度。这个分数越大表示第 i 个位置越应该关注第 j 个位置的信息。对于整个序列可以通过矩阵运算一次性计算所有位置之间的评分计算公式如下图所示3.2.1.3计算注意力权重在得到每个位置与所有位置之间的相关性评分后模型会使用 softmax 函数进行归一化确保每个位置对所有位置的关注程度之和为 1从而形成一个有效的加权分布。对于整个序列模型要做的是对之前得到的注意力评分矩阵的每一行进行softmax归一化。3.2.1.4加权汇总生成输出最后模型会根据注意力权重对所有位置的 Value 向量进行加权求和得到每个位置融合全局信息后的新表示。对于整个序列同样可以通过矩阵运算一次性计算所有位置的输出如下图所示3.2.1.5总结综上所述可得整个自注意力机制的完整的计算公式如下对应原始论文中的3.2.2 多头自注意力计算过程自注意力机制通过 Query、Key 和 Value 向量计算每个位置与其他位置之间的依赖关系使模型能够有效捕捉序列中的全局信息。然而自然语言本身具有高度的语义复杂性一个句子往往同时包含多种类型的语义关系。例如句子“那只动物没有过马路因为它太累了”中就涉及多个层面的语言关系“它”指代“那只动物”属于跨句的代指关系“因为”连接前后两个分句体现语义上的因果逻辑“过马路”构成动词短语属于固定的动宾结构。要准确理解这类句子模型需要同时识别并建模多种层次和类型的依赖关系。但这些信息很难通过单一视角或一套注意力机制完整捕捉。为此Transformer 引入了多头注意力机制Multi-Head Attention。其核心思想 : 通过多组独立的 Query、Key、Value 投影让不同注意力头分别专注于不同的语义关系最后将各头的输出拼接融合。多头注意力的计算过程如下3.2.2.1分别计算各头注意力每个 Self-Attention Head 独立计算一套注意力输出。3.2.2.2合并多头注意力多个输出矩阵按维度拼接再乘以Wo得到最终多头注意力的输出。3.3 前馈神经网络层前馈神经网络Feed-Forward Network简称 FFN是 Transformer 编码器中每个子层的重要组成部分紧接在多头注意力子层之后。它通过对每个位置的表示进行逐位置、非线性的特征变换进一步提升模型对复杂语义的建模能力。一个标准的 FFN 子层包含两个线性变换和一个非线性激活函数中间通常使用 ReLU激活。其计算公式如下计算图如下3.4 残差连接与层归一化在 Transformer 的每个编码器层中每个子层包括自注意力子层和前馈神经网络子层其输出都要经过残差连接Residual Connection和层归一化Layer Normalization处理。这两者是深层神经网络中常用的结构用于缓解模型训练中的梯度消失、收敛困难等问题对于Transformer能够堆叠多层至关重要。3.4.1残差连接残差连接Residual Connection也称“跳跃连接”或“捷径连接”最初在计算机视觉领域被提出用于缓解深层神经网络中的梯度消失问题。其核心思想是将子层的输入直接与其输出相加形成一条跨越子层的“捷径”其数学形式为y x SubLayer(x)具体计算过程如图所示残差连接确保反向传播时梯度至少有一条稳定通路可回传是深层网络可稳定训练的关键结构。3.4.2层归一化每个子层在残差连接之后都会进行层归一化Layer Normalization简称 LayerNorm。它的主要作用是 : 规范输入序列中每个token的特征分布某个token的表示可能在不同维度上有较大数值差异提升模型训练的稳定性。该操作会将每个token的向量调整为均值为 0、方差为 1 的规范分布具体效果如下图所示具体的计算公式如下假如某个token的特征向量为x[x1,x2,x3,x4,…,xd]1均值计算计算该向量在所有特征维度上的平均值其中d为特征维度向量长度。2标准差计算计算向量各维度的标准差3标准化变换将每个特征值转换为均值为 0、方差为 1 的标准分布ε为一个小的常数防止出现除以0的情况。4缩放和平移让模型可以学习在归一化后的基础上进行适当的调整保证归一化不会限制模型的表示能力。γi和βi为可学习参数。3.5 位置编码Transformer 模型完全摒弃了 RNN 结构意味着它不再按顺序处理序列而是可以并行处理所有位置的信息。尽管这带来了显著的计算效率提升却也引发了一个问题Transformer 无法像 RNN 那样天然地捕捉词语之间的顺序关系。换句话说在没有额外机制的情况下Transformer 无法区分“猫吃鱼”和“鱼吃猫”这类语序不同但词汇相同的句子。为了解决这一问题Transformer 引入了一个关键机制——位置编码Positional Encoding。该机制为每个词引入一个表示其位置信息的向量并将其与对应的词向量相加作为模型输入的一部分。这样一来模型在处理每个词时既能获取词义信息也能感知其在句子中的位置从而具备对基本语序的理解能力。位置编码最直接的方式是使用绝对位置编号来表示每个词的位置例如第一个词用 0第二个词用 1依此类推这样做虽然简单但有一个明显的问题越靠后的 token 位置编码就越大若直接与词向量相加会造成数值倾斜让模型更关注位置而忽视词义。为缓解这一问题可以考虑将位置编号归一化为[0, 1]区间例如用posT表示位置其中 T是句子长度。这种方式虽然使数值范围更平稳但也引入了一个严重的问题相同位置的词在不同长度句子中的位置编码不再一致。例如位置 5 在长度为 10 的句子中被编码为5/10在长度为 1000 的句子中则为5/1000。这种依赖输入长度的表示方式会导致模型难以形成稳定的位置感知能力。理想的做法是每个位置都拥有一个唯一且一致的编码与句子长度无关。为了解决上述问题Transformer 使用了一种基于正弦sin和余弦cos函数的位置编码方式具体定义如下其中pos是当前词在序列中的位置i用于表示位置编码向量的维度索引2i表示偶数维2i1表示奇数维dmodel是词向量的维度大小。序列中的每个位置 pos 对应一个长度为 d_model 的位置编码向量。该向量的偶数维度通过正弦函数生成奇数维度通过余弦函数生成如下图所示为帮助更直观地理解正余弦位置编码的构造和变化规律使用以下可视化工具进行交互体验根据图可以发现,当 position 发生微小改变的时候,浅层的变化可能会非常大,但是往下,两者就相差越来越小. 相反,浅层可能两个很相近,但是深层可能差别很大Transformer提出的这种编码方式不依赖任何可学习参数数值稳定并具备以下优势所有值都在[−1,1]范围内数值稳定编码方式固定、可预计算无需训练相同位置的编码在不同句子中保持一致编码之间具有数学规律便于模型在注意力机制中感知词语之间的相对位置关系。3.6 小结Transformer 编码器通过多个结构一致的编码器层堆叠构成每一层由两个核心子层组成3.6.1自注意力子层Self-Attention通过 Query、Key、Value 向量机制计算全序列中各位置之间的相关性提取全局上下文信息使每个词的表示能够融合整个序列的信息。3.6.2前馈神经网络子层Feed-Forward Network对每个位置独立进行非线性特征变换增强模型的表示能力。另外在这两个子层之后Transformer 引入了两个关键结构残差连接Residual Connection缓解深层网络中的梯度消失问题层归一化Layer Normalization规范向量分布提升训练稳定性。最后为弥补模型并行结构下缺乏顺序感的缺陷Transformer 使用基于正余弦函数的位置编码来提供序列中每个词的位置信息。编码器的完整结构如下图所示4 解码器4.1 概述Transformer 解码器的主要功能是根据编码器的输出逐步生成目标序列中的每一个词。其生成方式采用自回归机制autoregressive每一步的输入由此前已生成的所有词组成模型将输出一个与当前输入长度相同的序列表示。我们只取最后一个位置的输出作为当前步的预测结果。这一过程会不断重复直到生成特殊的结束标记 表示序列生成完成。解码器也由多个结构相同的解码器层堆叠组成。每个 Decoder Layer 都包含三个子层分别是Masked 自注意力子层、编码器-解码器注意力子层Encoder-Decoder Attention前馈神经网络子层Feed-Forward Network。各层作用如下Masked自注意力子层Masked Self Attention用于建模当前位置与前文词之间的依赖关系。为了在训练时模拟逐词生成的过程引入遮盖机制Mask限制每个位置只能关注它前面的词。编码器-解码器注意力子层Encoder-Decoder Attention用于建模当前解码位置与源序列各位置之间的依赖关系。通过注意力机制模型能够根据当前状态从编码器的输出中提取相关上下文信息相当于 Seq2Seq 模型中的 Attention 机制。前馈神经网络子层Feed-Forward Network与编码器中结构完全一致对每个位置的表示进行非线性变换增强模型的表达能力。每个子层后也都配有残差连接与层归一化Layer Normalization结构设计与编码器保持一致确保训练的稳定性和效率。此外解码器在输入端同样需要加入位置编码Positional Encoding用于提供序列中的位置信息其计算方式与编码器中相同。在输出端解码器的隐藏向量会送入一个线性变换层Linear映射为词表大小的向量并通过Softmax生成一个概率分布用于预测当前应输出的词。4.2 Masked 自注意力子层– 该子层的主要作用是建模目标序列中当前位置与前文之间的依赖关系为当前词的生成提供上下文语义支持。– 由于 Transformer 不具备像 RNN 那样的隐藏状态传递机制无法在序列生成过程中保留上下文信息因此在生成每一个词时必须将此前已生成的所有词作为输入通过自注意力机制重新建模上下文关系以预测下一个词。– 此外从结构上看Transformer 编解码器都具有一个典型特性输入多少个词就输出多少个表示。需要注意的是在推理阶段我们只使用解码器最后一个位置的输出作为当前步的预测结果如下图所示如果训练阶段也完全按照推理流程进行就必须将每个目标序列拆分成多个训练样本每个样本输入一段前文只预测一个词。如下图所示这种方式虽然逻辑合理但训练效率极低完全无法利用 Transformer 并行计算的优势。为提升效率Transformer 采用了并行训练策略一次性输入完整目标序列同时预测每个位置的词。如下图所示但如果不加限制这种方式会让模型在预测每个位置时“看到”后面的词即提前访问未来信息破坏生成任务的因果结构如下图所示为解决这个问题解码器在自注意力机制中引入了遮盖机制Mask。该机制会在计算注意力时阻止模型访问当前位置之后的词只允许它依赖自身及前文的信息。这样即使在并行训练时模型也只能像逐词生成一样“看见”它应该看到的内容从而保持训练与推理阶段的一致性。如下图所示Mask 机制的实现非常简单只需将注意力得分矩阵中当前位置对其后续位置的评分设置为 −∞如下图所示这样在经过 softmax 运算后这些位置的权重会趋近于 0。最终在加权求和时来自未来位置的信息几乎不会参与计算从而实现了“当前词只能看到它前面的词”的约束。如下图所示4.3 编码器-解码器注意力子层该子层的主要作用是建模当前解码位置与源语言序列中各位置之间的依赖关系帮助模型在生成目标词时有效地参考输入内容相当于Seq2Seq模型中的注意力机制。编码器-解码器注意力的核心机制与前面讲过的自注意力机制完全一致区别仅在于Query 来自解码器当前的输入表示即当前生成状态Key 和 Value 来自编码器的输出表示即整个源序列的上下文。也就是说当前生成位置使用自己的Query去“询问”编码器输出中的哪些位置最相关。注意力机制会根据 Query 与所有 Key 的相似度为每个源位置分配一个权重然后用这些权重对 Value 进行加权求和得到当前生成词所需的上下文信息。4.4 总结Transformer 解码器通过自回归方式逐步生成目标序列中的每一个词。其内部由多个结构相同的解码器层堆叠构成每一层包含三个核心子层Masked 自注意力子层负责建模目标序列内部的上下文关系。通过引入遮盖机制Mask限制训练时每个位置只能关注它前面的词从而在结构上模拟逐词生成防止信息泄露。编码器-解码器注意力子层负责建模目标序列与源序列之间的依赖关系。该机制允许解码器根据当前生成状态动态聚焦源语言中的关键信息实现跨序列的信息对齐。前馈神经网络子层对每个位置的表示进行独立的非线性变换增强模型的表达能力与编码器中的结构一致。为了确保训练稳定每个子层之后都配有残差连接与层归一化LayerNorm与编码器的设计保持一致便于模型堆叠和优化。此外解码器同样采用了 位置编码 来注入顺序信息输出端则通过线性变换和 Softmax 层将隐藏表示映射为词表概率分布从而逐步生成目标序列。在输出阶段解码器最后会通过一个 线性层 Softmax 将隐藏表示映射为词表上的概率分布逐步生成完整的目标句子。整体来看Transformer 解码器通过合理设计的多层结构与注意力机制既保持了训练效率又满足了生成任务的因果约束是现代自然语言生成模型的核心组件之一。解码器完整结构如下图所示3 模型训练与推理机制Transformer 的训练与推理都基于自回归生成机制Autoregressive Generation模型逐步生成目标序列中的每一个词。然而在实现方式上训练与推理存在明显区别。3.1 模型训练训练时Transformer 将目标序列整体输入解码器并在每个位置同时进行预测。为防止模型“看到”后面的词破坏因果顺序解码器在自注意力子层中引入了遮盖机制Mask限制每个位置只能关注它前面的词。这种机制让模型在结构上模拟逐词生成但在实现上能充分利用并行计算大幅提升训练效率。3.2 模型推理推理时每一步都要重新输入整个已生成序列模型需要基于全量前文重新计算注意力分布决定下一个词的输出。整个过程必须顺序执行无法并行。推理阶段模型每一步都要重新输入当前已生成的全部词通过自注意力机制建模上下文关系预测下一个词。模型会基于完整前文重新计算注意力分布生成当前步的输出。由于每一步的输入依赖前一步结果整个过程必须顺序执行无法并行。每步输出的是一个词的概率分布最终生成结果也可使用不同的解码策略如贪心搜索、束搜索等。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑