自然语言处理非常重要的两个模型。 当我们在读一句话的时候,首先大脑会记住重要的词汇,把这中方式放入到自然语言处理任务当中,就根据人脑处理信息的方式,提出Attention机制。
Attention机制的计算过程
注意力机制模型(Attention):
计算过程:第一个过程是根据Q和K计算权重系数,第二个过程根据权重系数对V进行加权求和。
第一个阶段,可以引入不同函数和计算机制,根据Q和K,计算两者的相似性和相关性,可以根据以下方法:
第二个阶段引入类似的softmax的计算方式对第一阶段得分进行数值转换,一方面可以进行归一化,计算所有元素权重之和为1,另一方面可以通过softmax突出元素的权重。
第三阶段,通过计算结果a和V对应的权重系数,然后加权求和得到Attention数值:
简单总结:
Self-attention自注意力机制
计算过程:
- 将输入的单词转化成嵌入向量
- 根据嵌入的向量得到,q,k,v三个向量
- 计算每一个向量score:score=q.k
- Transformer使用了score归一化,除以 根号下d.k
- 对score,进行 softmax激活函数
- Softmax点乘V,得到加权的每个输入向量评分
- 相加之后得到最终结果z:z=∑v
Self-attention 详细讲解:
Self-attention会提出三个新的向量,在论文中向量的维度是512,把这三个向量分别称为q,k,v,是通过embedding向量与矩阵相乘得到的,矩阵是随机初始化的,维度(64,512)。
计算self-attention的分数值,该分数决定了我们在某个位置encode一个词时,对输入句子的其他部分的关注程度。计算方法是q.k.以下图为例,首先对Thinking词,计算其他词对该词的一个分数值,首先针对自己本身q1.k1,然后针对第二个词q1.q2
、
然后把结果除以一个常数,一般采用第一个维度的开方,这里是8,然后把得到的结果做一个softmax的计算。得到的结果做一个softmax的计算,得到的结果是每个词对当前位置的词的相关性,当前位置的词相关性会很大。
把v和softmax得到的值相乘,并相加,得到的结果是self-attention在当前节点的值
在实际应用的场景,为了提高计算速度,我们采用矩阵的方式,直接计算出q,k,v的矩阵,然后把embedding的值与三个矩阵直接相乘,把得到的新矩阵q和k相乘,乘以一个常数,做softmax,最后乘上v矩阵
注意力机制的优点:参数少,速度快,效果好