算法面试之transformer的Attention和多头自注意力机制

1.Attention

1.1 CNN

CNN的卷积操作可以提取重要特征,我觉得这也算是Attention的思想,但是CNN的卷积感受视野是局部的,需要通过叠加多层卷积区去扩大视野,然而实际情况是CNN做NLP问题就是做不深,做到2到3层卷积层就做不上去了;

另外,Max Pooling直接提取数值最大的特征,也像是hard attention的思想,直接选中某个特征。Max Pooling的操作逻辑是:从一个卷积核获得的特征向量里只选中并保留最强的那一个特征,所以到了Pooling层,位置信息就被扔掉了。

1.2 RNN

基于RNN的Attention-based Model来解决seq2seq的问题的弊端是:无论是encoder还是decoder,每一时刻都必须等上一个时刻计算完来之后才能进行,因此无法采用并行计算。

1.3 self-attention

提出来一个self-attention layer,可以取代RNN,还可以并行计算。
可以发现词与词之间的权重关系。
算法面试之transformer的Attention和多头自注意力机制_第1张图片
我们可以把a_1,a_2,a_3,a_4想象成四个要去攻打敌人的英雄
把v_1,v_2,v_3,v_4看成每个英雄各自拥有的技能
q_1,q_2,q_3,q_4是它们学习技能的能力
k_1,k_2,k_3,k_4是他们把自身技能教给其他英雄的能力
那么对于英雄a_1 来说,用q_1和k_i进行匹配得到这个英雄学到每个英雄的技能的概率,再乘以v_i就是这个英雄最终能够学习到的所有技能。
经过这样一个学习过程之后,每个英雄都吸收了其他英雄的技能,得到了强化。
Self-Attention内部的运算具有什么样的含义呢?我们从单个词编码的过程慢慢理解:
算法面试之transformer的Attention和多头自注意力机制_第2张图片
这里有一个MASK,对padding的词或者decoder对后词,softmax前把对应位置置为负无穷。

1.3.1 除以dk的作用

算法面试之transformer的Attention和多头自注意力机制_第3张图片
从图可以看出,自注意力机制的核心过程就是通过Q和K计算得到注意力权重;然后再作用于V得到整个权重和输出。具体的,对于输入Q、K和V来说,其输出向量的计算公式为:
在这里插入图片描述
Q, V, K分别表示输入句子的Queries, Keys, Values矩阵,矩阵的每一行为每一个词对应的向量Query, Key, Value向量。Transformer同样也具有十分高效的并行计算能力

算法面试之transformer的Attention和多头自注意力机制_第4张图片

1.3.2 相似度计算方式

在做attention的时候,我们需要计算query和某个key的分数(相似度),常用方法有:
算法面试之transformer的Attention和多头自注意力机制_第5张图片

1.3.3 at vs sa

算法面试之transformer的Attention和多头自注意力机制_第6张图片

2.多头注意力

2.1 意义

在这里插入图片描述
类似于CNN多个卷积核,不同注意力学习关注不同的东西
可以类比CNN中同时使用多个滤波器的作用,直观上讲,多头的注意力有助于网络捕捉到更丰富的特征/信息。
在这里插入图片描述
算法面试之transformer的Attention和多头自注意力机制_第7张图片
算法面试之transformer的Attention和多头自注意力机制_第8张图片
在这里插入图片描述
可以看到左边侧重于邻近单词的attention,右边侧重于稍远一点单词的attention。沿用上面英雄的例子的话可以理解成,每个英雄的技能可以分解成8个不同的子技能。

算法面试之transformer的Attention和多头自注意力机制_第9张图片

2.2 细节

对于每一个Self-Attention,均有独立维护的三个线性映射矩阵WVi、WKi及WQi(不同Self-Attention模块之间的权值不共享)
通过将输入的矩阵X与三个映射矩阵相乘,得到Self-Attetnion的三个输入Queries、Keys和Values
这V, Q, K三个矩阵的输入X是完全一样的(均为输入句子的Input Embedding + Positional Encoding或是上一层Transformer的输出),这一点从整个的Encoder模型中也可以看出来。
在论文中,作者对于8个Self-Attention的输出,进行简单的拼接,并通过与一个映射矩阵WO
与其相乘(目的是对输出矩阵进行压缩),从而得到整个Multi-Head Attention的输出

算法面试之transformer的Attention和多头自注意力机制_第10张图片
算法面试之transformer的Attention和多头自注意力机制_第11张图片

2.3 三处multi-head attention

Transformer在三处用到来multi-head attention:
第一个是encoder中的self-attention,这里所有的keys、values,和queries都来自encoder的前一层输出,因此encoder中的每个位置都能与所有位置进行attention的计算。
第二个是decoder中的self-attention,同样是对输入做attention的计算,但这里是一个生成的过程,因此每个时刻t只能获得当前时刻以前的输入对其进行计算,即前面提到的mask的过程。
第三个是decoder中的encoder-decoder attention,这里queries来自decoder的前一层,keys和values来自encoder的输入,因此每个位置都能参与所有位置的attention计算。

算法面试之transformer的Attention和多头自注意力机制_第12张图片
上一篇:算法面试之transformer的结构和位置编码
下一篇:算法面试之transformer的Mask和并行性

注:本专题大部分内容来自于总结,若有侵权请联系删除。

你可能感兴趣的:(算法面试,nlp,自然语言处理,深度学习)