sigmoid 函数在神经网络中的位置重要吗?

Does the place of the sigmoid function matter in neural network?

我正在尝试在 python 中使用 Keras 构建一个具有自定义损失的神经网络,我在犹豫是否在最后一层使用 sigmoid 函数作为激活函数并在开始时使用 sigmoid自定义损失是相同的还是不同的。所以这就是我的意思:

我有一种感觉,在第二个模型中计算了损失,但在第一个模型中它并没有通过 sigmoid 反向传播。那正确吗?

确实,在第二种情况下,反向传播不通过 sigmoid。在损失函数内部更改数据是一件非常糟糕的事情。

之所以这样做是一件坏事,是因为那样的话,您将在输出上反向传播一个错误,这不是网络正在产生的真正错误。

用一个简单的案例来解释我自己: 你有二进制形式的标签说张量 [0, 0, 1, 0] 如果你的 sigmoid 在你的自定义损失函数中,你可能有这样的输出 [-100, 0, 20, 100], 你损失中的 sigmoid 会将它转换成看起来大约像 tihs 的东西:[0, 0.5, 1, 1] 将被反向传播的错误将是 [0, -0.5, 0, -1]。反向传播将 考虑 sigmoid,您将把这个错误直接应用于输出。您可以看到误差的大小根本不反映输出误差的大小:最后一个值为 100 并且应该在负范围内,但是模型将在该层上反向传播一个 -1 的小误差。

总而言之,sigmoid 必须在网络中,以便反向传播在反向传播错误时将其考虑在内。