赞
踩
单头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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。