我在这里查看Bahdanau注意力类。我注意到上下文向量的最终形状是(batch_size, hidden_size)
。我很好奇它们是如何得到这个形状的,因为注意力权重(attention_weights)的形状是(batch_size, 64, 1)
,而特征(features)的形状是(batch_size, 64, embedding_dim)
。它们相乘(我认为这是一个矩阵乘法),然后在第一个轴上求和。上下文向量中的hidden_size是从哪里来的?
回答:
使用Bahdanau
注意力机制得到的上下文向量是编码器所有隐藏状态的加权平均。下图来自参考资料展示了这是如何计算的。我们基本上做了以下几步。
- 计算注意力权重,这是一个
(batch size, encoder time steps, 1)
大小的张量 - 将每个隐藏状态
(batch size, hidden size)
与e
值逐元素相乘。结果为(batch_size, encoder timesteps, hidden size)
- 在时间维度上平均,得到
(batch size, hidden size)