注意力机制
注意力机制是通过Query与Key的注意力汇聚(给定一个 Query,计算Query与 Key的相关性,然后根据Query与Key的相关性去找到最合适的 Value)实现对Value的注意力权重分配,生成最终的输出结果。
计算过程:
输入Query、Key、Value:
阶段一:根据Query和Key计算两者之间的相关性或相似性(常见方法点积、余弦相似度,MLP网络),得到注意力得分;
阶段二:对注意力得分进行缩放scale(除以维度的根号),再softmax函数,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过softmax的内在机制更加突出重要元素的权重。一般采用如下公式计算:
阶段三:根据权重系数对Value值进行加权求和,得到Attention Value(此时的V是具有一些注意力信息的,更重要的信息更关注,不重要的信息被忽视了);
这三个阶段可以用下图表示:
自注意力机制
self- attention中的self,表示query、key、value都来自自己,每个token都能提取出自己的query、key、value。
比如这个例子“I have a dog”这四个词首先嵌入为四个向量,a1 a2 a3 a4,这四个向量也就是token,然后从每个a中提取出它们的Q K V。
Q(query):模型从token中提取出的,对token的理解信息。 用于主动与其他token计算相似程度。 K(key):模型从token中提取出的,与其他token的关系信息 被用于与其他token计算相似程度。 v(value):表示当前token的重要程度。
把所有a放到一起得到4*2的矩阵,用4*2的矩阵分别乘w1 w2 w3,乘以2*2维度的w1输出4*2矩阵,每一行分别是q1 q2 q3 q4,合起来是大Q,同样的乘以W2得到k,乘以W3得到V,不一样的是W3用的是2*3的W,这样会使V的维度是4*3的。然后,K的转置乘以Q输出4*4的矩阵。
假设a1 a2 a3 a4都是1*2的向量,从这几个向量中分别提取出Q K V,提取方式是分别乘以W1 W2 W3,a1*w1得到q1,a1*w2得到q2,a1*w3得到w3,所有的a共用一套W1 W2 W3,所以计算是可以并行的。得到Q K V 之后,用q1分别乘以k1的转置 k2的转置 k3的转置 k4的转置,再分别除以√dk,dk是K的维度(这里是2),然后得到了4个数值,这四个数值称为相似度分数,把这四个相似度分数做softmax处理,得到新的四个数值,再把这四个新的相似度分数分别和V1 V2 V3 V4相乘再相加,得到b1。
计算b2的时候用a2的q和其他所有的K进行点乘,计算相似度,其他计算都是一样的。
总体来说,操作是这样的:
多头注意力机制
多头注意力实际上是一定数量的注意力层的并行组合。最好并行化注意力层并将维度分割成这些层,而不是仅仅构建一个具有更高维度的注意力层。如图 ,自注意力方法的理想部署设置是使用多个版本的学习投影对矩阵查询、键和值进行多次线性投影。
然后以串联的方式将分离的多样化学习结果汇集在一起,并为另一个时间的大结果进行投影。多头注意带来的好处是表示子空间的多样性和能够组合更多样化信息的特权。