浅谈Attention机制理解
Attention
该文章参考下面博客,如有看不懂的地方,可以参考原文章:
参考文章1
参考文章2
参考文章3
参考文章4
一句话解释Attention <-- 给序列中各个元素分配一个权重系数”
Attention 工作机制
在自然语言任务中,K和V往往是相同的
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。如下图所示:
第二步:根据第一步计算的q、k、v向量计算score。我们以上述例子中首个单词‘thinking’的计算过程如下:
第三步及第四步:我们将得到的结果除以8(key vectors的维数的平方根,论文中解释是为了得到更加稳定的梯度),然后将得到的结果输入到softmax进行归一化使得输出的结果相加后为1,(softmax输出的socre会算出序列中每个单词对当前计算序列点的贡献度)
第五步:将softmax socre与value vertor相乘,这里目的是为了让我们关注的单词尽量保持不变,并忽略掉我们不关注的单词的值(比如socre值很小,乘以小的值后值会变得很小)
第六步:对加权后的value vector进行求和得到,这一步的目的是为了获取当前序列的输出。
Multi-head attention
与self-attention的核心原理差不多,self-attention是只从一个角度去学习关注点,而Multi-head attention是从输入信息中选取多个信息,利用多个查询Q = [q1, · · · , qM]平行计算,每个注意力关注输入信息的不同部分,然后再进行拼接
Multi-head attention 计算流程
第一步:为每一个头部保持单独的q/k/v权重矩阵,从而得到不同的q/k/v矩阵,如前所述,将乘以矩阵,得到q/k/v矩阵
第二步:可以算出不同head得到不同的输出
第三步:得到不同head输出后,将结果进行拼接,然后将得到拼接后的与矩阵进行点乘得到最终输出Z