一次只针对特定头部进行标签训练的多头神经网络

Training of multi-headed neural network with labels only for certain heads at a time

我正在尝试用 3 个头共享一些初始层来训练 NN。但是我的每个训练目标只有其中两个的输出。

我想创建单独的批次,其中包含仅包含相同头的输出的样本,并使用它们仅更新各自的头。

有什么方法可以在任何 DL 框架中实现这一点?

由于你的问题比较笼统,我假设你使用的是 PyTorchLightning 来回答。 我建议您使用如下所示的模型:

class MyModel(LightningModule):
  def training_step(self, batch: MyMultiTaskBatch):
    backbone_output = self.backbone(batch.x)
    head = self.heads[batch.task_name]
    head_output = head(backbone_output)
    loss = self.losses[batch.task_name]
    return loss(head_output, batch.y)

您的批次告诉模型它应该使用哪个头 运行,以及它应该使用将任务名称映射到头和损失的字典中的哪个损失。您还需要实现一个 returns 一个 MyMultiTaskBatch 作为其批次的数据加载器。