【问题标题】:Why gradient of tanh in tensorflow is `grad = dy * (1 - y*y)`为什么张量流中的tanh梯度是`grad = dy *(1 - y * y)`
【发布时间】:2020-06-29 08:28:27
【问题描述】:

tf.raw_ops.TanhGrad 表示grad = dy * (1 - y*y),其中y = tanh(x)

但我认为由于dy / dx = 1 - y*y,其中y = tanh(x),grad应该是dy / (1 - y*y)。我哪里错了?

【问题讨论】:

    标签: tensorflow math deep-learning gradient


    【解决方案1】:

    dy / dx 这样的表达式是mathematical notation for the derivative,它不是一个实际的分数。像使用分子和分母一样单独移动dydx 是没有意义的。

    在数学上,已知d(tanh(x))/dx = 1 - (tanh(x))^2。 TensorFlow 会“向后”计算梯度(称为 backpropagation,或更一般地称为 reverse automatic differentiation)。这意味着,一般来说,我们将在到达计算“外部”函数g(tanh(x)) 的梯度的步骤之后计算tanh(x) 的梯度。 g 表示应用于tanh 输出的所有操作,以达到计算梯度的值。根据chain rule,这个函数g的导数是d(g(tanh(x)))/dx = d(g(tanh(x))/d(tanh(x)) * d(tanh(x))/dx。第一个因素d(g(tanh(x))/d(tanh(x)) 是直到tanh 的反向累积梯度,即所有这些后续操作的导数,并且是函数文档中dy 的值。因此,您只需计算d(tanh(x))/dx(即(1 - y * y),因为y = tanh(x))并将其乘以给定的dy。然后,结果值将进一步传播回最初产生输入xtanh 的操作,并且它将成为该梯度计算中的dy 值,依此类推,直到梯度已到达来源。

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多