《吳恩達深度學習工程師系列課程之——改善深層神經網路:超引數除錯、正則化以及優化》學習筆記
本課程分為三週內容:
- 深度學習的使用層面
- 優化演算法
- 超引數除錯、Batch正則化和程式框架
WEEK1 深度學習的使用層面
1.建立神經網路時選擇:
神經網路層數
每層隱藏單元的個數
學習率為多少
各層採用的啟用函式為哪些
2. 深度學習應用層面有
自然語言處理NLP、計算機視覺Vision、語音識別Speech、結構化資料等。
3. 資料分類:訓練集、 驗證集、測試集
4. 資料的獲取方式:網頁抓取等
5. 分析訓練集訓練演算法產生的誤差和驗證集驗證演算法產生的誤差,來判斷演算法是否存在高偏差或高方差
6. 當出現高偏差時,應換更大的神經網路,或更多隱藏單元,更長時間更先進演算法等等,反覆嘗試直至低方差。
7. 當出現高方差時,應採用更多資料,或採用正則化來減少過擬合,或更先進的演算法等等。
8. 通常用訓練驗證集來診斷演算法是否存在偏差或方差。
9. L2正則化是最常見的正則化型別。如果使用L1正則化,W最終會是稀疏的。正則化引數通常使用驗證集或交叉驗證。
10. 神經網路加正則化,是給損失函式加範數平方公式。範數由backprop函式給出對w的偏導數求得。
11. 如果正則化引數變得很大,引數W很小,z也會相對變小。如果J已經有一個全新的定義,你用的是原函式J,也就是第一個正則化項,可能會看不到單調遞減現象。因此,為了除錯地圖下降,務必使用新定義的函式,它包含第二個正則化項。
12. 另一個實用的正則化方法——dropout(隨機失活)。它可以隨機刪除網路中的神經單元。通L2正則化,實施後會壓縮權重,並完成一些預防過擬合的外層正則化。dropout需要設定每一次的keep-prob值,即每層剩餘比例。其在計算機視覺領域應用廣泛。缺點是代價函式J不再被明確定義
13. early stopping,提早結束神經網路,獲得合適的W值。
14. 機器學習包括幾個步驟:1,選擇一個演算法來優化代價函式J,可用梯度下降法,Momentum,RMSprop和Adam等等;2,優化代價函式J後,如果發生過擬合,可通過正則化、擴增資料等;3,超引數激增,選出可行演算法變得複雜,如果用一組優化代價函式J,機器學習會變得簡單。優化時只需關注W和b,J(w,b)的值越小越好。只需要減少這個值,不用關注其他的。預防過擬合還可以減少方差。
15. 訓練神經網路時,其中一個加速訓練的方法就是歸一化輸入。其有兩個步驟:第一步是零均值化,即移動訓練集,直到它完成零處置化。第二步是歸一化方差。目的是讓代價函式J優化起來更簡單更快速。尤其是面對輸入值的範圍有很大的差異時。
16. 在訓練深層神經網路時面對的一個問題:梯度消失或梯度爆炸。即導數或坡度有時會變得非常大,或非常小。權重的變化,導致超引數呈現指數級增長或下降。這個問題需要通過為權重矩陣初始化合理值。
17. 反向傳播backprop時,有一個梯度檢驗,作用是確保backprop正確實施。剃度逼近時,使用雙邊誤差的方法更逼近導數,結果也最準確。
18. 使用雙邊誤差,來判斷函式是否實現了正確的偏導。用這個方法可以檢驗反向傳播是否得以正確實施。
19. 梯度檢驗只能用於除錯bug,不能用於訓練。如果演算法的梯度檢驗失敗,要檢查所有項,並試著找出bug。一般關閉 dropout用梯度檢驗進行雙重檢查。
WEEK2 優化演算法
- 優化演算法,使神經網路執行得更快。
- 機器學習的應用是一個高度依賴經驗的過程。
- Mini-batch梯度下降法。使用batch梯度下降法,一次遍歷訓練集只能讓你做一個梯度下降。使用Mini-batch梯度下降法,一次遍歷訓練集,能夠做所需個數的梯度下降。多次遍歷訓練集還需要一個while迴圈設定另一個for迴圈。從而一直處理訓練集,直到最後收斂到一個合適的精度。Mini-batch的值要取合適,1則隨機,有波動;m則為baich梯度下降。選取原則:當訓練資料集過小時,直接使用batch梯度下降法,小於2000個;過大時,Mini-batch,64-512大小,設定為2的次方,程式碼執行速度較快。此時輸入和輸出要符合GPU/CPU。
- 指數加權平均
- 指數加權平均的偏差修正
- 動量梯度下降法momentum
- RMSprop
- Adam 優化演算法
- 學習率衰減,學習率的設定,指數衰減。
WEEK3 超引數除錯
- 除錯處理,取值的優先次序。隨機初始化,粗糙到精細的搜尋過程。
- 為超引數選擇合適的範圍
- 正則化網路的啟用函式
- 將Batch Norm擬合進神經網路
- Softmax迴歸
- 訓練一個Softmax
- 深度學習框架
- TensorFlow