我正在使用反向传播技术创建神经网络进行学习。
我知道我们需要找到所用激活函数的衍生物。我正在使用标准的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)
的值?
答案 0 :(得分:24)
Dougal是正确的。只是做
f = 1/(1+exp(-x))
df = f * (1 - f)
答案 1 :(得分:9)
这样做的两种方式是等效的(因为数学函数没有副作用,并且总是为给定的输出返回相同的输入),所以你也可以这样做(更快)第二种方式。
答案 2 :(得分:4)
一个小代数可以简化这一点,这样你就不必有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
答案 3 :(得分:0)
您可以使用sigmoid
函数的输出,并将其传递给SigmoidDerivative
函数,以用作以下f(x)
:
dy/dx = f(x)' = f(x) * (1 - f(x))