前置知识
阅读本文前,建议先了解:
- 01-大语言模型概述 - LLM 基本概念
- 02-概率预测机制 - 理解 LLM 的核心任务
一、概述
Transformer 是目前几乎所有大语言模型的核心架构。你可以把它理解为 LLM 的”大脑结构”。
2017 年,谷歌发布了一篇划时代的论文《Attention Is All You Need》,提出了 Transformer 架构。从那以后,它成为了 NLP(自然语言处理)领域的主导架构,GPT、BERT 等模型都是基于 Transformer 构建的。
一句话理解
Transformer = 一种让模型”学会关注重要信息”的神经网络架构
1.1 Transformer 解决了什么问题
在 Transformer 出现之前,主流使用的是 RNN(循环神经网络,Recurrent Neural Network)。RNN 有一个致命缺陷:长距离依赖问题。
RNN 处理句子:[我] → [爱] → [学习] → [机器] → [学习]
↑ ↑ ↑ ↑ ↑
记住 记住 记住 记住 记住
"我" "我爱" "我爱学习" ... 越来越难
当句子变长时,RNN 很难捕捉到远距离词语之间的关系。
Transformer 换了一种思路:不是强行记住所有内容,而是学会”按需查看”。
[!比喻] 就像你考试时做阅读理解 你不需要把整篇文章背下来,而是根据问题去文章里找关键信息——这就是注意力机制的核心思想。
1.2 Transformer 的两大优势
| 优势 | 说明 |
|---|---|
| 并行计算 | RNN 必须按顺序处理,Transformer 可以同时处理所有词 |
| 长距离依赖 | 任何两个词都可以直接”对话”,无论距离多远 |
RNN: [我] → [爱] → [学习] → ... (串行,慢)
Transformer: [我] [爱] [学习] ... (并行,快)
↓ ↓ ↓
同时计算注意力
二、总体架构
Transformer 采用编码器 - 解码器(Encoder-Decoder)架构:
graph LR A[输入文本] --> B[词嵌入] B --> C[位置编码] C --> D[编码器层 ×N] D --> E[解码器层 ×N] E --> F[线性层] F --> G[Softmax] G --> H[输出概率]

2.1 四大核心组件
| 组件 | 作用 | 位置 |
|---|---|---|
| 输入层 | 将词转换为向量,并注入位置信息 | 最前端 |
| 编码器(Encoder) | 理解输入,提取特征 | 中间 |
| 解码器(Decoder) | 根据编码结果生成输出 | 中间 |
| 输出层 | 将向量转换回概率分布 | 最后端 |
2.2 编码器与解码器的关系
┌─────────────────────────────────────────────────────────┐
│ Transformer │
├─────────────────────────────────────────────────────────┤
│ │
│ 输入文本 ──→ ┌─────────────┐ │
│ │ 编码器 │ 理解输入 │
│ │ (Encoder) │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ 传递编码信息 │
│ ┌─────────────┐ │
│ │ 解码器 │ 生成输出 │
│ │ (Decoder) │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ 输出文本 │
│ │
└─────────────────────────────────────────────────────────┘
2.3 三种使用模式
根据任务需求,Transformer 可以有不同的使用方式:
| 模式 | 结构 | 适用任务 | 代表模型 |
|---|---|---|---|
| 编码器-only | 输入 → 编码器 → 输出 | 理解任务(分类、情感分析) | BERT |
| 解码器-only | 输入 → 解码器 → 输出 | 生成任务(写作、对话) | GPT、LLaMA |
| 完整 Transformer | 输入 → 编码器 → 解码器 → 输出 | 序列到序列(翻译、摘要) | T5、BART |
GPT 为什么只能用解码器?
GPT 是”自回归”模型——它只能基于已经生成的内容来预测下一个词。如果让右边的词也参与,模型就能”作弊”看到答案了。
三、输入层:词嵌入与位置编码
输入层负责将原始文本转换为模型可以处理的向量表示。

3.1 词嵌入(Token Embedding)
词嵌入将每个词(Token)转换为一个固定维度的向量:
输入:"我喜欢学习"
分词:["我", "喜欢", "学习"]
↓
词嵌入:[0.2, -0.5, 0.8, ...] ← 512 维向量
[0.1, 0.3, -0.2, ...]
[-0.4, 0.6, 0.1, ...]
为什么用向量表示词?
向量可以捕捉词的语义和语法特征。相似的词在向量空间中距离相近,比如”国王”和”王后”的向量距离比”国王”和”苹果”更近。
3.2 位置编码(Positional Encoding)
Transformer 本身不具备处理序列顺序的能力——它把所有词同时处理,无法区分”猫追狗”和”狗追猫”。
位置编码为每个位置生成一个独特的向量,与词嵌入相加:
词向量 + 位置编码 = 带位置信息的词表示
"猫追狗"
↓
[猫,位置 0] [追,位置 1] [狗,位置 2]
graph TD A[词向量] --> C[相加] B[位置编码] --> C C --> D[带位置信息的表示]
位置编码使用正弦和余弦函数生成,确保模型可以学习到相对位置关系:
[!比喻] 就像给每个人发一个编号 即使大家同时入场,通过编号也能知道谁先谁后。
四、注意力机制(核心)
注意力机制(Attention Mechanism)是 Transformer 的核心,也是最重要的部分。
4.1 什么是注意力
想象你在嘈杂的咖啡馆里和朋友聊天。即使周围很吵,你也能”自动过滤”噪音,只关注朋友的声音——这就是注意力。
Transformer 的注意力机制让模型在处理每个词时,可以”关注”输入序列中的任意其他词:
输入句子:"小明把球给了小红,谁拿到了球?"
注意力分配:
┌─────────────────────────────────────────────────┐
│ 小明 ██ 20% ← 不太重要 │
│ 把 █ 10% ← 不太重要 │
│ 球 ████ 35% ← 重要 │
│ 给了 ██ 20% ← 上下文 │
│ 小红 ████ 35% ← 重要(谁拿到) │
│ 谁 █ 10% ← 问句标记 │
│ 拿到 ████ 35% ← 关键动作 │
│ 了 █ 5% ← 不重要 │
│ ? █ 5% ← 不重要 │
└─────────────────────────────────────────────────┘
4.2 QKV:注意力计算的三要素
注意力机制通过三个向量计算相关性:
| 向量 | 英文 | 说明 | 比喻 |
|---|---|---|---|
| Query | Q | 查询向量,“我想找什么” | 搜索词 |
| Key | K | 键向量,“我包含这些信息” | 网页标题 |
| Value | V | 值向量,“我的实际内容” | 网页内容 |
[!比喻] 就像使用搜索引擎
- Query = 你输入的搜索词
- Key = 每个网页的标题/标签
- Value = 网页的实际内容
搜索引擎比较 Query 和 Key 的匹配程度,决定展示哪些 Value,以及展示多少。
4.3 缩放点积注意力(Scaled Dot-Product Attention)
注意力的计算公式:
计算步骤分解:
graph LR A[Q, K, V] --> B[计算 Q×Kᵗ] B --> C[除以 √dₖ 缩放] C --> D[Softmax 归一化] D --> E[乘以 V] E --> F[注意力输出]
- 计算相似度: 得到 Query 和每个 Key 的相似度分数
- 缩放:除以 防止数值过大
- 归一化:Softmax 将分数转换为概率分布(和为 1)
- 加权求和:用概率对 Value 加权,得到最终输出
4.4 自注意力(Self-Attention)
自注意力(Self-Attention)让序列中的每个词都和其他所有词计算相关性:
句子:"猫坐在垫子上"
自注意力让模型理解:
- "猫" 和 "坐在" 相关(主语 - 谓语)
- "坐在" 和 "垫子" 相关(谓语 - 宾语)
- "猫" 和 "垫子" 间接相关(通过"坐在")
graph TD subgraph 输入 A[猫] B[坐在] C[垫子] D[上] end subgraph 自注意力 A --> A A --> B A --> C A --> D B --> A B --> B B --> C B --> D end style 输入 fill:#e1f5fe style 自注意力 fill:#fff3e0
这就是为什么 Transformer 能理解复杂句法结构的原因!
4.5 多头注意力(Multi-Head Attention)
多头注意力(Multi-Head Attention)让模型同时从多个角度理解输入:
输入:"猫坐在垫子上"
头 1:关注语法关系 → "猫"(主语) → "坐在"(谓语)
头 2:关注语义关系 → "猫"(动物) → "垫子"(物品)
头 3:关注位置关系 → "坐在"(动作) → "垫子上"(位置)
输出:将多个头的信息拼接,形成更丰富的表示

graph TD A[输入] --> B[头 1: 语法注意力] A --> C[头 2: 语义注意力] A --> D[头 3: 位置注意力] B --> E[拼接] C --> E D --> E E --> F[输出矩阵]
多头注意力的好处:
- 同时捕捉不同类型的关系
- 增加模型的表达能力
- 类似卷积神经网络中的多个滤波器
4.6 残差连接(Residual Connection)
残差连接(Residual Connection)让信息可以直接跨层传递,缓解梯度消失问题:
输出 = 输入 + 子层输出 (Attention 或 FFN)
graph LR %% 推荐写法:稳健且兼容性好 A["输入 x"] --> B["子层 F(x)"] A --> C["➕"] B --> C C --> D["输出 x + F(x)"]
为什么要用残差连接?
- 缓解梯度消失:深层网络中,梯度可以通过恒等连接直接传递到浅层
- 保留原始信息:子层只需要学习”残差”(需要补充的部分),而不是全部内容
- 更容易训练:恒等映射比学习完整映射更容易
4.7 层标准化(Layer Normalization)
层标准化(Layer Normalization)将每层的输入归一化为均值为 0、方差为 1 的分布:
输入 → 层归一化 → 子层 (Attention/FFN) → 残差连接 → 输出
graph LR A[输入] --> B[层归一化] B --> C[注意力/FFN] C --> D[残差连接] D --> E[输出]
层归一化的作用
- 稳定训练:防止数值爆炸或消失
- 加速收敛:让优化过程更平滑
- 减少对初始化的依赖:不同参数初始化下都能正常训练
4.8 编码器层与解码器层的区别
| 组件 | 编码器层 | 解码器层 |
|---|---|---|
| 自注意力 | 双向(可以看到所有位置) | 单向(只能看到之前的位置) |
| 掩码 | 无掩码 | 因果掩码(防止看到未来) |
| 交叉注意力 | 无 | 有(关注编码器输出) |
graph TD subgraph 编码器层 A1[多头自注意力] --> B1[残差 + 层归一化] B1 --> C1[前馈网络] C1 --> D1[残差 + 层归一化] end subgraph 解码器层 A2[掩码多头自注意力] --> B2[残差 + 层归一化] B2 --> C2[交叉注意力] C2 --> D2[残差 + 层归一化] D2 --> E2[前馈网络] E2 --> F2[残差 + 层归一化] end
五、输出层:线性化
经过多层编码器和解码器处理后,模型需要将向量表示转换回具体的词。
5.1 线性层(Linear Layer)
线性层将解码器的输出向量映射到词表大小:
解码器输出:[0.2, -0.5, 0.8, ...] ← 512 维向量
↓
线性层:W × x + b
↓
输出:[score₁, score₂, score₃, ...] ← 词表大小的向量
5.2 Softmax 层
Softmax将分数转换为概率分布:
Softmax 输入:[2.0, 1.0, 0.1]
↓
Softmax 输出:[0.66, 0.24, 0.10] ← 和为 1 的概率分布
5.3 采样生成
根据概率分布选择下一个词:
| 策略 | 说明 |
|---|---|
| 贪婪解码 | 选择概率最高的词 |
| 随机采样 | 按概率随机选择 |
| Top-k 采样 | 从前 k 个高概率词中采样 |
| Top-p 采样 | 从累积概率达到 p 的词中采样 |
输出概率:{"我": 0.66, "你": 0.24, "他": 0.10}
↓
选择:"我" (概率最高)
六、总结
6.1 Transformer 架构回顾
graph TB A[输入文本] --> B[词嵌入 + 位置编码] B --> C[编码器层 ×N] C --> D[解码器层 ×N] D --> E[线性层 + Softmax] E --> F[输出概率] subgraph 编码器层 C1[多头自注意力] C2[残差 + 层归一化] C3[前馈网络] end subgraph 解码器层 D1[掩码多头自注意力] D2[交叉注意力] D3[前馈网络] end
6.2 核心组件速查
| 组件 | 作用 | 关键公式/概念 |
|---|---|---|
| 词嵌入 | 词→向量 | 语义向量空间 |
| 位置编码 | 注入位置信息 | 函数 |
| 自注意力 | 捕捉词间关系 | |
| 多头注意力 | 多角度理解 | 并行多个注意力头 |
| 残差连接 | 信息跨层传递 | |
| 层归一化 | 稳定训练 | 归一化为 N(0,1) |
| 前馈网络 | 非线性变换 |
6.3 为什么 Transformer 如此重要
| 原因 | 说明 |
|---|---|
| ✅ 解决长距离依赖 | 注意力机制让任何两个词都可以直接”对话” |
| ✅ 并行计算 | 同时处理所有词,训练速度快 |
| ✅ 可扩展性强 | 参数越多效果越好,支撑 LLM 的”大” |
| ✅ 通用性好 | 同一架构可用于理解、生成、翻译等任务 |
理解了 Transformer,你就理解了为什么 LLM 能如此强大。
延伸阅读
- 01-大语言模型概述 - 回顾 LLM 基础知识
- 02-概率预测机制 - 回顾 LLM 的工作原理
- 01-预训练 - 了解 LLM 是如何训练的