读一下这句话:「小猫没有跳上桌子,因为它太累了。」你立刻知道「它」指小猫。把最后几个字换成「因为它太高了」,「它」马上变成了桌子。你几乎不用思考,但对机器来说,这需要把「它」和句子里的其他词联系起来,再根据「累」还是「高」判断该联系谁。
2017 年,Google 的研究者发表了论文《Attention Is All You Need》,提出一种主要依靠「注意力机制」来处理文字的结构,叫 Transformer。今天 GPT、Claude、Gemini、Llama、DeepSeek、通义千问等主流大模型,骨架都建立在它之上。这一节就来拆开这台「发动机」。
在 Transformer 之前:一个字一个字地传话
在 Transformer 流行之前,处理文字的主力是「循环神经网络」(RNN)。它的读法很像人拿着一张小纸条读书:从第一个字读起,每读一个字,就把到目前为止的理解压缩写进纸条,然后带着纸条读下一个字。
这种读法有两个硬伤:
- 纸条大小是固定的。 句子一长,前面的细节就被后面的内容挤掉了。读到第 200 个字时,第 3 个字说了什么,纸条上可能只剩模糊的印象。后来的改进版本缓解了这个问题,但没有根治。
- 必须排队读。 不读完第 99 个字就没法读第 100 个,没办法让成千上万个计算单元同时开工,训练很慢。
想象一个「传话游戏」:一句话从第一个人传到第二十个人,越传越走样。RNN 面对长文本,就有点这个味道。
注意力机制:让每个词直接「看见」所有词
Transformer 换了个思路:不再排队传纸条,而是把所有词请进同一间会议室,每个词都可以直接看向其他任何一个词,并自己决定「该多听谁的」。
还是那句「小猫没有跳上桌子,因为它太累了」。当模型处理「它」时,会给句子里每个词分配一个关注度。下面是一组示意数字(为了说明原理而设,不是真实模型的输出):
| 「它」在看谁 | 小猫 | 跳上 | 桌子 | 因为 | 累 | 其他 |
|---|---|---|---|---|---|---|
| 关注度 | 62% | 6% | 8% | 4% | 15% | 5% |
关注度加起来是 100%。接着,模型按这个比例把各个词携带的信息「混合」起来,作为「它」的新理解。这样一来,「它」的表示里就装进了大量「小猫」的信息——模型就「知道」它指的是小猫了。如果句尾换成「太高了」,关注度就会大幅偏向「桌子」。
关键在于:句首和句尾的词,距离再远,也只隔着「一眼」,不用经过几十次传话。
Q、K、V:注意力里的「找书」三件套
每个词是怎么决定该看谁的?这就要说到注意力机制里最核心的三个概念:Q(Query,查询)、K(Key,键)、V(Value,值)。用图书馆找书来理解最直观:
- Q 查询:你手里的需求单——「我想找一本讲猫的书」;
- K 键:每本书书脊上的标签——「动物」「烹饪」「历史」;
- V 值:书里真正的内容。
你拿需求单和每本书的标签比对,越匹配的书,你读得越认真;最后你脑子里的收获,是按认真程度混合起来的各本书的内容。
在 Transformer 里,每个词同时扮演这三个角色。模型通过三组训练出来的「转换器」(本质上是三组权重),把每个词的向量分别变成它的 Q、K、V。然后分三步:
① 打分:拿「它」的 Q,和每个词的 K 逐一比对,算出匹配度
「它」的 Q ≈ 我在找一个「有生命、会累」的名词
小猫的 K ≈ 我是名词、是动物 → 匹配度高
桌子的 K ≈ 我是名词、是物体 → 匹配度低
② 归一化:把匹配度换算成加起来等于 100% 的权重
③ 混合:按权重把各个词的 V 加起来,得到「它」的新表示
新的「它」≈ 62% 小猫的信息 + 15% 累的信息 + ……注意,上面写的「有生命」「是动物」只是帮助理解的人话翻译。真实的 Q、K、V 都是一长串数字,没有人给它们贴标签,它们的含义是在训练中自己学出来的。
为什么要把 K 和 V 分开?因为「怎么被找到」和「被找到后提供什么」是两回事:书脊标签要简短好比对,书里的内容才是你真正要带走的。分开之后,模型可以更灵活地学习这两件事。
多头注意力:几组人同时从不同角度看
一句话里同时存在很多种关系:谁是主语、「它」指谁、哪个形容词修饰哪个名词、哪些词经常搭配……只做一次注意力,只能得到一组关注度,很难面面俱到。
于是 Transformer 让好几组注意力并行工作,每组有自己的 Q、K、V 转换器,这叫「多头注意力」。就像审一份合同,同时请律师、财务和业务负责人各看一遍,最后把意见汇总。
需要说明的是,每个「头」关注什么并不是人为指定的。研究者事后分析发现,有些头确实呈现出可以解释的规律(比如总是关注前一个词,或者专门把代词和它指代的名词连起来),但也有很多头的作用很难用人话说清楚。
一个完整的 Transformer 块里还有什么
注意力是主角,但一个完整的 Transformer 还需要几个配角:
- 位置信息。 注意力本身只看「词和词的关系」,不关心先后顺序。「狗咬人」和「人咬狗」用的字一模一样,不加处理的话模型分不清。所以要给每个词贴上「座位号」,这叫位置编码。
- 前馈网络。 注意力负责「词与词交流」,交流完后,每个词还要各自经过一个小型神经网络(就是上一节讲的那种)单独「消化」一遍。有研究认为,模型学到的大量事实性知识就储存在这些部分里。
- 残差连接和归一化。 每一步处理时,都把原来的信息「抄近路」保留一份,再叠加新算出的部分,同时把数值调整到稳定的范围。这些设计让几十层叠起来依然能稳定训练。
输入文字
▼
切成 token → 转成向量 → 加上位置信息
▼
┌────────────────────────────┐
│ 多头注意力(词与词交流) │
│ + 残差连接、归一化 │
│ 前馈网络(各自消化) │
│ + 残差连接、归一化 │
└────────────────────────────┘
▼ 同样的块重复堆叠几十层
输出:下一个 token 的概率还有一个细节和「大模型怎么说话」直接相关。2017 年的原始 Transformer 是为翻译设计的,分为「编码器」和「解码器」两部分;而 GPT 这类生成式大模型主要只用了解码器那一半,并加上一条规矩:每个词只能看它前面的词,不能偷看后面的。就像写作文时,你只能根据已经写下的内容决定下一个字。这正好对应「根据前文预测下一个词」的工作方式。
为什么是它成了大模型的发动机
| 对比项 | RNN(循环神经网络) | Transformer |
|---|---|---|
| 读法 | 一个字一个字排队读 | 所有字同时进会议室 |
| 远距离的词 | 层层传话,容易遗忘 | 直接互看,一步到位 |
| 训练时能否并行 | 很难 | 很容易,适合大规模 GPU 计算 |
| 继续做大 | 收益有限 | 加数据、加参数后效果持续提升 |
能并行,意味着可以把海量数据和算力真正用起来;能直接看见远处的词,意味着能理解长文和复杂的指代。这两点叠加,才有了后来的大模型浪潮。
当然它也有代价:每个词都要和其他所有词打一次分。1000 个 token,大约就是 100 万对组合;长度翻一倍,这部分计算量大约变成 4 倍。这也是长上下文昂贵、上下文窗口有上限的重要原因之一,工程师们为此发明了很多优化技巧。生成文字时,模型还会把前面已经算好的 K 和 V 缓存起来反复使用,所以对话越长,占用的内存也越多。
这里还有一个对普通用户有用的提醒:有研究发现,一些模型对超长输入中间部分的信息利用得不如开头和结尾。所以给 AI 长材料时,把最关键的要求放在开头或结尾再强调一次,往往更稳妥。
本节要点
- RNN 像拿着小纸条排队读书,长句容易遗忘、训练难以并行;Transformer 让所有词同时「开会」、直接互看。
- 注意力机制让每个词按关注度混合其他词的信息,从而理解指代和上下文。
- Q 是「我要找什么」,K 是「我能被怎样找到」,V 是「我能提供什么」;打分、归一化、混合三步完成一次注意力。
- 多头注意力从多个角度同时看;位置编码、前馈网络、残差连接让整套结构完整可训练。
- 注意力的计算量随长度的平方增长,这是长上下文昂贵的重要原因之一。
