0

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

编辑(附加信息):

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

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

4

1 回答 1

0

假设您的两个向量是 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) (连接)并输出一个 softmaxed 输出,例如softmax(W * (V1;V2) + b).

于 2020-06-21T10:17:41.357 回答