Transformer 架构
是什么
Transformer 是 2017 年 Google 在论文《Attention Is All You Need》中提出的神经网络架构。它抛弃了传统的循环结构(RNN/LSTM),完全依赖**注意力机制(Attention)**来处理序列数据。
Transformer 是当今几乎所有大语言模型的底层引擎。GPT、Claude、Gemini、Llama 都是 Transformer 的变体。
一句话理解:Transformer 让模型在处理每个词时,能同时”看到”句子中的所有其他词,并自动判断哪些词最重要。
为什么需要 Transformer
RNN/LSTM 的瓶颈
在 Transformer 之前,NLP 主要依赖 RNN(循环神经网络)和 LSTM(长短期记忆网络):
RNN 处理方式(串行):
词1 → 词2 → 词3 → 词4 → ... → 词N
↓ ↓ ↓ ↓
状态1→ 状态2→ 状态3→ ...→ 状态N
问题:
- 串行计算:必须按顺序逐词处理,无法并行,训练速度慢
- 长距离依赖丢失:信息在传递过程中逐渐衰减,句首的信息到句尾可能已经”忘了”
- 梯度消失/爆炸:序列越长,反向传播越困难
Transformer 的解法
Transformer 处理方式(并行):
词1 词2 词3 词4 ... 词N
↕ ↕ ↕ ↕ ↕
全部互相关注(Self-Attention)
- 并行计算:所有 Token 同时处理,充分利用 GPU
- 全局视野:任意两个 Token 之间都能直接交互,不存在距离限制
- 可扩展性:架构天然适合”堆大”——更多层、更多参数、更多数据
整体架构
原始 Transformer 是**编码器-解码器(Encoder-Decoder)**结构,但现代 LLM 主要使用其中的一部分:
| 架构类型 | 结构 | 代表模型 | 适用任务 |
|---|---|---|---|
| Encoder-Only | 只有编码器 | BERT、RoBERTa | 文本分类、命名实体识别 |
| Decoder-Only | 只有解码器 | GPT、Claude、Llama | 文本生成、对话、代码 |
| Encoder-Decoder | 完整结构 | T5、BART | 翻译、摘要 |
当前主流 LLM(GPT-4、Claude、Llama)都是 Decoder-Only 架构。以下重点讲解这种结构。
核心组件
一个 Decoder-Only Transformer 由 N 个相同的 Transformer Block 堆叠而成(GPT-3 有 96 层,Llama 3 70B 有 80 层)。每个 Block 包含:
输入 Token Embedding + 位置编码
↓
┌─────────────────────────┐
│ Masked Self-Attention │ ← 核心:理解上下文关系
│ + 残差连接 │
│ + 层归一化 │
├─────────────────────────┤
│ 前馈网络(FFN) │ ← 存储"知识"
│ + 残差连接 │
│ + 层归一化 │
└─────────────────────────┘
↓
(重复 N 次)
↓
线性层 + Softmax → 概率分布
1. Embedding + 位置编码
Token ID 首先被转换为高维向量(Embedding),然后叠加位置信息:
Token Embedding:
Token "猫" → ID 2847 → 查表 → [0.12, -0.45, 0.78, ..., 0.33](如 4096 维)
每个 Token 对应一个高维向量,这个向量包含了该 Token 的语义信息。详见 03-Embedding 与向量表示。
位置编码(Positional Encoding):
Transformer 并行处理所有 Token,天然不知道”顺序”。位置编码向模型注入位置信息,让模型知道”猫”在句子中的第几个位置。
主流方案:
- 绝对位置编码:为每个位置分配固定向量(原始 Transformer)
- 旋转位置编码(RoPE):通过旋转矩阵编码相对位置(Llama、Qwen 等使用)
- ALiBi:在注意力分数上加位置偏置(部分模型使用)
2. 自注意力机制(Self-Attention)
这是 Transformer 的灵魂。自注意力的核心思想:对于每个 Token,计算它与所有其他 Token 的相关程度,据此加权汇总信息。
Q、K、V 三元组
每个 Token 的 Embedding 通过三个线性变换,生成三个向量:
- Query(Q):当前 Token 的”提问”——“我应该关注谁?”
- Key(K):每个 Token 的”标签”——“我有什么信息?”
- Value(V):每个 Token 的”内容”——“如果你关注我,这是你能拿到的信息”
计算过程
Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V
用人话说:
- Q × K^T:用 Query 去”匹配”所有 Key,得到相关性分数
- / √d_k:除以维度的平方根,防止分数过大导致 softmax 梯度消失
- softmax:将分数归一化为概率分布(所有权重之和为 1)
- × V:用权重对 Value 做加权求和,得到最终输出
直觉理解
以”那只猫坐在垫子上,它很开心”为例,当模型处理”它”这个 Token 时:
"它"的 Query 会与所有 Token 的 Key 计算相关性:
"那" → 0.01(弱相关)
"只" → 0.01
"猫" → 0.85(强相关!"它"指代"猫")
"坐" → 0.03
"在" → 0.01
"垫子" → 0.02
"上" → 0.01
"它" → 0.05
"很" → 0.01
模型自动学会了:“它”应该主要关注”猫”,因为”它”是”猫”的指代。
Masked Attention
在 Decoder-Only 架构中,为了保持自回归特性(只能看到前面的 Token,不能偷看后面的),使用 Mask(掩码) 遮蔽未来位置:
Token: 词1 词2 词3 词4
词1: ✓ ✗ ✗ ✗
词2: ✓ ✓ ✗ ✗
词3: ✓ ✓ ✓ ✗
词4: ✓ ✓ ✓ ✓
词3 只能关注词1、词2、词3,不能看到词4。这确保了生成时的因果性。
3. 多头注意力(Multi-Head Attention)
一个注意力头只能捕捉一种类型的关系。多头注意力让模型同时从多个”角度”理解文本:
头1:关注语法关系(主语-谓语)
头2:关注指代关系(代词-名词)
头3:关注语义相似性
头4:关注位置临近关系
...
每个头独立计算 Q、K、V 和注意力,然后将所有头的输出拼接起来:
MultiHead(Q, K, V) = Concat(head_1, head_2, ..., head_h) × W_O
典型配置:GPT-3 使用 96 个注意力头,每头维度 128,总维度 12288。
4. 前馈网络(FFN)
注意力层之后是一个两层全连接网络,对每个 Token 独立做非线性变换:
FFN(x) = 激活函数(x × W_1 + b_1) × W_2 + b_2
直觉理解:
- 注意力层负责”Token 之间的信息交换”——谁和谁相关
- FFN 层负责”知识存储与转换”——将交换来的信息做深层处理
研究表明,模型的大量”世界知识”存储在 FFN 的权重中。
5. 残差连接 + 层归一化
每个子层(注意力、FFN)都有:
输出 = LayerNorm(x + SubLayer(x))
- 残差连接(+x):允许信息”跳过”当前层直接传到下一层,防止深层网络退化
- 层归一化(LayerNorm):稳定每层输出的分布,加速训练收敛
KV Cache:推理加速
自回归生成时,每生成一个新 Token 都需要对所有已有 Token 重新计算注意力。KV Cache 是关键优化:
- 缓存已计算过的 K 和 V 向量,新 Token 只需计算自己的 Q 和新的 K、V
- 将推理复杂度从 O(n²) 降低到每步 O(n)
- 代价:需要大量 GPU 显存存储缓存
这就是为什么长上下文模型需要更多显存——KV Cache 与序列长度成正比。
与其他架构的对比
| 维度 | RNN/LSTM | Transformer | Mamba(SSM) |
|---|---|---|---|
| 计算方式 | 串行 | 并行 | 并行 |
| 长距离依赖 | 弱(信息衰减) | 强(直接关注) | 强(选择性状态) |
| 训练效率 | 低 | 高 | 高 |
| 推理效率 | 线性 | 二次方(注意力) | 线性 |
| 主流地位 | 已过时 | 当前主流 | 新兴挑战者 |
为什么 Transformer 能”堆大”
Transformer 的成功不仅在于架构本身,还在于它的可扩展性:
- 并行友好:Self-Attention 的矩阵运算天然适合 GPU
- Scaling Laws:OpenAI 研究发现,模型性能与参数量、数据量、计算量之间存在幂律关系——投入越多,性能越好(在一定范围内)
- 统一架构:同一套架构处理文本、代码、图像、音频,无需为每种模态设计专门结构
延伸阅读
- 01-LLM 原理:LLM 的宏观认知
- 03-Embedding 与向量表示:Token 如何变成向量
- 07-模型训练与对齐:Transformer 模型的训练流程