浅谈Attention机制理解

Attention

该文章参考下面博客,如有看不懂的地方,可以参考原文章:
参考文章1
参考文章2
参考文章3
参考文章4

一句话解释Attention <-- 给序列中各个元素分配一个权重系数”

Attention 工作机制

在自然语言任务中,K和V往往是相同的浅谈Attention机制理解
Attention函数共有三步完成得到attention value:
(1) Q与K进行相似度计算得到权值
(2) 对权值softmax归一化
(3) 用归一化的权值与V加权求和

优点

1.可以灵活的捕捉全局和局部的联系
2. 每一步计算不依赖于上一步的计算结果,并行计算减少模型训练时间
3. 模型复杂度小,参数少

缺点

不能捕捉语序顺序,但是可以考虑添加位置信息

self-attention

在self-attention中,Q和K和V是相同的
第一步:将输入的X通过转换矩阵对输入的X做线性转换后转换为Q、K、V。如下图所示:
浅谈Attention机制理解
第二步:根据第一步计算的q、k、v向量计算score。我们以上述例子中首个单词‘thinking’的计算过程如下:
浅谈Attention机制理解
第三步第四步:我们将得到的结果除以8(key vectors的维数的平方根,论文中解释是为了得到更加稳定的梯度),然后将得到的结果输入到softmax进行归一化使得输出的结果相加后为1,(softmax输出的socre会算出序列中每个单词对当前计算序列点的贡献度)
浅谈Attention机制理解
第五步:将softmax socre与value vertor相乘,这里目的是为了让我们关注的单词尽量保持不变,并忽略掉我们不关注的单词的值(比如socre值很小,乘以小的值后值会变得很小)
第六步:对加权后的value vector进行求和得到ZZ,这一步的目的是为了获取当前序列的输出。
浅谈Attention机制理解

Multi-head attention

与self-attention的核心原理差不多,self-attention是只从一个角度去学习关注点,而Multi-head attention是从输入信息中选取多个信息,利用多个查询Q = [q1, · · · , qM]平行计算,每个注意力关注输入信息的不同部分,然后再进行拼接

Multi-head attention 计算流程

第一步:为每一个头部保持单独的q/k/v权重矩阵,从而得到不同的q/k/v矩阵,如前所述,将XX乘以WQ/WK/WVW^{Q}/W^{K}/W^{V}矩阵,得到q/k/v矩阵
第二步:可以算出不同head得到不同的输出Z0,Z1,,Z7Z_{0},Z_{1},…,Z_{7}
第三步:得到不同head输出后,将结果进行拼接,然后将得到拼接后的Z^\hat{Z}与矩阵W0W^{0}进行点乘得到最终输出Z浅谈Attention机制理解