什么是注意力机制?给定一篇很长的文章,然后就此文章进行提问,提出的问题只和段落中的一两个句子相关,其余部分都是无关的,为了减小神经网络的负担,只需要把相关的片段挑选出来让后续的神经网络来处理,而不需要把所有文章都输给神经网络
1.计算感兴趣的输入向量
给定输入向量从[x1,⋯,xN]中选出和某个特定任务相关的信息,需要引入一个和任务相关的表示,成为查询向量Query Vector,并通过打分函数计算查询向量和输入向量的相关性。计算在给定q,x情况下,选择第n个输入向量的概率
an=p(z=n|X,q)=softmax(s(xn,q))=exp(s(xn,q))∑Nj=1exp(s(xj,q)),
其中s为打分函数,有加性模型、点积模型、缩放点积模型、双线性模型,这些模型都是对输入向量x和查询向量q做一些运算,这里挑点积模型说一下,因为transformer会用到这个打分函数,其他的这里就不具体阐述了。s(x,q)=x⊺q,可以看出,点积就是内积运算,乘积越大,两者相似度越高,和$q乘积最大的xn,打分最高,和查询向量最相似,也就是说其权重(注意力分布)最高,和查询向量匹配度最高。αn为注意力分布,可以理解为每个输入向量的权重。
2.软性注意力机制
注意力分布αn可以看成在给定任务相关的查询$q时,第n个输入向量受关注的程度,可以采用一种软性的信息选择机制对输入信息进行汇总,即
att(X,q)=N∑n=1αnxn,=Ez∼p(z|X,q)[xz].
上述式子称为软性注意力机制
3.硬性注意力机制
硬性注意力机制就是只关注某一个输入向量,即选取概率最高的向量作为输出att(X,q)=xˆn 其中ˆn=argmaxn=1αn
4.键值对注意力
可以用key-value pair来表示输入信息,其中key用来计算注意力分布αn,value用来计算聚合信息,key-value pair表示为(K,V)=[(k1,v1),⋯,(kN,vN)],则注意力函数为
att((K,V),q)=N∑n=1αnvn,=N∑n=1exp(s(kn,q))∑jexp(s(kj,q))vn,
普通注意力机制里面的输入向量既充当key又充当value。
5.多头注意力模型
见transformer(attention is all you need)
6.自注意力模型
见transformer(attention is all you need)