Transformer 揭秘:从词元到语义,大语言模型的核心原理
摘要
Transformer 架构自 2017 年提出以来,已成为所有主流大语言模型(如 GPT、Llama、ChatGLM)的核心基础。本文以通俗易懂但专业严谨的方式,系统讲解 Transformer 的六大关键组件:Tokenization(词元化)、Embedding(向量化)、Positional Encoding(位置编码)、Encoder & Decoder(编码器与解码器)、Linear & Softmax(输出层)。每部分均配有生活类比、术语解释和常见疑问解答,并附有完整的参考文献。读者不需要深厚的机器学习背景,即可理解大语言模型“如何读懂文字、如何思考、如何逐词生成答案”的基本原理。
目录
- 引言:为什么需要 Transformer
- Tokenization —— 把句子拆成积木块
- Embedding —— 给每个词一个高维坐标
- Positional Encoding —— 让模型知道谁前谁后
- Encoder & Decoder —— 阅读与写作的协作
- Linear & Softmax —— 从想法到说出的词
- 总结:Transformer 工作流程全景图
附录
A. 术语表(小白友好版)
B. 生活类比表
C. 常见疑问解答(Q&A)
D. 参考文献
1. 引言:为什么需要 Transformer
在 Transformer 出现之前,自然语言处理主要依赖循环神经网络(RNN)和长短期记忆网络(LSTM)。这些模型按顺序逐个处理单词,无法并行计算,且难以捕捉长距离依赖(比如句首和句尾的关系)。2017 年,Google 团队发表了论文《Attention Is All You Need》[1],提出了完全基于**自注意力(Self-Attention)**的 Transformer 架构,彻底抛弃了循环结构。
Transformer 的优势在于:
- 高度并行:一次性处理整个序列,训练速度快。
- 长距离建模:任意两个位置直接计算关联,不受距离影响。
- 可扩展性:堆叠更多层、增加隐藏维度即可提升性能,现代大模型正是沿着这条路演进的。
如今,ChatGPT、Llama、文心一言等大语言模型都基于 Transformer 架构。理解它的工作原理,是深入掌握 AI 语言能力的第一步。
2. Tokenization —— 把句子拆成积木块
计算机不认识文字,只认识数字。第一步就是把文本切分成若干个小单元,每个小单元称为 Token(词元)。这个过程就是 Tokenization。
2.1 子词切分(Subword Tokenization)
-
英文:将单词拆成更小的有意义的片段。例如:
"playing"→["play", "ing"]
"subword"→["sub", "word"]
"encoded"→["encode", "ed"]
这样做的好处是:词表不用包含所有完整单词(英语有几十万),而只需包含常见的子词,还能处理未见过的新词(比如把"ChatGPT"拆成["Chat", "G", "PT"])。 -
中文:由于汉字数量庞大,且 UTF-8 下一个汉字占 3 个字节,一些为英文优化的分词器(如 OpenAI 的
tiktoken)会按字节切分,导致“海南麒麟瓜”这样的短语被切成 11 个 Token。而专门的中文模型(如 ChatGLM)会使用包含常见汉字和词语的专用词表,使中文的 Token 数量更合理 [6]。
2.2 Token 数量示例
根据知乎用户“暗月魔术师”的实测数据(《哈利波特与魔法石》中英版本):
- GPT(tiktoken):英文版约 44.6 万 Token,中文版约 83.6 万 Token(中文多 87%)。
- ChatGLM(专用中文词表):英文版约 47.4 万 Token,中文版约 40.5 万 Token(中文反而更少)。
由此可见,分词器的设计对特定语言的效率影响巨大。
2.3 词表大小的演变
- GPT-3(2020):50,257 个 Token [2]
- GPT-4(2023):约 100,256 个 Token [3]
- Llama 3(2024):128,256 个 Token [5]
更大的词表可以缩短序列长度(同一句话需要的 Token 更少),但也会增加模型的 Embedding 层参数量。
生活类比:Tokenization 就像把一篇文章拆成几万块乐高积木,每块积木都是标准大小的“语义颗粒”。不同厂家生产的积木颗粒大小不同(词表不同),拼装同一座城堡所需的积木数量也就不一样。
3. Embedding —— 给每个词一个高维坐标
有了 Token 序列,还需要把每个 Token 转换成一串数字(向量),计算机才能进行数学运算。这个映射过程就是 Embedding。
3.1 什么是向量和维度?
- 1 维向量:
[3]—— 数轴上的一个点 - 2 维向量:
[2, 5]—— 平面上的一个点 - 3 维向量:
[-1, 4, -2.5]—— 立体空间中的一个点 - 12288 维向量:我们无法直观想象,但数学上就是 12288 个坐标组成的点。
3.2 为什么需要高维度?
维度越高,向量能承载的语义信息就越丰富。不同规模模型的 Embedding 维度(即隐藏层维度 d_model)如下:
| 模型 | 年份 | 隐藏层维度 |
|---|---|---|
| Transformer (base) | 2017 | 512 |
| GPT-1 | 2018 | 768 |
| GPT-2 (最大版本) | 2019 | 1600 |
| GPT-3 (175B) | 2020 | 12288 |
| Llama 3 (405B) | 2024 | 16384 |
生活类比:低维空间像一张只有几条主干道的地图,只能标注大方向;高维空间像一张极精细的卫星图,每条小巷、每棵树都能标出来。模型因此能捕捉到细微的语义差异——例如,“国王”与“王后”的向量关系满足:
向量(国王) - 向量(男人) + 向量(女人) ≈ 向量(王后)。
3.3 高维空间到底有多大?
以 GPT-3 的 12288 维为例,假设每个坐标只能取 0~10000 的整数(实际是连续浮点数,范围更大),那么所有可能的向量总数为:
10000 × 10000 × …(12288 次相乘)= 10^(4×12288) = 10^49152
这个数写作 1 后面跟 49152 个 0,共有 49153 位。这个数字比全宇宙的原子总数(约 10^80)大无数倍。而整个词表只有大约 10 万个 Token,所以这些 Token 在空间中极其稀疏——每个 Token 几乎都有自己独一无二的“专属坐标”,模型能轻松区分它们。
注意:10^49152 是一个 49153 位的数字(1 后面 49152 个 0),不要误写成 49152 位。
4. Positional Encoding —— 让模型知道谁前谁后
Transformer 的自注意力机制有一个特性:它不关心输入的顺序。如果把“狗咬了猫”中的“狗”和“猫”互换,自注意力计算出的结果完全相同,但句子的语义却完全相反。因此,必须在输入中显式加入位置信息。
4.1 基本做法
对于序列中第 pos 个位置的 Token,我们生成一个与 Embedding 维度相同的向量 PE(pos),然后加到 Embedding 上:
Input[pos] = Embedding[pos] + PE(pos)
4.2 正弦余弦位置编码(Sinusoidal Encoding)
原始 Transformer 使用三角函数来生成 PE [1]:
- 偶数维度:
PE(pos, 2i) = sin( pos / 10000^(2i/d) ) - 奇数维度:
PE(pos, 2i+1) = cos( pos / 10000^(2i/d) )
其中 d 是 Embedding 维度,i 的范围是 0 到 d/2-1。
这个设计的优点:
- 不需要额外学习参数。
- 理论上可以计算任意长度的位置编码(即使比训练时更长)。
- 任意两个位置的编码可以通过线性变换相互得到,有利于模型学习相对位置。
注意:理论上可以外推更长序列,但实践中未经微调的外推效果通常会下降。现代模型多改用 RoPE(旋转位置编码)来获得更好的长文本外推能力 [9]。
4.3 其他位置编码方式
- 可学习位置编码(GPT 系列):将位置编码作为可训练的参数矩阵,让模型自己学习每个位置的最佳表示。
- RoPE(旋转位置编码)(Llama、ChatGLM、Qwen):在复数空间中对 Query 和 Key 向量施加旋转矩阵,以绝对位置编码的方式表达相对位置关系,对长序列外推更友好 [9]。
- ALiBi(Attention with Linear Biases):在注意力分数中添加与 token 距离成正比的线性偏置,无需显式位置编码,也能高效外推 [8]。
5. Encoder & Decoder —— 阅读与写作的协作
Transformer 的经典结构由编码器 和解码器 两部分组成。
5.1 编码器(Encoder):一次性读懂全部输入
假设用户问:“我这种情况,法院会怎么判?”
- 这句话被 Tokenization 成若干 Token(例如 1300 个,示例长度,实际取决于输入)。
- 每个 Token 经过 Embedding + Positional Encoding,变成 1300 个高维向量。
- 编码器通常由多个相同的层堆叠而成(如 6 层、12 层或更多)。每一层包含:
- 多头自注意力:每个 Token 查看序列中所有 Token,计算它们之间的关联强弱。例如,“法院”和“判”之间的注意力权重会很高。
- 前馈网络:对每个 Token 独立进行非线性变换,增强表达能力。
- 残差连接 + 层归一化:帮助训练更深的网络,缓解梯度消失。
- 编码器最终输出与输入数量相同的语义增强向量(仍然是 1300 个,每个维度为
d_model),每个向量都融合了整个句子的上下文信息。
5.2 解码器(Decoder):自回归地逐词生成
解码器的任务是根据编码器的输出和已经生成的单词,逐个预测下一个单词。
- 初始状态:解码器输入只有一个特殊的开始标记(如
<s>),它也是一个 Token,同样经过 Embedding 和位置编码。 - 第 1 步:解码器根据编码器输出的 1300 个向量和
<s>,预测第一个词的概率分布,选出最可能的词——“法”。 - 第 2 步:将“法”加入解码器输入,预测第二个词——“院”。
- 第 3 步:当前已有“法”“院”,预测第三个词——“会”。
- 如此重复,直到生成一个结束标记(
</s>)或达到最大长度。
示例(来自 PDF 中的演示):
“法院” → “法院会” → “法院会倾” → “法院会倾向” → …… → “法院会倾向于冷静期,除非你有特别确凿的证据。”
解码器内部有两个关键机制:
- 掩码自注意力:生成第
t个词时,不允许看到第t+1及之后的词(避免作弊)。 - 交叉注意力:每一层解码器都会“查询”编码器的输出,让解码器能时刻参考输入序列的信息。
生活类比:编码器像一位高级秘书,听完客户的需求后,在脑中形成一份详细的“要点笔记”;解码器像一位写手,根据笔记和已经写好的句子,一字一句地往下写。
6. Linear & Softmax —— 从想法到说出的词
解码器最后输出的向量(维度 = d_model,例如 12288)不能直接当作一个词。还需要两个步骤将其转换成词表上的概率分布。
6.1 Linear 层(线性变换)
- 作用:将
d_model维的向量通过一个可学习的权重矩阵,映射成词表大小的向量(例如 100256 维)。 - 输出:一个 logits 向量,里面的每个实数代表对应 Token 的“原始分数”(可正可负)。
- 参数规模:
d_model × vocab_size,对于大模型非常大(例如 12288 × 100256 ≈ 1.23B 个参数)。
6.2 Softmax 层
- 作用:将 logits 转换成概率分布(所有值介于 0~1,且总和为 1)。
- 公式:
p_i = e^(z_i) / Σ e^(z_j) - 结果:词表中每个 Token 被选为“下一个词”的概率。
6.3 如何决定下一个词?
- 贪心解码:直接选择概率最高的 Token。
- 随机采样:按概率分布随机抽取,可以增加回答的多样性。
- 温度调节:通过缩放 logits(除以温度 T)来控制概率分布的平滑度——T 越小,分布越尖锐(更确定);T 越大,分布越平缓(更随机)。
生活类比:Linear 层像是你的大脑把“想法”(高维思考)转换成“想说每个候选词的冲动程度”;Softmax 层则是把这些冲动程度变成“我真正说出这个词的百分比”。最后,你根据百分比选一个词说出来。
7. 总结:Transformer 工作流程全景图
| 阶段 | 组件 | 任务 | 输出示例 |
|---|---|---|---|
| 1 | Tokenization | 文本 → Token 序列 | ["我","这种情况","法院","会","怎么判"] |
| 2 | Embedding | Token → 向量 | [[0.1, -2.3, ...], ...] |
| 3 | Positional Encoding | 向量中加入位置信息 | input = emb + pos |
| 4 | Encoder | 融合上下文语义 | 语义增强的向量序列 |
| 5 | Decoder | 自回归生成下一个 Token 的 logits | 每一步输出词表大小的向量 |
| 6 | Softmax | 转换成概率,选取下一个 Token | ["法"] → ["法院"] → …… |
核心优势回顾:
- 相比 RNN/LSTM,Transformer 可以并行处理整个序列,训练效率大幅提升。
- 自注意力机制直接连接任意两个位置,长距离依赖不再是难题。
- 通过堆叠更多层、增加隐藏维度,可以构造出 GPT-3、Llama 3 等超大规模模型,实现惊人的语言能力。
附录 A:术语表(小白友好版)
| 术语 | 通俗解释 |
|---|---|
| Token | 文本被切分后的小单元,可以是词的一部分、一个汉字或几个字节。 |
| Tokenization | 把句子切成 Token 的过程。 |
| 词表 | 所有可能 Token 的集合,大小通常几万到十几万。 |
| Embedding | 把一个 Token 映射成一串数字(向量),代表它在高维空间中的“坐标”。 |
| 向量 | 一串有序的数字,可以表示空间中的一个点。 |
| 维度 | 向量中数字的个数。1维是数轴,2维是平面,3维是立体。 |
| 空间稀疏性 | 高维空间中可容纳的点极多,而实际 Token 很少,所以每个 Token 都占据几乎独一无二的位置。 |
| Positional Encoding | 给 Token 加上位置信息,让模型知道顺序。 |
| Encoder | 读取整个输入并输出语义向量的模块(阅读理解)。 |
| Decoder | 逐字生成输出序列的模块(写作),每次依赖之前生成的字。 |
| 自回归 | 生成序列时,每一步都用之前生成的结果作为输入。 |
| Linear 层 | 一个简单的数学变换(矩阵乘法+偏置),把高维向量映射到词表大小。 |
| Softmax | 把任意实数变成概率(0~1 之间且总和为1)的公式。 |
| 注意力(Attention) | Transformer 内部机制,让每个 Token 自动关注序列中其他 Token 的相关程度。 |
| 自注意力 | 同一个序列内的 Token 互相看。 |
| 交叉注意力 | 解码器看编码器输出的序列。 |
附录 B:生活类比表
| 概念 | 日常类比 |
|---|---|
| 文本 → Token | 把一篇文章拆成几万个“词语积木”。 |
| Token → Embedding | 给每块积木贴上一个 GPS 坐标(高维空间位置)。 |
| Positional Encoding | 在积木上再贴一个数字标签(第1块、第2块…)。 |
| Encoder | 一个读者,读完整个故事后在脑中形成情节向量。 |
| Decoder | 一个作家,根据情节向量和已经写下的句子,一个字一个字地写下去。 |
| Linear + Softmax | 作家脑中有几个候选字,犹豫一下,选最合适的写出来。 |
附录 C:常见疑问解答(Q&A)
Q1:为什么 GPT 只用解码器,没有编码器?
A:GPT 属于自回归语言模型,它的任务是根据上文预测下一个词,输入和输出是同一个序列(只是把已经生成的部分当作上文)。GPT 的结构是仅解码器(decoder‑only),它移除了传统 Transformer 解码器中的交叉注意力层,只保留了掩码自注意力层 [3][7]。Encoder‑Decoder 结构主要用于机器翻译、文本摘要等输入输出不同的任务。
Q2:12288 维这么高,不会导致过拟合吗?
A:过拟合的风险确实存在,但大规模训练数据可以抵消这个风险。GPT‑3 使用了约 45TB 文本数据,足够学习高维空间中的有效特征。同时,现代模型会使用 Dropout、权重衰减等正则化技术。对于小数据集,小维度模型(如 512 维)更合适。
Q3:为什么中文模型 Token 数量有时比英文还多?
A:这是分词器的设计选择。如果使用为英文优化的 BPE(如 OpenAI 的 tiktoken),每个中文字符的 UTF-8 三个字节可能被拆成多个 Token。而专门的中文模型(如 ChatGLM)会构建包含常见汉字和词语的词表,使中文 Token 数下降到合理水平 [6]。
Q4:位置编码为什么不用简单的 1,2,3… 数字?
A:Embedding 向量中每个维度已经表达了复杂的语义,直接加上绝对数字(1, 2, 3)会破坏向量的分布,而且模型难以外推更长的序列。正弦余弦编码或 RoPE 都能提供更平滑且可扩展的位置表示 [1][9]。
Q5:训练和推理时,Decoder 的行为有什么不同?
A:训练时,解码器采用 Teacher Forcing:直接提供真实的目标序列(例如标准答案的每个词),让模型一次性预测所有位置,并行计算损失。推理时,模型必须自己一步步生成,每一步依赖上一步的输出,无法并行。
Q6:Linear + Softmax 之后,怎么确保生成不重复或符合语法?
A:单独的 Linear+Softmax 只保证局部最优(每一步概率最高)。要保证整体连贯,通常需要 Beam Search(保留多个候选序列)或配合外部规则(如重复惩罚、长度惩罚)。大型模型也能通过大量训练学到隐式的语法和常识约束。
附录 D:参考文献
Transformer 基础核心论文
[1] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. Advances in Neural Information Processing Systems (NIPS), 30, 5998–6008. arxiv.org/abs/1706.03…
大语言模型架构与参数
[2] Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., et al. (2020). Language Models are Few-Shot Learners. Advances in Neural Information Processing Systems (NeurIPS), 33, 1877–1901. arxiv.org/abs/2005.14…
(GPT‑3 原始技术报告,公开了 175B 版本的架构参数:96 层,12288 隐藏维度,50257 词表)
[3] OpenAI. (2023). GPT-4 Technical Report. arxiv.org/abs/2303.08…
(GPT‑4 技术报告。注意:词表大小约 100256,并非官方直接公布,主要来自社区分析)
[4] Touvron, H., Lavril, T., Izacard, G., Martinet, X., Lachaux, M. A., Lacroix, T., Rozière, B., Goyal, N., Hambro, E., Azhar, F., et al. (2023). LLaMA: Open and Efficient Foundation Language Models. arXiv preprint. arxiv.org/abs/2302.13…
(LLaMA 原始论文,LLaMA 2 词表为 32,000)
[5] Grattafiori, A., Dubey, A., Jauhri, A., Pandey, A., Kadian, A., Al-Dahle, D., Letman, A., Mathur, A., Schelten, A., Vaughan, A., et al. (2024). The Llama 3 Herd of Models. arXiv preprint. arxiv.org/abs/2407.21…
(Llama 3 原始技术报告:词表大小 128,256,405B 版本隐藏维度 16,384,使用 RoPE)
分词器(Tokenizer)
[6] Zeng, A., Liu, X., Du, Z., Wang, Z., Lai, H., Ding, M., Yang, Z., Xu, Y., Zheng, W., Xia, X., et al. (2023). GLM-130B: An Open Bilingual Pre-trained Model. International Conference on Learning Representations (ICLR). arxiv.org/abs/2210.02…
(ChatGLM 的 Tokenizer 设计:在 25 GB 中英双语数据上训练 SentencePiece,词表大小 130,528)
位置编码(Positional Encoding)
[7] Shaw, P., Uszkoreit, J., & Vaswani, A. (2018). Self-Attention with Relative Position Representations. Proceedings of NAACL-HLT, 464–468. arxiv.org/abs/1803.02…
(首次系统性地在 Transformer 中引入相对位置表示)
[8] Press, O., Smith, N. A., & Lewis, M. (2022). Train Short, Test Long: Attention with Linear Biases (ALiBi) Enables Input Length Extrapolation. International Conference on Learning Representations (ICLR). arxiv.org/abs/2108.12…
(ALiBi 原始论文)
[9] Su, J., Lu, Y., Pan, S., Murtadha, A., Wen, B., & Liu, Y. (2024). RoFormer: Enhanced Transformer with Rotary Position Embedding. Neurocomputing, 568, 127063. arxiv.org/abs/2104.09…
(RoPE 旋转位置编码原始论文)
[10] Dai, Z., Yang, Z., Yang, Y., Carbonell, J., Le, Q. V., & Salakhutdinov, R. (2019). Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context. Proceedings of ACL, 2978–2988. arxiv.org/abs/1901.02…
(Transformer‑XL 引入片段级递归和相对位置编码)
扩展说明(非标准学术引用)
- 中英文 Token 数量对比数据:来源于知乎用户“暗月魔术师”的独立测试(《哈利波特与魔法石》中英版本)。该数据为非学术机构的实测结果,用于说明分词器差异。
- “1000 Tokens ≈ 750 英文单词”:来源于 OpenAI 官方 API 文档。
- GPT-4 词表约 100,256:来源于社区分析,OpenAI 未在官方报告中精确公布,使用时请注意其非官方性质。
文档结束 | 最后更新:2026-04-28
本文档欢迎转载,但请注明出处并保留参考文献列表。