主要为了解决sentence to sentence的问题,并且输入与输出的长度不等。这类问题的整体架构为编码器-解码器架构。
Transformer的整体架构如下:其中左半部分是编码器,右半部分是解码器。
2.1 编码器Encoder
编码器的输入与输出向量个数相同。
再进一步,Encoder由许多Block组成:
每个Block的详细结构如下:
2.2 解码器Decoder
这里解码器主要描述一下Autoregressive(AT)结构,另外还有Non-Autoregressive(NAT)
AT解码器的整体结构如下:
Decoder首先要接入Encoder输出的结果,再给Decoder一个初始的向量(称为START,它是一个特殊的向量),Docker输出的结果经过softmax后会得到每个分类结果的概率,把概率最大值对应的单词或者字符作为结果进行输出。下一步再把该向量作为下次一个字符的输入,以此来生成下一个单次,在你的distribution中应该有一个特殊的标识例如EOF作为结束的标志。
其中Decode的详细结构如下所示:
它与编码器的主要区别是多了这部分,其称之为Cross attention:
并把一开始的Multi-Head Attention改成了Masked版本的,下面是Masked版本的Attention:即当前的输出向量只结合了当前以及之前的向量特征从而获取的结果
Cross attention的详细结果如下:
由当前向量获取到q向量,再分别与Encoder的输出向量的k、v向量计算最后的v向量,可以简化成Encoder提供两个k、v向量,Decoder出一个q向量,所以中间的连线是如下图所示:
2.3 训练部分
有两点需要注意:
- 输出结果的交叉熵损失
- 使用Ground Truth作为输入