使用解码器隐藏状态和编码器输出计算 Bahdanau attention in tensorflow 中的注意力分数
calculating attention scores in Bahdanau attention in tensorflow using decoder hidden state and encoder output
此问题与此处显示的神经机器翻译有关:Neural Machine Translation
self.W1
和 self.W2
被初始化为每个 10 个单元的密集神经层,在 class BahdanauAttention
[=30= 的 __init__
函数的第 4 行和第 5 行]
在所附的代码图像中,我不确定我是否理解第 17 行和第 18 行中设置的前馈神经网络。因此,我将这个公式分解为多个部分。参见第 23 行和第 24 行。
query_with_time_axis
是self.W1
的输入张量,values
是self.W2
的输入。并且各自计算函数Z = WX + b
,Z的相加。张量加在一起的维度是 (64, 1, 10)
和 (64, 16, 10)
。我假设 self.W1
和 self.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 分布。
此问题与此处显示的神经机器翻译有关:Neural Machine Translation
self.W1
和 self.W2
被初始化为每个 10 个单元的密集神经层,在 class BahdanauAttention
[=30= 的 __init__
函数的第 4 行和第 5 行]
在所附的代码图像中,我不确定我是否理解第 17 行和第 18 行中设置的前馈神经网络。因此,我将这个公式分解为多个部分。参见第 23 行和第 24 行。
query_with_time_axis
是self.W1
的输入张量,values
是self.W2
的输入。并且各自计算函数Z = WX + b
,Z的相加。张量加在一起的维度是 (64, 1, 10)
和 (64, 16, 10)
。我假设 self.W1
和 self.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 分布。