第 3 章:Transformer 的直觉——注意力是什么

5 阅读8分钟

📚 系列:[大模型入门:从原理到实践,技术人的认知升级指南]


一场你每天都在进行的"计算"

想象你在参加一场五个人的技术评审会议。

项目经理在讲进度,后端工程师在解释架构,设计师在说交互,产品在提需求,测试在报 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 的出现打破了语言模型规模的瓶颈,是今天所有主流大模型的底层架构。