TransFormer--解码器:概括
假设我们想把英语句子I am good(原句)翻译成法语句子Je vais bien(目标句)。首先,将原句I am good送入编码器,使编码器
学习原句,并计算特征值。在前文中,我们学习了编码器是如何计算原句的特征值的。然后,我们把从编码器求得的特征值送入解码器。
解码器将特征值作为输入,并生成目标句Je vais bien,如下图所示。
在编码器部分,我们了解到可以叠加N个编码器。同理,解码器也可以有N个叠加在一起。为简化说明,我们设定N=2。如下图所示,一个解码器的输出会被作为输入传入下一个解码器。我们还可以看到,编码器将原句的特征值(编码器的输出)作为输入传给所有解码器,而非只给第一个解码器。因此,一个解码器(第一个除外)将有两个输入:一个是来自前一个解码器的输出,另一个是编码器输出的特征
值。
接下来,我们学习解码器究竟是如何生成目标句的。当t=1时(t表示时间步),解码器的输入是,这表示句子的开始。解码器收到
作为输入,生成目标句中的第一个词,即Je,如下图所示。
当t=2时,解码器使用当前的输入和在上一步(t-2)生成的单词,预测句子中的下一个单词。在本例中,解码器将和Je(来自上一步)作为输入,并试图生成目标句中的下一个单词,如下图所示。
同理,你可以推断出解码器在t=3时的预测结果。此时,解码器将、Je和vais(来自上一步)作为输入,并试图生成句子中的下一个单词,如下图所示。
在每一步中,解码器都将上一步新生成的单词与输入的词结合起来,并预测下一个单词。因此,在最后一步(t=4),解码器将、Je、vais和bien作为输入,并试图生成句子中的下一个单词,如下图所示。
从上图中可以看到,一旦生成表示句子结束的标记,就意味着解码器已经完成了对目标句的生成工作。
在编码器部分,我们将输入转换为嵌入矩阵,并将位置编码添加到其中,然后将其作为输入送入编码器。同理,我们也不是将输入直接送
入解码器,而是将其转换为嵌入矩阵,为其添加位置编码,然后再送入解码器。
如下图所示,假设在时间步t=2,我们将输入转换为嵌入(我们称之为嵌入值输出,因为这里计算的是解码器在以前的步骤中生成的词的嵌入),将位置编码加入其中,然后将其送入解码器。
接下来,让我们深入了解解码器的工作原理。一个解码器模块及其所有的组件如下图所示。
从上图中可以看到,解码器内部有3个子层。
- 带掩码的多头注意力层
- 多头注意力层
- 前馈网络层
与编码器模块相似,解码器模块也有多头注意力层和前馈网络层,但多了带掩码的多头注意力层。现在,我们对解码器有了基本的认识。接下来,让我们先详细了解解码器的每个组成部分,然后从整体上了解它的工作原理。