[英]Why gradient of tanh in tensorflow is `grad = dy * (1 - y*y)`
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)
。 我哪里錯了?
像dy / dx
這樣的表達式是導數的數學符號,它不是實際的分數。 像使用分子和分母一樣單獨移動dy
或dx
是沒有意義的。
在數學上,已知d(tanh(x))/dx = 1 - (tanh(x))^2
。 TensorFlow “向后”計算梯度(所謂的反向傳播,或更一般的反向自動微分)。 這意味着,一般來說,我們將在計算“外部” function g(tanh(x))
的梯度的步驟之后計算tanh(x)
的梯度。 g
表示應用於tanh
的 output 以達到計算梯度的值的所有操作。 這個 function 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
的反向累積梯度,即所有這些后續操作的導數,並且是function 文檔中dy
的值。因此,您只需計算d(tanh(x))/dx
(即(1 - y * y)
,因為y = tanh(x)
)並將其乘以給定dy
。然后,結果值將進一步傳播回最初產生輸入x
到tanh
的操作,並且它將成為該梯度計算中的dy
值,依此類推,直到達到梯度源.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.