1

我正在根据教程制作 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) 无效(在最大迭代次数后获得的模型具有错误的权重)?

4

1 回答 1

2

在第一组公式中,导数表示为函数值的函数,即

tanh'(x) = 1-tanh(x)^2 = dsigmoid(sigmoid(f))

由于这可能在现有代码中以这种方式使用和实现,因此如果用“正确”公式替换它,您将得到错误的导数。

于 2017-05-10T07:07:02.423 回答