本节咱们换个角度来讲Transformer模型,在上一个文章中,主要以计算的过程介绍模型的运行过程,本章中直接对着模型来进行进一步的讲解。
通过上文的介绍,知道Transformer模型架构主要分为了编码器和解码器,那么对于模型架构来讲,咱们还是以这两部分分开讲解。
编码器
在编码器部分主要有两部分组成,一个是多头注意力层,一个是前馈神经网络,并采用残差机制和层归一化的方式链接。
如上图的左侧部分。
下图是缩放点积注意力层,是多头注意力层的一个子模块。
有了上面这些经典的图,咱们开始介绍Transformer的模型。
对于编码器来讲,输入是一句话的word2vec的结果,经过一个位置编码模块,因为Transformer模型不能像LSTM这类循环神经网络一样,对位置信息是敏感的,所以为了让模型具有解决序列内容的学习能力,加入的一个改进。编码方式可以看自然语言处理之Transformer精讲(一)中的位置信息一节。
多头注意力层
顺着图“Transformer”继续往上看, 到了一个多头注意力神经元, 进入到下图中。
多头注意力层是所由多个缩放点积注意力层组成。这种注意力机制可以理解为将Q、K、V映射到高维空间。
MultiHead(Q,K,V)=concat(head1,head2,..,headn)W
缩放点积注意力层
对于缩放点积注意力层来讲,将Q和K进行相乘,在进行大小为dk的缩放,其中dk表示Q和K的维度大小。在经过归一化后,再与V进行相乘获得最终的输出。
Attention(Q,K,V)=softmax(dkQKT)V
Q和K相乘运算得到的向量中,不同的值方差会变大,也就是值之间的大小差距会变大。如果直接进行归一化,会导致值更大,小的值更小,因此要进行参数缩放,使得间距更小,获得更好的训练效果。
通过上面的网络结构可以看到使用了很多的LayerNorm进行归一化,原因是LayerNorm不受训练批次大小的影响,并且能很好的应用到时序数据中,不需要额外的空间。
解码器
解码器是由6个部分组成,除了正常的多头感知层,还加入了三角掩码矩阵,防止模型训练的时候出现信息泄露的问题。
除此以外,在解码器没有更多的区别。
此外不管是编码器还是解码都加入了位置编码层,这一层的主要原因是因为注意力机制的网络如CNN一样,对位置是不敏感的,无法表示时序性,所以特意增加了位置的编码进行区分位置的信息。
通过完整的模型示意图也能够看的出来,不同的多头注意力层的Q、K、V来源是不一样的,例如输入和输出的Q、K、V都是通过全连接学习而来的,但是解码器的第二个多头注意力层Q、K、V的Q是由输入经过全连接变换得来的,K、V是编码器的输出。
当然Transformer也不是完美的,例如Transformer的自注意力层的计算量为O(L2),L是序列长度,复杂的极大。
另一方因为Transformer获取内容位置信息的方式全部来源于位置信息编码,Transformer的参数量巨大,在不依赖预训练的情况下,小规模数据效果不一定有LSTM效果好,后续也会介绍一些Transformer的变种网络。