Transformer 是由 Google 团队在 2017 年提出的一种自然语言处理(NLP)经典架构,如今广泛应用的 BERT 模型也是基于该结构构建。与传统的 RNN 不同,Transformer 引入了 Self-Attention 机制,摒弃了顺序处理结构,从而支持并行化训练,并能够捕捉全局上下文信息。
Transformer 主要由两个核心组件构成:Encoder 和 Decoder。每个部分都包含 6 个相同的层(block)。下图展示了其用于中英文翻译的整体结构:
[此处为图片1]整个模型的工作流程如下:
第一步:获取输入表示
对输入句子中的每一个单词,生成对应的表示向量 x。这个向量是通过将单词本身的 Embedding 与其所在位置的位置 Embedding 相加得到的。
第二步:编码过程
将包含所有单词表示的矩阵 X(维度为 n×d,其中 n 是句子长度,d=512 为向量维度)送入 Encoder 部分。经过 6 层 Encoder block 后,输出一个包含完整语义信息的编码矩阵 C,每一行对应一个单词的上下文增强表示。每层 Encoder 的输入和输出维度保持一致。
第三步:解码与预测
Decoder 负责根据已翻译的部分逐词生成下一个目标词。它接收来自 Encoder 的编码结果 C,并结合已生成的目标序列进行预测。例如,先输入起始符 "<Begin>" 来预测第一个词 "I";接着输入 "<Begin>" 和 "I" 来预测 "have",依此类推。
在训练过程中,为了防止当前步骤看到未来词汇,Decoder 使用了 Mask 机制,屏蔽掉当前时刻之后的所有词,确保预测仅依赖于历史信息。
[此处为图片3]Transformer 中每个单词的输入表示 x 是由两部分相加而成:词嵌入(Word Embedding)和位置嵌入(Positional Embedding)。
词嵌入可以通过预训练方法获得,如 Word2Vec 或 GloVe,也可以作为模型参数在训练过程中直接学习得到。无论哪种方式,其目的是将离散的单词映射到连续的向量空间中,以表达语义信息。
由于 Transformer 不使用 RNN 结构,无法天然捕捉序列顺序,因此必须显式地加入位置信息。位置 Embedding(记作 PE)与词 Embedding 具有相同的维度 d=512,用来表示单词在句子中的绝对位置。
PE 可通过可学习参数实现,但在原始 Transformer 中采用的是固定的函数计算方式,公式如下:
其中 pos 表示单词在序列中的位置索引,d 为向量维度,i 表示维度索引(即第 2i 和 2i+1 维分别对应正弦和余弦函数)。这种设计具备以下优势:
最终,将词 Embedding 与位置 Embedding 相加,形成最终输入向量 x,作为 Encoder 和 Decoder 各层的输入。
Self-Attention 是 Transformer 的核心技术,被广泛应用于 Encoder 和 Decoder 的各个子层中。它使得模型能够在处理某个词时,动态关注句子中其他相关词的信息,从而有效捕获长距离依赖关系。
Transformer 模型的内部架构如上图所示,左侧为编码器模块(Encoder block),右侧为解码器模块(Decoder block)。其中红色标记区域为 Multi-Head Attention 结构,该结构由多个 Self-Attention 单元堆叠而成。可以观察到,Encoder block 中包含一个 Multi-Head Attention 层,而 Decoder block 则包含两个,其中一个使用了 Masked 机制以防止信息泄露。在每个 Multi-Head Attention 层上方还连接着 Add & Norm 模块:Add 表示残差连接(Residual Connection),有助于缓解深层网络中的梯度消失问题;Norm 则代表 Layer Normalization,用于对当前层的激活输出进行归一化处理,提升训练稳定性。
[此处为图片1]由于 Self-Attention 是 Transformer 模型的核心机制,因此我们重点分析 Multi-Head Attention 及其基础单元 Self-Attention 的工作原理。接下来将逐步解析 Self-Attention 的具体计算流程。
Self-Attention 的结构如图所示,其计算过程依赖三个关键矩阵:Q(查询向量)、K(键向量)和 V(值向量)。在实际应用中,Self-Attention 的输入通常是词向量组成的矩阵 X,这些词向量可以是原始输入单词的嵌入表示,也可以来自前一个 Encoder block 的输出结果。Q、K、V 则是通过对输入矩阵 X 分别乘以可学习的线性变换权重矩阵 WQ、WK 和 WV 得到的。
[此处为图片2]假设 Self-Attention 的输入为矩阵 X,那么通过与对应的权重矩阵相乘即可获得 Q、K、V:
Q = X × WQ
K = X × WK
V = X × WV
其中,X、Q、K、V 的每一行均对应句子中的一个单词的向量表示。这一过程如图所示,实现了从输入到三个不同语义空间的映射。
[此处为图片3]在获得 Q、K、V 之后,便可开始计算 Self-Attention 的输出。首先计算 Q 与 K 的转置之间的点积,得到一个 n×n 的注意力得分矩阵(n 为序列长度),该矩阵反映了每个单词与其他所有单词之间的关联强度。为了控制点积结果的数值范围,避免梯度不稳定,需将其除以 √dk(dk 为 K 矩阵的维度)。
[此处为图片4]随后,对每一行应用 Softmax 函数,使每行的数值总和为 1,从而得到归一化的 attention 权重矩阵。该矩阵中的每个元素表示一个单词在生成上下文表示时对另一个单词的关注程度。
[此处为图片5]最后,将 Softmax 后的权重矩阵与 V 相乘,得到最终的输出矩阵 Z。Z 的每一行是所有单词值向量 Vi 按照 attention 权重加权求和的结果。例如,输出 Z1 即为所有 Vi 按第一行 attention 系数加权后的总和,如下图所示:
[此处为图片6]Multi-Head Attention 通过并行组合多个独立的 Self-Attention 单元来增强模型捕捉不同子空间特征的能力。如论文中所示,该结构包含 h 个并行的 Self-Attention 层(例如 h=8)。输入 X 被同时送入这 8 个分支,各自独立计算出一个输出矩阵 Z1 到 Z8。
[此处为图片7]这 8 个输出矩阵被拼接(Concat)成一个联合矩阵,再经过一个线性变换层(Linear Layer),最终生成 Multi-Head Attention 的输出 Z。值得注意的是,该输出矩阵 Z 与原始输入 X 的维度保持一致,确保了模块间的兼容性与堆叠可行性。
[此处为图片8]Transformer 的 Encoder block 主要由两个核心组件构成:Multi-Head Attention 层和前馈神经网络(Feed-Forward Network),两者之间均配有 Add & Norm 结构。输入首先进入 Multi-Head Attention 层进行全局上下文建模,之后通过残差连接与归一化传递至前馈网络进一步处理。整个结构支持多层堆叠,从而逐步提取更高层次的语言表征。
在 Transformer 模型中,Encoder block 的结构如上图红色部分所示,主要由 Multi-Head Attention、Add & Norm、Feed Forward 以及另一个 Add & Norm 模块串联构成。前文已经详细介绍了 Multi-Head Attention 的计算机制,接下来将重点解析 Add & Norm 和 Feed Forward 两个关键组件。
Add & Norm 层包含两个操作:残差连接(Add)和层归一化(Norm),其数学表达形式如下:
Add & Norm 公式
其中,?X 表示进入 Multi-Head Attention 或 Feed Forward 模块的输入向量,而 MultiHeadAttention(X) 与 FeedForward(X) 则代表对应模块的输出结果。值得注意的是,输出维度与输入 ?X 相同,因此可以直接进行相加操作。
Add 指的是 ?X + MultiHeadAttention(X),这是一种典型的残差连接结构,广泛应用于深层网络中(如 ResNet),能够有效缓解梯度消失问题,使模型更聚焦于当前层的学习差异。
[此处为图片1]Norm 指的是 Layer Normalization(层归一化),常用于 RNN 类网络结构中。该操作通过对每一层神经元的输入进行标准化处理,使其均值和方差保持一致,从而加快模型训练过程中的收敛速度。
Feed Forward 层本质上是一个两层全连接网络,结构相对简单但作用关键。第一层使用 ReLU 作为激活函数,第二层则不使用任何激活函数,直接输出线性变换结果。其计算公式如下:
Feed Forward
输入为矩阵 X,经过该模块后得到的输出矩阵维度与原始输入 ?X 完全相同,保证了信息流在不同模块间传递的一致性。
结合上述介绍的 Multi-Head Attention、Feed Forward 和 Add & Norm 模块,即可搭建出一个完整的 Encoder block。每个 Encoder block 接收一个形状为 n×d 的输入矩阵 ?X,并输出同样维度的矩阵 ?O(n×d)。通过堆叠多个 Encoder block,便可形成完整的 Encoder 结构。
第一个 Encoder block 的输入是句子中各单词的嵌入表示矩阵,后续每一个 Encoder block 的输入则是前一个 block 的输出结果。最终,最后一个 Encoder block 输出的矩阵即为编码后的上下文信息矩阵 C,该矩阵将在 Decoder 阶段被充分利用。
[此处为图片2]Encoder 编码句子信息
Transformer 的 Decoder block 如上图红色区域所示,整体结构与 Encoder block 类似,但在细节设计上有几处重要区别:
Decoder 中的第一个 Multi-Head Attention 使用了 Masked 操作,原因在于翻译任务是按顺序逐词生成的——只有当第 i 个词被正确预测后,才能继续生成第 i+1 个词。为了防止当前位置“窥探”未来的信息,必须对后续位置进行掩码屏蔽。
以中文句子“我有一只猫”翻译为英文“I have a cat”为例说明这一机制。在此过程中会用到类似 Teacher Forcing 的训练策略(不了解此概念者可参考相关文献中的 Seq2Seq 模型详解)。在训练阶段,Decoder 根据已知的历史序列来预测当前最可能的输出词。
例如,初始输入为起始符 “<Begin>”,模型预测出第一个单词为 “I”;接着输入 “<Begin> I”,预测下一个词为 “have”,依此类推。
[此处为图片3]Decoder 预测
得益于 Teacher Forcing 机制,Decoder 可以在训练时并行处理整个目标序列。具体来说,将正确的输出序列(如 “<Begin> I have a cat”)作为输入,同时将偏移一位的目标序列(“I have a cat <end>”)作为监督标签进行训练。
在预测第 i 个词时,需屏蔽掉所有第 i+1 位置及之后的词信息。这种 Mask 操作是在 Self-Attention 中 Softmax 运算之前执行的。举例说明,用数字 0 1 2 3 4 5 分别代表 “<Begin> I have a cat <end>” 这一完整序列,确保每个时刻只能关注到当前及之前的位置。
在 Transformer 模型的 Decoder 部分,首先进行的是输入矩阵与 Mask 矩阵的处理。输入矩阵包含序列 "<Begin> I have a cat" 中五个单词(对应编号 0 到 4)的表示向量,而 Mask 矩阵是一个 5×5 的矩阵,用于限制信息流动的方向。从 Mask 结构可以看出,第 0 个单词只能关注自身信息,第 1 个单词可关注第 0 和第 1 个单词的信息,以此类推——每个位置仅能获取当前及之前位置的信息,确保了自回归特性。
输入矩阵与 Mask 矩阵
[此处为图片1]接下来进入计算阶段,该过程与标准的 Self-Attention 机制类似。首先由输入矩阵 X 计算出查询矩阵 Q、键矩阵 K 和值矩阵 V。然后执行 Q 与 K 的转置相乘,得到 QKT 结果,这一步用于衡量各个单词之间的相关性。
QKT
[此处为图片2]在获得 QKT 后,需在其基础上应用 Softmax 函数以生成注意力分数 attention score。但在 Softmax 前,必须先将未来位置的信息屏蔽掉。具体做法是利用预先构建的 Mask 矩阵对 QKT 进行遮掩操作,使得每一个单词无法“看到”其后单词的内容。经过这一处理后,再对被遮蔽的 QKT(即 Mask QKT)进行归一化,保证每一行的数值总和为 1。例如,单词 0 在单词 1、2、3、4 上的注意力得分均为 0,表明这些位置已被有效屏蔽。
Softmax 之前 Mask
[此处为图片3]随后,使用处理后的 Mask QKT 与值矩阵 V 相乘,得到最终输出矩阵 Z。此时,每个位置的输出向量只依赖于其自身及其前面的信息。比如,单词 1 的输出向量 Z 仅融合了前两个时间步的信息,符合解码时逐步生成的要求。
Mask 之后的输出
[此处为图片4]通过上述流程即可完成单个 Masked Self-Attention 模块的运算,输出结果记作 Zi。接着仿照 Encoder 的结构,采用多头机制(Multi-Head Attention),将多个 Zi 拼接并线性变换,得到第一个 Multi-Head Attention 层的完整输出 Z,其维度与原始输入 X 保持一致。
Decoder block 中的第二个 Multi-Head Attention 与第一个相比变化较小,关键区别在于其中的 K 和 V 矩阵并非来自上一层 Decoder 的输出,而是基于 Encoder 的最终编码结果 C 计算而来。具体而言,K 和 V 由 Encoder 输出的上下文矩阵 C 经线性变换得到,而 Q 矩阵则由当前 Decoder block 的输入(即上一个 Decoder block 的输出 Z;若为首个 block,则使用初始输入矩阵 X)计算得出。其余计算步骤与前述一致。
这种设计的优势在于:在解码过程中,Decoder 的每个位置都能访问 Encoder 所有位置的完整语义信息,且这些信息无需经过 Mask 处理,从而实现源序列到目标序列的有效对齐。
在 Decoder block 的最后阶段,通过 Softmax 层来预测下一个最可能的单词。此前各层已生成最终输出矩阵 Z,由于 Mask 的存在,Z 仅包含第一个单词的信息,Z 包含前两个单词的影响,依此类推。Softmax 会逐行作用于该输出矩阵,每行代表一个位置上各词汇的概率分布,据此选择概率最高的词作为输出。
Decoder Softmax 之前的 Z
[此处为图片5]Decoder Softmax 预测
[此处为图片6]以上即为一个完整的 Decoder block 工作机制。与 Encoder 类似,整个 Decoder 也是由多个这样的 block 堆叠而成,逐层深化特征表达能力。
不同于传统的 RNN 架构,Transformer 支持高度并行化的训练过程,显著提升了训练效率。然而,模型本身不具备捕捉序列顺序的能力,因此必须引入位置编码(Positional Embedding)融入输入中,否则模型将退化为一种无序的词袋模型。
Self-Attention 是 Transformer 的核心组件,其中的 Q、K、V 矩阵均由输入向量通过独立的线性变换获得。此外,在 Multi-Head Attention 结构中,多个并行的 Self-Attention 子模块能够从不同表征子空间中提取信息,从而捕获单词之间在多种语义维度上的关联强度,增强模型的表现力。
扫码加好友,拉您进群



收藏
