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):我提供什么信息?
其中 是 Key 的维度, 是缩放因子——防止点积过大导致 Softmax 梯度消失。
把 Self-Attention 想象成信息检索:
- 每个 Token 发出一个 Query:"我需要什么信息?"
- 每个 Token 提供一个 Key:"我有这样的信息"
- Q 和 K 做点积计算相关性分数——越相关分数越高
- Softmax 将分数归一化为注意力权重
- 用权重对所有 Token 的 Value 加权求和——得到融合了上下文信息的输出
多头注意力(Multi-Head Attention)
将 Q、K、V 分成多个"头"(如 8 个或 12 个),每个头独立做注意力计算,最后拼接:
多头的好处:不同的头可以关注不同类型的信息(如一个关注语法关系,一个关注语义相似性)。
三、位置编码
Transformer 没有循环结构,本身不包含位置信息——"我爱你"和"你爱我"的注意力计算结果完全相同。因此必须显式注入位置信息。
正弦位置编码(原始论文)
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 的隐藏维度通常是模型维度的 4 倍(如 , )。在现代 LLM 中,FFN 使用 SwiGLU 激活。
五、三种 Transformer 变体
| 类型 | 结构 | 代表模型 | 适用任务 |
|---|---|---|---|
| Encoder-only | 只有 Encoder | BERT | 文本理解(分类、NER) |
| Decoder-only | 只有 Decoder | GPT、Claude、LLaMA | 文本生成(对话、代码) |
| Encoder-Decoder | 完整结构 | T5、BART | 翻译、摘要 |
- 简单高效:只需一个方向的注意力,计算量更小
- 生成能力强:自回归生成天然适合 Decoder
- Scaling 更好:在大模型时代,Decoder-only 的扩展效果最好
- 通用性:通过 Prompt 就能完成理解和生成两类任务
六、Masked Attention
Decoder 中使用 Causal Mask(因果掩码)——每个位置只能看到它之前的 Token,看不到未来的 Token。这通过将注意力矩阵的右上三角设为 (Softmax 后为 0)实现。
常见面试问题
Q1: Self-Attention 的复杂度是多少?为什么长序列是挑战?
答案: Self-Attention 的时间和空间复杂度都是 ,其中 是序列长度。因为需要计算每对 Token 之间的注意力分数( 的矩阵)。
当 (如长文档),注意力矩阵需要 个元素——显存和计算量都无法承受。
解决方案:Flash Attention(优化内存访问)、Sliding Window Attention、Sparse Attention、Linear Attention。
Q2: 为什么要除以 ?
答案: 当 较大时, 的值会很大(两个 维向量的点积方差正比于 ),导致 Softmax 进入饱和区——大部分权重接近 0,只有一个位置接近 1,梯度几乎为 0。除以 将方差归一化到 1,使 Softmax 输出更平滑,梯度更稳定。
Q3: Transformer 中的残差连接和 Layer Normalization 起什么作用?
答案:
- 残差连接:,让梯度可以直接回传,解决深层网络退化。
- Layer Normalization:归一化每层输出,稳定训练,加速收敛。
两者配合使用(Add & Norm)是 Transformer 能训练几十层甚至上百层的关键。
现代 LLM 中还有一个变化:Pre-Norm(先 LN 再 Attention)vs Post-Norm(先 Attention 再 LN),Pre-Norm 训练更稳定,是当前主流。
Q4: BERT 和 GPT 都基于 Transformer,它们的核心区别是什么?
答案:
| BERT | GPT | |
|---|---|---|
| 架构 | Encoder-only | Decoder-only |
| 注意力 | 双向(看到完整上下文) | 单向(只看到左侧/过去) |
| 预训练任务 | 完形填空(MLM) | 下一个词预测(CLM) |
| 适用任务 | 理解型(分类、NER) | 生成型(对话、写作) |
| 微调方式 | 加任务头微调 | Prompt/Few-shot |