Attention并非transformer原创,但是transformer把Attention置为核心地位,取得了巨大的成功!我来尝试理解并介绍一下Attention注意机制。
Attention的目的是:提取特征,获得权重。
Attention是什么:提取特征(权重)的手段。
比如:给定一张图片,人类大脑很快就会把注意力放在最具辨识度的部分。换句话就是提取了最主要的信息。
相比于之前的RNN(循环神经网络),目标都是一样提取特征,获得权重,但是Attention明显技高一筹。
RNN(循环神经网络):
明显看得出,RNN是串行的,Y2依赖X1,Yn依赖Xn-1。字符越长,预测结果越差。比如直接输入一本书,一个网页,所有的字符都是依次串行操作,速度慢;文章越长,预测(权重)就越差。
Attention注意力机制:
每一个词都跟后面所有的次做attention运算,如下图,your跟所有的词做运算,your,cat,is,a, lovely,cat。cat再跟所有的词做一遍运算。
主要优点:
1,这样可以并行运算,互不干扰,充分利用GPU并行计算的能力。运算速度比RNN快很多。
2,特征提取能力特别强。样本越大,比如一本书,一个网页,算的attention权重就越精确,预测结果就越好。
因此给GPT准备了海量的互联网数据,可以提高预测结果。
Attention怎么算呢?如何理解 Query,Key,Value?
如何理解Query,key,Value呢?
query是一个问题。Key和Value是配对。
举例:
Key=身高 Value=体重
k1 = 160 v1= 50
k2 = 170 v2 = 60
k3 = 180 v3 = 70
请问Query = 175,对应体重多少?Attention就会在3组数据来拟合期望的体重。
设a(q,ki)来表示Q到K的距离,权重,概率,则体重预测值f(q)
f(q) = a(q,k1)v1+a(q,k2)v2+a(q,k3)v3
从这里我们就能看出来attention == 距离,权重,概率。
这样类比,就推导出下面的公式,和右边的图片是一回事儿。
softmax:常用于神经网络的输出层,以将原始的输出值转化为概率分布,从而使得每个类别的概率值在0到1之间,并且所有类别的概率之和为1。这使得Softmax函数特别适用于多类分类问题,其中模型需要预测输入样本属于多个可能类别中的哪一个。
当Q=K=V,称为Self-attention自注意。
Multi-Head attention如何理解多头注意力?
这也是个神奇的做法。假如一个文字张量的长度为512,把这512平均分为8份,每份64;把拆分后的QKV,分别与自己的权重W做矩阵乘法,然后运算attention;算完之后,再把attention结果连接在一起变成multi-head attention,如下图所示。
查了资料,说是这里的权重矩阵 (W) 是通过模型训练学习得到的。
Masked Multi-Head attention如何理解 掩码多头注意力?
首先这个是在decoder里面,因为输出是一个字跟着一个字,挨个预测的。将来的字符还没出现,需要mask盖住。不像encoder,直接把一本书灌进去,每个字都能看到前前后后所有的字。
接下来,decoder出现了一个字之后,又把前面encoder的结果当做K,V跟masked MHA的输出当做Q再做一次运算,预测出下一个字的权重。
如下图所示:
把2个模块放一起,如下图所示: