为什么tensorflow中tanh的梯度为'grad=dy*(1-y*y)`
表示为什么tensorflow中tanh的梯度为'grad=dy*(1-y*y)`,tensorflow,math,deep-learning,gradient,Tensorflow,Math,Deep Learning,Gradient,表示grad=dy*(1-y*y),其中y=tanh(x) 但是我认为既然dy/dx=1-y*y,其中y=tanh(x),那么grad应该是dy/(1-y*y)。我哪里错了?像dy/dx这样的表达式是a,它不是一个实际的分数。像使用分子和分母一样,单独移动dy或dx是没有意义的 数学上,已知d(tanh(x))/dx=1-(tanh(x))^2。TensorFlow“向后”计算渐变(称为,或更一般地说)。这意味着,一般来说,在到达计算“外部”函数的梯度g(tanh(x))的步骤后,我们将计算ta
grad=dy*(1-y*y)
,其中y=tanh(x)
但是我认为既然
dy/dx=1-y*y
,其中y=tanh(x)
,那么grad应该是dy/(1-y*y)
。我哪里错了?像dy/dx
这样的表达式是a,它不是一个实际的分数。像使用分子和分母一样,单独移动dy
或dx
是没有意义的
数学上,已知d(tanh(x))/dx=1-(tanh(x))^2
。TensorFlow“向后”计算渐变(称为,或更一般地说)。这意味着,一般来说,在到达计算“外部”函数的梯度g(tanh(x))
的步骤后,我们将计算tanh(x)
g
表示应用于tanh
输出以达到计算梯度值的所有操作。这个函数的导数,根据,是d(g(tanh(x))/dx=d(g(tanh(x))/d(tanh(x))*d(tanh(x))/dx
。第一个因子,d(tanh(x))/d(tanh(x))
,是直到tanh
的反向累积梯度,即所有后续操作的导数,是函数文档中dy
的值。因此,您只需计算d(tanh(x))/dx
(即(1-y*y)
,因为y=tanh(x)
)并将其乘以给定的dy
。所得值将进一步传播回最初产生输入x
到tanh
的操作,并在计算该梯度时成为dy
值,依此类推,直到达到梯度源