本文将介绍:
Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于
Transformer。Transformer 模型使用了 Self-Attention 机制,不采用 RNN
的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息。
Transformer论文地址: Attention Is All You Need
Transformer论文翻译地址:Attention Is All You Need
Transformer详解:Transformer 模型详解
注: Transformer相比Seq2Seq优点,train时候可以并行化,体现在对于输入的处理上。对于seq2seq模型,encoder和decoder都是lstm,lstm在处理序列的时候需要一个一个的处理。而在训练的时候,Transformer在处理encoder和decoder的输入上都可以并行。
Transformer依然是一个encoder-decoder的架构
Transformer是一个多层的encoder-decoder的架构
Transformer依然是一个encoder-decoder的架构,且Encoder和Decoder都可以为多层。
Encoder再细化下,如下图所示,对于encoder来说,x1,x2进入Self-Attention层,得到z1,z2 ,z1包含了x1,x2的信息,z2同理,z1和z2分别经过FeedForward全连接层得到r1,r2.FeedForward就是简单的全链接。那么什么是self-attention呢?
如下图所示,QKV对应到单词上来说,每一个单词应该有3个enbeding。Q代表query;K代表Key;V代表value。每一个Query需要和Key去计算权重,计算后和V去做加权平均。 transformer中的enbeding分开来了,用来计算相似度的enbeding和最后用来做加权平均的enbeding是分离的,可以用来存储更多的信息。
QKV都是矩阵。矩阵的每一行都是样本,Q和K做矩阵的乘法,其结果进入Scale进行缩放,进入Mask(用来防止前段词看到后段词的机制)。进入softmax后,产生了权重。最后和V进行加权平均求和。
权重代表的是:Q中的每一个样本,在K中的所有样本上的权重的分布。
如下图所示,x1和Wq WK Wv做矩阵(这三个矩阵维度相同)乘法得到了q1,k1,v1;x2同理。这样词语有一个enbeding生成了三个enbeding.
举例实现计算过程:
注意:q1 * k1的转置
防止内积总和过大。
如果已经理解缩放点积注意力,多头注意力如图所示。如果有N头注意力,则分别定义W0Q - WNQ,W0K-WNK,W0V-WNV矩阵,并分别X代码分别计算出Q0 K0 V0 ~ QN KN VN,将Qi,Ki,Vi分别计算缩放点积得到Z0-ZN,后将Z0-ZN做concat拼接后经过全链接,得到Z。
多头注意力可以理解为缩放点积注意力的封装,下图左为缩放点积注意力,右为多头注意力。
计算公式如下:
缩放点积注意力和多头注意力图示:
Transformer 中除了单词的 Embedding,还需要使用位置 Embedding 表示单词出现在句子中的位置。因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于 NLP 来说非常重要。 所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。
位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用了后者,计算公式如下:
其中,pos 表示单词在句子中的位置,d 表示 PE的维度 (与词 Embedding 一样),2i 表示偶数的维度,2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d)。使用这种公式计算 PE 有以下的好处:
将单词的词 Embedding 和位置 Embedding 相加,就可以得到单词的表示向量 x,x 就是 Transformer 的输入。
如下图所示,x经过self-attention后,生成z,x+z 再进行LayerNorm,类似于归一化,x + z 这种方式叫做残差连接。
x + z 的意义在于: