[NLP]Transformer模型解析 (4)

在图figure 1中,还有一个向量positional encoding,它是为了解释输入序列中单词顺序而存在的,维度和embedding的维度一致。这个向量决定了当前词的位置,或者说是在一个句子中不同的词之间的距离。论文中的计算方法如下: 

 PE(pos,2 * i) = sin(pos / 100002i/dmodel)

PE(pos,2 * i + 1) = cos(pos / 100002i/dmodel)

其中pos指当前词在句子中的位置,i是指向量中每个值的index,从公式中可以看出,句子中偶数位置的词用正弦编码,奇数位置的词用余弦编码。最后把positional encoding的值与embedding的值相加作为输入传进transformer结构中,如下图所示: 

 

[NLP]Transformer模型解析

Layer normalization

transformer中,每一个子层(自注意力层,全连接层)后都会有一个Layer  normalization层,如下图所示:

[NLP]Transformer模型解析

 

Normalize层的目的就是对输入数据进行归一化,将其转化成均值为0方差为1的数据。LN是在每一个样本上都计算均值和方差,如下图所示: 

 

[NLP]Transformer模型解析

 

LN的公式如下: 

 LN(xi) = α * (xi - μL / √(σ2L + ε)) + β

以上是encoder层的全部内容,最后再展示一下将两个encoder叠加在一起的内部图:

[NLP]Transformer模型解析

 其他细节

1Transformer中包含两种maskpadding mask 在所有的scaled dot-product attention 里面都需要用到,而sequence mask 只有在decoderself-attention里面用到。

 

Padding Mask是为了解决填充0的无意义的位置而存在的,具体的说,因为要对输入序列进行对齐,当输入序列较短时,需要在输入序列后填充0,但是这些填充的数据没什么意义,attention机制不应该把注意力放在这些位置上,因此我们需要做一些统一的处理。具体的做法是把这些位置的值加上一个非常大的负数,这样经过softmax处理的话,这些位置的值就会接近0

 

参考资料:

[1] https://www.jianshu.com/p/ef41302edeef?utm_source=oschina-app

[2] https://blog.csdn.net/u012526436/article/details/86295971

[3] https://zhuanlan.zhihu.com/p/47282410

[4] https://zhuanlan.zhihu.com/p/44121378

[5]https://www.cnblogs.com/robert-dlut/p/8638283.html

[6]https://zhuanlan.zhihu.com/p/57672079

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

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