一、宏观结构:编码器-解码器 (Encoder-Decoder)
原始的 Transformer 模型遵循经典的编码器-解码器架构,常用于序列到序列 (Seq2Seq) 任务,如机器翻译。
-
编码器 (Encoder):
- 作用: 接收输入序列(例如,源语言句子),并将其转换为一系列连续的、上下文感知的表示 (contextualized embeddings)。
- 结构: 由 N 个相同的编码器层 (Encoder Layer) 堆叠而成。每个编码器层主要包含两个子层:
- 多头自注意力机制 (Multi-Head Self-Attention Mechanism)
- 位置全连接前馈网络 (Position-wise Feed-Forward Network)
- 这两个子层周围都有残差连接 (Residual Connection) 和层归一化 (Layer Normalization)。
-
解码器 (Decoder):
- 作用: 接收编码器的输出以及已经生成的目标序列的一部分,然后预测目标序列中的下一个词。
- 结构: 由 N 个相同的解码器层 (Decoder Layer) 堆叠而成。每个解码器层主要包含三个子层:
- 带掩码的多头自注意力机制 (Masked Multi-Head Self-Attention Mechanism)
- 多头编码器-解码器注意力机制 (Multi-Head Encoder-Decoder Attention Mechanism / Cross-Attention)
- 位置全连接前馈网络 (Position-wise Feed-Forward Network)
- 同样,这些子层周围也有残差连接和层归一化。
二、核心组件详解
-
输入嵌入 (Input Embedding) 和位置编码 (Positional Encoding):
- 输入嵌入: 与其他 NLP 模型类似,Transformer 首先将输入词元 (tokens) 转换为固定维度的向量。
- 位置编码: 由于自注意力机制本身不包含序列中词元的顺序信息(它平等地看待所有词元),我们需要引入位置信息。Transformer 使用正弦和余弦函数来创建位置编码向量,并将其加到对应的词嵌入向量上。
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
- 其中
pos
是词元在序列中的位置,i
是维度的索引,d_model
是嵌入向量的维度。 - 这种编码方式允许模型学习相对位置信息,并且可以处理比训练时更长的序列。
-
注意力机制 (Attention Mechanism): 这是 Transformer 的灵魂。其核心思想是为序列中的每个元素计算一个加权和,权重由该元素与其他元素之间的相关性决定。
- 缩放点积注意力 (Scaled Dot-Product Attention): 这是 Transformer 使用的具体注意力形式。
- 输入: 查询 (Query, Q),键 (Key, K),值 (Value, V)。可以理解为:
- Query (Q): 代表当前我们关注的元素。
- Key (K): 代表序列中所有可被关注的元素。
- Value (V): 代表这些可被关注元素的实际内容或信息。
- 计算过程:
- 计算相似度分数 (Score):
Score = Q * K^T
(Q 和 K 的转置进行点积)。 - 缩放 (Scale):
Scaled_Score = Score / sqrt(d_k)
(除以 K 向量维度的平方根,d_k
,以稳定梯度)。 - 计算注意力权重 (Attention Weights):
Weights = Softmax(Scaled_Score)
(对缩放后的分数应用 Softmax,使权重和为1)。 - 加权求和 (Weighted Sum):
Attention_Output = Weights * V
(用注意力权重对 V 进行加权求和)。
- 计算相似度分数 (Score):
- 直观理解: 对于一个 Query,我们计算它和所有 Key 的相似度,然后用这些相似度(经过 Softmax 归一化后)作为权重,去加权融合所有 Value,得到一个包含了上下文信息的输出。
- 输入: 查询 (Query, Q),键 (Key, K),值 (Value, V)。可以理解为:
- 缩放点积注意力 (Scaled Dot-Product Attention): 这是 Transformer 使用的具体注意力形式。
-
多头注意力 (Multi-Head Attention):
- 思想: 与其只执行一次注意力计算,不如将 Q、K、V 分别线性投影到多个不同的“表示子空间”(即“头”),在每个头中独立地执行缩放点积注意力,然后将所有头的输出拼接起来,再经过一次线性投影得到最终输出。
- 优势:
- 允许模型在不同位置共同关注来自不同表示子空间的信息。
- 如果单个注意力头可能只关注一种类型的相关性,多个头可以捕捉多种不同类型的相关性。
- 计算:
MultiHead(Q, K, V) = Concat(head_1, ..., head_h) * W_O
head_i = Attention(Q * W_Q_i, K * W_K_i, V * W_V_i)
其中W_Q_i, W_K_i, W_V_i
是每个头的投影矩阵,W_O
是最终的输出投影矩阵。
-
自注意力 (Self-Attention):
- 这是编码器和解码器中第一个注意力层使用的机制。
- 特点: Q、K、V 都来自同一个地方——前一层的输出(或最初的输入嵌入+位置编码)。
- 作用: 使得模型能够计算输入序列中任意两个词元之间的依赖关系,从而为每个词元生成一个富含上下文信息的表示。例如,在句子 “The animal didn’t cross the street because it was too tired” 中,自注意力可以帮助模型理解 “it” 指代的是 “animal” 而不是 “street”。
-
带掩码的自注意力 (Masked Self-Attention):
- 应用场景: 解码器中的第一个注意力层。
- 目的: 在生成目标序列时,解码器在预测第
i
个词时,只能关注到已经生成的前i-1
个词以及输入序列,不能“偷看”到第i
个词及其之后的词。 - 实现: 在计算 Softmax 之前,将未来位置的注意力分数设置为一个非常小的负数(例如
-infinity
),这样经过 Softmax 后,这些位置的权重会趋近于0。
-
编码器-解码器注意力 (Encoder-Decoder Attention / Cross-Attention):
- 应用场景: 解码器中的第二个注意力层。
- 特点:
- Query (Q) 来自解码器前一层的输出(即带掩码自注意力的输出)。
- Key (K) 和 Value (V) 来自编码器的最终输出。
- 作用: 允许解码器的每个位置关注输入序列中的所有位置。这使得解码器在生成目标词时,能够有效地利用源序列的信息。例如,在翻译时,决定下一个要翻译的词时,解码器会看源句子的哪些部分最相关。
-
位置全连接前馈网络 (Position-wise Feed-Forward Network, FFN):
- 结构: 每个注意力子层之后,都有一个 FFN。它由两个线性变换和一个 ReLU (或 GeLU, SwiGLU 等) 激活函数组成:
FFN(x) = max(0, x * W_1 + b_1) * W_2 + b_2
- 特点: 这个 FFN 对序列中的每个位置(每个词元的表示)进行完全相同的操作(使用相同的权重
W_1, b_1, W_2, b_2
),但是不同位置之间独立计算。 - 作用: 提供非线性变换,增加模型的表达能力,进一步处理注意力层输出的信息。
- 结构: 每个注意力子层之后,都有一个 FFN。它由两个线性变换和一个 ReLU (或 GeLU, SwiGLU 等) 激活函数组成:
-
残差连接 (Residual Connections) 和层归一化 (Layer Normalization):
- 残差连接: 每个子层(如自注意力、FFN)的输入会直接加到该子层的输出上,即
Output = Sublayer(Input) + Input
。这有助于缓解深度网络中的梯度消失问题,使得训练更深的网络成为可能。 - 层归一化: 在残差连接之后,会进行层归一化。它对每个样本在特征维度上进行归一化,有助于稳定训练过程,加速收敛。
- 组合:
Output = LayerNorm(Input + Sublayer(Input))
- 残差连接: 每个子层(如自注意力、FFN)的输入会直接加到该子层的输出上,即
三、解码器输出
解码器顶层的输出会经过一个线性层(将其维度映射到词汇表大小),然后通过一个 Softmax 函数,得到预测下一个词的概率分布。
四、现代 LLM 中的变体 (例如 Decoder-Only)
许多现代的大型语言模型(如 GPT 系列)采用了仅解码器 (Decoder-Only) 的架构。它们本质上是原始 Transformer 解码器部分的堆叠,但去掉了编码器-解码器注意力机制。
- 在 Decoder-Only 架构中,输入(prompt)和要生成的文本被视为一个单一序列。
- 模型使用带掩码的自注意力机制来处理这个序列,一次预测一个词元,并将新生成的词元追加到序列末尾,作为下一次预测的输入(这个过程称为自回归 Autoregressive)。
总结 Transformer 的核心优势:
- 并行计算能力强: 与 RNN 不同,Transformer 中的自注意力机制可以并行处理序列中的所有词元,大大提高了训练效率。
- 更好地捕捉长距离依赖: 注意力机制可以直接计算序列中任意两个位置之间的关系,而不受它们之间距离的影响,有效解决了 RNN 在长序列上的信息遗忘问题。
- 强大的表示能力: 多头注意力和深层堆叠结构赋予了模型强大的特征提取和表示学习能力。
Transformer 的这些特性使其成为 NLP 领域乃至其他序列建模任务(如计算机视觉、语音识别)的强大工具。
Last updated on