TransFormer--解码器:前馈网络层、叠加和归一组件
TransFormer--解码器:前馈网络层、叠加和归一组件
解码器的下一个子层是前馈网络层,如下图所示。
解码器的前馈网络层的工作原理与我们在编码器中学到的完全相同
叠加和归一组件
和在编码器部分学到的一样,叠加和归一组件连接子层的输入和输出,如下图所示。
下面,我们了解一下线性层和softmax层。
一旦解码器学习了目标句的特征,我们就将顶层解码器的输出送入线性层和softmax层,如下图所示。
线性层将生成一个logit 向量,其大小等于原句中的词汇量。假设原句只由以下3个词组成:
那么,线性层返回的logit向量的大小将为3。接下来,使用softmax函数将logit向量转换成概率,然后解码器将输出具有高概率值的词的索引值。让我们通过一个示例来理解这一过程。
假设解码器的输入词是和Je。基于输入词,解码器需要预测目标句中的下一个词。然后,我们把顶层解码器的输出送入线性层。线性层生成logit向量,其大小等于原句中的词汇量。假设线性层返回如下logit向量:
logit = [45, 40, 49]
最后,将softmax函数应用于logit向量,从而得到概率。
prob = [0.018, 0.000, 0.981]
从概率矩阵中,我们可以看出索引2的概率最高。所以,模型预测出的下一个词位于词汇表中索引2的位置。由于vais这个词位于索引2,因此解码器预测目标句中的下一个词是vais。通过这种方式,解码器依次预测目标句中的下一个词。
现在我们已经了解了解码器的所有组件啦!
解码器总览
下图显示了两个解码器。为了避免重复,只有解码器1被展开说明。
通过上图,我们可以得出以下几点。
- 首先,我们将解码器的输入转换为嵌入矩阵,然后将位置编码加入其中,并将其作为输入送入底层的解码器(解码器1)。
- 解码器收到输入,并将其发送给带掩码的多头注意力层,生成注意力矩阵M。
- 然后,将注意力矩阵M和编码器输出的特征值R作为多头注意力层(编码器−解码器注意力层)的输入,并再次输出新的注意力矩阵。
- 把从多头注意力层得到的注意力矩阵作为输入,送入前馈网络层。前馈网络层将注意力矩阵作为输入,并将解码后的特征作为输出。
- 最后,我们把从解码器1得到的输出作为输入,将其送入解码器2。
- 解码器2进行同样的处理,并输出目标句的特征。
我们可以将N个解码器层层堆叠起来。从最后的解码器得到的输出(解码后的特征)将是目标句的特征。接下来,我们将目标句的特征送入线性层和softmax层,通过概率得到预测的词。