输出神经元误差
Error of output neuron
在具有反向传播的神经网络中,完成前向传播后,下一步是计算输出神经元的误差。下图显示输出神经元的误差为δ = z - y
。可以找到反向传播的全文 here。 我明白这部分了。
如果神经元的激活函数是 sigmoid function, I have read in another article,则不应将误差计算为简单的差异,而是 δ = y*(1-y)*(z - y)
熟悉这方面的人能解释一下这背后的基本原理吗?为什么具有 sigmoid 激活函数会导致错误计算变为:
δ = y*(1-y)*(z - y)
不再是:δ = (z - y)
?
我发现这个问题的唯一类似问题是this,但是提问者没有问为什么错误是这样计算的。
忘记所有这些时髦的名字,如 back propagation
,这只不过是简单的数学优化任务。优化成本函数的一种可能方法 - 使用梯度下降迭代算法,要使用它你应该知道目标函数的导数。也就是说,您应该知道如何改变参数以最小化某些功能。幸运的是,某种意义上的导数显示了如果您更改某些参数,您的函数将如何变化。
在您有两个不同的优化任务的情况下。
第一个目标函数是 索引 i 表示数据集中的特定样本。
但是如果你将 sigmoid 函数添加到你的假设中
您应该根据 Chain_rule 计算导数,因为 sigmoid
函数是非线性的。
所以:
使用 δ = (z - y)
作为误差函数假定预期输出为 1 或 0(该单元应该被最大限度地激活或根本不激活)。此误差函数用于输出单元。然而,隐藏层单元并不意味着要被 maximally/minimally 激活——它们的激活应该被非常精确地定义。因此,误差函数必须使用 sigmoid 函数的导数传播误差,产生最终公式 δ = y*(1-y)*(z - y)
.
在具有反向传播的神经网络中,完成前向传播后,下一步是计算输出神经元的误差。下图显示输出神经元的误差为δ = z - y
。可以找到反向传播的全文 here。 我明白这部分了。
如果神经元的激活函数是 sigmoid function, I have read in another article,则不应将误差计算为简单的差异,而是 δ = y*(1-y)*(z - y)
熟悉这方面的人能解释一下这背后的基本原理吗?为什么具有 sigmoid 激活函数会导致错误计算变为:
δ = y*(1-y)*(z - y)
不再是:δ = (z - y)
?
我发现这个问题的唯一类似问题是this,但是提问者没有问为什么错误是这样计算的。
忘记所有这些时髦的名字,如 back propagation
,这只不过是简单的数学优化任务。优化成本函数的一种可能方法 - 使用梯度下降迭代算法,要使用它你应该知道目标函数的导数。也就是说,您应该知道如何改变参数以最小化某些功能。幸运的是,某种意义上的导数显示了如果您更改某些参数,您的函数将如何变化。
在您有两个不同的优化任务的情况下。
第一个目标函数是
但是如果你将 sigmoid 函数添加到你的假设中
您应该根据 Chain_rule 计算导数,因为 sigmoid
函数是非线性的。
所以:
使用 δ = (z - y)
作为误差函数假定预期输出为 1 或 0(该单元应该被最大限度地激活或根本不激活)。此误差函数用于输出单元。然而,隐藏层单元并不意味着要被 maximally/minimally 激活——它们的激活应该被非常精确地定义。因此,误差函数必须使用 sigmoid 函数的导数传播误差,产生最终公式 δ = y*(1-y)*(z - y)
.