注意机制中的”source hidden state”指的是什么?

注意权重是按以下方式计算的:

enter image description here

我想知道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])# 创建一个注意力机制attention_mechanism = tf.contrib.seq2seq.LuongAttention(    num_units, attention_states,    memory_sequence_length=source_sequence_length)

我是否误解了代码?还是h_s实际上指的是encoder_outputs


回答:

这个公式可能来自这篇文章,所以我将使用同一文章中的一个神经网络图片:

nn

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

formula


TensorFlow的注意机制与这张图片相匹配。从理论上讲,单元输出在大多数情况下就是其隐藏状态(一个例外是LSTM单元,其中输出是状态的短期部分,即使在这种情况下,输出更适合注意机制)。在实践中,当输入用零填充时,TensorFlow的encoder_stateencoder_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)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注