引言
大模型读一句话的时候,并不是每个词都一视同仁。它会给某些词多分一点注意力,给另一些词少分一点。这套分配注意力的办法,叫注意力机制。它是今天几乎所有大模型的核心部件,理解它,就理解了模型“读懂”一句话的方式。
注意力在算什么
注意力机制做的事,可以粗略地理解成“配对打分”:对句子里的每一个词,模型都会问,它和句子里的其他词关系有多大。关系大的,权重就高;关系小的,权重就低。处理“他把钥匙放在桌子上,后来又拿走了”这样的句子时,模型要把“拿走”的动作和“钥匙”联系起来,而不是和“桌子”联系起来,注意力权重就是干这个的。它不是在理解语义本身,而是在算词与词之间的关联强度。
多头注意力为什么有用
一个注意力头只能看到一种关系:有的头关注语法搭配,有的头关注指代关系,有的头关注远距离的呼应。模型的做法是同时开很多个注意力头,各看各的,最后再拼起来。这叫多头注意力。它的好处是模型可以同时捕捉不同层面的关联:既知道“它”指代的是前面提到的哪样东西,也知道整句话的语气是肯定还是否定。头越多,视角越全,但计算量也越大。
注意力不是真的在“注意”
需要注意的是,机器的“注意力”和人的注意力不是一回事。人注意一个东西,是因为觉得它重要;模型给一个词高权重,只是统计上它和当前任务的相关性强。模型并不知道自己在注意什么,也没有主观的轻重缓急。把注意力权重当成模型“在想什么”的证据,很容易过度解读:权重高只说明计算上关联强,不等于模型理解了其中的因果。
长文本里的注意力难题
注意力机制还有一个现实短板:计算量随文本长度快速增长。一句话变长一倍,词与词之间的配对数量会变成四倍。长上下文之所以贵,根子就在这里。行业为此想了不少办法:只让每个词关注附近的词、把注意力计算拆成几步、用更省的近似算法。这些办法都在做同一件事:在效果和成本之间找平衡,让模型读得更长,同时别贵得离谱。
理解注意力的意义
注意力机制之所以重要,不只是因为它让模型效果变好,还因为它提供了一种可解释的抓手:研究者可以通过权重分布,粗略看到模型在处理一句话时依赖了哪些信息。但它不是万能钥匙,模型的很多行为发生在注意力之外:知识存在参数里,推理发生在层与层之间。注意力是模型“看”的方式,但“看懂”这件事,远不止注意力一个部件。对普通用户来说,记住一点就够了:模型回答的质量,很大程度上取决于它在你的问题里抓住了哪些词。
这也解释了为什么提问的方式会影响回答的质量:问题写得越清楚,关键信息越突出,模型的注意力就越容易落在正确的地方;问题写得含糊,模型就可能把注意力分给不相关的词,答非所问。与其说是模型“理解力不行”,很多时候是注意力被问题本身带偏了。写好问题,本质上是在帮模型把注意力放在对的地方。