使用解码器隐藏状态和编码器输出计算 Bahdanau attention in tensorflow 中的注意力分数

calculating attention scores in Bahdanau attention in tensorflow using decoder hidden state and encoder output

此问题与此处显示的神经机器翻译有关:Neural Machine Translation

self.W1self.W2 被初始化为每个 10 个单元的密集神经层,在 class BahdanauAttention[=30= 的 __init__ 函数的第 4 行和第 5 行]

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

query_with_time_axisself.W1的输入张量,valuesself.W2的输入。并且各自计算函数Z = WX + b,Z的相加。张量加在一起的维度是 (64, 1, 10)(64, 16, 10)。我假设 self.W1self.W2 的随机权重初始化由 Keras 在幕后处理。

问题:

将 Z 相加后,将应用非线性 (tanh) 以产生激活,并将得到的激活输入到下一层 self.V,这是一个层只有一个输出并给我们 score.

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

最后一步没有使用激活函数是否有原因?

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

所以,其实下一步应用的是non-linearity,也就是softmax。如果您在 softmax 之前使用激活函数,您只会减少 softmax 可以执行的 space 分布。