gradient checking:
檢測代碼實現的神經網絡的正確性,是否可以正確的計算梯度
使用方法
numerically approximate computations of gradient
中文解釋:舉例用真實數字計算梯度,看結果是否和求導公式得出的近似
雙邊誤差
求gradient時使用two sides difference (雙邊誤差)
計算一個函數的梯度時,算點和點的梯度不如算點和點的梯度效果好,因爲點和點的連線的斜率相比點和點的連線的斜率,更可能和點的切線相同
gradient checking步驟:
- 將所有網絡參數轉化成一個大向量
- 將所有網絡參數的梯度也轉化成一個大向量
- 對中的每個參數計算,得到向量
- 判斷和是否近似,用公式
- 若,上面得到的值小於等於,說明兩個向量非常近似;若值的範圍在,說明處於臨界點,有可能有錯,也可能沒錯,也許要重新檢查一下;若值的範圍在或者更大,很可能網絡實現有問題
- 檢查的方法:查看和中哪些值相差過大,以此追蹤問題
Tips
- 若加了regularization,check時的是加了正則項的損失函數的梯度
- gradient checking和dropout分開做,例如在check時將keep prob設置爲1.0
- 隨機初始化參數後check,訓練迭代幾次後再check;因爲參數接近0時,難以檢測到梯度的正確性,而當隨着迭代參數越來越大時,梯度的check會越來越不準確