吳恩達深度學習--神經網絡的優化(1)

1.訓練集,驗證集,測試集

選擇最佳的Train/Dev/Test sets非常重要。除此之外,構建神經網絡時,需要設置的參數很多:神經網絡層數,神經元個數,學習率的大小。**函數的選擇等等。實際上很難第一次就確定好這些參數,大致過程是:

先確定初始參數,構建神經網絡模型,然後通過代碼實現該模型,之後進行試驗確定模型的性能。根據性能再不斷調整參數,重複上述過程,直到讓神經網絡模型最優。

由上述可知,深度學習是一個不斷迭代優化的過程,效率取決於單次試驗所花費的時間,而設置合適的Train/Dev/Test sets數量,能有效提高訓練效率。

對於如今的大數據樣本,Train/Dev/Test sets的比例通常可以設置爲98%/1%/1%,或者99%/0.5%/0.5%。樣本數據量越大,相應的Dev/Test sets的比例可以設置的越低一些。

另外一個值得注意的問題是:訓練樣本和測試樣本分佈上不匹配,即訓練樣本和測試樣本來自於不同的分佈。解決方法就是儘量使兩者處於統一分佈。
具體做法有:對於一張圖片,可以讓圖片轉向或者截取圖片的一部分,識別一些數字時可以使數字進行稍微的變形等等。

偏差和方差

如下圖所示,顯示了二維平面上,可見,高偏差(high bias)對應着欠擬合,而高方差(high variance)對應着過擬合。
在這裏插入圖片描述減少high bias的方法通常是增加神經網絡的隱藏層個數、神經元個數,訓練時間延長,選擇其它更復雜的模型等。

減少high variance的方法通常是增加訓練樣本數據,進行正則化Regularization,選擇其他更復雜的NN模型等。

正則化

邏輯迴歸中採用L2正則化的表達式爲:
在這裏插入圖片描述
λ就是正則化參數(超參數的一種)。可以設置λ爲不同的值,在Dev set中進行驗證,選擇最佳的λ。
因爲w的維度很大,b只是一個常數,很大程度上b對整體模型的影響很小,所以可以不對b進行正則化。

在深度學習模型中:
在這裏插入圖片描述

由於加入了正則化項,梯度下降算法中的 d w [ l ] dw^{[l]} 計算表達式需要做如下修改
在這裏插入圖片描述
由於加上了正則項, d w [ l ] dw^{[l]} 有個增量,在更新 w [ l ] w^{[l]} 的時候,會多減去這個增量,使得 w [ l ] w^{[l]} 比沒有正則項的值要小一些。不斷迭代更新,不斷地減小。

爲什麼正則化能夠有效避免high variance,防止過擬合呢?
當λ很大時,w就會很小接近於0,意味着該神經網絡模型中的某些神經元實際的作用很小,可以忽略。從效果上來看,其實是將某些神經元給忽略掉了。這樣原本過於複雜的神經網絡模型就變得不那麼複雜了,而變得非常簡單化了

第二種防止過擬合的方法:Dropout
Dropout是指在深度學習網絡的訓練過程中,對於每層的神經元,按照一定的概率將其暫時從網絡中丟棄。也就是說,每次訓練時,每一層都有部分神經元不工作,起到簡化複雜網絡模型的效果,從而避免發生過擬合。

對於同一組訓練數據,利用不同的神經網絡訓練之後,求其輸出的平均值可以減少overfitting。Dropout就是利用這個原理,每次丟掉一定數量的隱藏層神經元,相當於在不同的神經網絡上進行訓練,這樣就減少了神經元之間的依賴性,即每個神經元不能依賴於某幾個其他的神經元。

此方法在計算機視覺應用很多,其他應用很少。

第三種防止過擬合的方法:early stoping

一個神經網絡模型隨着迭代訓練次數增加,train set error一般是單調減小的,而dev set error 先減小,之後又增大。也就是說訓練次數過多時,模型會對訓練樣本擬合的越來越好,但是對驗證集擬合效果逐漸變差,即發生了過擬合。因此,迭代訓練次數不是越多越好,可以通過train set error和dev set error隨着迭代次數的變化趨勢,選擇合適的迭代次數,即early stopping。

但是Early stopping的做法通過減少得帶訓練次數來防止過擬合,這樣J就不會足夠小.
在這裏插入圖片描述歸一化:主要是爲了讓所有輸入歸一化同樣的尺度上,方便進行梯度下降算法時能夠更快更準確地找到全局最優解。