首页 > 解决方案 > 使用解码器隐藏状态和编码器输出计算张量流中 Bahdanau 注意力的注意力分数

问题描述

这个问题与此处显示的神经机器翻译有关:神经机器翻译

self.W1并在函数的self.W2第 4 行和第 5 行中初始化为每个 10 个单元的密集神经层__init__class BahdanauAttention

在随附的代码图像中,我不确定我是否理解在第 17 行和第 18 行中设置的前馈神经网络。所以,我将这个公式分解成几个部分。见第 23 行和第 24 行。

query_with_time_axis是 的输入张量self.W1values是 的输入self.W2。并且每个计算函数Z = WX + b,并将 Z 加在一起。加在一起的张量的维度是(64, 1, 10)(64, 16, 10)。我假设两者都是随机的权重初始化,self.W1并由幕后self.W2处理。Keras

问题:

将 Z 加在一起之后,tanh应用非线性 (self.Vscore

对于最后一步,我们不对 的结果应用激活函数(tanh 等)self.V(tf.nn.tanh(self.W1(query_with_time_axis) + self.W2(values))),以从最后一个神经网络层获得单个输出。

最后一步没有使用激活函数有什么原因吗?

见第 17、18、23 和 24 行

标签: tensorflowkerasattention-modellogits

解决方案


注意力的输出形成所谓的注意力能量,即每个编码器输出的一个标量。这些数字被堆叠成一个向量,这个向量使用 softmax 进行归一化,产生注意力分布

所以,实际上,在下一步中应用了非线性,这就是softmax。如果你在 softmax 之前使用激活函数,你只会减少 softmax 可以做的分布空间。


推荐阅读