在神经网络训练期间应该什么时候调用反向传播算法?

When should Back-propagation algorithm be called during Neural Network training?

我有一个有效的反向传播算法,当在相同的奇异输入上迭代 100,000 次时 可以正确地最小化错误,例如 [ 1, 0 ] -> 1。

但我不确定在有多个输入时如何扩展它来训练神经网络。

假设我们希望训练 XOR 函数,具有四种可能的输入和输出状态:

[ 0, 0 ] -> 0

[ 0, 1 ] -> 1

[ 1, 0 ] -> 1

[ 1, 1 ] -> 0

我试过在每一个输入输出测试数据之后调用反向传播算法。 即使经过大量迭代,网络也不会以这种方式学习。

我是否应该在调用反向传播之前计算整个训练集(即上述 4 种情况)的累积误差?

在此示例中,如何存储累积误差并将其用于整个训练集?

谢谢。

如果你的模型是单层网络,它将无法学习 XOR 函数,因为它是线性不可分的。如果它有多于一层,您应该累积所有错误并根据所有样本的总数(在您的情况下为 4)对其进行归一化。最后,您的问题的主要原因可能是由于学习率高导致参数变化太大。尝试降低学习率并增加迭代次数。看 https://medium.com/analytics-vidhya/understanding-basics-of-deep-learning-by-solving-xor-problem-cb3ff6a18a06 供参考

每个示例后更新,累积版本都是正确的。他们只是实现了两种略有不同的算法,更新每一步将使它成为 SGD(随机梯度下降),而另一个 GD(梯度下降)。也可以在两者之间做一些事情,您可以更新每 批次 数据。您描述的问题(缺乏学习)与更新时间无关。

请注意,“正确学习”一个样本并不意味着您拥有无错误的算法!如果你只有一个样本,那么你只调整最后一层偏差的网络应该能够这样做,但对于多个样本会失败。这只是可以破坏但仍通过“单样本测试”的示例之一。