关于反向传播和 sigmoid 函数

about backpropagation and sigmoid function

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

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

目标输出

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

输出(1-输出)

最后是:

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

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

有什么帮助吗?

谢谢

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

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

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

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

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

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


(*) 方程是从下面的方程推导出来的,你从最小化输出的误差开始: