在具有反向传播的神经网络中,在完成正向传递之后,下一步是计算输出神经元的误差。下图显示输出神经元的误差为δ = z - y
。可以找到反向传播的全文here。 我得到了这个部分。
如果神经元的激活函数是sigmoid function,我在另一个article中读到错误不应该被计算为一个简单的区别,而是δ = y*(1-y)*(z - y)
熟悉这个的人可以解释一下这背后的理由吗?为什么使用sigmoid激活函数会导致错误计算变为:
δ = y*(1-y)*(z - y)
而不再是:δ = (z - y)
?
我在这个问题上找到的唯一类似问题是this,但提问者没有问为什么错误是这样计算的。
答案 0 :(得分:1)
忘记所有这些时髦的名字back propagation
,它只不过是简单的数学优化。优化成本函数的一种可能方法 - 使用梯度下降迭代算法,使用它你应该知道目标函数的导数。即,您应该知道如何变量参数以最小化某些功能。幸运的是,衍生物在某种意义上表明如果你改变一些参数,你的函数会如何改变。
在您遇到两种不同的优化任务的情况下。
中添加sigmoid函数您应该根据Chain_rule计算衍生项,因为sigmoid
函数是非线性的。
所以:
答案 1 :(得分:0)
使用δ = (z - y)
作为错误函数假定预期输出为1或0(该单元应最大程度地激活或根本不激活)。此错误功能用于输出单元。然而,隐藏层单元并不意味着最大/最小程度地激活 - 它们的激活应该被非常精确地定义。因此,误差函数必须使用sigmoid函数的导数传播误差,得出最终的公式δ = y*(1-y)*(z - y)
。