【问题标题】:about backpropagation and sigmoid function关于反向传播和 sigmoid 函数
【发布时间】:2019-01-29 23:07:20
【问题描述】:

我一直在阅读这本关于 ANN 的电子书:https://www4.rgu.ac.uk/files/chapter3%20-%20bp.pdf

并对 sigmoid 函数计算 errorB 的效果产生了疑问。在文中说,如果我有阈值神经元,我可以使用:

目标输出

但是因为我有一个 sigmoid 函数,所以我应该添加:

输出(1-输出)

最终得到:

ErrorB=OutputB(1-OutputB)(TargetB-OutputB)

我的意思是为什么我应该添加 O(1-O) 的部分,我尝试了不同的值,但我真的不明白为什么应该这样。

有什么帮助吗?

谢谢

【问题讨论】:

    标签: neural-network


    【解决方案1】:

    正如 Kelu 所说,这部分方程是基于传递函数的导数(在本例中为 sigmoid)。要了解为什么需要导数,您需要了解delta rule 的工作原理(*):

    您的总体目标是使用梯度下降最小化网络输出中的误差。 Gradient descent 本身尝试通过采取与梯度的负值成比例的步骤来找到误差函数 (E) 中的最小值。梯度只是导数,您在数学上使用导数的原因是梯度指向(误差)函数最大增长率的方向。结论:既然你想最小化错误,你就选择渐变的相反方式。

    这是使用渐变的直观原因。如果你想要数学推导,你应该检查this basic wiki article(附加评论,因为它没有在任何地方提到:文章中的g'(x)是g(x)的一阶导数)

    可以使用其他传递函数,例如线性(在这种情况下,没有 g'(x) 项,因为导数只是一个常数)或双曲正切,在这种情况下,导数又是不同的东西。


    (*) 等式源自以下等式,您从最小化输出误差开始:

    【讨论】:

      【解决方案2】:

      之所以如此,是因为Output(1-Output) 是 sigmoid 函数的导数(简化)。一般来说,这部分是基于导数的,你可以尝试不同的函数(来自 sigmoid),然后你也必须使用它们的导数来获得合适的学习率。

      如果你愿意,可以看看我的实现(它远非完美,但也许你会从中得到一些想法;)),这是我在大学里做的一个简单项目 - https://github.com/kelostrada/neuron-network

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-19
        • 2012-07-22
        • 2018-10-24
        • 2020-07-27
        • 2014-04-22
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        相关资源
        最近更新 更多