24

我正在使用反向传播技术创建一个神经网络进行学习。

我知道我们需要找到所使用的激活函数的导数。我正在使用标准的 sigmoid 函数

f(x) = 1 / (1 + e^(-x))

我已经看到它的导数是

dy/dx = f(x)' = f(x) * (1 - f(x))

这可能是一个愚蠢的问题,但这是否意味着我们必须在方程期间将 x 通过 sigmoid 函数两次,所以它会扩展为

dy/dx = f(x)' = 1 / (1 + e^(-x)) * (1 - (1 / (1 + e^(-x))))

或者只是将已经计算出f(x)的输出(即神经元的输出)替换为 的问题f(x)

4

4 回答 4

35

杜格尔是正确的。做就是了

f = 1/(1+exp(-x))
df = f * (1 - f)
于 2012-05-16T20:33:55.427 回答
12

这两种方法是等价的(因为数学函数没有副作用并且总是为给定的输出返回相同的输入),所以你不妨用(更快的)第二种方法。

于 2012-05-16T20:25:42.340 回答
6

一点代数可以简化这一点,这样你就不必让 df 调用 f。
df = exp(-x)/(1+exp(-x))^2

推导:

df = 1/(1+e^-x) * (1 - (1/(1+e^-x)))
df = 1/(1+e^-x) * (1+e^-x - 1)/(1+e^-x)
df = 1/(1+e^-x) * (e^-x)/(1+e^-x)
df = (e^-x)/(1+e^-x)^2
于 2014-11-24T22:16:41.027 回答
3

您可以使用sigmoid函数的输出并将其传递给您的SigmoidDerivative函数以用作f(x)以下内容:

dy/dx = f(x)' = f(x) * (1 - f(x))
于 2018-02-28T15:33:22.123 回答