组合两个相同维度的张量,使用可训练权重获得最终输出张量



在处理与问答(MRC(相关的问题时,我实现了两种不同的架构,它们独立地给出两个张量(令牌上的概率分布(。两个张量都是维度 (batch_size,512(。我希望获得表格的最终输出(batch_size,512(。如何使用可训练的权重组合两个张量,然后在最终预测上训练模型?

编辑(附加信息(:

因此,在我的 NN 模型的前向函数中,我使用 BERT 模型对 512 个令牌进行编码。这些编码是 768 维的。然后将这些传递给线性层 nn。线性 (768,1( 输出形状为 (batch_size,512,1( 的张量。除此之外,我还有另一个建立在BERT编码之上的模型,它也产生了形状的张量(batch_size,512,1(。我希望将这两个张量结合起来,最终得到一个形状的张量(batch_size,512,1(,可以使用CrossEntropyLoss针对相同形状的输出对数进行训练。

如果可能的话,请分享 PyTorch 代码片段。

假设你的两个向量是 V1 和 V2。您需要将它们组合(融合(以获得新的向量。您可以使用这样的加权总和:

alpha = sigmoid(alpha)
V_final = alpha * V1 + (1 - alpha) * V2

其中 alpha 是一个可学习的缩放器。sigmoid是将 alpha 绑定在 0 和 1 之间, 您可以初始化 alpha = 0,使 sigmoid(alpha( 是一半,这意味着您将添加权重相等的 V1 和 V2。

这是一个线性组合,也可以有非线性版本。 您可以有一个接受 (V1;V2((串联(并输出软最大输出,例如softmax(W * (V1;V2) + b).

最新更新