5

我有一个关于反向传播的快速问题。我正在查看以下内容:

http://www4.rgu.ac.uk/files/chapter3%20-%20bp.pdf

在这篇论文中,它说要计算神经元的误差为

误差 =输出(i) * (1 - 输出(i)) * (目标(i) - 输出(i))

我将等式中我不理解的部分用粗体表示。在论文中,它说由于 sigmoid 函数需要Output(i) * (1 - Output(i))项 - 但我仍然不明白为什么这会是必要的。

使用会有什么问题

Error = abs(Output(i) - Target(i))

?

误差函数是否与神经元激活/传递函数无关?

4

2 回答 2

12

您需要这个的原因是您正在计算误差函数相对于神经元输入的导数。

当你通过链式法则求导时,你需要乘以神经元激活函数的导数(恰好是一个 sigmoid)

这是重要的数学。

通过链式法则计算神经元输入的误差导数:

E = -(target - output)^2

dE/dinput = dE/doutput * doutput/dinput

计算 doutput/dinput:

output = sigmoid (input)

doutput/dinput = output * (1 - output)    (derivative of sigmoid function)

所以:

dE/dinput = 2 * (target - output) * output * (1 - output)
于 2012-07-24T10:17:17.387 回答
0

sigmoid 函数的选择绝不是任意的。基本上,您正在尝试估计给定一些样本的类标签的条件概率。如果你取绝对值,你在做不同的事情,你会得到不同的结果。

有关该主题的实用介绍,我建议您查看 Andrew Ng 教授的在线机器学习课程

https://www.coursera.org/course/ml

以及克里斯托弗·毕晓普教授的书,用于对该主题进行深入研究

http://www.amazon.com/Neural-Networks-Pattern-Recognition-Christopher/dp/0198538642/ref=sr_1_1?ie=UTF8&qid=1343123246&sr=8-1&keywords=christopher+bishop+neural+networks

于 2012-07-24T09:49:40.460 回答