首先:我了解衍生品和链条规则。我对数学不太满意,但我有一个理解。
关于Backpropogation的许多教程(让我们使用this和this)使用梯度下降状态,我们使用传递函数的导数(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。
传递函数的导数在哪里,哪个是正确的误差公式?
答案 0 :(得分:1)
为什么我看不到传递函数的导数(假设为sigmoid):e ^ x /((e ^ x + 1)^ 2)在哪里?
你这样做,在你链接的wiki页面中用表示为。如果我们扩展后者,我们得到
(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。