transformer简析
Transformer简析
除了传统的rnn与cnn外,在nlp领域中越来越的transformer模型逐渐进入人们的视野,他很好的解决了在自然语言处理中,rnn遇到的几个问题,包括不方便并行计算,记忆丢失等问题。相对于传统的nmt模型,transformer引进了attention机制,最终效果也非常好。
在这里说说我自己对模型的理解。
attention机制
对于传统的NMT来说,翻译的顺序是固定的,但是实际情况是,不同的语言拥有不同的语法,并不只是单单把对应的词汇进行语言的转换就可以的,attention就是在这种情境下产生的。
打比方,不论是高中海还是大学的英语课,我们一定做过英汉翻译,在翻译的过程中,一般来说是看一部分,翻译一部分,而不是看完整个句子再翻译整个句子。attention就是这个原理,在翻译或者叫decoder的过程中,根据现在的状态对过去所有的encoder的隐层打分,得分高的部分将更多的影响这一时段的decoder。
attention也有很多种计算方式,这里我们只说Attention Is All You Need这篇论文里的attention机制。因为模型中不含rnn,不会随时间线去计算attention,所以这就需要self attention。传统的self attention就是使用scaled dot-product attention,他的方程和图例如下所以它提出一种新的方式—Multi-Head Attention,通过输入的embeddings自己和自己本身求attention。
对于单个单词的attention是这样计算的:
其中,QKV都是全体单词embeddings,其中,每个都除以√dk就是所谓的Scaled。
paper给的图片
而TF所使用的multi-head attention就是把这个过程重复h次,这里h等于6,然后用concat进行连接,再加权重。图片和公式如下:
TF模型
放一张paper里的图,基本上看图就大致了解他的构造了
从图中可以清楚的看到,整个模型使用了三次multihead attention机制,其中的QKV不太相同:
- 在encoder-decoder的attention层,queries来自于之前的decoder层,而keys和values都来自于encoder的输出。这个类似于很多已经提出的seq2seq模型所使用的attention机制。这个比较好理解。
- 在encoder含有self-attention层。在一个self-attention层中,所有的keys,values以及queries都来自于同一个地方,本例中即encoder之前一层的的输出。这就是上面讲的例子。
- 类似的,decoder中的self-attention层也是一样。不同的是在scaled点乘attention操作中加了一个mask的操作,这个操作是保证softmax操作之后不会将非法的values连到attention中。这个就是在j>i时, score(vi,vj)=-∞ 。作者认为一个sequence中,前面的i被后面的j影响,经过softmax后,值变为零。
模型中的其他模块,诸如 position-wise feed-forward networks、position encoding、layer normalization、residual connection 等,不是重点,就不说了。
试验结果表明,TF模型效果非常好,并且还能进行并行计算,是个很不错的模型,bert也是在此之上建立起来的。