自注意力机制和位置编码等基本组件被组装成完整的 Transformer 架构。最初的 Transformer 模型,在论文《Attention Is All You Need》中提出,采用了编码器-解码器结构,这在机器翻译或文本摘要等序列到序列任务中是一种常见模式。与逐步处理序列的循环模型不同,Transformer 使用注意力机制同时处理整个输入序列,捕获不同距离的关联。该架构包含两个主要部分:一个编码器堆栈和一个解码器堆栈。digraph G { rankdir=TB; node [shape=box, style="filled", fontname="sans-serif", fillcolor="#e9ecef"]; edge [fontname="sans-serif"]; subgraph cluster_input { label = "输入处理"; style=filled; color="#dee2e6"; rank=same; Input_Tokens [label="输入词元"]; Input_Embed [label="输入嵌入", fillcolor="#ced4da"]; Pos_Encode_In [label="位置编码", fillcolor="#ced4da"]; Add_Norm_In [label="+", shape=circle, width=0.3, height=0.3, fillcolor="#868e96"]; Input_Tokens -> Input_Embed; Input_Embed -> Add_Norm_In; Pos_Encode_In -> Add_Norm_In; } subgraph cluster_encoder { label = "编码器堆栈"; style=filled; color="#a5d8ff"; // 浅蓝色 Encoder_Nx [label="编码器层 (Nx)", fillcolor="#74c0fc"]; // 蓝色 } subgraph cluster_decoder { label = "解码器堆栈"; style=filled; color="#96f2d7"; // 浅青色 Decoder_Nx [label="解码器层 (Nx)", fillcolor="#63e6be"]; // 青色 } subgraph cluster_output { label = "输出处理"; style=filled; color="#dee2e6"; Output_Tokens [label="输出词元\n(右移)"]; Output_Embed [label="输出嵌入", fillcolor="#ced4da"]; Pos_Encode_Out [label="位置编码", fillcolor="#ced4da"]; Add_Norm_Out [label="+", shape=circle, width=0.3, height=0.3, fillcolor="#868e96"]; Linear [label="线性层", fillcolor="#ced4da"]; Softmax [label="Softmax", fillcolor="#ced4da"]; Output_Probs [label="输出概率"]; Output_Tokens -> Output_Embed; Output_Embed -> Add_Norm_Out; Pos_Encode_Out -> Add_Norm_Out; Decoder_Nx -> Linear; Linear -> Softmax; Softmax -> Output_Probs; } Add_Norm_In -> Encoder_Nx [lhead=cluster_encoder]; Encoder_Nx -> Decoder_Nx [ltail=cluster_encoder, lhead=cluster_decoder, label=" 编码器\n输出 (K, V)", fontsize=10]; Add_Norm_Out -> Decoder_Nx [label=" 解码器\n输入 (Q)", fontsize=10]; {rank=same; Encoder_Nx; Decoder_Nx;} }Transformer 架构的整体示意图,展示了从输入词元通过编码器和解码器堆栈到输出概率的数据流向。注意承载着编码器输出到解码器的连接。编码器堆栈编码器的作用是处理整个输入序列,并生成一系列编码了输入信息的连续表示(带有上下文信息的嵌入)。它由堆叠的 $N$ 个相同层组成(在原始论文中通常 $N=6$)。每个层有两个主要子层:一个多头自注意力机制。一个逐位置全连接前馈网络。在每个子层周围都使用残差连接,之后是层归一化。这意味着每个子层的输出是 $LayerNorm(x + Sublayer(x))$,其中 $Sublayer(x)$ 是子层本身实现的功能(例如,多头注意力或前馈网络)。自注意力机制允许编码器中的每个位置关注前一层输出中的所有位置,有效捕获输入序列内的关联。前馈网络独立应用于每个位置。解码器堆栈解码器的作用是生成输出序列,通常以自回归方式逐个元素生成。与编码器类似,它也由堆叠的 $N$ 个相同层组成。然而,每个解码器层有三个主要子层:一个掩码多头自注意力机制。一个关注编码器堆栈输出的多头交叉注意力机制。一个逐位置全连接前馈网络。与编码器中一样,在每个子层周围都应用了残差连接和层归一化。掩码自注意力确保对位置 $i$ 的预测只能依赖于位置小于 $i$ 的已知输出,保留了生成所需的自回归属性。交叉注意力机制是序列到序列功能的核心:它允许解码器中的每个位置关注输入序列中的所有位置(通过编码器的输出表示)。连接编码器和解码器编码器和解码器之间的连接主要通过每个解码器层中的交叉注意力机制实现。整个编码器堆栈首先处理输入序列,生成一系列输出向量 $z = (z_1, ..., z_n)$。然后,这些向量 $z$ 被用作每个解码器层中交叉注意力子层中**键(K)和值(V)的来源。该交叉注意力层的查询(Q)**来自解码器内部的前一个子层(掩码自注意力层)的输出。这使得解码器在生成输出序列的每一步都能关注编码在 $z$ 中的输入序列的相关部分。输入和输出处理在输入序列进入编码器堆栈之前,输入词元使用嵌入层转换为向量,并将位置编码添加到这些嵌入中,以注入序列顺序信息。同样,对于解码器,目标输出词元(训练时右移,推理时为先前生成的词元)在进入解码器堆栈之前会进行嵌入并与位置编码结合。在最终解码器层生成其输出向量后,通常会使用最后的线性变换,接着是 Softmax 函数,将这些向量转换为目标词汇表上的概率分布,从而预测输出序列中的下一个词元。这种整体结构建立在包含注意力机制、残差连接和层归一化的堆叠层之上,构成了 Transformer 模型的基础。后续章节将更详细地分析每个组件,例如编码器和解码器层的具体结构、掩码注意力、交叉注意力、前馈网络和归一化。