我的问题是解码器和编码器的H。
在一个实现中,我看到了一个具有以下尺寸的h编码器:[最大源Len,批处理大小,隐藏大小]
和具有以下尺寸的h解码器:[#lstm层,批处理大小,隐藏的暗淡]
如果W矩阵的尺寸必须相同,该如何计算加法: https://blog.floydhub.com/attention-mechanism/#bahdanau-att-step1
感谢您的帮助
答案 0 :(得分:1)
在原始的Bahdanau论文中,解码器只有一个LSTM层。有多种方法可以处理多层。通常要做的是在各层之间进行关注(您显然没有这么做,例如参见a paper by Google)。如果使用这样的多个解码器层,则只能使用最后一层(即,执行h_decoder[1]
),或者可以将这些层连接起来(例如,在手电筒调用torch.cat
或{{3}中) }(在第0维)。
矩阵 W decoder 和 W encoder 确保将编码器和解码器状态都投影到尺寸相同(无论您对解码器层所做的操作如何),因此可以进行求和。
唯一剩下的问题是编码器状态具有最大长度尺寸。这里的技巧是,您需要为投影解码器状态添加一个维度,以便广播总和,并且将投影解码器状态与所有编码器状态求和。在PyTorch中,只需在投影解码器状态的第0维的TensorFlow tf.concat
中调用unsqueeze
。