注意力权重计算如下:

我想知道h_s指的是什么。
在tensorflow代码中,编码器RNN返回一个元组:
encoder_outputs, encoder_state = tf.nn.dynamic_rnn(...)正如我认为的那样,h_s应该是encoder_state,但是github/nmt给出了不同的答案?
# attention_states: [batch_size, max_time, num_units]
attention_states = tf.transpose(encoder_outputs, [1, 0, 2])
# Create an attention mechanism
attention_mechanism = tf.contrib.seq2seq.LuongAttention(
num_units, attention_states,
memory_sequence_length=source_sequence_length)我是不是误解了密码?或者h_s实际上是指encoder_outputs
发布于 2018-01-23 08:17:24
公式可能来自这个职位,所以我将使用同一篇文章中的NN图片:

这里,h-bar(s)是编码器的所有蓝色隐藏状态(最后一层),而h(t)是解码器当前的红色隐藏状态(也是最后一层)。其中一张图片是t=0,您可以看到哪些块被用虚线箭头连接到注意权重。score函数通常是其中之一:

Tensorflow注意机制与这张图片相匹配。理论上,单元输出在大多数情况下是它的隐藏状态(一个例外是LSTM单元,其中输出是状态的短期部分,即使在这种情况下,输出更适合于注意机制)。实际上,当输入填充为零时,tensorflow的encoder_state与encoder_outputs不同:状态从前一个单元格状态传播,而输出为零。显然,您不想关注尾随零,因此为这些单元格设置h-bar(s)是有意义的。
因此,encoder_outputs正是从蓝色块向上射出的箭头。在后面的代码中,attention_mechanism被连接到每个decoder_cell,以便它的输出通过上下文向量传递到图片上的黄色块。
decoder_cell = tf.contrib.seq2seq.AttentionWrapper(
decoder_cell, attention_mechanism,
attention_layer_size=num_units)https://stackoverflow.com/questions/48394009
复制相似问题