简介
transformer是一个sequence to sequence(seq2seq)的模型,它可以应用在语音识别(普通话到中文)、机器翻译(中文到英文)、语音翻译(普通话到英文)、nlp(input文本与问题,output答案)等众多领域。
seq2seq模型在transformer出现之前就已经提出了(左下图),但是由transformer发扬光大(右图),主要由编码器(encoder)和解码器(decoder)两部分组成。
Encoder
输入vector set,输出等长的vector set;如下图,可以看到transformer中encoder的几个关键部分:positional encoding、multi-head attention、add & norm、feed forward
其中positional encoding和multi-head attention在[https://www.cnblogs.com/wangxy323/articles/15635321.html](self attention)中已经介绍。如下图,encoder的输入经过若干个block后得到输出,其中block的具体结构已给出。
与之前self attention不同的是,这里多了一些操作:一是self attention输出后与输入进行了相加;二是相加后进行了normalization(这里是layer normalization,需区别下batch normalization)。即add & norm的含义就是residual+layer normalization(Bert的encoder也是这样)
Decoder
Decoder有两种方式,autoregressive与non-autoregressive,先看下主流的自回归,如下图,首先需要一个特殊的记号(special token)来表征开始,从而输出第一个字,这里的输出经过softmax后是一个概率分布。假设共有4k个字,那么输出就是一个维度为4k的vector,概率值最大的维度即答案,也就是多分类问题。
接着,将第一个输出转换为one hot vector后作为第二个输入,比如第一个输出为[0.8,0.1,0.1],则转换为[1,0,0]来作为第二个输入,并以此类推。
这样会有一个问题,因为我们不知道output sequence的正确长度,所以输出是永远不会停止的。解决方法就是引入一个end记号,输出end时就可以停止了。
如果我们忽略encoder输入连接到decoder的部分,decoder的结构图如下所示,可以看到,不同的地方是masked multi-head attention,masked表示每个输入在做self attention时,只考虑其前面的输入,不考虑后面的。这是非常符合现实的,因为对于第t个输入,它之后的输入都还没有出现。
接下来,是非自回归的方式,与AT一个接一个输出不同,NAT是一次输出结果(注意输入全是start)。
最后,是我们忽略的部分,即cross attention,即encoder的输出与decoder部分作cross attention;