单头self-attention layer就是由单一的self-attention构成。多头self-attention是由多个单头self-attention组成,其具有单独的参数矩阵,互相不共享参数。
在多头self-attention layer中,单头self-attention的输入都是相同的,但是参数矩阵不相同,因此不同的单头self-attention的输出c矩阵也是不相同的。将多个单头self-attention的输出堆叠起来作为多头self-attention的输出。
在多头attention layer中,每一个的单头attention的输入都是x和x’,同样的,各个单头attention互相不共享参数,因此输出的结果也是不同的。单头attention的输出堆叠起来就是多头attention layer的输出。
通过multi-Head Self-Attention 和全连接层搭建一个encoder网络。
x 1 , x 2 , . . . , x m x_1,x_2,...,x_m x1,x2,...,xm作为encoder网络的输入,首先进入多头self-attention layer,其中是多个单头self-attention,输出c矩阵。接着c矩阵作为下一层dense layer的输入进行计算,最终输出u矩阵。encoder网络的输入和输出的大小是相通的。
u : i u_{: i} u:i依赖于所有 x i x_i xi向量,改变其中任意x的值, u : i u_{: i} u:i都会发生改变,但是影响 u : i u_{: i} u:i最大的是其相对应的 x i x_i xi。因为在多头self-attention layer中,各个单头self-attention是有各自的参数且在dense layer中相互不共享权重,因此输出的u矩阵结果是不相同的。堆叠Multi-Head Self-Attention Layer可以搭建多层,类似多层RNN。
encoder网络中一个Block包含一个Multi-Head Self-Attention和一个全连接层,其中m是输入序列的长度,输入序列中的向量x都是512维的。
encoder网络结构如图所示。输入和输出的大小相同,可以采用resnet的skip-connection把输入加到输出上(?)。transformer中的encoder网络一共有6个blocks,每个block都有两层且有自己的参数,blocks之间不共享参数,最终输出和输入的大小实现相同的。
利用attention层来搭建transformer的decoder网络。transformer是一个Seq2Seq模型,其有一个编码器和一个解码器,输入是两个序列。还是英语翻译德语的例子,那么encoder网络的输入 x 1 , x 2 , . . . , x m x_1,x_2,...,x_m x1,x2,...,xm是需要翻译的英语句子,decoder网络的输入 x 1 ′ , x 2 ′ , . . . , x t ′ x'_1,x'_2,...,x'_t x1′,x2′,...,xt′是生成的德语单词。
transformer是一个Seq2Seq模型,其有一个编码器和一个解码器,输入是两个序列。
搭建decoder网络的第一个block。 block的第一层是一个Multi-Head Self-Attention 输入是 x 1 ′ , x 2 ′ , . . . , x t ′ x'_1,x'_2,...,x'_t x1′,x2′,...,xt′,输出是 c : 1 , c : 2 , . . . , c : t c_{:1},c_{:2},...,c_{:t} c:1,c:2,...,c:t,其大小都是512维。
第二层是Multi-Head Attention,有两个输入。一个输入是 u : 1 , u : 2 , . . . , u : m u_{:1},u_{:2},...,u_{:m} u:1,u:2,...,u:m,是encoder网络的输出;一个输入是 c : 1 , c : 2 , . . . , c : t c_{:1},c_{:2},...,c_{:t} c:1,c:2,...,c:t,是Multi-Head Self-Attention的输出。有一个输出 z : 1 , z : 2 , . . . , z : t z_{:1},z_{:2},...,z_{:t} z:1,z:2,...,z:t,其各个向量的大小都是512维。
第三层是一个全连接层。全连接层的输入是 z : 1 , z : 2 , . . . , z : t z_{:1},z_{:2},...,z_{:t} z:1,z:2,...,z:t,其中的参数都是相同的,计算公式: S : i = ReLU ( W S Z : i ) \mathbf{S}_{: i}=\operatorname{ReLU}\left(\mathbf{W}_{S} \mathbf{Z}_{: i}\right) S:i=ReLU(WSZ:i)。将所有的输入 z : 1 , z : 2 , . . . , z : t z_{:1},z_{:2},...,z_{:t} z:1,z:2,...,z:t都映射到 s : 1 , s : 2 , . . . , s : t s_{:1},s_{:2},...,s_{:t} s:1,s:2,...,s:t向量上。
decoder网络的一个block一共有三层,分别是:Multi-Head Self-Attention层、Multi-Head Attention层和全连接层。一个block需要两个输入序列,其序列的长度分别是m和t,序列中的向量都是512维的;有一个输出序列,输出序列的长度是t,同样是512维。英语翻译成德语的例子中,这个block中m的大小就是英语句子的长度,t就是已经生成德语单词的数量。
Encoder和Decoder网络相结合就是transformer模型。 X X X矩阵是encoder网络的输入,经过encoder后得到输出矩阵 U U U,输入和输出的大小是相同的。decoder网络中有两个输入和一个输出,在decoder网络中最底层的block一个输入是encoder网络的输出矩阵 U U U,另一个输入是序列 x 1 ′ , x 2 ′ , . . . , x t ′ x'_1,x'_2,...,x'_t x1′,x2′,...,xt′。在英语翻译德语的例子中,m是英语句子的长度,t是已经生成的德语单词长度,每一个向量都是512维的。decoder的输出大小与 x 1 ′ , x 2 ′ , . . . , x t ′ x'_1,x'_2,...,x'_t x1′,x2′,...,xt′相同。
RNN Seq2Seq Model和Transformer模型都有两个序列作为输入,都有encoder 和decoder。RNN Seq2Seq模型与transformer模型的输入/输出大小是一样的。因此transformer模型的使用和RNN是完全相同的,RNN能做的transformer模型一样能做。
通过单头Self-attention的堆叠构建多头self-attention。其中每一个单头self-attention有自己的参数,输出各自的结果矩阵 C C C