📚 系列:[大模型入门:从原理到实践,技术人的认知升级指南]
一场你每天都在进行的"计算"
想象你在参加一场五个人的技术评审会议。
项目经理在讲进度,后端工程师在解释架构,设计师在说交互,产品在提需求,测试在报 bug。五个人同时开口,声音叠在一起。
但你不会崩溃。你会本能地做一件事:根据当下的讨论焦点,把注意力集中在最相关的那个人身上。
讨论到数据库设计?你主要听后端。讨论到用户流程?你主要听产品和设计。讨论到一个具体的崩溃问题?你主要听测试。
你没有一字不漏地处理所有人的每一句话,你的大脑在实时计算:现在,谁说的话对我理解这个问题最有帮助?
这个过程,就是注意力机制(Attention Mechanism)的直觉原型。
Transformer 做的,就是把这种"选择性关注"的能力,移植到了语言处理上。
一个词的意思,取决于周围的词
在讲 Transformer 之前,我们需要先理解一个更基本的问题:为什么处理语言这么难?
来看这两个句子:
我去银行取了钱。 我坐在河岸边钓鱼。
"银行"这个词在中文里有两个意思:金融机构,和"河岸"。如果我问你"银行是什么意思",你的第一反应取决于上下文——前一句里你理解为金融机构,后一句里你几乎不会联想到金融。
这种"同一个词,不同语境下意思不同"的现象,在语言里无处不在。而且不只是词义歧义,还有指代关系:
张工把报告发给了李总,因为他需要审核。
"他"指谁?你一眼就看出来是李总——因为"需要审核"这件事更合理地发生在李总身上。但大模型如果不理解整个句子的语义关系,可能搞错"他"的指代。
老一代的语言处理模型(比如 RNN)处理这些问题的方式像在阅读一卷胶卷:按顺序、一帧一帧地读。读到"他"这个词的时候,"张工"和"李总"已经是很多步之前处理过的内容,模型需要把它们存在一个"记忆单元"里,但这个记忆会随着距离增加而衰减,容易出错。
Transformer 的突破在于:它不按顺序读,它同时"看"整个句子的所有词,并且为每个词计算它和其他所有词的关联程度。
注意力:为每对词打一个"相关性分数"
Transformer 的核心操作,可以用一句话概括:
处理每一个词时,计算它和句子里所有其他词的相关程度,然后根据相关程度决定该"借鉴"多少其他词的信息。
用刚才的例子来说,当模型处理"他"这个词时,它会同时"看"句子里的每一个词:张工、把、报告、发给、了、李总、因为、他、需要、审核。然后计算"他"和每个词的相关性分数。
结果可能是这样的:
graph LR
HE["代词「他」\n(当前处理词)"]
HE -->|"权重 ████ 极高"| LZ["李总"]
HE -->|"权重 ███ 高"| SH["审核"]
HE -->|"权重 ██ 中"| ZG["张工"]
HE -.->|"权重 · 低"| FW["把 / 了 / 因为…"]
style HE fill:#fff3cc,stroke:#d6b656,stroke-width:2
style LZ fill:#2563ab,color:#fff,stroke:#1a4a8a
style SH fill:#2563ab,color:#fff,stroke:#1a4a8a
style ZG fill:#7bb3d4,color:#fff,stroke:#5b9bd5
style FW fill:#e9e9e9,stroke:#ccc
图 3-1:处理代词"他"时,注意力机制为句子中每个词分配权重(连线粗细表示权重大小)。"李总"和"审核"的权重最高,说明模型判断"他"更可能指李总。这个"打分"过程在处理每个词时都会进行。
这个"打分"的过程,就叫做 自注意力(Self-Attention)——每个词对自身所在句子里的所有词打分,决定处理自己时该参考哪些词、参考多少。
在 Transformer 里,这个过程对句子里的每个词同时进行,而不是顺序进行。这是它和 RNN 最根本的区别。
顺序处理 vs 并行处理
为什么"同时处理"而不是"顺序处理"这么重要?
来看一个类比。
假设你要翻译一本 300 页的书,有两种方案:
方案 A:一个翻译,从第 1 页开始,逐页翻译,翻完上一页才能开始下一页。300 页翻完,前面的语境可能已经记不清楚了。
方案 B:把书分发给 300 个翻译,每人翻一页,但翻译时可以随时查阅其他任何一页的内容做参考。所有页面同时完成,每个翻译都掌握完整语境。
Transformer 用的是方案 B 的思路。
flowchart TB
subgraph RNN ["旧方式:顺序处理(RNN)"]
direction LR
W1["词1"] --> W2["词2"] --> W3["词3"] --> W4["词4"] --> W5["词5"]
note1["❌ 处理词5时,词1的信息已经衰减"]
end
subgraph TF ["新方式:并行处理(Transformer)"]
direction TB
ALL["所有词同时处理"]
ALL --> A1["词1 ←→ 词2,3,4,5"]
ALL --> A2["词2 ←→ 词1,3,4,5"]
ALL --> A3["词3 ←→ 词1,2,4,5"]
note2["✅ 每个词都能直接关注任意其他词"]
end
图 3-2:顺序处理(RNN)与并行处理(Transformer)的对比。RNN 像接力赛,信息在传递中逐渐衰减;Transformer 像全连接网络,每个词直接和所有词建立关联。
这种并行处理的方式带来了两个巨大的优势:
第一,长距离依赖不再是问题。 无论"他"和它指代的词相隔多远,注意力机制都能直接建立关联,不会因为距离而衰减。
第二,可以充分利用现代硬件的并行计算能力。 GPU 最擅长的就是大量简单运算同时进行。顺序处理无法并行,并行处理可以最大化利用 GPU,这也是为什么 Transformer 出现后,大模型的训练规模能迅速扩大。
多头注意力:从多个角度同时理解
真实的 Transformer 不只用一套注意力,而是同时运行多套,每套关注不同的语言维度——这叫做 多头注意力(Multi-Head Attention)。
回到会议的类比:不同的人可能从不同的角度听同一场讨论。技术人员重点听技术细节,产品经理重点听用户需求,项目经理重点听时间节点。同一段对话,三个人听下来关注点完全不同。
多头注意力类似于此。模型同时维护多个"注意力视角",有的关注语法关系,有的关注语义关联,有的关注指代关系,最后把多个视角的信息融合在一起,得到更丰富的表示。
graph TB
H1["🔵 注意力头1\n语法关系\n(主谓宾结构)"]
H2["🟢 注意力头2\n语义关联\n(动作与对象)"]
H3["🟠 注意力头3\n指代关系\n(代词与先行词)"]
TEXT["『张工把报告发给了李总\n因为他需要审核』"]
MERGE["融合结果\n(多视角综合理解)"]
H1 --> TEXT
H2 --> TEXT
H3 --> TEXT
TEXT --> MERGE
style H1 fill:#cce5f5,stroke:#5b9bd5
style H2 fill:#d4edda,stroke:#28a745
style H3 fill:#ffd0a0,stroke:#d69060
style TEXT fill:#f8f8f8,stroke:#333,stroke-width:2
style MERGE fill:#fff3cc,stroke:#d6b656,stroke-width:2
图 3-3:多头注意力相当于从多个角度同时理解同一段文字。每个"头"关注不同维度的关系(语法、语义、指代等),最终结果是多视角信息的融合。
位置编码:顺序也很重要
到这里还有一个问题没解决:如果所有词"同时"处理,模型怎么知道词的顺序?
"猫吃鱼"和"鱼吃猫",Token 一样,意思完全不同。
Transformer 的解决方案叫做 位置编码(Positional Encoding)。在把词送进模型处理之前,给每个词附加一个"位置标签",告诉模型这个词在序列里是第几个。这样,模型在计算注意力的时候,不只知道"这两个词有多相关",还知道"它们的距离有多远、先后顺序如何"。
你可以把位置编码想象成给每个词贴上一个号码牌。词本身的意义没变,但有了号码牌,模型就能知道它在队列里的位置。
flowchart LR
subgraph input ["输入处理"]
T1["猫\n(位置1)"]
T2["吃\n(位置2)"]
T3["鱼\n(位置3)"]
end
subgraph attn ["注意力计算"]
T1 <--> T2
T2 <--> T3
T1 <--> T3
end
input --> attn
attn --> OUT["语义表示\n(含位置信息)"]
图 3-4:位置编码让模型在并行处理时仍能感知词序。每个 Token 携带位置信息进入注意力计算,保证"猫吃鱼"和"鱼吃猫"产生不同的理解结果。
为什么 Transformer 改变了一切
2017 年,谷歌的研究团队发表了一篇题为《Attention Is All You Need》(注意力就是你需要的一切)的论文,提出了 Transformer 架构。
这个名字在今天看来几乎像一个预言。
在此之前,处理语言的主流方法(RNN、LSTM)有一个内在瓶颈:顺序处理限制了规模,规模限制了能力。Transformer 的并行处理方式彻底打破了这个瓶颈:模型可以做得更大,训练可以用更多数据,能力可以突破之前无法企及的上限。
GPT、Claude、Gemini——今天你能叫出名字的几乎所有大语言模型,底层都是 Transformer 架构。
但 Transformer 只是解决了"如何处理信息"的问题。下一个问题是:模型是怎么"学到"这些语言直觉的?它读了什么,学了什么,又是如何从一堆文本变成一个能对话的系统的?
这是下一章的故事。
本章小结
- 注意力机制:处理每个词时,计算它和所有其他词的相关程度,根据相关程度借鉴信息;
- 自注意力:同一句话内的词之间互相打分,解决语义消歧和指代关系问题;
- 并行处理:Transformer 同时处理所有词,而非逐词顺序处理,解决了长距离依赖衰减的问题,同时能充分利用 GPU;
- 多头注意力:同时维护多个注意力视角,从语法、语义、指代等多个维度理解语言;
- 位置编码:给词附加位置标签,让并行处理的模型仍能感知词序;
- Transformer 的出现打破了语言模型规模的瓶颈,是今天所有主流大模型的底层架构。