在一个令人惊叹的blog之后,我实现了自己的自我关注模块。然而,我发现PyTorch已经实现了一个multi-head attention module。MultiheadAttention模块的前向传递的输入包括Q (查询向量)、K (键向量)和V (值向量)。奇怪的是,PyTorch不会只接受输入嵌入,并在内部计算Q,K,V向量。在我实现的self-attention模块中,我计算输入嵌入的Q,K,V向量乘以Q,K,V权重。此时,我不确定MultiheadAttention模块所需的Q、K和V矢量输入是什么。它们应该是Q、K和V权重还是向量,这些应该是法向量,还是应该是参数?
发布于 2020-08-05 00:13:22
如果你看一下pytorch中多头注意力的实现。Q,K和V是在训练过程中学习的。在大多数情况下,应该小于嵌入向量。所以你只需要定义它们的维度,其他的都是由模块获取的。您有两个选择:
kdim: total number of features in key. Default: None.
vdim: total number of features in value. Default: None. 查询向量具有嵌入的大小。注意:如果kdim和vdim为None,则它们将被设置为embed_dim,以便query、key和value具有相同数量的特征。
有关更多详细信息,请查看源代码:https://pytorch.org/docs/master/_modules/torch/nn/modules/activation.html#MultiheadAttention
特别是这个类:MultiheadAttention(模块)类:
https://stackoverflow.com/questions/63248948
复制相似问题