目录
一、正文
这次我们使用attention和self-attention基本组件来搭建部署一个深度神经网络
把L个单头self-attentions输出的序列做concat堆叠起来,作为多头self-attention的最终输出,堆叠起来的c向量变得更高,如果每个单头的输出都是d*m的矩阵。那么多头的输出就是ld*m的矩阵。
刚才我们用L个单头self-attentions构造出多头self-attention,我们同样可以用L个单头attention构造多头attention,所有L单头attention的输入都是两个序列x1到xm,以及x1’到xt’,每个单头attention都有各自的参数矩阵,他们不共享参数,每个单头都有输出序列c,把单头输出的c给堆叠起来,就是多头的输出。
我们已经构造出了多头self-attention,多头attention
接下来要用这两种层来搭建深度神经网络,首先用多头self-attention与全连接层来搭建一个encoder网络。
这是刚才搭建的多头self-attention层,输入是序列x1到xm,输出是序列c1到cm
然后搭一个全连接层,把向量c1作为输出,全连接层把c1乘到参数矩阵Wu上,然后再用Relu或者其他激活函数得到输出向量U1,把同一个全连接层用到c2上,得到输出U2,U2计算方法完全相同,注意这些全连接层是完全相同的,他们的参数矩阵都是Wu,然后把全连接层用到c3上,输出u3,以此类推,得到m个输出向量u,这些全连接层都是完全一样的,有同一个参数矩阵Wu
刚才我们搭建了两层,一个多头self-attention,一个全连接层。
输入是m个向量,x1到xm,输出也是m个向量,u1到um。Ui在xi向量的位置上,但是ui不仅仅依赖于xi,ui依赖于所有m个x向量,改变任何一个x向量,ui都会发生变化,当然ui影响最大的还是xi。可以继续加更多多头attention层和全连接层,想搭建多少层都可以,这样便会搭建出一个深度神经网络,道理跟多层RNN是一样的
现在我们来搭建Transformer 的encoder网络,一个block有两层
一个多头attention和一个全连接层,输入是512*m的矩阵,输出也是512*m的矩阵
这里m是输入序列x的长度,每个x向量都是512维的。
这个是encoder网络的结构,输入是512*m的矩阵X,x的每一列都是512维的词向量,这个是我们刚刚定义的一个block,他有两层,一个self-attention层,一个全连接层,它的输出也是512*m的矩阵,输入和输出的大小一样,然后搭建第二个block,输出还是512的矩阵。我们想搭建多少个block都可以,Transformer的encoder网络一共有6个blocks
每个blocks有两层,每个block都有自己的参数,blocks之间不共享参数,最终的输出是512*m的矩阵,输出与输入的大小是一样的
刚才我们通过堆叠多头self-attention与全连接层,搭建出encoder网络,encoder网络有6个blocks,每个block有两层。现在我们进一步用到attention层,从而搭建Transformer的decoder网络
Transformer是一个seq2seq模型,他有一个encoder,和一个decoder,输入是两个序列,如果我们想把英语翻译成德语,那么x序列是英语的词向量,x’是德语的词向量
刚才我们已经搭建了好了encoder网络,它有6个blocks,每个block有两层,encoder的输入和输出都是512维的向量,输入序列有m个词向量,x1到xm,输出序列也有m个向量,记作u1到um,现在我们开始搭建decoder网络的第一个block
第一层是一个多头self-attention,输入是x1’到xt’,输出是c1到ct,他们全都是512维的向量
第二层是多头attention
这一层有两个序列,一个是u1到um,一个是c1到ct,多头attention的输出是z1到zt,他们也都是512维的向量,
最后在搭建一个全连接层,输入是512维z1,输出是512维的向量s1,全连接层都一样,都是把参数矩阵Ws,与输入的z向量相乘,然后relu激活函数得到向量s
把z2作为输入,全连接层输出s2,用同样的方法,把所有的z向量,都映射到s向量
我们已经搭建了decoder的一个block,这个block有三层,分别是self-attention层、attention层、以及全连接层
刚才我们搭建了三层,这三层组成了decoder的一个block,这个block需要两个输入序列,两个序列都是512维的向量,两个序列的长度分别是m和t。如果是把英语翻译成德语,那么m是英语句子长度,t是已经生成德语单词的数量,这个输出序列长度是t,每个向量都是512维的。
现在把这些模块拼接起来得到最终的Transformer模型。
最后,总结一下Transformer模型
Transformer是seq2seq模型,有encoder和decoder网络,可以用来做机器翻译,Transformer不是RNN,他没有循环结构,Transformer完全基于attention和全连接层,Transformer和RNN的输入输出大小完全一样,所以之前如何使用RNN,现在便可以如何使用Transformer,Transformer使用在自然语言处理问题上效果非常好,可以完爆最好的RNN+Attention,所以现在Transformer已经是业界标准。