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

问题描述 投票:0回答:6

这两个注意力机制在 seq2seq 模块中使用。 this TensorFlow 文档中将两种不同的注意力作为乘法注意力和加性注意力引入。有什么区别?

tensorflow deep-learning nlp attention-model
6个回答
39
投票

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

  1. Luong 注意在编码器和解码器中都使用了顶部隐藏层状态。 但是 Bahdanau 注意力 采用前向和后向源隐藏状态(顶部隐藏层)的串联

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

    但是在Bahdanau时间t我们考虑解码器的t-1隐藏状态。然后我们如上所述计算对齐方式、上下文向量。但随后我们将此上下文与解码器的隐藏状态连接在 t-1 处。因此,在 softmax 之前,这个串联向量会进入 GRU 内部。

  3. Luong 有不同类型的对齐方式。 Bahdanau 只有 concat 分数对齐模型。


17
投票

它们在 PyTorch seq2seq 教程中得到了很好的解释。

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


12
投票

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

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


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


4
投票

Luong式注意力:scores = tf.matmul(query, key, transpose_b=True)

Bahdanau 式注意力:scores = tf.reduce_sum(tf.tanh(query + value), axis=-1)


0
投票

参考这篇文章。我最近写了它,并认为这个概念可以使用一些图解解释。

https://medium.com/@aajinkya1203/difference- Between-bahdanau-and-luong-attention-computation-d0c8d7fe98b2

© www.soinside.com 2019 - 2024. All rights reserved.