self-attention机制通俗的理解,transformer中的注意力机制。

前言

看了一下今年关于transformer的paper,感觉对self-attention机制了解地更加深入了。

self-attention

首先说什么是self-attention,简单来说self-attention就是计算自己与自己地关联性。比如在cv中,我们可以这么理解,通过self-anttention可以计算每个像素点之间地关联性。
先上图:
self-attention机制通俗的理解,transformer中的注意力机制。_第1张图片

给定大小为 H ∗W ∗C的输入2D图 ,我们通过(Wq,Wk,WV)将输入数据X转换为Q=XWq,K=XWk ,V=XWv 之后,其中Wq,Wk,Wv都是可学习参数,我们可以得到 K和 Q之间的局部相关性矩阵 R ∈ RH×W×(k×k×Ch):
R = K ∗ Q

R就是一个局部相关性矩阵,其中 Ch表示头部编号, ∗表示矩阵乘法。此外,局部关系矩阵R被进一步丰富了每个K*K网格的位置信息:
ˆR = R + P ∗ Q

其中P表示每个 k×k 网格的相对位置信息,简单来说P就是图片数据位置信息上面这个公式就是在关系矩阵中加入数据,比如图片数据的位置信息。并在所有 Ch头部之间共享。接下来,通过对每个头部的通道维度上进行 Softmax 操作得到注意力矩阵:A = Softmax( ˆR).。最后,将 A的每个空间位置的特征向量重塑为 Ch个局部注意力矩阵,得到输出特征图为 values与局部注意力矩阵的聚合:
Y = V ∗ A.

上面Y就是计算得到的注意力矩阵,值得注意的是,每个头部的局部注意力矩阵是由沿通道维度均匀划分的 V特征图计算的,最终输出 Y是所有头部聚合特征图的串联。
总的来说self-attention就是学习到三个参数(Wq,Wk,WV),然后结合输入数据得到三个参数:Q,K,V.再结合输入位置信息。对这些参数做一些运算,然就就可以得到自注意力矩阵了,通俗来说也就是数据内部的关联性。

你可能感兴趣的:(Deeping,learning,人工智能,算法,机器学习)