首页 / 概念 / 注意力
02 / 注意力 · ATTENTION

读到"它"这个字时,AI 在回头看哪几个词?

语义空间告诉它每个词站在哪;但要读懂一句话,它还得知道词与词之间在勾连什么。读到"它",到底指代前面哪个东西?谁在对谁说话?这,就是注意力要解决的——也是 transformer 的心脏。

每读一个词,
它都回头,
给前面每个词
打一个分:
"你,该让我
多看一眼吗?"

浅层 · 一句话:你读小说读到"他后悔了",会下意识回翻"他是谁、他做了什么"。这个回翻的小动作,你几乎察觉不到,却时刻在做。注意力,就是 AI 把这个"回翻"显式地、彻底地做了一遍。

不同的是:你一次只回翻一两个最相关的词;它对前面每一个词同时打分——这句话里的每个字,在它眼里都被秤了一遍"该多看你一眼吗"。下面这一整页,都在拆这个"打分"里到底发生了什么。

亲手点一个词

点一句话里的任意词,看它最"在意"的上下文。

点亮任意词,看 它最"在意"的上下文 · 颜色越亮 = 注意力权重越高

刚才发生了什么:你点"它"时,"猫"和"垫"被点亮——因为代词最可能指代前面的名词;点"暖和",回头连到"垫";点"他",连到"医生"还是"病人"由上下文定。这个"回头给前面每个词打分、再把分高的点亮"的动作,就是注意力。

中层 · 把"打分"说清楚:每读到一个词(比如"它"),模型回头给前面每一个词都算一个数——"读你这个词时,该分给你多少注意力"。这个数就叫注意力权重(attention weight)。权重高,说明这个词当前最相关;权重低,基本忽略。

所有权重加起来正好等于 1,像把"100% 的注意力"分配下去:大头给最相关的几个词,零头撒给其余。所以注意力不是"看 / 不看"的开关,而是一份连续的、加起来满分的注意力预算表

注意力最经典的样子

把"每个词看每个词"摊开,就是一张热力图。

行 = 当前正在读的词,列 = 被它回头看的词。每个格子的颜色深浅,就是那一份注意力权重——格子越亮,"读这一行的词时,越要看这一列的词"。

权重低权重高
↑ 看第「它」行:最亮的格子落在「猫」「垫」列——读"它"时,注意力大头给了它可能指代的名词。这正是注意力机制的真实长相。

辅助 · 怎么读这张图:它是下三角密、右上角空——因为读一个词时,它只能回头看前面已经出现的词,看不到还没说出口的后文(这叫"因果掩码")。每一行的格子加起来等于 1,这就是上一段说的"满分的注意力预算"被摊在了这一行里。

想清楚一件事

它的"注意",不是它真的"在意"谁。

深层 · 反直觉:那张热力图很像"它读懂了谁指代谁"。但拆到底,它只是一组数学权重——把每个词转成向量,两两算了个相似度,过一遍 softmax 压成加起来等于 1 的小数,再拿这些小数把对应的词向量加权求和。如此而已。

看起来像理解,底层是加权平均。没有谁"在意"谁,没有"我觉得它指猫"。只有:相似度高的词,权重大,在求和里占的比重大——于是那个词的信息更多地流进了当前位置。理解,是这套加权汇总在海量数据上训练出来的效果,不是它的动机

这件事一旦想透,你看它的眼光会变:它"注意到"了什么,说的是哪些词的信息被加权汇进来了,不是它心里"看重"什么。把权重误读成意图,是对它最常见的浪漫化。

那个"分",到底怎么算出来的

回头问一句、给每个词打分、压成权重、加权汇总。

四步。当前词带着一个"我想找什么"的问题(Query),挨个去问前面每个词的"我是什么"的标签(Key);问得越对上,分越高;一排分过一遍 softmax 变成权重;最后按权重把各词的内容(Value)汇总回来。

① QUERY 当前词回头问 "我"在找什么样的词? ② KEY · 打分 问每个旧词 Query·Key 越像分越高 ③ SOFTMAX 压成权重 一排分 → 加起来 = 1 ④ VALUE · 汇总 加权求和 权重×各词内容,加起来 原始分: 9.0 6.2 1.1 … 权重: .71 .25 .04 … 这一整套,对句子里每个词都跑一遍 —— 就摊成了上面那张热力图的一整行。
Q · K · V 是同一个词向量乘三组不同权重得到的三副面孔:Query 是"我想找什么",Key 是"我是什么",Value 是"我能给出什么"。
不止一套分,而是很多套

"多头"注意力:同时打很多套分,每套盯一种关系。

一套权重只够盯一种关系。所以模型并排放了很多个"头",每个头独立打一整套分:有的头专盯指代,有的盯语法,有的盯语义。下面三张 mini 热力图,是同一句话在三个头眼里截然不同的"看法"。

HEAD A

盯"指代"

谁指向谁

「它」这一格亮在「猫」上——把代词牢牢系回它指代的名词。

HEAD B

盯"语法"

主谓宾的骨架

亮格连起的是"猫·坐·垫"的结构线——谁是主语、动词带哪个宾语。

HEAD C

盯"语义"

意思上的呼应

「暖」连向「垫」「软」——意思上互相呼应的词聚成一团,构成主题。

↑ 同一句「小猫坐在软垫上,它很暖」,三个头各打一套权重、各看一种关系。真实模型每层有十几个这样的头,这里只画了三个最直观的。
为什么它是心脏

就靠这一招,它甩开了上一代的三个老毛病。

在注意力之前,模型(RNN)只能一个字一个字顺着读,记不住远处的话。注意力一上来,三件事同时被解决——这就是 transformer 成为今天主流架构的根本原因。

PARALLEL

并行看全句

不像 RNN 逐字排队,它一次性给整句话里的每个词都打好分——所有位置同时算,又快又能纵观全局。

LONG-RANGE

抓长程依赖

第 1 个词和第 200 个词,在它眼里距离是一样的——隔得再远,也能一步连上。代词指代百字之前的主角,照样抓得住。

RELATION

理解关系

它学的不是"逐词翻译",而是词与词之间怎么勾连——谁修饰谁、谁指代谁。读懂关系,才谈得上读懂句子。

把多头再收一句:单独一个头,只能看见一种关系——只盯指代的头,看不见语法;只盯语义的头,理不清主谓。一句话的意思,从来不是单一关系撑起来的。

多头的价值,正在于让这些看法同时发生、再合并:指代 + 语法 + 语义……十几套权重各看一面,最后拼到一起。单看任何一头都偏,合起来才接近"读懂"。这也是为什么它叫"多头"而不是"一头"——理解,是很多种关系叠加出来的。

现在它既知道每个词的位置(语义空间),又知道词与词的关系(注意力)。一句话在它眼里,不再是一串孤立的字,而是一张内部彼此勾连的网。万事俱备——它该怎么开口,说出下一个词?那是最后一站:逐词预测。