1、encoder部分可以并行,decoder不可以。因为decode时还是要按顺序,依赖上一个输出;
2、attention有三种,分别是encoder部分的self-attention,以及decoder部分的masked self-attention和encoder-decoder attention,它们之间的异同要搞清楚。
1)在encoder部分的self-attention比较好理解,就是由输入的embeding a,衍生出三个向量,分别是q、k、v,它是由三个转换举证乘以a得到,这三个转换矩阵是可训练的。另外,如果是多头,那么就是多个qi、ki、vi。i最大值就是多头的数目。
然后是q中的某个元素x分别与k中的每个元素做内积运行,再经过softmax后与v中的元素分别相乘,然后求和,就得到x对应的元素经过注意力层处理后的向量了。如此处理所有输入元素,就是经过一层“蒸馏”。
2)masked self-attention比原始的self-attention多了一个掩盖矩阵。这么讲把简单的事整复杂了。本质就是,当在预测第一个位置的输出时,只有它自身做attention,结果自然是它自己;当预测第二个位置的输出时,就得看前一个和自身,这两个注意力是符合分配的,如此往复直到结束。
这么做的解释,也很有道理。你在实时翻译时是没有后视镜的,无法提前知道它将要说什么话。
3)encoder-decoder attention,就是当在解码时,经过masked self-attention后计算得到的表示,作为q与encoder最上层得到的输出作为k、v进行attention的计算,传递给下一个子层前馈网络。
3、transformer哪些是超参?
每个输入的个数最大值,一般比如20,表示句子的长度最大设定为20各词。
有几个head,每个head的k、v的dim是多少,也是超参。encoder和decoder叠加几层?是超参。
4、decoder时每次输出一个vector,表示对应某一个词。它会被当作下一次预测的部分输入。解码时还要考虑编码的信息,这就是decoder block比encoder block多一层encoder-decoder module的原因。
https://www.bilibili.com/video/av56239558/
这是台大李宏毅讲解transformer的视频,在encoder部分讲的很细致,但是decoder部分比较模糊。
http://jalammar.github.io/illustrated-transformer/
这是英文版的transformer介绍,比较详细。
一个中文解释的比较好的blog.