2017-06-21 64 views

回答

1

Neural Machine Translation by Jointly Learning to Align and Translate他们给(Bahdanau)注意机制的描述;基本上会发生什么是你计算的标量“对齐分数”a_1, a_2, ..., a_n,它表明你的编码输入序列的每个元素在给定的时刻是多么重要(即在当前时间步中你应该注意哪一部分输入句子)。

假设您要“注意”/“注视”的(编码的)输入序列是一个表示为e_1, e_2, ..., e_n的矢量序列,给定时间步的上下文向量是所有这些的加权和你对准成绩:

context = c := (a_1*e_1) + (a_2*e_2) + ... + (a_n*e_n)

(记住a_k的是标量;如果你的模型,你可以认为这是一个‘平均出’信/字在你的句子---那么理想训练得很好,上下文看起来与你最想要注意的e_i最相似,但是与你有一点相似之处e_{i-1}e_{i+1}等直觉上,认为“涂出”输入组件,如果让任何意义......)

无论如何,如果attention_layer_sizeNone,那么它指定一个隐藏单元的数量解码器中的前馈层,用于将此上下文向量与解码器内部RNN单元的输出混合以获得关注值。如果attention_layer_size == None,它只是使用上面的上下文向量作为注意值,并且不会混合内部RNN单元的输出。 (当我说“混合”时,我的意思是将上下文向量和RNN单元格的输出连接起来,然后投影到您通过设置attention_layer_size指定的维度。)

实现的相关部分位于this line并且具有描述它是如何计算的。

希望有帮助!

+0

这非常有帮助!如果我可以问两个后续问题,(1)是否有推荐的attention_layer_size? (2)你能否提供一些关于何时使用连接和投影以及何时使用上下文向量的直觉? –

+0

我已经将'attention_layer_size'设置为数百个隐藏单位的顺序,并取得了良好的效果,但它依赖于手边的任务(我通常会首先尝试先装备大量隐藏单元,然后将其最小化直到它达到尽可能低的水平,同时保持验证集性能良好)。 FWIW,在神经机器翻译论文中,我认为其中有数百种(混合实际上比前馈NN更像是一个矩阵投影,因为没有激活;我略微错误地指出)。 我通常会同时使用上下文和RNN输出。 – ptsw

+0

好的,谢谢!我正努力将我的序列调试到序列模型。既然听起来你有这方面的经验,我可以给你发电子邮件吗? –