假设我们想把英语句子i am good翻译成法语句子 Je Vais bein,首先将原句送入编码器,使编码器学习原句,并计算特征值,在上一篇博客中已经讲解了编码器是如何计算原句的特征值的,然后我们把从编码器求得的特征值送入解码器,解码器将特征值作为输入,并生成目标据,流程如下
在编码器部分,我们了解到可以叠加N个解码器,同理,解码器也可以有N个叠加在一起,编码器将原句的所有特征值作为输入传给所有解码器,而非只给第一个解码器,因此一个解码器将有两个输入,一个是来自前一个解码器的输出,另一个是编码器输出的特征值
接下来我们学习解码器是如何生成目标句子的,当t=1时(t表示时间步)解码器开始工作,生成目标为句子中的第一个词,当t=2时,解码器使用当前的输入和在上一步生成的单词,来预测句子中的下一个单词,以此类推,在每一步中解码器都将上一步生成的单词与输入的词结合起来,并预测下一个单词
一个解码器模块及其所有的组件如下图所示
从上图中可以看到,解码器内部有三个子层,分别是
1:带掩码的多头注意力层
2:多头注意力层
3:前馈网络层
与编码器模块相似,解码器模块也有多头注意力层和前馈网络层,但多了带掩码的多头注意力层,下面对它们一一进行讲解
一、带掩码的多头注意力层
以英法翻译任务为例,假设训练数据集样