使用解码器隐藏状态和编码器输出来计算张量流中Bahdanau注意的得分,

问题描述

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

self.W1self.W2__init__的{​​{1}}函数的第4行和第5行中被初始化为每个10单位的密集神经层。

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

class BahdanauAttentionquery_with_time_axis的输入张量,而self.W1values的输入张量。每个函数都计算函数self.W2,并将Z相加。加在一起的张量的尺寸为Z = WX + b(64,1,10)。我假设(64,16,10)self.W1随机权重初始化都是由self.W2在幕后处理的。

问题:

将Z相加后,将应用非线性(Keras)进行激活,并将得到的激活输入到下一层tanh,该层是一个输出,并给我们self.V

对于最后一步,我们不对score的结果应用激活函数(tanh等),以从最后一个神经网络层获得单个输出

在最后一步中没有使用激活功能是有原因的吗?

See line 17,18,23 and 24

解决方法

注意力形式的输出,即所谓的注意力能量,即每个编码器输出一个标量。这些数字被堆叠到向量中,然后使用softmax对向量进行归一化,从而引起注意 distribution

因此,实际上,在下一步中应用了非线性,即softmax。如果在softmax之前使用了激活功能,则只会减少softmax可以做的分布空间。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...