我目前正在使用 3Blue1Brown 的神经网络教程系列,缺乏广泛的微积分知识/经验。
我正在使用以下方程来计算权重和偏差的梯度,以及计算成本相对于隐藏层神经元的导数的方程:
问题是,在反向传播期间,梯度不断相互抵消,因为我对相反的训练示例取平均值。也就是说,如果我有两个训练标签分别是 [1, 0], [0, 1],则为第一个标签调整的梯度会被第二个标签反转,因为取了梯度的平均值。网络只是保持输出这两者的平均值,并导致网络始终输出 [0.5, 0.5],而不管输入如何。
为了防止这种情况,我认为最后一层需要一个 softmax 函数,而不是我用于所有层的 sigmoid。
但是,我不知道如何实现这一点。数学很难理解,符号对我来说很复杂。
我在上面提供的方程显示了以下项:σ'(z),它是 sigmoid 函数的导数。
如果我使用的是 softmax,我应该如何用它来代替 sigmoid?
如果我没记错的话,softmax 函数不仅仅取一个类似于 sigmoid 的数字,而是使用所有的输出和标签。
总结一下,我想知道和理解的事情是:
- 除输出外,每一层的神经元方程为:σ(w 1 x 1 + w 2 x 2 + ... + w n x n + b)。我应该如何用softmax为输出层制作一个类似的方程?
- 在使用 (1) 进行前向传播之后,我应该如何用类似于 softmax 的东西替换上面等式中的 σ'(z) 项来计算成本相对于权重、偏差和隐藏层的偏导数?

