1.14 梯度检验应用的注意事项-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 1.13 梯度檢驗 | 回到目錄 | 1.15 總結 | 
梯度檢驗應用的注意事項 (Gradient Checking Implementation Notes)
這節課,分享一些關于如何在神經網絡實施梯度檢驗的實用技巧和注意事項。
首先,不要在訓練中使用梯度檢驗,它只用于調試。我的意思是,計算所有 iii 值的 dθapprox[i]d\theta_{approx}[i]dθapprox?[i] 是一個非常漫長的計算過程,為了實施梯度下降,你必須使用 www 和 bbb backprop來計算 dθd\thetadθ ,并使用backprop來計算導數,只要調試的時候,你才會計算它,來確認數值是否接近 dθd\thetadθ 。完成后,你會關閉梯度檢驗,梯度檢驗的每一個迭代過程都不執行它,因為它太慢了。
第二點,如果算法的梯度檢驗失敗,要檢查所有項,檢查每一項,并試著找出bug,也就是說,如果 dθapprox[i]d\theta_{approx}[i]dθapprox?[i] 與 dθ[i]dθ[i]dθ[i] 的值相差很大,我們要做的就是查找不同的 iii 值,看看是哪個導致 dθapprox[i]d\theta_{approx}[i]dθapprox?[i] 與 dθ[i]d\theta[i]dθ[i] 的值相差這么多。舉個例子,如果你發現,相對某些層或某層的 θ\thetaθ 或 dθd\thetadθ 的值相差很大,但是 dw[l]dw^{[l]}dw[l] 的各項非常接近,注意 θ\thetaθ 的各項與 bbb 和 www 的各項都是一一對應的,這時,你可能會發現,在計算參數 bbb 的導數 dbdbdb 的過程中存在bug。反過來也是一樣,如果你發現它們的值相差很大, dθapprox[i]d\theta_{approx}[i]dθapprox?[i] 的值與 dθ[i]d\theta[i]dθ[i] 的值相差很大,你會發現所有這些項目都來自于 dwdwdw 或某層的 #dw$ ,可能幫你定位bug的位置,雖然未必能夠幫你準確定位bug的位置,但它可以幫助你估測需要在哪些地方追蹤bug。
第三點,在實施梯度檢驗時,如果使用正則化,請注意正則項。如果代價函數 J(θ)=1m∑L(y^(i),y(i))+λ2m∑∣∣w[l]∣∣2J(\theta)=\frac1m\sum L(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum||w^{[l]}||^2J(θ)=m1?∑L(y^?(i),y(i))+2mλ?∑∣∣w[l]∣∣2 ,這就是代價函數 JJJ 的定義, dθd\thetadθ 等于與 θ\thetaθ 相關的 JJJ 函數的梯度,包括這個正則項,記住一定要包括這個正則項。
第四點,梯度檢驗不能與dropout同時使用,因為每次迭代過程中,dropout會隨機消除隱藏層單元的不同子集,難以計算dropout在梯度下降上的代價函數 JJJ 。因此dropout可作為優化代價函數 JJJ 的一種方法,但是代價函數J被定義為對所有指數極大的節點子集求和。而在任何迭代過程中,這些節點都有可能被消除,所以很難計算代價函數 JJJ 。你只是對成本函數做抽樣,用dropout,每次隨機消除不同的子集,所以很難用梯度檢驗來雙重檢驗dropout的計算,所以我一般不同時使用梯度檢驗和dropout。如果你想這樣做,可以把dropout中的keepprob設置為1.0,然后打開dropout,并寄希望于dropout的實施是正確的,你還可以做點別的,比如修改節點丟失模式確定梯度檢驗是正確的。實際上,我一般不這么做,我建議關閉dropout,用梯度檢驗進行雙重檢查,在沒有dropout的情況下,你的算法至少是正確的,然后打開dropout。
最后一點,也是比較微妙的一點,現實中幾乎不會出現這種情況。當 www 和 bbb 接近0時,梯度下降的實施是正確的,在隨機初始化過程中……,但是在運行梯度下降時, www 和 bbb 變得更大。可能只有在 www 和 bbb 接近0時,backprop的實施才是正確的。但是當 www 和 bbb 變大時,它會變得越來越不準確。你需要做一件事,我不經常這么做,就是在隨機初始化過程中,運行梯度檢驗,然后再訓練網絡, www 和 bbb 會有一段時間遠離0,如果隨機初始化值比較小,反復訓練網絡之后,再重新運行梯度檢驗。
這就是梯度檢驗,恭喜大家,這是本周最后一課了。回顧這一周,我們講了如何配置訓練集,驗證集和測試集,如何分析偏差和方差,如何處理高偏差或高方差以及高偏差和高方差并存的問題,如何在神經網絡中應用不同形式的正則化,如 L2L2L2 正則化和dropout,還有加快神經網絡訓練速度的技巧,最后是梯度檢驗。這一周我們學習了很多內容,你可以在本周編程作業中多多練習這些概念。祝你好運,期待下周再見。
課程PPT
 
| 1.13 梯度檢驗 | 回到目錄 | 1.15 總結 | 
總結
以上是生活随笔為你收集整理的1.14 梯度检验应用的注意事项-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 1.13 梯度检验-深度学习第二课《改善
- 下一篇: 1.15 总结-深度学习第二课《改善深层
