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

Sha*_*ana 12 nlp deep-learning tensorflow

这两个注意事项用于seq2seq模块.这个张量流文档中引入了两个不同的注意事项作为乘法和附加注意事项.有什么不同?

Sha*_*ana 24

我经历了这种基于注意力的神经机器翻译的有效方法.在3.1节中他们提到了两个注意事项之间的区别如下,

  1. Luong注意使用编码器和解码器中的顶层隐藏层状态.但是Bahdanau注意力集中了前向和后向源隐藏状态(Top Hidden Layer).

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

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

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

对齐方法


小智 10

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

在此处输入图片说明

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


小智 7

pytorch seq2seq教程它们进行了很好的解释

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

  • 我浏览了 pytorch seq2seq 教程。所以只有分数函数在 Luong 注意力中有所不同。否则两个注意力都是软注意力。我对么? (3认同)

All*_*hvk 5

除了评分和本地/全局关注度之外,实际上还有很多差异。差异的简要总结:

  1. Bahdanau 等人使用额外的函数从 hs_t 导出 hs_{t-1}。我没有看到他们这样做的充分理由,但 Pascanu 等人的一篇论文给出了一条线索……也许他们正在寻求让 RNN 更深。Luong当然直接使用hs_t
  2. Bahdanau推荐单向编码器和双向解码器。Luong 两者皆为单向。Luong 还建议仅采用顶层输出;一般来说,他们的模型更简单
  3. 更著名的一个 - hs_{t-1}(解码器输出)与 Bahdanau 中的编码器状态没有点积。相反,他们对两者使用单独的权重,并进行加法而不是乘法。这让我困惑了很长一段时间,因为乘法更直观,直到我在某处读到加法占用的资源较少......所以需要权衡
  4. 在 Bahdanau 中,我们可以选择使用多个单元来确定 w 和 u - 分别应用于 t-1 处解码器隐藏状态和编码器隐藏状态的权重。完成此操作后,我们需要调整张量形状,因此需要与另一个权重 v 相乘。确定 v 是一个简单的线性变换,只需要 1 个单位
  5. 除了全球关注之外,Luong 还为我们带来了本地关注。局部注意力是软注意力和硬注意力的结合
  6. Luong 为我们提供了许多其他方法来计算注意力权重..大多数涉及点积..因此得名乘法。我认为有 4 个这样的方程。我们可以挑选我们想要的
  7. 有一些细微的变化,例如 Luong 连接上下文和解码器隐藏状态,并使用一个权重而不是 2 个单独的权重
  8. 最后也是最重要的一点是,Luong 将注意力向量输入到下一个时间步,因为他们认为过去的注意力权重历史很重要,有助于预测更好的值

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

更具体的细节请参考https://towardsdatascience.com/create-your-own-custom-attention-layer-understand-all-flavors-2201b5e8be9e