注意力机制 怎么工作
上一课最后说到,一个词只有一个坐标,有时会出问题。同样是 'Apple' 这个词,旁边有 'eat' 就是水果,有 'stock' 就是公司。人读句子时,并不是每个词都看得一样,而是更留意跟眼下这个词关系密切的词。也可以教机器学会这一招,让它看句子里的其他词,来定下一个词的意思。这就叫注意力机制。
更注意要紧的词
读长句子时,我们并不在每个词上花一样的力气,而是挑出有助于理解眼下这个词的词,多看几眼。比如要弄清 'sat' 说的是什么事,就得看 'cat' 知道是谁坐下,看 'mat' 知道坐在哪儿。
至于冠词、介词这类小词,对这个问题帮不上多少忙。对要紧的词多加注意,这就是注意力机制的第一步。
点句子里的一个词。跟它关系越密切的词颜色越深,能看出眼下这个词在注意哪里。
点的词不同,颜色变深的词也跟着变。深色的词对眼下这个词要紧,浅色的词关系不大。人读文章时也是这样。
可是机器怎么知道什么要紧呢?每个词都有坐标,所以把眼下这个词的坐标和其他词的坐标比一比,打出关联度分数。怎么比,也是从数据里学来的。什么要紧,不是由一个词单独决定的,而是由它和周围词的关系决定的。
上下文定意思
同一个词,有时意思会变。决定意思的是周围的词,也就是上下文。看看英语单词 'bank':旁边有 'river' 就是河岸,有 'money' 就是银行。
词本身没变,周围一变,理解就变了。注意力机制看的正是这些周围的词,用来定下意思。
中间的词不动,点旁边的上下文词来换。同一个词,理解从河岸变成了存钱的银行。
只换了旁边一个词,整个理解就变了。一个词并不独自带着全部意思,要跟周围的词放在一起,意思才清楚。
所以眼下这个词注意哪些词,决定了同一个词会被读成哪种意思。这一点在有好几个意思的词,也就是多义词身上,表现得最明显。
多义词的坐标随上下文移动
上一课说过,词是意义空间里的坐标。多义词的坐标卡在两个街区之间。'Apple' 既属于水果街区,也属于公司街区,单独出现时看不出是哪一边。
可要是旁边加上 'eat',坐标就被拉向水果一边;加上 'stock',就被拉向公司一边。上下文把模糊的坐标定到了一边。
点 'eat' 或 'stock',贴到 'Apple' 旁边。意义坐标在水果街区和公司街区之间来回移动。
同样是 'Apple',旁边一个词就让它的位置一下子变了。这正是注意力机制要做的事。它把周围各个词的坐标混合起来,为眼下这个词重新做一个坐标:特别注意的词,坐标掺得多;不太注意的词,坐标只掺一点。
那注意该怎么分呢?不是平均分给旁边所有词,而是关联度越大,分得越多。
把关联度分成权重
关联度分数不直接拿来用,而是换算成加起来正好等于 1 的份额,这些份额叫权重。关系越密切的词,分到的份额越大。
总数是定的,所以一个词拿得多,其余的就少拿那么多。能分出去的注意有限,权重决定把它多用在哪里。
点词的条,给它更多注意。一个词拿得多,其余的就变少,所有权重加起来始终是 1。
把注意集中到一个词上,其他词就让出同样多的份额,总和自始至终都是 1。这样分好的权重,决定了看哪个词、看多少。权重越大的词,越用力地把眼下这个词的新坐标拉向自己。
所以 'Apple' 的坐标会移向权重大的那个邻居。真正的语言模型会对句子里所有的词同时做这种计算,还会并排运行好几个角度不同的注意力。
小结
归纳起来是这样:读句子时,不是每个词都看得一样,而是更注意对眼下这个词要紧的词。把关联度分数换算成加起来等于 1 的权重,再按权重把周围词的坐标混合起来,给眼下这个词做出新坐标。
所以上下文能定意思,像 'Apple' 这样的多义词,坐标会随上下文移向水果一边或公司一边。这就是注意力机制。
依次点要点回顾一下。(对要紧处加注意 → 上下文定意思 → 多义词坐标移动 → 权重之和始终为 1)
现在你知道注意力机制是什么了。不把每个词看得一样,而是挑出要紧的词加以注意,靠这个简单的想法,同一个词能随旁边的词读出不同的意思。机器学会了在上下文里读词。
把注意力层层叠起来的结构叫 Transformer。如今的大语言模型,也就是 LLM,就是建在 Transformer 上、专门猜下一个词的机器。下一课来看 LLM 怎样写出文字。