Transformer 说明
如果你要找的是 Hugging Face 的 transformers Python 库,而不是模型架构,看:Transformers 库说明。
这篇文章解决什么问题
很多人知道“大模型是 Transformer”,但这句话本身其实没有解释什么。
真正容易卡住的地方通常是这些:
- Transformer 到底是什么
- 它为什么会替代更早的 RNN / LSTM
- 它和“注意力机制”到底是什么关系
- 它内部到底在做什么
- 为什么今天的大模型大多还是 Transformer 变体
- 它强在哪里,短板又在哪里
这篇文章就是把这些问题拆开说明。
先说结论
- Transformer 是一种处理序列数据的神经网络架构。
- 它最核心的变化,是让模型在处理一个 token 时,可以直接“看”整段序列里哪些位置更重要。
- 它能成为今天大模型的基础,不是因为结构最简单,而是因为它同时解决了效果、并行训练和长距离依赖这几件事。
- 今天常见的大语言模型,大多不是完整原版 Transformer,而是以 Transformer 为底座、再做大量工程改造后的版本。
什么是 Transformer
最简单的说法是:
Transformer 是一种“让序列中每个位置都能按需关注其他位置”的模型结构。
这里的“序列”可以是:
- 一句话
- 一段代码
- 一篇文章
- 一串语音切片
- 一组图像 patch
也就是说,它并不只适合自然语言。
只是因为它在 NLP 上爆发得最早,大家才最先从文本场景认识它。
它想解决什么问题
在 Transformer 之前,处理文本序列最常见的是:
- RNN
- LSTM
- GRU
这类模型的共同特点是:
- 按顺序一个词一个词往后走
- 当前状态依赖前一个状态
这条路能用,但有三个明显问题。
1. 很难并行
如果一句话有 100 个 token,RNN 类模型通常得按顺序一步步算。
也就是说:
- 先算第 1 个
- 再算第 2 个
- 再算第 3 个
不能很自然地把整段序列一次并行扔进 GPU。
这会直接拖慢训练速度。
2. 长距离依赖容易变弱
比如一句很长的话里,后面某个词真正需要参考的是前面很远的位置。
RNN 理论上能把信息一路传过去,但路径很长,效果容易衰减。
常见现象就是:
- 离得近的信息更容易保住
- 离得远的信息更容易丢
3. 信息路径太长
如果当前位置要参考 30 个 token 前的一个词,在传统循环结构里,这个影响要一层层传过去。
路径越长,训练越难,信号越容易变形。
Transformer 想解决的核心,就是:
- 不要只靠顺序传递
- 让一个位置能更直接地看到别的位置
它为什么叫 Transformer
名字来自论文《Attention Is All You Need》里提出的整套新结构。
“Transformer”可以理解成一种对输入表示不断做变换的网络。
但如果只记一个关键词,最重要的不是名字,而是:
Attention
因为 Transformer 的核心突破,就是把注意力机制放到了架构中心。
什么是 Attention
Attention 可以理解成一句话:
当模型处理当前位置时,它不会平均看所有词,而会给不同位置分配不同权重。
比如一句话:
text
小明把书放在桌子上,因为它太重了。当模型看到“它”时,真正重要的问题是:
- “它”指的是“小明”?
- “它”指的是“书”?
- “它”指的是“桌子”?
如果没有选择重点的能力,模型就只能很笨地依赖固定窗口或顺序记忆。
有了 Attention,它就能对不同位置打分,判断哪些位置更相关。
所以 Attention 的本质是:
- 不是简单把上下文全部拼起来
- 而是动态决定“此刻该重点看谁”
Self-Attention 又是什么
在 Transformer 里最核心的是 Self-Attention。
它的意思是:
同一段输入序列内部,每个位置都可以去看同一段序列里的其他位置。
比如句子:
text
今天天气很好,我想去公园散步。当模型处理“散步”时,它可能更关注:
- “天气很好”
- “公园”
- “去”
而不是平均对待每一个词。
“Self” 这个词表示它不是看外部别的序列,而是在看自己这段序列内部的关系。
Self-Attention 到底怎么做
把复杂公式先压成一个更容易理解的流程,就是:
- 每个 token 先变成一个向量
- 每个向量再分别映射成三种角色:
- Query
- Key
- Value
- 当前 token 拿自己的 Query,去和所有 token 的 Key 做匹配
- 匹配分数越高,说明越值得关注
- 再用这些分数,对所有 token 的 Value 做加权汇总
- 得到当前位置新的表示
如果用一句更直白的话说:
- Query:我现在想找什么
- Key:我这里有什么信息
- Value:如果你关注我,你最终拿走什么内容
为什么要拆成 Q、K、V
因为“是否相关”和“真正传什么信息”不是一回事。
一个位置可能:
- 很相关
- 但它提供的是另一种信息
把这三种角色拆开,模型就更容易学到复杂关系,而不是只用一套向量硬干所有事情。
一个简化示意
text
输入序列:
[我] [喜欢] [吃] [苹果]
处理“吃”时:
Query("吃")
去匹配
Key("我") / Key("喜欢") / Key("吃") / Key("苹果")
匹配结果可能像这样:
我 0.05
喜欢 0.15
吃 0.20
苹果 0.60
然后模型会更重地吸收 "苹果" 对应的 Value,
因为“吃”和“苹果”的关系最强。这不是实际训练输出,只是说明这个机制的直觉。
多头注意力是什么
如果只做一次注意力,模型很可能只学会一种关系。
但真实语言里,关系不止一种:
- 主谓关系
- 指代关系
- 时间关系
- 语义搭配
- 句法结构
所以 Transformer 会让多个注意力头同时工作。
这就是 Multi-Head Attention。
可以把它理解成:
- 一个头盯语法
- 一个头盯指代
- 一个头盯远距离关系
- 一个头盯局部搭配
当然,真实模型里的头不会这么整齐分工,但这个类比是对的:
多个头让模型能从不同角度同时看同一段内容。
Transformer 不是只有注意力
很多人会把 Transformer 误解成“就是 Attention”。
不完整。
一个标准 Transformer block 至少还有这些部分:
- Multi-Head Attention
- Feed Forward Network
- Residual Connection
- Layer Normalization
- Position Information
这些部分是一起工作的。
Feed Forward Network 在干什么
Attention 更像是在做“信息交换”和“关系选择”。
而 Feed Forward Network 更像是对每个位置各自做一次更深的非线性变换。
可以粗略理解成:
- Attention:我该看谁
- FFN:我拿到这些信息后,怎么重新加工自己
所以 Transformer block 不是只看关系,还会在每一层把表示继续变换。
Residual 和 LayerNorm 为什么重要
这两个东西看起来不起眼,但训练稳定性非常依赖它们。
Residual Connection
它相当于给每一层都留一条“原路返回”的通道。
这样即使新变换学得不好,也不至于把原始信息完全冲掉。
Layer Normalization
它用来稳定数值分布,让训练过程更可控。
如果没有这类稳定器,深层网络会更难训。
Transformer 怎么知道词序
这是初看时最容易疑惑的一点。
Attention 本身不带天然顺序感。
如果只把 token 一股脑扔进去,模型其实不知道:
- 哪个词在前
- 哪个词在后
所以 Transformer 必须额外加入位置信息。
这类信息常见写法包括:
- 绝对位置编码
- 相对位置编码
- Rotary Position Embedding(RoPE)
这也是为什么大模型的“上下文长度”会和位置编码能力直接相关。
Transformer 的基本数据流
把完整流程简化后,大致可以看成这样:
text
文本
-> Tokenize
-> Embedding
-> 加入位置信息
-> 多层 Transformer Blocks
-> 输出每个位置的隐藏状态
-> 线性投影到词表
-> 得到下一个 token 的概率分布如果是语言模型,它最后做的事情其实很朴素:
- 看完前面的 token
- 预测下一个 token 最可能是什么
所以 Transformer 是骨架,语言建模目标是训练任务。
这两件事不是一回事,但会被同时提到。
为什么说 Transformer 是模型骨架
这里的“骨架”,不是比喻它“很重要”这么简单。
更准确地说,它指的是:模型内部最基础的组织方式。
也就是这些问题由它决定:
- 输入 token 先怎么变成向量
- 位置信息怎么加进去
- 每一层用什么结构处理上下文
- token 和 token 之间怎么建立关系
- 最后怎么把隐藏状态变成下一个 token 的预测
如果把模型想成一栋楼,Transformer 更像:
- 承重结构
- 楼层布局
- 管线主干走法
它不直接等于装修风格,也不等于住进去的人。
放到模型上,对应关系大致可以这样看:
| 部分 | 它更像什么 |
|---|---|
| Transformer 架构 | 房子的主体结构 |
| 参数权重 | 结构里每个位置被学出来的具体数值 |
| 训练数据 | 施工时给它看的材料 |
| 微调 / 对齐 | 后续把它调成某种用途 |
| Prompt / Chat Template | 你现在怎么把输入送进去 |
所以说“模型骨架”,真正想表达的是:
Transformer 决定模型是按什么内部结构运转的,但不直接决定它最终学成什么风格、知道多少知识、会不会调用工具。
骨架通常包括什么
在大语言模型里,所谓骨架,通常至少包含这些部分:
- embedding
- positional encoding / RoPE
- self-attention
- feed-forward network
- residual connection
- normalization
- decoder-only 或 encoder-decoder 这类总体拓扑
这些东西决定的是“信息怎么流动、怎么混合、怎么往下传”。
骨架不包括什么
下面这些经常和 Transformer 一起出现,但不属于“骨架”本身:
- 具体学到了哪些事实
- 回答口吻和风格
- 数学或代码能力强不强
- 是否适合工具调用
- 是否被做过 instruction tuning
- 这次推理时喂了什么上下文
这些更多取决于:
- 参数规模
- 训练数据
- 训练目标
- 后训练方法
- 推理链路设计
为什么同样是 Transformer,表现会差很多
因为“骨架相同”只表示底层路线相近,不表示成品会接近。
就像两栋楼都用钢筋混凝土框架,也可能出现非常大的差别:
- 面积不同
- 用料不同
- 施工质量不同
- 后期装修不同
模型也一样。
同样是 Transformer,下面这些差异都能把结果拉得很开:
- 参数量差很多
- 训练语料质量不同
- 位置编码和注意力实现不同
- 是否做过高质量对齐
- 是否专门优化了长上下文、工具调用、多模态
Encoder、Decoder、Decoder-only 分别是什么
Transformer 最早的论文同时包含:
- Encoder
- Decoder
但今天不同任务用的版本并不一样。
Encoder-only
代表思路像 BERT。
特点是:
- 更擅长理解
- 适合分类、匹配、抽取这类任务
- 可以双向看上下文
Encoder-Decoder
代表思路像 T5、原始翻译模型。
特点是:
- 一边读输入,一边生成输出
- 很适合翻译、摘要、改写
Decoder-only
这就是今天大语言模型最常见的路线。
代表思路像:
- GPT 系列
- Llama 系列
- Qwen 系列
- Mistral 系列
它的核心特点是:
- 只根据前面的 token 预测后面的 token
- 通过自回归方式一步步生成
所以今天人们说“大模型是 Transformer”,很多时候更准确的说法其实是:
大多数 LLM 是 decoder-only Transformer。
为什么大模型大多选 Decoder-only
因为它很适合统一成一个简单目标:
text
给定前文,预测下一个 token这个目标有几个现实好处:
- 海量文本容易准备
- 训练目标统一
- 生成任务天然适配
- 扩展到代码、数学、对话、多模态文本接口也比较顺
这也是为什么 GPT 这条路线最后影响最大。
Transformer 为什么这么适合大规模训练
它能统治大模型时代,不只是因为效果好,而是因为它在工程上也很适合放大。
1. 更容易并行
相比 RNN 顺序计算,Transformer 在训练阶段更适合整段并行处理。
这对 GPU / TPU 集群非常关键。
2. 长距离关系更直接
一个位置要看很远的另一个位置,不需要一层层传很多步。
3. 可扩展性强
参数量、层数、宽度、头数、训练数据都可以系统性放大。
4. 通用性强
不仅能做文本,也能延展到:
- 视觉 Transformer
- 语音模型
- 多模态模型
它的代价和短板是什么
Transformer 也不是没有问题。
1. 长序列成本高
经典 Self-Attention 的代价会随着序列长度明显上升。
这也是为什么长上下文一直是难题。
2. 对显存和算力要求高
模型越大、上下文越长,训练和推理成本都越高。
3. 不等于天然拥有稳定推理能力
Transformer 是骨架,不等于自动拥有:
- 数学能力
- 工具调用能力
- 长期规划能力
- 稳定 Agent 行为
这些能力还依赖:
- 数据
- 训练目标
- 后训练
- 推理策略
- 工程系统
为什么说今天的模型不是“原版 Transformer”
因为从 2017 年原论文到今天,中间已经加了很多改造。
常见变化包括:
- 只保留 decoder
- 更现代的归一化方式
- 更适合长上下文的位置编码
- MoE
- GQA / MQA
- Flash Attention 一类高效实现
- 更复杂的后训练流程
所以今天说某个模型是 Transformer,更准确的意思通常是:
它建立在 Transformer 思想和 block 结构之上,但已经不是教科书原版。
Transformer 和上下文、Chat Template、微调是什么关系
这几个概念很容易混在一起,其实不在同一层。
| 概念 | 所在层级 | 解决什么问题 |
|---|---|---|
| Transformer | 模型架构层 | 模型如何处理序列和建立关系 |
| 上下文 | 推理输入层 | 这次调用里模型能看到什么 |
| Chat Template | 输入协议层 | 如何把消息排成模型认识的 token 序列 |
| 微调 | 训练适配层 | 如何让模型更符合特定任务和风格 |
也就是说:
- Transformer 决定底座怎么工作
- 上下文决定这轮给它看什么
- Chat Template 决定怎么喂进去
- 微调决定它后来被调成什么样
一个常见误区
1. Transformer = 大模型
不对。
Transformer 是常见底座,不是“大模型”这个概念本身。
2. Attention 就等于理解
也不对。
Attention 是一种计算机制,不等于人类意义上的真正理解。
3. 上下文越长,Transformer 就自动越强
不对。
长上下文能力还要看位置编码、训练分布、实现优化和推理成本。
4. 只要是 Transformer,效果都会差不多
不对。
同样是 Transformer,参数规模、数据质量、训练方式、后训练方法不同,结果会差非常远。
我的判断
Transformer 真正改变行业的地方,不只是“注意力机制这个点子很聪明”,而是它第一次把这几件事放到了一起:
- 能直接建模长距离关系
- 能大规模并行训练
- 能稳定扩展到非常大的模型和数据
所以它不只是一个论文里的网络结构,而是今天整个大模型时代最关键的一块地基。
如果只记一句话,我会建议记这个:
Transformer 的本质,是让序列中每个位置都能更直接地决定“我现在该关注谁”,并把这种能力做成可大规模训练的标准架构。
TODO:围绕 Transformer 继续补的关联问题
- [ ] Self-Attention 的公式到底怎么读
- [ ] RoPE 为什么能支持更好的长上下文
- [ ] Flash Attention 在优化什么
- [ ] GQA、MQA、MHA 分别是什么
- [ ] MoE 和 Transformer 是什么关系
- [ ] BERT、T5、GPT 三条 Transformer 路线到底怎么区分
- [ ] Transformer 为什么也能做图像和多模态