A stack of 6 identical layers(MultiHead + Add&Norm + FeedForward + Add&Norm) (1)Attention Attention一般分为加和additive注意力和点积dot product注意力。 本文使用的是Scaled dot product attention,是对【QKT】除以【根号下向量长度】 假设存在n个词源,Q的大小为 n x dk,K的大小为 n x dk,得到 n x n 的矩阵,再进行缩放。 缩放的原因是:在向量长度过长后,向量之间差异较大(部分维度的值大,部分小),算出来的值差异大,经过softmax之后会分别靠向0和1,除以dk之后差异变小,就一定程度上避免向两端靠拢。 注意:softmax是针对每个词源的,而不是所有放一起做。 softmax之后的矩阵维度是 n x n,可以看做一个权重矩阵,再乘以V。 本文采用了Multi-head attention 在获取Q/K/V矩阵之后,将其分为h个head,每个head i有自己的Wqi/Wki/Wvi,分别乘以QKV,得到每个head对应的Qi/Ki/Vi,其维度是原本的1/h,这个head相当于创建了subspace,进行更丰富的依赖关系学习,生成的向量di再拼起来,再经过一次线性变换后得到完整的输出。 (2)Add 借鉴了Resnet网络,将输入直接加到输出中,可以避免梯度消失或梯度爆炸。 (3)Norm 这一层Norm采用的是LayerNorm,不是Batchnorm。 (4)Feedforward feedforward层 = linear(512-2048) + relu + linear(2048-512),因为是针对每个词源的,所以叫position-wise。因为之前一步的注意力已经获取了词源和词源之间的联系,所以这一步只需要针对单个词源就可以。
3.2 Decoder
A stack of 6 identical layers(MultiHead + Add&Norm + FeedForward + Add&Norm) Encoder的输出同时作为Key和Value,即这两个矩阵是相同的。 (1)Masked multi-head attention 因为在实际使用时,是使用的自回归auto-regression,所以前一个词预测出来之后,才会预测后一个词。 因此,在输入时,也应该到第t个词的时候,掩盖掉t+1之后的词,具体方式是计算完QKT之后将其设置为负无穷大,那么softmax之后就变成了0,相当于0权重。 masking out (setting to −∞) all values in the input of the softmax
1.相比于RNN,Transformer更少关注之前的序列信息,导致序列信息capture sequential information获取更难。 2.位置信息使用偏少lack of explicit modeling of positional information。这导致难以获取长范围的信息may not capture long-range dependencies。 3.难以获取局部的模式difficulty in capturing local patterns。因为CNN通过卷积和池化能够把局部信息联系起来,而Transformer更容易忽略这些信息。 4.Transformer的时间复杂度与序列长度成平方关系,而RNN和CNN与序列长度成正比,所以在数据集太大的时候,计算复杂度会更高computational complexity。