注意力权重计算如下:
我想知道什么h_s
指。
在tensorflow代码中,编码器RNN返回一个元组:
encoder_outputs, encoder_state = tf.nn.dynamic_rnn(...)
正如我所想,h_s
应该是encoder_state
,但是github/nmt https://github.com/tensorflow/nmt/#attention-wrapper-api给出不同的答案?
# 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
?
公式大概来自这个帖子 https://medium.com/@Synced/a-brief-overview-of-attention-mechanism-13c578ba9129,所以我将使用同一篇文章中的 NN 图片:
在这里,h-bar(s)
是所有蓝色隐藏状态encoder(最后一层),以及h(t)
是当前的红色隐藏状态decoder(也是最后一层)。一张图t=0
,您可以看到哪些块通过虚线箭头连接到注意力权重。这score
函数通常是以下之一:
Tensorflow 注意力机制与这张图相符。理论上,细胞输出is在大多数情况下,它的隐藏状态(一个例外是 LSTM 单元,其中输出是状态的短期部分,即使在这种情况下,输出也更适合注意力机制)。在实践中,张量流的encoder_state
不同于encoder_outputs
当输入用零填充时:状态从前一个单元状态传播,而输出为零。显然,您不想关注尾随零,因此有道理h-bar(s)
对于这些细胞。
So encoder_outputs
正是从蓝色块向上的箭头。后来在一段代码中,attention_mechanism
连接到每个decoder_cell
,使其输出通过上下文向量到达图片上的黄色块。
decoder_cell = tf.contrib.seq2seq.AttentionWrapper(
decoder_cell, attention_mechanism,
attention_layer_size=num_units)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)