注意力机制

注意力机制通过注意力汇聚查询(自主性提示,Q)和(非自主性提示,K)结合在一起,实现对(感官输入,V)的选择倾向,其中键和值是成对的。

../_images/qkv.svg

注意力机制与全连接层的区别在于其加入了自主性提示

注意力汇聚

非参数注意力汇聚

Nadaraya-Watson核回归(Nadaraya-Watson kernel regression)是一个典型的非参数注意力汇聚模型,如式(1)所示:

(1)f(q)=i=1nK(q,ki)j=1nK(q,kj)vi(2)=i=1nα(q,ki)vi

其中q为查询,(ki,vi)为键值对,K(ki,vi)为核函数,用来衡量查询和键之间的距离。非参数注意力汇聚可以简化式(2)所示,即将查询和键之间映射为注意力权重,查询结果是对值的加权平均,这里需要保证α(q,ki)0i=1nα(q,ki)=1,因此,可以使用注意力得分函数s(q,ki)后使用Softmax函数映射为α(q,ki)

如果键越接近给定的查询,那么相应的值的权重越大,对该值的倾向性(注意力)也就越大。同时,如果有足够的数据,非参数注意力汇聚会收敛到最优结果。

参数注意力汇聚

参数注意力汇聚即在注意力汇聚中的权重是可以学习的,可以简单的表述为式(3)所示:

(3)f(q)=softmax(s(q,k)ω)vT

其中ω为可学习的参数。

注意力得分数

加性注意力

当查询和键是不同长度的矢量时,可以使用加性注意力作为得分函数,如式(4)所示:

(4)s(q,k)=wvtanh(Wqq+Wkk)R,

其中,qRqkRk,参数WqRh×qWkRh×kwvRh可通过网络进行学习。

缩放点积注意力

点积注意力要求查询和键具有相同的长度d,其计算如式(5)所示:

(5)f(Q)=softmax(QKd)V

其中d为向量的长度。

多头注意力

多头注意力简单来说就是给定相同的查询、键和值的集合,使用h组不同的线性映射来变换查询、键和值,然后基于相同的注意力汇聚学习到不同的行为, 最后将得到的不同行为线性加权,产生最终输出。其中每一个注意力汇聚都被称为一个头。

在多头注意力中,通常使用缩放点积的注意力汇聚方式,其计算方式如下所示:

(6)Qi=fQi(Q),Ki=fKi(K),Vi=fVi(V)(7)hi=softmax(QiKid)Vi(8)f(Q)=ωihi

其中,f为线性映射函数。

自注意力

自注意力的查询、键和值来自同一组输入,只关注序列内信息。

交叉注意力

交叉注意力中的查询来自第一组输入,而键和值来自第二组输入,结合了编码器输出的上下文信息。