在 relu 之上应用 softmax 有意义吗?

人工智能 卷积神经网络 Python
2021-10-31 03:33:48

在研究 Github 的一些示例时,我发现了这个网络(它适用于 FashionMNIST,但并不重要)。

Pytorch forward 方法(关于在 Relu 上应用 Softmax 的大写注释我的查询?):

def forward(self, x):
    # two conv/relu + pool layers
    x = self.pool(F.relu(self.conv1(x)))
    x = self.pool(F.relu(self.conv2(x)))

    # prep for linear layer
    # flatten the inputs into a vector
    x = x.view(x.size(0), -1)

    # DOES IT MAKE SENSE TO APPLY RELU HERE
    **x = F.relu(self.fc1(x))

    # AND THEN Softmax on top of it ?
    x = F.log_softmax(x, dim=1)**

    # final output
    return x
1个回答

是否有意义?

一般来说,是的,它是可解释的,反向传播将起作用,并且可以优化 NN。

通过使用 ReLU,默认网络的最小logit0对于 softmax 输入,这意味着至少最初将有更高的与所有类相关的最小概率(与允许使用通常的权重初始化随机发生的负 logits 相比)。网络将需要学习为正确答案产生更高的logit值,因为它没有能力为不正确的答案产生更低的logit值。这就像训练一个网络以在一个输出上产生最高回归值,同时将所有值裁剪为 0 或更高,因此它没有选择制作一个输出,例如1.0其余的100.0

它可能被认为是一种正则化,因为它对有效的激活值施加了限制。

需要吗?

那不太清楚。您可以尝试使用和不使用线进行训练,并使用交叉验证或测试集来查看是否存在显着差异。

如果网络设计得很好,那么我希望看到添加的 ReLU 会有轻微的改进。

如果这是一个错误,那么我希望在没有 ReLU 的情况下看不到任何差异或更好的性能。