如何在 MLP 的最后两层之前向输入特征添加两个新维度

How to add two new dimensions to the input feature before the last two layers in MLP

最初我们有一个多层的 MLP。我们有一个 200 维的输入嵌入。我们现在想在原始嵌入中再添加两个维度来编码两个重要特征。但是由于原来的维度很高,我们担心MLP会忽略这两个非常重要的新维度。

因此,我们想在 MLP 的最后两层之前添加(连接)两个新维度。我还是ML和PyTorch的新手,网上查了很多都没有找到方法。

请问如何使用 PyTorch 实现这一点?非常感谢!

您可以简单地创建两个输入头。一个用于嵌入,它通过自己的神经网络,然后一个用于两个特征。然后将两个网络的输出简单地连接起来并传递到最后一层。 因为对于一个输入头只有两个特征(可能是一个大小为 2 的向量,对吧?)

您可以像这样简单地组合两个神经网络模块:


# create a seperate network for your embedding input
class EmbeddingModel(nn.Module):
    def __init__(self):
        super(EmbeddingModel, self).__init__()
        
        self.layer1 = nn.Linear(...)
        . . .
        self.layerN = nn.Linear(...)
    
    def forward(self, x):
        x = F.activation(self.layer1(x))
        . . . 
        x = F.activation(self.layerN(x))
        return x

# create a one layer network for your "two important features"
# use the same activation function as the last layer of the "EmbeddingModel"
class FeaturesModel(nn.Module):
    def __init__(self):
        super(FeaturesModel, self).__init__()
        
        self.layer1 = nn.Linear(...)
    
    def forward(self, x):
        x = F.activation(self.layer1(x))
        return x


# finally create your main-model which combines both
class MainModel(nn.Module):
    def __init__(self):
        super(MainModel, self).__init__()
        
        self.embeddingModel = EmbeddingModel()
        self.featuresModel = FeaturesModel()

        # the input-dim to this layer has to be the output-dim of the embeddingModel + the output-dim of the featureModel
        self.outputLayer = nn.Linear(...)
    
    def forward(self, x_embeggings, x_features):
        x_embeggings = self.embeddingModel(x_embeggings)
        x_features = self.featuresModel(x_features)

        x = torch.cat((x_embeddings, x_features), -1)
        x = F.activation(self.outputLayer(x))

        return x