乙状结构的衍生物

rfl*_*d89 19 algorithm math artificial-intelligence calculus neural-network

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

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

f(x) = 1 / (1 + e^(-x))
Run Code Online (Sandbox Code Playgroud)

而且我已经看到它的衍生物了

dy/dx = f(x)' = f(x) * (1 - f(x))
Run Code Online (Sandbox Code Playgroud)

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

dy/dx = f(x)' = 1 / (1 + e^(-x)) * (1 - (1 / (1 + e^(-x))))
Run Code Online (Sandbox Code Playgroud)

或者它只是采取已经计算的输出f(x),即神经元的输出,并将该值替换为f(x)

Bru*_*Kim 26

Dougal是正确的.做就是了

f = 1/(1+exp(-x))
df = f * (1 - f)
Run Code Online (Sandbox Code Playgroud)


Dou*_*gal 11

这样做的两种方式是等价的(因为数学函数没有副作用,并且总是为给定的输出返回相同的输入),所以你也可以采用(更快的)第二种方式.


Mar*_*ick 5

一点代数可以简化此过程,因此您不必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
Run Code Online (Sandbox Code Playgroud)