5分钟理解transformer中的decoder

5分钟理解transformer中的decoder_第1张图片
transformer中decoder和encoder是非常像的。
先假设decoder是一个独立的块,研究它的输入和输出。

一、Autoregressive(自回归)

5分钟理解transformer中的decoder_第2张图片

如果把decoder当成一个黑匣子,这个黑匣子先接受一个特殊符号begin,说明预测开始,第一个输出的字符为“机”,那么A再输入进decoder在输出"器",以此类推。在最后的时候用另一个特殊符号end结尾。这样把输出当成输入的学习称为AT(自回归)。

二、ATvsNAT

5分钟理解transformer中的decoder_第3张图片
非自回归,顾名思义,输入不再是上一时刻的输出。那么这时候就会引出一些思考。
1.如何确定非自回归的长度?
可以用一个预测网络预测输出的长度,再进行句子的输出。也可以一直进行输出,然后通过end来把句子截断。
2.非自回归有什么优势?
平行化的,也就是计算是可以并行的。如图所示,输入都是begin,完全可以一起输入,然后一起进行输出。它的输出长度也是可以控制的,输入几个begin就输出几个begin,如果我想让声音的输出变慢,我就可以多一倍的begin。
3.NAT效果往往没有AT好。这一点我认为非常直观,缺少了时间的信息,效果当然会差一些。

实际上decoder并不是一个独立的块,它是与encoder连起来的,下面研究它是怎么连接起来的。

三、与encoder的连接

5分钟理解transformer中的decoder_第4张图片
可以看到,有两个箭头是来自于encoder,有一个箭头是来自于decoder自己的输入。具体细节如下。
5分钟理解transformer中的decoder_第5张图片
所谓的两个箭头+一个箭头,实际上就是六个encoder输出之后的向量 k e y , v a l u e key,value key,value与带掩膜的self-attention的 q i q_{i} qi进行相似度计算(dot-product)得到 v i v_{i} vi。简单说一句带掩膜的self-attention就是每一次输入只看前面的信息不看后面的信息。当然事实上不一定要六个encoder再进入decoder,这个地方是flexible的,只不过这篇论文是这样做的
得到很多 v v v之后再通过全连接网络变成向量输入到下一个self-attention。

总结来讲,以语音转文字为例。transformer输入一段语音信号,然后转化为向量表示,通过encoder对这些向量进行编码(特征提取),然后输入进decoder好几次每次输出一个文字,最终的句子就是结果。

你可能感兴趣的:(说人话系列,transformer,人工智能,深度学习)