注意力加权聚合

Attention weighted aggregation

让下面显示的张量表示由 3 个单词 (max_lenght = 3) 组成的两个句子 (batch_size = 2),每个单词由维度等于 5 的向量表示(hidden_size = 5) 作为神经网络的输出获得:

net_output
# tensor([[[0.7718, 0.3856, 0.2545, 0.7502, 0.5844],
#          [0.4400, 0.3753, 0.4840, 0.2483, 0.4751],
#          [0.4927, 0.7380, 0.1502, 0.5222, 0.0093]],

#         [[0.5859, 0.0010, 0.2261, 0.6318, 0.5636],
#          [0.0996, 0.2178, 0.9003, 0.4708, 0.7501],
#          [0.4244, 0.7947, 0.5711, 0.0720, 0.1106]]])

还要考虑以下注意力分数:

att_scores
# tensor([[0.2425, 0.5279, 0.2295],
#         [0.2461, 0.4789, 0.2751]])

哪种有效方法允许获得 net_output 中由 att_scores 加权的向量的聚合,从而得到形状为 (2, 5) 的向量?

这应该有效:

weighted = (net_output * att_scores[..., None]).sum(axis = 1)

使用广播(按元素)将注意力权重乘以每个向量并聚合(通过求和)一批中的所有向量。