我正在根据教程制作 ANN。在教程中,sigmoid和dsigmoid如下:
sigmoid(x) = tanh(x)
dsigmoid(x) = 1-x*x
但是,根据定义,dsignmoid 是 sigmoid 函数的导数,因此它应该是 ( http://www.derivative-calculator.net/#expr=tanh%28x%29 ):
dsigmoid(x) = sech(x)*sech(x)
当使用 1-x*x 时,训练确实收敛,但是当我使用数学上正确的导数时,即。 sech 平方,训练过程不收敛。
问题是为什么 1-x*x 有效(模型经过训练以校正权重),而数学导数 sech2(x) 不起作用(最大迭代次数后获得的模型错误)权重)?
最佳答案
在第一组公式中,导数表示为函数值的函数,即
tanh'(x) = 1-tanh(x)^2 = dsigmoid(sigmoid(f))
由于现有代码中可能会以这种方式使用和实现它,因此如果将其替换为“正确”公式,您将得到错误的导数。
关于math - ANN中的Sigmoid函数及其导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43882661/