Neural-Networks

數值梯度檢查:有多接近才足夠接近?

  • November 30, 2015

我製作了一個卷積神經網絡,我想使用數值梯度檢查來檢查我的梯度是否正確計算。問題是,有多接近才足夠接近?

我的檢查函數只是吐出計算的導數、數值近似的導數、兩者之間的差異,以及這兩個值是否具有相同的符號(一個是正數,另一個是負數是一個很大的禁忌)重量。

我主要擔心的是,對於除第一個之外的所有全連接層和所有捲積層,差異看起來很相似——兩個數字的前 9-13 個字符將匹配。這聽起來足夠好,對吧?但是對於第一個卷積層的權重,有時我會匹配到小數點後 12 位,但也可能低至 3 位。這是否足夠,或者可能存在錯誤?

需要注意的一件好事是兩個值的符號總是匹配的,這是好的,所以網絡總是會朝著正確的方向移動,即使移動的幅度有點偏離。但這就是問題……它有沒有可能關閉?

我見過的最接近解決這個問題的方法是在斯坦福 UFLDL 教程中的softmax 回歸部分。複製關鍵語句:

數值梯度和分析梯度之間的差異範數應該很小,大約為.

在 python 中,代碼看起來像這樣:

norm(gradients - numericalGradients)/norm(gradients + numericalGradients)

你在哪裡gradients是導數的結果,numericalGradients是近似的梯度。

引用自:https://stats.stackexchange.com/questions/184220

comments powered by Disqus