1. 引言:它怎么知道「他」是谁
上一篇《训练三阶段——从会接龙,到会听话,到会思考》的结尾,我说过:接龙在它脑子里具体怎么算出来的,本篇接着来分析。
先看一段话:「小王看见小李盯着电脑发愁,走过去问他怎么了。」这里的「他」,你一眼就锁定是小李——那个在发愁的人。可它是怎么知道的?它没有眼睛,面前只有一串 token。它怎么就把「他」对上了隔了好几个词的那句里的「小李」?
我的答案一句话:注意力。它读句子不是逐字记下来的,是算出来的——算的是「谁该被重视」。这篇就拆这笔账怎么算:怎么让一个字,能「看」到相隔很远的另一个字。
2. 为什么需要注意力:传话会走样
先回到接龙。上一篇讲过,它一个 token 一个 token 往外蹦,每蹦一个,就看着前面已有的文字,猜下一个。问题藏在这里:前面那一大段文字,它该怎么「看」?
最朴素的念头,是只看紧挨着它的那一个 token。可语义常常要联系很远。「他」要解释清楚,得回去找「小李」——中间隔着十几个 token。只看前一个,它连「他」是个代词都看不出来。
有人试过另一种做法:把看过的都背下来,一路带过去。这个思路有个学名叫 RNN,做法是把前面所有内容不断压缩成一个「进度小结」,每读一个 token 就更新一次小结,再带着它往前走。听着合理,毛病也在这:每次更新都是一次压缩,越靠后的信息被挤得越淡。传话游戏你玩过吧——几十个人排成一排,第一个人说句悄悄话,传到队尾往往面目全非。RNN 就是在玩一场跨很多步的传话,传到「他」这里,前面「小李」的影子早被稀释没了。
所以需要另一种机制:不靠传话,把全文摊开放在眼前,谁和谁有关,当场算。这就是注意力。
其实:注意力不是记忆,是计算关注。 它不「记住」小李,它是在算「他」这个位置,该把多少注意力分给「小李」那个位置。这是它读懂上下文关系的全部答案。
3. 注意力直觉:一束聚光灯
注意力这名字取得好,因为它干的事,跟你读文章时干的几乎一样。
你读一段长文,眼睛并不平均用力。「小王看见小李盯着电脑发愁」——你的视线自然落在「小王」「小李」「发愁」上,跳过「的」「了」「在」。读到后面的「他」,你会回头确认:这个「他」是那个发愁的人。跳过无关句、盯住关键句,这本身就是一套注意力分配。
给材料划线也是同一个动作。你复习时拿荧光笔,把重要的句子涂亮,不重要的留白。注意力就是模型在给自己划线:读每个词时,它都决定——哪些词值得多看一眼,哪些一眼带过。
区别在于,模型把这个「多看一眼」做成了显式的账。每读一个词,它对全文每一个位置都算出一个关注度:相关的,权重高;无关的,权重低。然后它把所有位置的信息,按这个权重加权混合,当成这个词的「新理解」。换句话说:每个词都在重新理解自己——通过扫一遍全文,看哪些词该影响自己。
这就是那束聚光灯。光扫过全文每一个字,照到谁、照多亮,都是它算出来的关注度。下一章拆这束光具体怎么算。
4. QKV:问、被问、和回答
把「算关注度」拆开,核心是三个角色,我压成一句话:问、被问、和回答。论文里它们叫 Q、K、V——Query(查询)、Key(键)、Value(值)。名字唬人,角色不唬人。
Q 是「我在问什么」。每个词重新理解自己时,先掏出一个问题。比如「他」这个代词,它的 Q 大概是「我指谁」——它带着这个问题去扫全文。
K 是「你有什么值得我看」。全文每个词都举着一块招牌,写着自己是啥。名词举着「我是个人名」,动词举着「我是动作」。K 就是这块招牌,负责让别的词一眼认出它能回答什么问题。
V 是「真正要记住的」。K 是门面,V 是内容。别的词认出了「小李」,真正能拿去更新理解的,是「小李」背后的完整信息——他是个人、他在发愁、他是这场对话的对象。V 就是这份完整信息。
三者怎么配合?一句话:Q 和 K 两两对上,对得上分数高;分数变成权重,按权重取 V。放到开头那句:小王(Q:我该问谁)去对上小李的招牌(K:我是在发愁的人),对上了,于是从小李的 V 里取出「他在发愁、是对话对象」,更新小王对上下文的理解。全文每个词都在同时做这件事。
其实:注意力分数不是玄学,是三个向量两两对上的结果——问、被问、和回答。 谁和谁对上眼,谁就被重视。

图里只画了一条主线,但注意那个「K 其他词」:同一个 Q,是同时去和全文每一个词的 K 对一遍的。这就是注意力「一眼扫全文」的真相。
5. 多头注意力:好几盏灯,各管一面
一束聚光灯够吗?不够。你读文章时同时盯好几件事:谁是主角、谁在做什么、情绪是松是紧、时间先后。如果只有一盏灯,它顾了指代就顾不了情感。
所以 Transformer 不只用一束光,而是并排好几束,每束管一面。这叫多头注意力(multi-head attention)。「头」就是那几盏灯,各配一套自己的 Q、K、V 权重,各算各的关注度。有的头专管指代——「他」盯着人名;有的头管语法——动词盯着主语宾语;有的头管语气——「发愁」连着消极词。
结果怎么合起来?每盏灯各自算出一个「新理解」,再把它们拼成一份更完整的。有点像几个同事同时读一份报告,一个盯数字、一个盯逻辑、一个盯措辞,散会各自报一条,你拼起来就是全面得多的印象。

所以:多头不是炫技,是「一个角度不够,得多角度同时看」的工程化。它读上下文比你想象的稳,不是某一种规律生效,是好几套规律在同时投票。
6. 位置编码:座位号
这一章解决一个很反直觉的问题:注意力本身,分不清先后。
你算「他」该看谁时,是把「他」的 Q 和全文每个词的 K 都拿去对一遍。问题来了:把「小李」和「小王」换个位置,算出来的分数一模一样——因为注意力只比「像不像」,不比「谁在前谁在后」。可「小王看见小李」和「小李看见小王」,意思完全两回事。
顺序信息得另外注入。做法是在每个 token 上,按它的位置绑一个「座位号」,让它带着座位号去算注意力。剧场里的座位必须有号,否则大家同时开口,你分不清谁坐哪排、谁先谁后。位置编码就是这个座位号。
现代主流方案叫 RoPE(旋转位置编码)。它不做一张查位置的表,而是把查询和键两个向量按位置旋转:位置越靠后,转的角度越大。两个向量一旋转,再做点积时,结果里就天然带着「这两个词隔多远」的信息——相对距离直接编进了分数。2026 年你叫得上名字的开源模型——Llama、Mistral、Qwen、Phi-3、DeepSeek——默认全是它。细节在技术深挖那节,这里先记住一个类比:座位号。
7. 堆多层 + 复杂度:越看越抽象,越长越贵
单层注意力算完,这个词已经「重新理解」过一次了。但一层不够——它认得出代词,认不出整个故事。于是把同样的机制堆很多层:第一层的结果,喂给第二层再算一次,一层层往上叠。
叠出来的效果很有意思:底层管字面,高层管语义。底层注意力抓的是「谁在句子里的位置近」这种表面关系;越往上,它越能抓住「这句话整体在讲什么」。你读到一句话,先认得每个词,再拼出意思——模型的层叠,就是在反复重建这个从字面到语义的过程。每多一层,它「看」的东西就更抽象一层。
代价也在这。注意力每算一次,都要让每个 token 和全文每个 token 比一次——这没法偷懒。窗口里有 n 个 token,就要比 n×n 次。数学上叫 O(n²),我说人话:窗口翻一倍,成本涨四倍。算一下:1K 窗口,每层约 100 万次比较;128K 窗口,每层约 170 亿次。这还只是一层,几十层叠上去,数字再翻几十倍。

这一下就解释了一件事:为什么它一次能记住的长度是有限的。上下文窗口不是产品经理拍脑袋定的上限,是计算成本和内存成本顶着的天花板。2026 年旗舰模型把窗口推到了 100 万 token 的量级(Claude、Gemini、GPT-5.5、DeepSeek V4 那批都是这个档),最大的广告口径到了 1000 万——可实际能可靠用到的,往往只有宣传的一半左右。窗口到底卡在哪、为什么聊久了会忘,这是下一篇《上下文窗口的边界》的正题,这里先埋个引子。
8. 技术深挖(可跳过)
这节写给想看机制细节的开发者,跳过不影响主线。
QKV 怎么来的
每个 token 最初只是一个向量(embedding)。要得到它的 Q、K、V,不是凭空变出来的,而是把这个向量分别乘上三个可学习的权重矩阵 W_Q、W_K、W_V——同一句话,问什么、举什么招牌、记什么内容,都是训练里学出来的分工。三个矩阵每个头一套,所以「多头」不是三份,是 头数×3 份。
softmax 注意力分数
注意力分数的标准算式叫 scaled dot-product attention:先算 Q 和 K 的点积(QK^T),再除以 √d_k(d_k 是向量维度,防止维度大了点积值爆炸),然后过 softmax 归一化成权重,最后按权重对 V 加权求和。softmax 的作用是让所有权重加起来等于 1,谁大谁小一目了然。
多头拼接
每个头各自算出一份「带权重的新理解」,然后把所有头的结果拼接起来,再乘一个输出权重矩阵 W_O,得到这一层的最终输出。分头算、合起来用——这是 2017 年《Attention Is All You Need》那篇论文就定下的架构,后来的模型基本沿用了这套骨架。
位置编码:绝对、相对、RoPE
位置编码大致三代。第一代绝对位置编码:给每个位置配一个向量,加进 token 的 embedding——GPT-2 那代用学习出来的表,原版 Transformer 用正弦余弦公式,能表达位置,但学不到「相对距离」的关系。第二代相对位置编码:直接把「相隔多远」作为一个偏差项参与计算,能表达距离,但要改注意力算式。第三代就是 RoPE:把 Q、K 向量按位置做旋转,两个旋转后的向量做点积,结果天然只跟它们的相对距离有关——不用改算式,相对距离自己冒出来。这正是它成为 2026 主流的原因。Llama 3 还把 RoPE 的基础频率从默认的 10000 调到了 500000,就为了在更长的上下文里保持分辨力(截至 2026-08-23 WebSearch 核实)。
KV cache:为什么越长越贵(账本之一)
前面说 128K 窗口每层约 170 亿次比较,那是算力。还有一笔账叫内存,比算力更卡。
自回归是逐 token 生成的:每吐一个 token,都要回头把前面的 K、V 再算一遍。为了不重复劳动,工程上把它们缓存下来,这就是 KV cache。问题是缓存涨得快:一个 GPT-3 级别的模型(1750 亿参数),每多一个 token 的上下文,K、V 缓存就要多占约 4.5MB 显存(FP16 精度,截至 2026-08-23 WebSearch 核实)。128K 上下文,光这笔缓存就接近 570GB——一块 H100 才 80GB。所以长上下文不是「想给多少给多少」,是显存先顶不住。这也解释了 2026 年大量论文在做 KV cache 压缩和换出——不是闲的,是内存真不够。
9. 收束:你早就懂注意力
回到开头那句「他」。现在你知道了,它不是去查「他=小李」这条笔记——它在每个位置算了一笔「谁该被重视」的账:Q 问、K 答、V 给内容,多头各管一面,座位号补上顺序,再一层层叠出抽象。
其实:这一整套,你其实早就会。你读长文时会跳过废话、盯住关键句,会在「他」出现时回头找「小王」还是「小李」——你在用的,就是注意力。模型只是把这件你做得无比自然的事,算成了明明白白的分数。它不是记住了上下文,是每次都在重新计算「谁该被重视」。
下一篇,本系列第 4 篇《上下文窗口的边界》:既然注意力要全文两两比、KV 缓存线性涨,那窗口到底为什么有限、聊久了为什么忘、超了窗口它会怎么办。想跟上系列,可以关注我,别走丢。
如果你还没动手,现在就可以做个实验:回想你最近问 AI 的一段长对话,是不是越聊它越「记不住」开头?这个「越聊越笨」的现象,下一篇会拆个底朝天。





