注意力机制
注意力背景
自经济学研究稀缺资源分配以来,人们正处在“注意力经济”时代,即人类的注意力被视为可以交换的、有限的、有价值的且稀缺的商品。许多商业模式也被开发出来去利用这一点:在音乐或视频流媒体服务上,人们要么消耗注意力在广告上,要么付钱来隐藏广告;为了在网络游戏世界的成长,人们要么消耗注意力在游戏战斗中,从而帮助吸引新的玩家,要么付钱立即变得强大。总之,注意力不是免费的。
注意力是稀缺的,而环境中的干扰注意力的信息却并不少。比如人类的视觉神经系统大约每秒收到108位的信息,这远远超过了大脑能够完全处理的水平。幸运的是,人类的祖先已经从经验(也称为数据)中认识到“并非感官的所有输入都是一样的”。在整个人类历史中,这种只将注意力引向感兴趣的一小部分信息的能力,使人类的大脑能够更明智地分配资源来生存、成长和社交,例如发现天敌、找寻食物和伴侣。
从生物学理解注意力机制
注意力是如何应用于视觉世界中的呢?这要从当今十分普及的双组件(two‐component)的框架开始讲起:这个框架的出现可以追溯到19世纪90年代的威廉·詹姆斯,他被认为是“美国心理学之父”(James, 2007)。在这个框架中,受试者基于非自主性提示和自主性提示有选择地引导注意力的焦点。
非自主性提示是基于环境中物体的突出性和易见性。想象一下,假如我们面前有五个物品:一份报纸、一篇研究论文、一杯咖啡、一本笔记本和一本书,就像图 1。所有纸制品都是黑白印刷的,但咖啡杯是红色的。换句话说,这个咖啡杯在这种视觉环境中是突出和显眼的,不由自主地引起人们的注意。所以我们会把视力最敏锐的地方放到咖啡上,如图 1。
喝咖啡后,我们会变得兴奋并想读书,所以转过头,重新聚焦眼睛,然后看看书,就像图 2 中描述那样。 与 图 1 中由于突出性导致的选择不同,此时选择书是受到了认知和意识的控制,因此注意力在基于自主 性提示去辅助选择时将更为谨慎。受试者的主观意愿推动,选择的力量也就更强大。
查询、键和值
在注意力机制的背景下,自主性提示被称为查询(query)。给定任何查询,注意力机制通过注意力汇聚(attention pooling)将选择引导至感官输入(sensory inputs)。在注意力机制中,这些感官输入被称为值(value)。更通俗的解释,每个值都与一个键(key)配对,这可以想象为感官输入的非自主提示。
注意力机制的理解
对于注意力机制我觉得最直观的一个理解是这样的:一个物体摆在面前,这个物体就可以认为是上面所说的一个值(Value,V),然后这个物体有一定的自然属性,这就是他的键(Key,K),本身键和值是一一对应的,而当我们加上一定的主观意识(我们平时生活中遇到这个物体时能够经历的一些过程),这个意识就是查询(Query,Q),加上意识以后经过我们大脑的一个处理,我们脑中就会形成对于这个物体的另外一个认识(值( V ′ V^{\prime } V′ ))。也就是说我们引入了注意力相当于对一个物体的值会有影响了,这个影响是多少呢?可以去调整,可能 Q 会影响的多一点(80%,60%),可能 K 会影响的多一点,注意力和键会共同塑造最终的值。
而从数据方面上如何理解注意力机制呢?
我们的数据可能不单仅仅只是一个 Key-Value 的一个对应,可能还会收到其他因素的影响,这个时候我们就可以引入注意力来进行理解了。
如图 4,首先有一个数据输入, D i n D_{in} Din,经过三个偏置( W q , W k , W v W_q,W_k,W_v Wq,Wk,Wv)形成了三个数据 Q , K , V Q,K,V Q,K,V,然后 Q Q Q与 K K K 的进行矩阵的乘积,就会得到一个输出 A,然后对输出进行规范化,即对 A 中的每一个数据都除以 A 的方差的根号,然后对每一行进行 Softmax 操作,然后就能够得到一个关于 Q , K Q,K Q,K权重相关的结果,然后再去与 V 进行矩阵乘法就可以得到在 Q 和 K 共同影响在的输出了。这就是注意力机制,引入其他因素对 V 的一个影响程度。
多头注意力
理解方式 1:
在实践中,当给定相同的查询、键和值的集合时,我们希望模型可以基于相同的注意力机制学习到不同的行 为,然后将不同的行为作为知识组合起来,捕获序列内各种范围的依赖关系(例如,短距离依赖和长距离依 赖关系)。
因此,允许注意力机制组合使用查询、键和值的不同 子空间表示(representation subspaces)可能是有益的。 为此,与其只使用单独一个注意力汇聚,我们可以用独立学习得到的h组不同的 线性投影(linear projections)来变换查询、键和值。然后,这h组变换后的查询、键和值将并行地送到注意力汇聚中。最后,将这h个注意力汇聚的输出拼接在一起,并且通过另一个可以学习的线性投影进行变换,以产生最终输出。这种设计被称为多头注意力(multihead attention)。对于h个注意力汇聚输出,每一个注意力汇聚都被称作一个头(head)。图 5 展示了使用全连接层来实现可学习的线性变换的多头注意力。
理解方式 2:
如图 6 ,有时可能影响的因素可能不是一个方面的了,要把更多的影响因素加入进来,就引入了多头注意力机制,多头注意力就是进行多次注意力机制,然后把这些结果进行拼接然后输出。这里重点解释一下为什么 Z ( 0 ) , Z ( 1 ) , Z ( 2 ) Z^{(0)},Z^{(1)},Z^{(2)} Z(0),Z(1),Z(2) 是通过拼接方式进行的呢?可以看到最后我们的结果是要生成一个 2 × 4 2 \times 4 2×4 的一个结果,我们要想最后结果 Y Y Y中的每一个元素都受到 Z ( 0 ) , Z ( 1 ) , Z ( 2 ) Z^{(0)},Z^{(1)},Z^{(2)} Z(0),Z(1),Z(2)影响就能够解释得通为什么是这样的结果了。比如在 Y 中的结果 Y 1 , 2 Y_{1,2} Y1,2值是从 Z 1 : Z_{1:} Z1:(即 Z 的第一行) W : 2 W_{:2} W:2(即 W 的第二列)得到的,这样 Y 中的每一个元素都受到了 Z ( 0 ∼ 2 ) Z(0 \sim 2) Z(0∼2)的影响。
自注意力
在深度学习中,经常使用卷积神经网络(CNN)或循环神经网络(RNN)对序列进行编码。想象一下,有了注 意力机制之后,我们将词元序列输入注意力池化中,以便同一组词元同时充当查询、键和值。具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。由于查询、键和值来自同一组输入,因此被称为 自注 意力(self‐attention),也被称为内部注意力(intra‐attention)。