Luong注意力和Bahdanau注意力有啥区别?

Posted

技术标签:

【中文标题】Luong注意力和Bahdanau注意力有啥区别?【英文标题】:What is the difference between Luong attention and Bahdanau attention?Luong注意力和Bahdanau注意力有什么区别? 【发布时间】:2017-10-29 12:09:53 【问题描述】:

这两个注意力被用在 seq2seq 模块中。在 this TensorFlow 文档中,这两种不同的注意力被介绍为乘性和加性注意力。有什么区别?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

a PyTorch seq2seq tutorial 中对它们进行了很好的解释。

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

【讨论】:

是全球关注还是本地关注? 我浏览了 pytorch seq2seq 教程。所以 Luong 注意力的不同只是分数函数。否则,两个注意力都是软注意力。我说的对吗?【参考方案3】:

Luong-style attention:scores = tf.matmul(query, key, transpose_b=True)

Bahdanau-style attention:scores = tf.reduce_sum(tf.tanh(query + value),axis=-1)

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

我经历了这个Effective Approaches to Attention-based Neural Machine Translation。在3.1小节中,他们提到了两个attention的区别如下,

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

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

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

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

【讨论】:

是的,但是 Wa 代表什么?它是移位标量、权重矩阵还是其他什么? @Zimeo 第一个点,直接使用点积测量相似度。 “一般”方程中的 Wa 矩阵可以被认为是某种加权相似性或更一般的相似性概念,其中将 Wa 设置为对角矩阵可以得到点相似度 在我看来,第二种形式“一般”是点积理念的延伸。当我们将 W_a 设置为单位矩阵时,两种形式都重合。查看 Luong 形式的一种方法是对隐藏单元进行线性变换,然后取它们的点积。这正是我们在代码中实现它的方式。 Bandanau 变体使用连接(或加法)而不是点积/乘法形式。

以上是关于Luong注意力和Bahdanau注意力有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

机器翻译注意力机制及其PyTorch实现

strcpy函数和memcpy函数有啥区别?它们各自使用时应该注意啥问题?

动手学深度学习(task1)注意力机制(更新中)

Javascript 闭包 vs PHP 闭包,有啥区别?

javaee 5.0和6.0的配置文件web.xml有啥区别?

用户和角色有啥区别?