Luong Attention和Bahdanau注意力有什么区别?

时间:2017-05-29 08:43:37

标签: tensorflow nlp deep-learning

这两个注意事项用于 seq2seq 模块。在this tensorflow文档中引入了两个不同的注意事项作为乘法和附加注意事项。有什么区别?

5 个答案:

答案 0 :(得分:18)

我经历了这个Effective Approaches to Attention-based Neural Machine Translation。在 3.1 部分中,他们提到了两个注意事项之间的差异,如下所示,

  1. Luong关注在编码器和解码器中都使用了顶层隐藏层状态。 Bahdanau注意采取前向和后向源隐藏状态(顶部隐藏层)的连接

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

    但在 Bahdanau 中,我们会考虑 t-1 解码器的隐藏状态。然后我们如上所述计算对齐,上下文向量。但是,我们将此上下文与 t-1 处的隐藏解码器状态连接起来。所以在softmax之前,这个连接的向量进入GRU。

  3. Luong有不同类型的路线。 Bahdanau 只有concat得分对齐模型。

  4. Alignment methdods

答案 1 :(得分:8)

我只是想为@ shamane-siriwardhana添加一张图片以更好地理解

enter image description here

主要区别在于解码器网络的输出

答案 2 :(得分:6)

a pytorch seq2seq tutorial

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

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

答案 3 :(得分:1)

Luong-style attention:分数= tf.matmul(查询,键,transpose_b = True)

Bahdanau-style attention:得分= tf.reduce_sum(tf.tanh(查询+值),轴= -1)

答案 4 :(得分:1)

除了得分和本地/全球关注之外,实际上还有许多差异。差异的简要概述:

    [li] Bahdanau等人使用额外的功能从hs_t导出hs_tminus1。我看不出他们为什么要这样做的充分理由,但是Pascanu等人的论文提出了一个线索。也许他们正在寻求使RNN更深入。 Luong当然会直接使用hs_t
  1. 他们建议使用单向编码器和双向解码器。 Luong既有双向关系。 Luong还建议仅采用顶层输出,通常,它们的模型更简单
  2. 更著名的一个-在bahdanau的编码器状态下,没有hs_tminus1的点积。相反,它们对两者使用单独的权重,并执行加法运算而不是乘法运算。由于乘法更加直观,这使我困惑了很长时间,直到我读到某个地方加法的资源消耗较少...所以要权衡
  3. 在巴赫达瑙,我们可以选择使用多个单位来确定w和u-分别应用于t-1的解码器隐藏状态和编码器隐藏状态的权重。完成此操作后,我们需要向后拉伸张量形状,因此需要与另一个权重v相乘。确定v是简单的线性变换,只需1个单位
  4. Luong除了给予全球关注外,还给予了我们本地关注。本地注意力是软性注意力和硬性注意力的结合
  5. Luong为我们提供了许多其他方法来计算注意力权重。..多数涉及点积。.因此,名称为multiplcative。我认为有4个这样的方程式。我们可以选择想要的那个
  6. 有一些小的变化,例如Luong连接上下文和解码器隐藏状态,并使用一个权重而不是2个单独的权重
  7. 最后也是最重要的一点是,Luong认为过去的注意力权重历史很重要并有助于预测更好的值,因此Luong将注意力向量提供给下一个时间步

好消息是,大多数都是表面变化。作为一个概念,注意力是如此强大,以至于任何基本的实现都足够。不过,似乎有两件事很重要-将注意力向量传递到下一个时间步和本地注意力的概念(尤其是在资源受限的情况下)。其余的不会对输出产生很大的影响。

有关更多详细信息,请参阅https://towardsdatascience.com/create-your-own-custom-attention-layer-understand-all-flavours-2201b5e8be9e