Tensorflow 里昂注意力和巴达瑙注意力有什么区别?

Tensorflow 里昂注意力和巴达瑙注意力有什么区别?,tensorflow,deep-learning,nlp,attention-model,Tensorflow,Deep Learning,Nlp,Attention Model,这两个注意事项用于seq2seq模块。在TensorFlow文档中,这两种不同的注意被介绍为乘法和加法注意。有什么不同吗?在中对它们进行了很好的解释 主要区别在于如何对当前解码器输入和编码器输出之间的相似性进行评分。我已经讨论过了。在第3.1节中,他们提到了以下两种注意事项之间的区别: Luong attention在编码器和解码器中都使用了顶部隐藏层状态。但是,Bahdanau注意将前向和后向源隐藏状态(顶部隐藏层)串联起来 在Luong attention中,他们在t时获得解码器隐藏状态。

这两个注意事项用于seq2seq模块。在TensorFlow文档中,这两种不同的注意被介绍为乘法和加法注意。有什么不同吗?

在中对它们进行了很好的解释

主要区别在于如何对当前解码器输入和编码器输出之间的相似性进行评分。

我已经讨论过了。在第3.1节中,他们提到了以下两种注意事项之间的区别:

  • Luong attention在编码器和解码器中都使用了顶部隐藏层状态。但是,Bahdanau注意将前向和后向源隐藏状态(顶部隐藏层)串联起来

  • Luong attention中,他们在t时获得解码器隐藏状态。然后计算注意力得分,从中得到上下文向量,该向量将与解码器的隐藏状态连接,然后进行预测

    <> P>但在<强> BaDaau时间<强> t中,我们考虑解码器的强>t1</强>隐藏状态。然后我们计算对齐,上下文向量,如上所述。但随后我们将此上下文与解码器在t-1处的隐藏状态连接起来。所以在softmax之前,这个连接向量进入GRU

  • 里昂有不同类型的路线Bahdanau只有concat分数对齐模型


  • 我只是想添加一张图片,以便更好地理解@shamane siriwardhana

    主要区别在于解码器网络的输出:scores=tf.matmul(query、key、transpose_b=True)


    :scores=tf.reduce\u sum(tf.tanh(query+value),axis=-1)

    除了得分和局部/全局注意力之外,实际上还有很多不同之处。差异的简要总结:

  • Bahdanau等人使用一个额外的函数从hs_t推导hs_tminus1。我在任何地方都看不到他们为什么这样做的好理由,但Pascanu等人的一篇论文提供了一个线索。也许他们是想让RNN更深入。Luong当然直接使用hs\u t
  • 他们推荐单向编码器和双向解码器。梁朝伟将两者都视为双向的。Luong还建议只使用顶层输出,一般来说,他们的模型更简单
  • 更著名的一个-在Bahdanau's中没有带编码器状态的hs_tminus1点积。取而代之的是,他们对两者使用单独的权重,并进行加法而不是乘法。这让我困惑了很长一段时间,因为乘法更直观,直到我在某个地方读到加法的资源密集度更低……所以有一些折衷
  • 在Bahdanau中,我们可以选择使用多个单位来确定w和u——分别应用于t-1处解码器隐藏状态和编码器隐藏状态的权重。完成后,我们需要将张量形状推回&因此,需要与另一个权重v相乘。确定v是一个简单的线性变换,只需要1个单位
  • 除了全球关注之外,梁还为我们提供了本地关注。局部注意是软注意和硬注意的结合
  • Luong为我们提供了许多其他方法来计算注意力权重。大多数方法都涉及点积。因此被称为multiplative。我认为有4个这样的方程式。我们可以挑选我们想要的
  • 有一些细微的变化,比如Luong将上下文和解码器隐藏状态连接起来,并使用一个权重而不是两个单独的权重
  • 最后也是最重要的一点是,Luong将注意力向量输入到下一个时间步,因为他们认为过去的注意力权重历史很重要,有助于预测更好的值
  • 好消息是,大多数都是表面的变化。注意力作为一个概念是如此强大,任何基本的实现都足够了。但有两件事似乎很重要——将注意力向量传递到下一个时间步和局部注意力的概念(特别是在资源受限的情况下)。其余部分对产量影响不大


    有关更具体的细节,请参阅

    它像全球和本地关注吗?我已经阅读了pytorch seq2seq教程。所以,这只是分数函数在注意力上的不同。否则这两种注意都是软注意。我说的对吗?是的,但是Wa代表什么?它是移位标量、权重矩阵还是其他什么?@Zimeo是第一个点,直接使用点积测量相似度。“一般”方程中的Wa矩阵可以被认为是某种加权相似性或更一般的相似性概念,其中将Wa设置为对角矩阵可以提供点相似性。在我看来,第二种形式“一般”是点积思想的延伸。当我们把W_a设为单位矩阵时,两种形式是一致的。观察Luong形状的一种方法是对隐藏的单位进行线性变换,然后取它们的点积。这正是我们在代码中实现它的方式。Bandanau变体使用串联(或加法)而不是点积/乘法形式。