I found myself not as enthusiastic as before.
Attention,如果将其华丽的外衣褪下,其本质便是加权平均。关于Attention涉及到的<Q,K,V>矩阵,通俗点来说就是一种支持相似查询的加权表示。将Q做为待查询相似的Query,而待选区被称作Source,包含<K,V>成对的键值对矩阵,其形式可以简单的想成字典(dict)的形式。运算拆解:对于矩阵Q中的q向量,面向K矩阵中的每个k进行相似度计算得到sim(q,v),得到与<K,V>长度(len(K) or len(V))等同的相似度表示Score,将其通过归一化(softmax())转成权重形式,此时对应的权重分别于对应的V相乘,这样单一的query(q)被表示为由很多<K,V>对去回答的向量,从而涵盖了更多的可用信息。注:在Attention中常用矩阵进行运算,因此写作Q。
偷来的图1.png从“偷来的图1.png”可以看出将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。
因此,最终的计算可以用公式表示:
Attention机制的具体计算过程,可以将其归纳为两个过程:第一个过程是根据Query和Key计算权重系数,第二个过程根据权重系数对Value进行加权求和。而第一个过程又可以细分为两个阶段:第一个阶段根据Query和Key计算两者的相似性或者相关性sim;第二个阶段对第一阶段的Score进行归一化处理;这样,可以将Attention的计算过程抽象为下图的三个阶段。
偷来的图2.png在第一个阶段,可以引入不同的函数和计算机制,根据q(Query)和某个k ,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine或者通过再引入神经网络来求值。
dot.png cosine.png MLP.png第一阶段产生的分值根据具体产生的方法不同其数值取值范围也不一样,第二阶段引入类似SoftMax()的计算方式对第一阶段的得分进行数值转换得到向量表示A,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax()的内在机制更加突出重要元素的权重。
第二阶段的计算结果A与Source中的<K,V>对应,A中的索引为i的权重a即为V中索引为i的value的权重系数,然后进行加权求和即可得到Attention数值:
att-result.png通过如上三个阶段的计算,即可求出针对Query的Attention值。
网友评论