将具有不同特征但目标相同的神经网络相结合



我有一个问题,关于如何创建一个可以执行以下操作的神经网络(或类似(架构:

示例

假设我有一个模型,它使用功能1和功能2来预测目标该型号性能不佳,因为我仅限于具有特征1和特征2的训练示例数已填充。

如果我有另一个具有特征3和特征4的神经网络,我的目标是预测同一个目标,我该怎么做将从两个模型中学习的知识结合起来,形成相同的目标预言

对于其他几个具有不同特征,但有一个共同的目标

解释

我之所以这么做,是因为并非每个培训示例都有一个功能1、2、3和4,因此不能将其合并为单个模型但唯一的共同点是,模特们正试图预测相同的目标。

问题

什么是机器学习策略(不仅仅是神经网络(最适合这样的问题?

您描述的模型由两个核心子模型构建而成。

  1. 许多功能相关编码器,每个功能集一个。特征1和2可以通过模型的一部分组合成一些隐藏的表示。特征3和4将被转换为相同的隐藏表示,但将具有不同的子模型,该子模型具有不同的参数集来拟合。

  2. 隐藏表示之上的单一功能独立解码器,用于预测您的目标。

在拟合模型时,每个编码器只能使用所需特征集可用的数据。它正在为这些特征拟合表示,因此需要查看它们。但是解码器可以用于您的所有数据。这将捕获目标的分布,这是常见的,因为您的目标是常见的。

当您认为存在有意义的隐藏表示时,这种模型是合适的。也就是说,你相信你的特征集在衡量相似的东西,但方式不同。

这允许你保持编码器的小,因为它正在进行从一种测量方式到另一种测量方法的小转换。从测量转换到目标可能仍然很困难,但由于该逻辑在公共解码器中,因此它可以从所有训练数据中受益。


具体地说,如果您的功能是widthheightvolumeweight,那么这种模型的一个很好的用例示例就是。假设您的目标是运送cost

可以合理地说,size的概念很好地描述了中间表示。也可以合理地说,从sizecost的翻译本身就是一个有趣的问题,无论你最初是如何测量size的。

因此,模型公式看起来像这样:

# Feature encoders.
size ~ width + height
size ~ volume + weight
# Target decoder.
cost ~ size

现在,上面我一直在仔细描述模型设计,而没有对模型类型做出任何承诺。但你确实把这个问题特别标记为相关的神经网络,我认为这是一个很好的选择。

对于您的简单示例,使用PyTorch,模型可能看起来像这样:

import torch.nn as nn
import torch.nn.functional as F
class MultiEncoderSingleDecoder(torch.nn.Module):
def __init__(self, hid_sz):
super().__init__()
self.using_encoder = 0
self.encoders = torch.nn.ModuleList([
torch.nn.Linear(2, hid_sz),
torch.nn.Linear(2, hid_sz),
])
self.decoder = torch.nn.Linear(hid_sz, 1)
def set_encoder(self, use_encoder):
self.using_encoder = use_encoder
def forward(self, inp):
encoder = self.encoders[self.using_encoder]
return self.decoder(F.relu(encoder(inp)))

然后使用情况可能看起来是这样的:

model = MultiEncoderSingleDecoder()
model.set_encoder(0)
# Do some training on the first feature set.
model.set_encoder(1)
# Do some more training on the second feature set.
# ...

最新更新