反向传播:传递函数的导数在哪里

时间:2014-05-27 00:50:11

标签: neural-network backpropagation derivative

首先:我了解衍生品和链条规则。我对数学不太满意,但我有一个理解。

关于Backpropogation的许多教程(让我们使用thisthis)使用梯度下降状态,我们使用传递函数的导数(sigmoid或tanh)来计算梯度,从而计算出哪种方式下一个。在这些教程中,我看到(to)(1-o)(o)作为计算输出神经元误差的公式,这似乎是误差计算的导数(1/2)(to)^ 2 *( 1-O)。 (t = target,o = output_actual)

为什么我看不到传递函数的导数(假设为sigmoid):e ^ x /((e ^ x + 1)^ 2)在哪里?或者当tanh用作传递函数时:sech ^ 2(x)...其中 x =加权输入?

此外,一些教程使用(目标 - 实际),(目标 - 实际)^ 2 [平方和 - 对负输出有用]或平方误差函数:(1/2)(目标 - 实际)^ 2。

传递函数的导数在哪里,哪个是正确的误差公式?

2 个答案:

答案 0 :(得分:1)

  

为什么我看不到传递函数的导数(假设为sigmoid):e ^ x /((e ^ x + 1)^ 2)在哪里?

你这样做,在你链接的wiki页面中用enter image description here表示为enter image description here。如果我们扩展后者,我们得到

(1 /(1 + e ^ -x))*(1-1 /(1 + e ^ -x))= e ^ x /(e ^ x + 1)^ 2

这是您记下的原始表格。

  

或者当tanh用作传递函数时:sech ^ 2(x)...其中x =加权输入?

嗯,在这种情况下,因为页面没有提到tanh作为潜在的激活函数。但在现实生活中,它以类似的方式表达,以便我们可以避免任何不必要的计算。

  

(目标 - 实际)^ 2 [平方和 - 对负输出有用]或平方误差函数:(1/2)(目标 - 实际)^ 2.

差异只是一个不变因素。如果你将除法保持为2,那么数学就会变得更好。在实践中,唯一可以改变的是你的学习率被隐含地乘以/除以2,这取决于你所看到的视角。

  

此外,一些教程使用(目标 - 实际)

你可能误读了。 (t-a)将是(t-a)^ 2/2的导数。 Just(t-a)的导数为-1,我相当肯定会阻碍nn的学习。

答案 1 :(得分:0)

找到函数的导数是一个常见的微积分主题。

您也可以使用在线mathematica进行此操作:http://www.wolframalpha.com/

要输入的代码是

D[ 1/(1+e^(-x)), x ]

您可以使用Mathematica表示法输入任何函数:http://integrals.wolfram.com/about/input/

使用导数,您可以将其插入错误函数的通用公式中。当导数过于复杂时,您可以尝试使用简化函数[...]来找到更好的分析形式。

至于选择使用哪种传递函数,您可以考虑它们的域和范围。逻辑函数(1 /(1 + exp(-x))具有范围(0,1)但atan(x)函数具有范围(-1,1)。如果对学习算法进行数学分析,则选择传递函数可能很重要。但是,如果你正在运行模拟,传递函数的选择不应该是关键的,只要它们具有S形(S形)。

另一件事是,逻辑函数(1 /(1 + exp(-x))只是sigmoidal函数的一个实例.atan(x)也是sigmoidal。