attention is all your need 之 scaled_dot_product_attention

“scaled_dot_product_attention”是“multihead_attention”用来计算注意力的,原文中“multihead_attention”中将初始的Q,K,V,分为8个Q_,8个K_和8个V_来传入“scaled_dot_product_attention”中进行计算。

attention is all your need 之 scaled_dot_product_attention_第1张图片

在“scaled_dot_product_attention”主要就是进行attention的计算以及一些mask操作。首先要知道Attnetion机制的公式以及原理:

公式中Q表示所需计算的注意力项,K为被计算注意力项,V为被注意力项的取值,很多时候K和V是相等的。画图理解一下:

attention is all your need 之 scaled_dot_product_attention_第2张图片

其中Q代表一个(3,7)的向量,K也是一个(3,7)的向量,所以Q×K的转置所得一个(3,3)的向量score,根据score的数学运算可以将score[0,0]理解为Q中第一个向量Q[0,:]与K第一个向量K[0,:]的相似度所以score的第一行代表的就是Q的第一行向量(Q[0,:])与K中所有向量(K[:,:])的相似度。然后将所得的结果除以一个标量,公式中是dk,然后通过softmax函数进行映射,所得到的就是Q向量相对于K向量的相似度得分(3,3)。最后通过得到的score(3,3)与V相乘,如下图所示:

attention is all your need 之 scaled_dot_product_attention_第3张图片

所得到的result的第一行就是V中所有向量与score中第一行分数相乘得到的(有点拗口),也就是result是V中向量通过加权得到的,这个权重矩阵就是score,也就使得模型具有了注意力机制。(其实这一块的思想是attention机制中共有的,在seq2seq模型中比较好理解,可以参考着来理解)。
在tensorboard整个“scaled_dot_product_attention”所做的工作就是上面那个公式。总体就是Q*K的转置,然后除以一个标量,然后softmax一下,最后乘以V向量。知识在其中加入了两个mask操作。这是为了将Q和K中一些填充的为零的向量清除掉。这个mask也是个骚操作,理解起来,也不难。

你可能感兴趣的:(attention)