簡體   English   中英

為什么 tensorflow 中的 tanh 梯度是 `grad = dy * (1 - y*y)`

[英]Why gradient of tanh in tensorflow is `grad = dy * (1 - y*y)`

tf.raw_ops.TanhGradgrad = dy * (1 - y*y) ,其中y = tanh(x)

但我認為由於dy / dx = 1 - y*y ,其中y = tanh(x) , grad 應該是dy / (1 - y*y) 我哪里錯了?

dy / dx這樣的表達式是導數的數學符號,它不是實際的分數。 像使用分子和分母一樣單獨移動dydx是沒有意義的。

在數學上,已知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 。然后,結果值將進一步傳播回最初產生輸入xtanh的操作,並且它將成為該梯度計算中的dy值,依此類推,直到達到梯度源.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM