关于反向传播和sigmoid功能

时间:2015-01-30 23:19:16

标签: neural-network

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

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

发电目标

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

输出(1输出)

并以:

结束

ErrorB = OUTPUTB(1- OUTPUTB)(TargetB-OUTPUTB)

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

任何帮助?

由于

2 个答案:

答案 0 :(得分:4)

正如Kelu所说,等式的一部分是基于传递函数的导数(在这种情况下为sigmoid)。要了解为什么需要衍生品,您需要了解delta rule的工作原理(*):

Delta rule

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

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

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


(*)等式从以下等式推导出来,您可以从最小化输出误差开始:

error function

答案 1 :(得分:1)

就像是因为Output(1-Output)是sigmoid函数的导数(简化)。一般来说,这部分是基于衍生物,你可以尝试不同的功能(来自sigmoid),然后你必须使用他们的衍生物来获得正确的学习率。

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