gradient checking

gradient checking:

檢測代碼實現的神經網絡的正確性,是否可以正確的計算梯度

使用方法

numerically approximate computations of gradient
中文解釋:舉例用真實數字計算梯度,看結果是否和求導公式得出的近似

雙邊誤差

求gradient時使用two sides difference (雙邊誤差)
計算一個函數的梯度時,算θθ點和θ+εθ+ε點的梯度不如算θεθ-ε點和θ+εθ+ε點的梯度效果好,因爲θεθ-ε點和θ+εθ+ε點的連線的斜率相比θθ點和θ+εθ+ε點的連線的斜率,更可能和θθ點的切線相同

gradient checking步驟:

  1. 將所有網絡參數轉化成一個大向量θθ
  2. 將所有網絡參數的梯度也轉化成一個大向量dθ
  3. θθ中的每個參數θiθ_{i}計算J(θ1,θ2...θi+ε...)J(θ1,θ2...θiε...)2ε\frac{J(θ_{1},θ_{2}...θ_{i}+ε...)-J(θ_{1},θ_{2}...θ_{i}-ε...)}{2ε},得到向量dθapproximatedθ_{approximate}
  4. 判斷dθapproximatedθ_{approximate}dθ是否近似,用公式dθapproximatedθ2dθapproximate2+dθ2\frac{||dθ_{approximate}-dθ||_{2}}{||dθ_{approximate}||_{2}+||dθ||_{2}}
  5. ε=107ε=10^{-7},上面得到的值小於等於10710^{-7},說明兩個向量非常近似;若值的範圍在10510^{-5},說明處於臨界點,有可能有錯,也可能沒錯,也許要重新檢查一下;若值的範圍在10310^{-3}或者更大,很可能網絡實現有問題
  6. 檢查的方法:查看dθapproximatedθ_{approximate}dθ中哪些值相差過大,以此追蹤問題

Tips

  1. 若加了regularization,check時的dθ是加了正則項的損失函數的梯度
  2. gradient checking和dropout分開做,例如在check時將keep prob設置爲1.0
  3. 隨機初始化參數後check,訓練迭代幾次後再check;因爲參數接近0時,難以檢測到梯度的正確性,而當隨着迭代參數越來越大時,梯度的check會越來越不準確
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章