1. 程式人生 > >吳恩達deeplearning.ai課程《改善深層神經網路:超引數除錯、正則化以及優化》____學習筆記(第一週)

吳恩達deeplearning.ai課程《改善深層神經網路:超引數除錯、正則化以及優化》____學習筆記(第一週)

____tz_zs學習筆記

第一週 深度學習的實用層面(Practical aspects of Deep Learning)

我們將學習如何有效運作神經網路(超引數調優、如何構建資料以及如何確保優化演算法快速執行)

設定ML應用(Setting up your ML application)

1.1 訓練 / 開發 / 測試集(Train / Dev / Test sets)

老師語:在我看來,從一個領域或者應用領域得來的直覺經驗,通常無法轉移到其它應用領域。最佳決策取決於資料量、引數設定、硬體配置等諸多因素。對於很多應用系統,即使是經驗豐富的深度學習行家也不太可能一開始就預設出最匹配的超引數。


應用深度學習是一個典型的迭代過程,需要多次迴圈往復,才能為你的應用找到合適的神經網路。

迴圈過程的效率是專案進展速度的一個關鍵因素。而建立高質量的訓練資料集、驗證集和測試集,能幫助提高迴圈效率。


經驗法則:1、要確保驗證集和測試集的資料來自同一分佈。2、如果不需要無偏評估,沒有測試集(只有訓練集、驗證集)也是可以。


1.2 偏差 / 方差(Bias / Variance)

最優誤差(也被稱為貝葉斯誤差)很小的情況下:

通過檢視訓練集誤差,我們可以判斷資料擬合情況,可以判斷是否有偏差問題。然後檢視驗證集錯誤率有多高,我們可以判斷方差是否過高。


·

·

1.3 機器學習基礎(Basic Recipe for Machine Learning)

訓練神經網路時常用的基本方法


神經網路的正則化(Regularization your neural network)

1.4 正則化(Regularization)

減少過擬合(高方差)問題的方法:
1、準備更多的資料(但是,有時候沒那麼多資料或者獲取更多的資料的成本很高)

2、正則化

我們先從簡單的開始,下圖為logistic迴歸中加入正則化。


神經網路中實現正則化


1.5 為什麼正則化可以減少過擬合?(Why regularization reduces overfitting?)


·


1.6 Dropout 正則化(Dropout Regularization)


·


·


1.7 理解 Dropout(Understanding Dropout)

理解角度一:每次迭代中,使用的是一個較小的神經網路(因為隨機歸零了很多節點),而較小的神經網路是有正則化效果的。

理解角度二:節點不能依賴任何一個特徵,因為每個特徵都有可能被隨機清除了,所以不會給其中一個很重的權重,而是傾向於每個都給一點點,這樣,dropout就產生了收縮“權重的平方範數”的效果。與L2正則化類似,實施dropout的結果是它會壓縮權重。dropout被正式地作為一種正則化的替代形式,與L2正則化不同的是,被應用的方式不同 dropout也會有所不同,甚至更適用於不同的輸入範圍。


總結:

1、如果你擔心某些層比其他層更容易發生過擬合,可以把某些層的keep-prob值設定得比其它層更低,缺點是為了使用交叉驗證,你要搜尋更多的超級引數。

2、可以在一些層上應用dropout,而有些層不用dropout,應用dropout的層只含有一個超級引數keep-porb。

提醒:

計算視覺中的輸入量非常大,輸入了太多的畫素,以至於沒有足夠的訓練資料,從而一直存在過擬合,所以dropout在計算機視覺中應用得比較頻繁。有些計算機視覺研究人員非常喜歡用它,幾乎成了預設的選擇,但是要牢記一點:dropout是一種正則化方法,除非過擬合,否則不要使用。所以它在其它領域應用得比較少。

dropout一大缺點就是代價函式J不再被明確定義,因為每次迭代都會隨機移除一些節點。老師的方法:我通常會關閉dropout函式,將keep.prop的值設為1,執行程式碼,確保J函式單調遞減,然後再開啟dropout函式。

1.8 其他正則化方法(Other regularization methods)

data augmentation(資料擴增)


early stopping(提早停止訓練神經網路)


L2正則化和early stopping的對比

early stopping與L2正則化相似,都是選擇引數W範數較小的神經網路來防止過擬合。

early stopping的優點是:只執行一次坡度下降,你可以找出W的較小值、中間值和較大值,而無需像L2正則化那樣嘗試超級引數λ的很多值。缺點是:你不能獨立地處理優化代價函式j和防止過擬合這兩個問題。因為提早停止梯度下降,也就是停止了優化代價函式J(這時有可能j還不是最優),同時停止了過擬合程序,你沒有采用多鍾方法分別處理兩個問題,而是用一種方法同時解決兩個問題。這樣導致要考慮的東西變的更復雜了。

L2正則化缺點是:你必須嘗試很多正則化引數λ的值(這也導致搜尋大量λ值的計算代價太高)訓練神經網路的時間可能很長。

雖然L2正則化有缺點,我個人更傾向於使用L2正則化,嘗試許多不同的λ值,假如你可以負擔大量計算的代價。使用early stopping也能得到相似結果,而且不用嘗試這麼多λ值。

優化問題(setting up your optimization problem)

1.9 歸一化輸入(Normalizing inputs)

訓練神經網路其中一個加速訓練的方法就是(normalizing inputs)歸一化輸入。


確保所有特徵都在相似範圍內,通常可以幫助學習演算法執行得更快,而且執行這類歸一化並不會產生什麼危害。


1.10 梯度消失與梯度爆炸(Vanishing / Exploding gradients)

訓練神經網路,尤其是訓練深度神經網路,所面臨的一個問題是梯度消失或梯度爆炸。也就是說,當你訓練深度網路時,導數或坡度有時會變得非常大,或非常小,甚至以指數方式變小。

本節課介紹深度神經網路如何產生的梯度消失和梯度爆炸問題。


1.11 神經網路的權重初始化(Weight Initialization for Deep Networks)

針對梯度消失和梯度爆炸問題的一個不完整的解決方案(雖然不能徹底解決問題,但它確實降低了坡度消失和爆炸問題):謹慎地選擇隨機初始化引數,為權重矩陣初始化合理的值,使他既不會增長過快,也不會太快下降到0,從而得到權重或梯度不會增長或消失過快的深度網路。


1.12 梯度的數值逼近(Numerical approximation of gradients)

雙邊誤差公式的結果更準確


·


1.13 梯度檢驗(Gradient checking)

梯度檢驗幫我節省了很多時間,也多次幫我發現backprop實施過程中的bug,接下來,我們看看如何利用它來除錯或檢驗backprop的實施是否正確。


·


1.14 實現梯度檢驗的筆記(Gradient Checking Implementation Notes)

神經網路實施梯度檢驗的實用技巧和注意事項


·