Transfomer是一个seq2seq模型,关于encoder部分,其实很多教程都将的非常清楚,最推荐的是李宏毅老师的视频,视频讲self-attention讲的非常清楚,但是关于最后的Transformer的结构,特别是decoder部分,讲的还是比较快。
此外还可以参考知乎上的一些教程,非常多,就不错推荐了。
模型结构说明
Transformer的结构图如下:
左边是encoder部分,比较简单,把一个句子输入,做一个multi-head attention,然后通过一个残差链接(resdituial connection),然后通过一个全连接的神经网络,这里强调一下,此处的feedForward是对输入的每个multi-head attention的输出做的独立但是相同的feedForward,也就是说,对每个上一层的输出,做相同的矩阵变换。然后这样的block多Nx层。
Decoder
那么关于decoder是怎么做的呢,首先,强调的是,encoder部分是做并行的,用self-attention结构。而decoder不是并行的,而是想RNN的那种模式,一个一个生产的,有时序概念。有了这个前提,那么第一步是给一个Masked Multi-Head Attention一个输入,第一个输入是【SOS】(即start of sentence),然后做self-attenttion,那么此处的mask如何理解,就是生产第一步只有一个词,自己做self-attention,第二步生成两个词的时候,就做两个词的self-attetion,那么每一步在该层有一个输出,假设为Q,那么送入到中间的Multi-Head Attention层,和encncoder部分的K,V做attention。那么在此时,小伙伴们应该就明白了,这不是和之前传统的用RNN做的seq2seq模型做attention一模一样吗,只不过那个使用decoder的hiddenLayer的值(作为Q)和encoder部分的hiddenLayer的值(作为K)做attention,然后把encoder的input作为V,加权给到decoder的输入。所以二者其实是一个东西,只不过是把RNN换成了self-attention,然后又加了残差连接而已,模型变得复杂了一些,实际上还是一个东西。
最后如果还不理解建议把seq2seq和attention的内容复习一下,然后再结合李宏毅老师的视频,里面有一个动图描述了decoder部分,应该就可以理解了。