nn.MultiheadAttention 的输入?

问题描述

我有n-vectors,它们需要相互影响并输出n个具有相同维度d的向量。我相信这就是 torch.nn.MultiheadAttention 所做的。但是前向函数 expects 查询,键和值作为输入。根据 this 博客,我需要为 (d x d)qk 中的每一个初始化形状为 v随机权重矩阵,并将我的每个向量相乘用这些权重矩阵得到 3 个 (n x d) 矩阵。现在 q 所期望的 kvtorch.nn.MultiheadAttention 只是这三个矩阵还是我弄错了?

解决方法

当您想使用自我注意时,只需将您的输入向量传递到 torch.nn.MultiheadAttention 中作为查询、键和值。


attention  = torch.nn.MultiheadAttention(<input-size>,<num-heads>)

x,_ = attention(x,x,x)

pytorch 类返回输出状态(与输入相同的形状)和注意力过程中使用的权重。