[NLP]Transformer模型解析 (3)

   Divide by 8:         d1 = s1 / 8 = 14                 d2 = s2 / 8 = 12

                     Softmax:             sm1 = e14/ (e14 + e12) = 0.88            sm2 = e12 / (e14 + e12) = 0.12

Softmax * value:   v1 = sm1 * v1                  v2 = sm2 * v2

1score表示关注单词的相关程度.

2:这种通过 query key 的相似性程度来确定 value 的权重分布的方法被称为scaled dot-product attention

注3:attention与self-attention的区别[5]:self-attention是一般attention的特殊情况,在self-attention中,Q=K=V每个序列中的单元和该序列中所有单元进行attention计算。Google提出的多头attention通过计算多次来捕获不同子控件上的相关信息。self-attention的特点在于无视词之间的距离直接计算依赖关系,能够学习一个句子的内部结构,实现也较为简单并且可以并行计算。从一些论文中看到,self-attention可以当成一个层和RNN,CNN,FNN等配合使用,成功应用于其他NLP任务。

注4:attention中要除以8(根号d_k)的原因是为了缩放,它具备分散注意力的作用;原始注意力值均聚集在得分最高的那个值,获得了权重为1; 而缩放后,注意力值就会分散一些。

注5:attention中除以根号d_k具备缩放的原因是因为原始表征x1是符合均值为0方差为1的正态分布的,而与权重矩阵相乘后,结果符合均值为0方差为d_k的正态分布了,所以为了不改变原始表征的分布,需要除以根号d_k

注意力机制的优点:

①一步到位获取全局与局部的关系,不会像RNN那样对长期依赖的捕捉会受到序列长度的限制。

②每步的结果不依赖于上一步,可以做成并行的模式

③相比CNN与RNN,参数少,模型复杂度低。

注意力机制的缺点:

①没法捕捉位置信息,即没法学习序列中的顺序关系。这点可以通过加入位置信息,如通过位置向量来改善,具体如bert模型。

Multi-Headed Attention

多头注意力机制是指有多组Q,K,V矩阵,一组Q,K,V矩阵代表一次注意力机制的运算,transformer使用了8组,所以最终得到了8个矩阵,将这8个矩阵拼接起来后再乘以一个参数矩阵WO,即可得出最终的多注意力层的输出。全部过程如下图所示: 

 

[NLP]Transformer模型解析

[NLP]Transformer模型解析

左图表示使用多组Q,K,V矩阵,右图表示8Q,K,V矩阵计算会得出8个矩阵,最终我们还需将8个矩阵经过计算后输出为1个矩阵,才能作为最终多注意力层的输出。如下图所示,其中WO是随机初始化的参数矩阵。 

[NLP]Transformer模型解析

Positional Encoding

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjwpy.html