当我在输出层使用 sigmoid 时,我对一个现象感到困惑,网络工作正常。但是如果我将输出的激活设置为 Relu,网络不会收敛。在第一个 epoch 之后,训练损失不会减少。任何人都可以解释这种现象。
网络的输入是图像。像素被重新缩放为 0-1。输出是一个从 0-1 变化的值。
谢谢。
当我在输出层使用 sigmoid 时,我对一个现象感到困惑,网络工作正常。但是如果我将输出的激活设置为 Relu,网络不会收敛。在第一个 epoch 之后,训练损失不会减少。任何人都可以解释这种现象。
网络的输入是图像。像素被重新缩放为 0-1。输出是一个从 0-1 变化的值。
谢谢。
我有一个类似的问题,现在已经解决了。神经网络只有 3 层来训练 MNIST 数据。Sigmoid 激活有效,但 relu 没有,其他一切都一样。我将学习率从 3 降低到 0.1,然后 Relu 工作了。我从这里得到了想法:NN 与 Relu 不收敛
根据我从您上面的问题中了解到的是,当您ReLu
将模型用作最终激活时,模型不会收敛:
如果是这种情况,那么答案就在ReLu
函数本身中,它的ReLu
作用是它不会在之间缩放网络输出,[0,1]
而是返回max(0, x)
您不想要的,因为您output/ground truth
在 [0, 1] 之间缩放并且sigmoid
确实缩放了网络输出两者之间[0, 1]
是根据你的真实情况。
为了更好地理解,请考虑网络的最后一层返回概率[0, 1]
是通过使用实现的,但由于函数定义sigmoid
而无法实现。ReLu
因此,要计算损失,您ground-truth
和您的损失network output
应该在 sigmoid 实现的相同范围内,因此模型sigmoid
在您的情况下会收敛。