在训练阶段,Transformer 模型中第一个解码器层的输入是什么?

数据挖掘 深度学习 变压器
2022-02-16 14:15:51

我正试图围绕 Transformer 架构的工作原理展开思考。我想我对编码器部分有一个不错的顶级理解,有点像 Key、Query 和 Value 张量在 MultiHead 注意力层中的工作方式。我正在努力解决的是解码器部分,特别是第一个解码器层的输入。

我明白有两件事。最终编码器层的输出,但在此之前是嵌入式(位置编码+嵌入)版本......好吧。

在图 1 的原始论文中,他们提到第一个解码器层输入是输出(右移)。我对“右移”的含义有些困惑,但如果我不得不猜测,我会说以下情况正在发生

输入:<Start> 你好吗 <EOS> 输出:<Start> 我很好 <EOS>

因此第一个解码器层的输入将是 [<Start> 我很好]。

有什么需要改变顺序?为什么我们不只输入目标序列本身?我在想也许是因为解码器部分的自回归性质,但是如果我没看错的话,序列之间的唯一区别就是 <EOS> 标记。

正如您可能会说的那样,我对某些部分的工作方式有些困惑,因此非常感谢任何有助于更好地理解的帮助。

1个回答

按照你的例子:

  • 源序列将是How are you <EOS>
  • 编码器的输入是How are you <EOS>请注意,这里没有<start>令牌。
  • 目标序列将是I am fine <EOS>解码器的输出将在训练中与此进行比较。
  • 解码器的输入是<start> I am fine <EOS>.

请注意,解码器的输入是目标序列向右移动了一个位置,该标记表示句子的开头。这样做的逻辑是,每个位置的输出都应该接收之前的标记(当然不是同一位置的标记),这是通过这种移位与自注意力掩码一起实现的。