我正在通过教程制作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有效(模型训练以校正权重),而数学导数sech 2 (x)则不然(在最大迭代次数后得到的模型存在错误权重)?
答案 0 :(得分:2)
在第一组公式中,导数表示为函数值的函数,即
tanh'(x) = 1-tanh(x)^2 = dsigmoid(sigmoid(f))
由于这可能是在现有代码中使用和实现的,如果用“正确”公式替换它,你将得到错误的衍生物。