Transformer

Transformer

引言:(补充)

用于机器翻译的transformer结构如下,由编码器组件和解码器组件构成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nHN4LNRR-1624956718031)(C:\Users\sfang.fangsh\AppData\Roaming\Typora\typora-user-images\image-20200616171932170.png)]

如上图,编码器组件有一系列编码器堆砌组成,解码器组件也是由一系列的解码器堆砌组成(上图各6个)。transformer的编码器和解码器是其核心组成,理解力编码器和解码器也就理解了transformer。

1 编码器和解码器

Encoder和Decoder的结构不同,Encoder主要由两部分组成:self-Attention和两层的前馈神经网络组成。Decoder有三部分组成:self-Attention,Encoder-Decoder Attention(类似seq2seq的attention机制),两层的前馈神经网络层。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PVVsXl6c-1624956718033)(C:\Users\sfang.fangsh\AppData\Roaming\Typora\typora-user-images\image-20200616172232714.png)]

2 编码器Encoder

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ehwPkCQx-1624956718034)(C:\Users\sfang.fangsh\AppData\Roaming\Typora\typora-user-images\image-20200616172642821.png)]

encoder的输入是字嵌入+位置编码:

2.1 self attention

self attention是多头的注意力机制。假设head的个数是8,其计算方法是:

(1) 计算词嵌入向量和位置编码,相加得到输入X
X = w o r d _ e m b e d d i n g + p o s i t i o n a l _ e n c o d i n g X = word\_embedding + positional\_encoding X=word_embedding+positional_encoding
(2) 计算每个头的Q,K,V矩阵
Q i = X W i Q , K i = X W i K , V i = X W i V Q_i=XW_i^Q,\qquad K_i=XW_i^K,\qquad V_i=XW_i^V Qi=XWiQ,Ki=XWiK,Vi=XWiV
(3) 用向量点乘计算当前位置Q,与其他位置K的相关度。并除以 d m \sqrt{d_m} dm 归一化
s c o r e i j = Q i T K j d m score_{ij}=\frac{Q_i^TK_j}{\sqrt{d_m}} scoreij=dm QiTKj
(4) 使用softmax将各自得分转为权重。
w i j = s o f t m a x ( s c o r e i j ) w_{ij}=softmax(score_{ij}) wij=softmax(scoreij)
(5) 计算权重和
Z i = ∑ j w i j V j Z_i=\sum_jw_{ij}V_j Zi=jwijVj
(6) 拼接得到多头注意力机制的结果
Z = c o n c a t ( Z 1 , Z 2 , . . . , Z 8 ) W 0 Z=concat(Z_1,Z_2,...,Z_8)W_0 Z=concat(Z1,Z2,...,Z8)W0
(7) 残差结构,得到self-attention的结果
Z = L a y e r N o r m ( X + Z ) Z=LayerNorm(X+Z) Z=LayerNorm(X+Z)
2.2 前馈神经网络

主要有两层全连接组成。个人理解该层主要是为了组合多头注意力各自提取的信息。得到更好的表示。有三个操作:

(1) 全连接映射到高维,并使用激活函数。
F F N 1 ( Z ) = g e l u ( W X ) FFN_1(Z)=gelu(WX) FFN1(Z)=gelu(WX)
(2) 全连接映射回原来维度,便于多层encoder叠加。
F F N 2 ( Z ) = W F F N 1 ( Z ) FFN_2(Z)=WFFN_1(Z) FFN2(Z)=WFFN1(Z)
(3) add&&Norm,残差结构并进行Layer Normlization。
X = L a y e r N o r m ( F F N 2 ( Z ) + Z ) X=LayerNorm(FFN_2(Z)+Z) X=LayerNorm(FFN2(Z)+Z)
3 解码器decoder

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdswbjJ9-1624956718035)(C:\Users\sfang.fangsh\AppData\Roaming\Typora\typora-user-images\image-20200616181311559.png)]

解码器解码时,需要用到三部分信息:

  • 之前时刻的输出结果
  • 编码器的K,V矩阵,由编码器最上层encoder输出做线性变换得到。
  • 位置编码,decoder的输入向量要需要加上位置编码

包括三个部分:self-attention,Encoder-Decoder attention,feed forward netword。

先讨论在训练时的计算过程。seq2seq模型训练一版使用teacher forcing技巧,即在预测第i个输出时,将i时刻之前的标签值作为输入。于是,decoder的训练输入是标签y嵌入后的结果。

3.1 self-attention

(1)计算输入
X = w o r d _ e m b e d d i n g + p o s i t i o n a l _ e n c o d i n g X = word\_embedding + positional\_encoding X=word_embedding+positional_encoding
这里是标签的word embedding,同样加上位置编码。

(2)计算Masked Multi-head attention值

与encoder的self-attention不同,在预测第i个位置输出时,i之后位置的结果被掩盖。训练时只能看到当前词之前的信息。
Q i = X W i Q , K i = X W i K , V i = X W i V Z i = A t t e n t i o n ( Q i , K i , V i ) = s o f t m a x ( m a s k ( Q i T ⋅ K i d m ) ) V i , = 1 , 2 , . . . , 8 Z = M u l t i h e a d ( Q , K , V ) = C o n c a t ( Z 1 , Z 2 , . . . , Z 8 ) W 0 Z = L a y e r N o r m ( Z + X ) Q_i=XW_i^Q,\qquad K_i=XW_i^K,\qquad V_i=XW_iV\\ Z_i=Attention(Q_i,K_i,V_i)=softmax(mask(\frac{Q_i^T\cdot K_i}{\sqrt{d_m}}))V_i,=1,2,...,8\\ Z=Multihead(Q,K,V)=Concat(Z_1,Z_2,...,Z_8)W_0\\ Z=LayerNorm(Z+X) Qi=XWiQ,Ki=XWiK,Vi=XWiVZi=Attention(Qi,Ki,Vi)=softmax(mask(dm QiTKi))Vi,=1,2,...,8Z=Multihead(Q,K,V)=Concat(Z1,Z2,...,Z8)W0Z=LayerNorm(Z+X)
再求加权和前,乘以mask矩阵来达到掩盖位置i之后的信息。mask矩阵如下图,上三角为0,下三角为1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SBs78ocP-1624956718036)(C:\Users\sfang.fangsh\AppData\Roaming\Typora\typora-user-images\image-20200616202003123.png)]

3.2 Encoder-Decoder attention

(1)和Encoder的self-attention计算方式很相似,只是K,V,矩阵来自于encoder的输出 K i e n d e c , V i e n d e c K_i^{endec},V_i^{endec} Kiendec,Viendec,使用上一层的输出Z计算得到 Q i Q_i Qi
Q i = X W i Q , K i e n d e c , V i e n d e c Z i = A t t e n t i o n ( Q i , K i e n d e c , V i e n d e c ) = s o f t m a x ( Q i T ⋅ K i e n d e c d m ) V i e n d e c , i = 1 , 2 , . . . , 8 Z = M u l t i h e a d ( Q , K e n d e c , V e n d e c ) = C o n c a t ( Z 1 , Z 2 , . . . , Z 8 ) W 0 Z = L a y e r N o r m ( X + Z ) Q_i=XW_i^Q,K_i^{endec},V_i^{endec}\\ Z_i=Attention(Q_i,K_i^{endec},V_i^{endec})=softmax(\frac{Q_i^T\cdot K_i^{endec}}{\sqrt{d_m}})V_i^{endec},i=1,2,...,8\\ Z=Multihead(Q,K{endec},V^{endec})=Concat(Z_1,Z_2,...,Z_8)W_0\\ Z=LayerNorm(X+Z) Qi=XWiQ,Kiendec,ViendecZi=Attention(Qi,Kiendec,Viendec)=softmax(dm QiTKiendec)Viendec,i=1,2,...,8Z=Multihead(Q,Kendec,Vendec)=Concat(Z1,Z2,...,Z8)W0Z=LayerNorm(X+Z)
3.3 Feed forward netword 两次前馈网络
F F N 1 ( Z ) = g e l u ( W Z ) F F N 2 ( Z ) = W F F N 1 ( X ) X = L a y e r N o r m ( Z + F F N 2 ( Z ) ) FFN_1(Z)=gelu(WZ)\\ FFN_2(Z)=WFFN_1(X)\\ X=LayerNorm(Z+FFN_2(Z)) FFN1(Z)=gelu(WZ)FFN2(Z)=WFFN1(X)X=LayerNorm(Z+FFN2(Z))

4 position encoding

三角函数不是必须的,位置编码可以用参与学习的positional embedding。

用三角函数是它满足以下特性:

(1)绝对位置差异性

绝对位置不同的位置编码存在差异。

(2)相对位置的稳定性

间隔为K的任意两个位置编码的欧式距离相等。相对欧式距离只与k有关。

参考:

[1]一文看到attentionhttps://easyai.tech/ai-definition/attention/

[2]Transformer原理详解https://zhuanlan.zhihu.com/p/127774251

[3]nlp中的预训练语言模型总结(单向模型、BERT系列模型、XLNet)https://zhuanlan.zhihu.com/p/76912493