【问题标题】:Neural Networks and back propagation神经网络和反向传播
【发布时间】:2014-03-15 06:10:34
【问题描述】:

所以我有一个多层神经网络,它成功地学习了 AND、OR、NOT 和 XOR。我对反向传播有疑问。 我正在使用 sigmoid 函数,因此要确定误差的梯度,它是这样的:

(目标 - 输出)* 输出 *(1 - 输出)

但我的问题是,如果我的目标是 1,而我的输出是 0,它会导致类似

(1 - 0) * 0 * (1 - 0),所以它会告诉我我的错误是 0,即使它是(我认为)1。它真的应该是 0 还是我应该考虑的在评估梯度时?有人可以解释一下 0 背后的逻辑是什么吗?它是函数的局部最小值还是类似的东西?

【问题讨论】:

  • 你用的是什么报错函数?

标签: artificial-intelligence neural-network backpropagation calculus


【解决方案1】:

你看到这个问题了吗?

Back propagation Error Function

它说您需要使用 sigmoid 函数的导数来解决错误。

【讨论】:

    【解决方案2】:

    如果你考虑一下,即使你的目标是 1 并且输出是 1,它也会这样。

    这不会发生的原因是因为您通常不会从正常运行的反向传播网络中获得真正的 1 或 0,因为您在每个节点上都使用了 sigmoid 激活函数,因此您更有可能获得值接近 0 或 1。 如果您从激活中得到 0 或 1,则表示 sigmoid 饱和。 您可以看到 sigmoid 函数的行为here

    编辑:我认为我应该关注饱和度。 所以假设你在输出层有一个 1。这意味着您的 sigmoid 函数返回 1,这意味着输入上的值接近 6。如果您查看 sigmoid 图,您会看到当 x 接近 6 时,输出接近 1 并且导数的输出也将接近 0。这就是我们说 sigmoid “饱和”的情况。你确实想避免这样的情况。希望现在更清楚了。

    【讨论】:

    • 哦,我明白了!这确实澄清了很多;这正是我所需要的,因为起初我遇到了这个问题;它是通过用较小的值开始网络的权重来解决的,但我不明白为什么。现在我明白了,非常感谢。
    • 是的,更大的重量是原因。如果您查看here,您会看到反向传播网络的其他问题以及解决这些问题的许多好主意。
    猜你喜欢
    • 2015-03-03
    • 2012-02-21
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2016-09-19
    • 2018-05-17
    相关资源
    最近更新 更多