【问题标题】:When should Back-propagation algorithm be called during Neural Network training?在神经网络训练期间应该何时调用反向传播算法?
【发布时间】:2021-12-11 22:23:38
【问题描述】:

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

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

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

[ 0, 0 ] -> 0

[ 0, 1 ] -> 1

[ 1, 0 ] -> 1

[ 1, 1 ] -> 0

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

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

在本例中,如何存储和使用整个训练集的累积误差?

谢谢。

【问题讨论】:

    标签: python tensorflow machine-learning deep-learning neural-network


    【解决方案1】:

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

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

    【讨论】:

    • @lejlot 非常感谢!我想问题出在我的反向传播算法本身的内部。我最好再重新检查一遍……(叹气)
    • 现有的神经网络库有几十个。一个很棒的事情是你可以使用它们来调试你的。只需下载它们并比较每个步骤是否相同,渐变是否相同等
    • @lejlot 谢谢,这真是个好主意!我发现这个mladdict.com/neural-network-simulator 应该是比较中间结果的一个很好的参考
    【解决方案2】:

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

    【讨论】:

    • @Oguzhan 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2012-03-11
    • 2014-05-02
    • 2018-08-04
    • 2017-07-30
    • 2010-12-22
    • 2017-10-25
    相关资源
    最近更新 更多