跳到主要内容

Transformer 架构

问题

Transformer 的核心架构是什么?Self-Attention 的计算过程是怎样的?位置编码为什么重要?Encoder-only、Decoder-only、Encoder-Decoder 三种变体有什么区别?

答案

Transformer 是 2017 年 Google 论文 "Attention Is All You Need" 提出的架构,完全基于注意力机制(无卷积、无循环),彻底改变了 NLP 领域,并成为后续所有 LLM 的基础。

一、整体架构

二、Self-Attention 计算

Self-Attention 的核心思想:让序列中的每个位置都能直接关注其他所有位置——不像 RNN 需要逐步传递。

Q、K、V 三兄弟

每个输入 Token 的 Embedding 被线性变换为三个向量:

  • Query(Q):我在找什么?
  • Key(K):我有什么?
  • Value(V):我提供什么信息?
Attention(Q,K,V)=Softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

其中 dkd_k 是 Key 的维度,dk\sqrt{d_k} 是缩放因子——防止点积过大导致 Softmax 梯度消失。

直觉理解

把 Self-Attention 想象成信息检索

  1. 每个 Token 发出一个 Query:"我需要什么信息?"
  2. 每个 Token 提供一个 Key:"我有这样的信息"
  3. Q 和 K 做点积计算相关性分数——越相关分数越高
  4. Softmax 将分数归一化为注意力权重
  5. 用权重对所有 Token 的 Value 加权求和——得到融合了上下文信息的输出

多头注意力(Multi-Head Attention)

将 Q、K、V 分成多个"头"(如 8 个或 12 个),每个头独立做注意力计算,最后拼接:

MultiHead(Q,K,V)=Concat(head1,,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O

多头的好处:不同的头可以关注不同类型的信息(如一个关注语法关系,一个关注语义相似性)。

三、位置编码

Transformer 没有循环结构,本身不包含位置信息——"我爱你"和"你爱我"的注意力计算结果完全相同。因此必须显式注入位置信息。

正弦位置编码(原始论文)

PE(pos,2i)=sin(pos/100002i/dmodel)PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}}) PE(pos,2i+1)=cos(pos/100002i/dmodel)PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{model}})

RoPE(旋转位置编码)

现代 LLM(LLaMA、GPT-NeoX)普遍使用 RoPE(Rotary Position Embedding)——通过旋转矩阵将位置信息编码到 QK 的点积中:

位置编码特点使用模型
正弦编码固定、不可学习原始 Transformer
可学习编码随训练更新BERT、GPT-2
ALiBi在注意力分数中加位置偏置BLOOM
RoPE通过旋转编码相对位置LLaMA、Qwen、Mistral

四、Feed-Forward Network(FFN)

每个 Transformer 层中 Attention 后都有一个 FFN:

FFN(x)=Activation(xW1+b1)W2+b2\text{FFN}(x) = \text{Activation}(xW_1 + b_1)W_2 + b_2

FFN 的隐藏维度通常是模型维度的 4 倍(如 dmodel=768d_{model}=768, dff=3072d_{ff}=3072)。在现代 LLM 中,FFN 使用 SwiGLU 激活。

五、三种 Transformer 变体

类型结构代表模型适用任务
Encoder-only只有 EncoderBERT文本理解(分类、NER)
Decoder-only只有 DecoderGPT、Claude、LLaMA文本生成(对话、代码)
Encoder-Decoder完整结构T5、BART翻译、摘要
为什么 LLM 都是 Decoder-only?
  1. 简单高效:只需一个方向的注意力,计算量更小
  2. 生成能力强:自回归生成天然适合 Decoder
  3. Scaling 更好:在大模型时代,Decoder-only 的扩展效果最好
  4. 通用性:通过 Prompt 就能完成理解和生成两类任务

六、Masked Attention

Decoder 中使用 Causal Mask(因果掩码)——每个位置只能看到它之前的 Token,看不到未来的 Token。这通过将注意力矩阵的右上三角设为 -\infty(Softmax 后为 0)实现。


常见面试问题

Q1: Self-Attention 的复杂度是多少?为什么长序列是挑战?

答案: Self-Attention 的时间和空间复杂度都是 O(n2)O(n^2),其中 nn 是序列长度。因为需要计算每对 Token 之间的注意力分数(n×nn \times n 的矩阵)。

n=100Kn = 100K(如长文档),注意力矩阵需要 100K×100K=1010100K \times 100K = 10^{10} 个元素——显存和计算量都无法承受。

解决方案:Flash Attention(优化内存访问)、Sliding Window Attention、Sparse Attention、Linear Attention。

Q2: 为什么要除以 dk\sqrt{d_k}

答案: 当 dkd_k 较大时,QKTQK^T 的值会很大(两个 dkd_k 维向量的点积方差正比于 dkd_k),导致 Softmax 进入饱和区——大部分权重接近 0,只有一个位置接近 1,梯度几乎为 0。除以 dk\sqrt{d_k} 将方差归一化到 1,使 Softmax 输出更平滑,梯度更稳定。

Q3: Transformer 中的残差连接和 Layer Normalization 起什么作用?

答案

  • 残差连接y=F(x)+xy = F(x) + x,让梯度可以直接回传,解决深层网络退化。
  • Layer Normalization:归一化每层输出,稳定训练,加速收敛。

两者配合使用(Add & Norm)是 Transformer 能训练几十层甚至上百层的关键。

现代 LLM 中还有一个变化:Pre-Norm(先 LN 再 Attention)vs Post-Norm(先 Attention 再 LN),Pre-Norm 训练更稳定,是当前主流。

Q4: BERT 和 GPT 都基于 Transformer,它们的核心区别是什么?

答案

BERTGPT
架构Encoder-onlyDecoder-only
注意力双向(看到完整上下文)单向(只看到左侧/过去)
预训练任务完形填空(MLM)下一个词预测(CLM)
适用任务理解型(分类、NER)生成型(对话、写作)
微调方式加任务头微调Prompt/Few-shot

相关链接