摘要
本文介绍的内容是transformer (全自注意力网络),它主要分成两块,encoder和decoder,并对encoder和decoder的架构分别作了解释,通过对比encoder和decoder的架构的不同之处,介绍了masked self-attention,最后介绍了cross attention,连接encoder和decoder之间的桥梁。
一、transformer的引入
transformer就是一个sequence-to-sequence(seq2seq)的模型,并且用到了self-attention;输入是一个序列,输出也是一个序列,但是输出的长度取决于机器。比如语音识别,聊天机器。
seq2seq for syntactic parsing
输入是一段文字,输出是一个树状的结构(可以看做是一个序列)
seq2seq for multi-label classification
multi-class classification 是从数个类别中,选择某一个类出来;multi-label classification同一个东西可以属于多个类(class);机器决定每篇文章属于多少个class。
怎么做seq2seq模型
seq2seq分成两块,一块是encoder编码器,一块是decoder解码器;
encoder的架构
encoder要做的事就是给一排向量,输出另外一排向量。transformer的encoder用的就是self-attention。
encoder里面会分成很多的block,每个block都是输入一排向量,输出一排向量;每个block做的事情大概是先做一个self-attention,输出被丢到fully-connected里面,得到处理后的向量。
在transformer里面做的更复杂,他加入了一个设计是不只是输出向量a,还要把输出向量加上输入b得到新的输出(a+b)这样的架构叫做residual;得到结果之后再做norm(layer norm:计算图中的三个值,得到输出),norm的输出才是FC的输入,FC也有residual架构
multi-head attention 就是上述self-attention的block;add and norm就是residual+layer norm
decoder
常见的是auto regressive decoder(AT),这里举语音识别的例子,如何输出文字,首先给decoder一个特殊的符号,符号代表开始,输出一个向量,向量的长度和中文字的数目是一样的,给每个中文字一个分数,分数最高的是最终的输出,这里机的分数最高,所以输出机;还要准备一个符号end,代表断,当输出习(语音识别结束),输出end。
再把机当做decoder新的输入,输出器,以此类推。decoder看到的输入其实是前一个时间节点自己的输出。
encoder和decoder对比可以看到,去除中间阴影的部分,两者的差别不是很大;在multi-head attention中多了一个masked。
self-attention是根据a1-a4所有的资讯来得到b1,masked self-attention 的区别就是不能考虑右边的部分,b1只考虑a1,b2只考虑a1,a2的资讯。
为什么要masked?
在encoder的时候a1-a4是一起读进去,一起输出bi;但是对decoder而言。先有a1,再有a2,然后a3,再a4,所以在计算a2时,没有办法考虑a3,a4。
Non-autoregressive(NAT)
NAT 不是一次产生一个字,一次产生整个句子。
NAT decoder的好处就是平行化(一个步骤就产生完整的句子)、可以控制输出的长度。
cross attention是连接encoder和decoder之间的桥梁。两个输入来自encoder,一个输入来自decode;
cross attention的运作过程如下:
decoder读进begin,经过self-attention得到向量,向量乘上一个矩阵得到query,从a1-a3得k1-k3,把q和k1-k3计算得到attention的分数α1-α3,α1-α3再乘上v1-v3,再把它们加起来得到v,v接下来被丢到fully connected network做接下来的处理。q来自decoder,k和v来自encoder这个过程就叫做cross attention。
怎么做训练(training)
这里讲语音辨识,训练资料就是一大堆的声音讯号,transformer听到声音讯号,打出机器学习四个字。当我们把begin丢给decoder的时候,它的第一个输出应该越接近“机”越好。“机”会被表示成一个向量,向量中只有机对应的维度是1,其他的都是0;而decoder的输出是一个几率分布,我们希望几率的分布和向量越接近越好。
每个输出都会和正确答案有一个cross entropy,我们希望所有cross entropy的总和越小越好。记得第五个位置输出断。
decoder的输入是正确答案,也就是说在有begin和机的情况下要输出器,begin、机、器的情况下输出学,这件事情叫teacher forcing,即把正确的答案当做decoder的输入。
给seq2seq模型的tips
1.copy mechanism,对一些任务而言,decoder没有必要产生输出,它要做的是从输入的东西中复制一些出来,像这种复制行为的例子有聊天机器人。
像下面的聊天内容,对机器来说没有必要创造库洛洛这个词汇,很少出现,机器直接将用户的名字复制过来。
有时候机器会犯低级的错误,比如让机器根据输入的文字发出声音,读四遍发财的时候有抑扬顿挫的声音,读一遍的时候只有财的音。我们发现机器漏字,有一种方法让他把输入的每个东西统统看过,这叫guided attention。
guided attention要求机器在做attention时有固定的方式。
beam search
假设decoder只能产生两个输出,A和B,第一次选择A,将A当做输入再决定选哪个。decoder会输出分数高的那一个,在下图中会输出ABB,每次找分数最高的当做输出叫做greedy decoding。
比较红色和绿色的路发现绿色的路是比较好的。
二、总结
以上就是所学的内容,通过学习主要是了解了transformer 的encoder架构和decoder架构。