浅层 · 一句话:你读小说读到"他后悔了",会下意识回翻"他是谁、他做了什么"。这个回翻的小动作,你几乎察觉不到,却时刻在做。注意力,就是 AI 把这个"回翻"显式地、彻底地做了一遍。
不同的是:你一次只回翻一两个最相关的词;它对前面每一个词同时打分——这句话里的每个字,在它眼里都被秤了一遍"该多看你一眼吗"。下面这一整页,都在拆这个"打分"里到底发生了什么。
刚才发生了什么:你点"它"时,"猫"和"垫"被点亮——因为代词最可能指代前面的名词;点"暖和",回头连到"垫";点"他",连到"医生"还是"病人"由上下文定。这个"回头给前面每个词打分、再把分高的点亮"的动作,就是注意力。
中层 · 把"打分"说清楚:每读到一个词(比如"它"),模型回头给前面每一个词都算一个数——"读你这个词时,该分给你多少注意力"。这个数就叫注意力权重(attention weight)。权重高,说明这个词当前最相关;权重低,基本忽略。
所有权重加起来正好等于 1,像把"100% 的注意力"分配下去:大头给最相关的几个词,零头撒给其余。所以注意力不是"看 / 不看"的开关,而是一份连续的、加起来满分的注意力预算表。
行 = 当前正在读的词,列 = 被它回头看的词。每个格子的颜色深浅,就是那一份注意力权重——格子越亮,"读这一行的词时,越要看这一列的词"。
辅助 · 怎么读这张图:它是下三角密、右上角空——因为读一个词时,它只能回头看前面已经出现的词,看不到还没说出口的后文(这叫"因果掩码")。每一行的格子加起来等于 1,这就是上一段说的"满分的注意力预算"被摊在了这一行里。
深层 · 反直觉:那张热力图很像"它读懂了谁指代谁"。但拆到底,它只是一组数学权重——把每个词转成向量,两两算了个相似度,过一遍 softmax 压成加起来等于 1 的小数,再拿这些小数把对应的词向量加权求和。如此而已。
看起来像理解,底层是加权平均。没有谁"在意"谁,没有"我觉得它指猫"。只有:相似度高的词,权重大,在求和里占的比重大——于是那个词的信息更多地流进了当前位置。理解,是这套加权汇总在海量数据上训练出来的效果,不是它的动机。
这件事一旦想透,你看它的眼光会变:它"注意到"了什么,说的是哪些词的信息被加权汇进来了,不是它心里"看重"什么。把权重误读成意图,是对它最常见的浪漫化。
四步。当前词带着一个"我想找什么"的问题(Query),挨个去问前面每个词的"我是什么"的标签(Key);问得越对上,分越高;一排分过一遍 softmax 变成权重;最后按权重把各词的内容(Value)汇总回来。
一套权重只够盯一种关系。所以模型并排放了很多个"头",每个头独立打一整套分:有的头专盯指代,有的盯语法,有的盯语义。下面三张 mini 热力图,是同一句话在三个头眼里截然不同的"看法"。
「它」这一格亮在「猫」上——把代词牢牢系回它指代的名词。
亮格连起的是"猫·坐·垫"的结构线——谁是主语、动词带哪个宾语。
「暖」连向「垫」「软」——意思上互相呼应的词聚成一团,构成主题。
在注意力之前,模型(RNN)只能一个字一个字顺着读,记不住远处的话。注意力一上来,三件事同时被解决——这就是 transformer 成为今天主流架构的根本原因。
不像 RNN 逐字排队,它一次性给整句话里的每个词都打好分——所有位置同时算,又快又能纵观全局。
第 1 个词和第 200 个词,在它眼里距离是一样的——隔得再远,也能一步连上。代词指代百字之前的主角,照样抓得住。
它学的不是"逐词翻译",而是词与词之间怎么勾连——谁修饰谁、谁指代谁。读懂关系,才谈得上读懂句子。
把多头再收一句:单独一个头,只能看见一种关系——只盯指代的头,看不见语法;只盯语义的头,理不清主谓。一句话的意思,从来不是单一关系撑起来的。
多头的价值,正在于让这些看法同时发生、再合并:指代 + 语法 + 语义……十几套权重各看一面,最后拼到一起。单看任何一头都偏,合起来才接近"读懂"。这也是为什么它叫"多头"而不是"一头"——理解,是很多种关系叠加出来的。
现在它既知道每个词的位置(语义空间),又知道词与词的关系(注意力)。一句话在它眼里,不再是一串孤立的字,而是一张内部彼此勾连的网。万事俱备——它该怎么开口,说出下一个词?那是最后一站:逐词预测。