Transformer是谷歌在2017年6月提出,发表在NIPS2017上。论文地址 Attention Is All You Need。
Transformer主体框架是一个encoder-decoder结构,去掉了RNN序列结构,完全基于attention和全连接。在WMT2014英语翻译德语任务上,bleu值达到了28.4,达到当时的SOTA。其总体结构如下所示
1.首先是Encoder
我们将Encoder分为两个部分,一个是输入层embedding,另一个是编码层,也就是左边放方框框里面的东西
1.1.Embedding,又分为两个部分,token embedding和positional encoding
1.1.1Token embedding
这个就是文本向量化,普遍有两种方法:
1)采用固定词向量,比如利用Word2vec预先训练好的。这种方式是LSTM时代常用的方式,比较简单省事,无需训练。但由于词向量是固定的,不能解决一词多义的问题,词语本身也没有结合上下文语境信息,另外对于不在词向量中的词语,比如特定领域词语或者新词,容易出现OOV问题。
2)随机初始化,然后训练。这种方式比较麻烦,需要大规模训练语料,但能解决固定词向量的一系列问题。Transformer采用了这种方式
关键点1:Transformer的随机初始化
一开始我还以为Transformer的随机初始化是很简单的,比如随便弄个确定长度的词向量然后直接给进去训练返回,后来我看到后面的attention层之后才知道和我想的区别很大,如果不弄懂这个我们后面就很难理解。
首先对于每个词,我们都会有一个随机的xi列向量对应,x1-m对应了文本所有词汇,共同组成文本矩阵X(有多少词就有多少列,行数对应的就是一个xi的行数),最关键的就是attention,注意力机制,特别是self-attention,我们分别有三个矩阵W(q,k,v),这个是就是随机初始化的,然后我们分别与原文本矩阵X相乘,得到QKV三个矩阵,分别为Query,Key和Value。这三个得到的矩阵就是我们实现self-att