【发布时间】:2017-10-29 12:09:53
【问题描述】:
这两个注意力被用在 seq2seq 模块中。在 this TensorFlow 文档中,这两种不同的注意力被介绍为乘性和加性注意力。有什么区别?
【问题讨论】:
标签: tensorflow deep-learning nlp attention-model
这两个注意力被用在 seq2seq 模块中。在 this TensorFlow 文档中,这两种不同的注意力被介绍为乘性和加性注意力。有什么区别?
【问题讨论】:
标签: tensorflow deep-learning nlp attention-model
除了评分和本地/全球关注度之外,实际上还有很多不同之处。差异的简要总结:
好消息是大多数都是表面上的变化。注意力作为一个概念是如此强大,以至于任何基本的实现都足够了。不过,有两件事似乎很重要——注意力向量传递到下一个时间步和局部注意力的概念(尤其是在资源有限的情况下)。其余的不会对输出产生很大影响。
【讨论】:
a PyTorch seq2seq tutorial 中对它们进行了很好的解释。
主要区别在于如何对当前解码器输入和编码器输出之间的相似度进行评分。
【讨论】:
Luong-style attention:scores = tf.matmul(query, key, transpose_b=True)
Bahdanau-style attention:scores = tf.reduce_sum(tf.tanh(query + value),axis=-1)
【讨论】:
我经历了这个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 分数对齐模型。
【讨论】: