本文的深度學習技巧來自吳恩達課程的筆記。運用深度學習解決問題除了需要掌握深度學習的理論知識外,還需要明白其中大量的技巧。這些技巧可以幫助我們加快訓練速度,選取更好的算法和更合適的參數。我們將在後面逐步更新這裏面的內容。

1、傳統劃分數據集可能是70/20/10,大數據時代,例如你有100,0000個訓練集,你可以用其中的10000個作爲測試集,10000個作爲驗證集,類似98/1/1。

2、訓練集和測試集不匹配,至少保證測試集和驗證集要來自於同一個分佈。

3、沒有驗證集也是可以的。

4、很少說bias和variance之間的tradeoff

5、訓練集錯誤可以使用更大的網絡更長的訓練解決,測試集錯誤使用更多的數據進行訓練或者正則化

6、正則化的時候通常都是加關於權重的正則項,不加關於偏移的正則項,是因爲通常權重係數很多且是高維的,b很少,加關於b的沒什麼卵用。

7、dropout regularization是隨機剔除某些變量進行訓練,通常是模型過擬合的時候用,如果沒有過擬合不要用

8、dropout regularization可以對中間的網絡的輸入隨機剔除,因此可以防止中間某些層的過擬合。但某些層的神經元很多(權重矩陣很大)的時候,可以使用較高概率的dropout regularization。一般輸入層不會設置很低的dropout概率

9、dropout在測試集的時候不要使用

10、dropout regularization的缺點是損失函數J不好定義

11、除了前面的正則化方法,還可以使用數據增強(翻轉、扭曲)、early stopping方法來防止過擬合

12、early stopping也是一種避免過擬合的正則化方法,它有一個缺點。因爲optimizing cost function和not overfitting是兩個不同的任務,但是early stopping是將他們綁定到一起了。

13、early stopping的優點是不需要嘗試大量的參數來優化損失函數

14、將輸入數據正規化可以大大加快神經網絡的訓練速度

15、正規化使用的均值和方差在訓練集和測試集中要一樣

16、正規化起作用的原因是把原來那種不規則的損失函數變成了一個均勻對稱的損失函數形式,能加快速度

17、防止梯度爆炸或者梯度消失的一個解決方案是謹慎選擇權重的初始值。一般將權重的方差設置成輸入神經元數量的倒數,即

Var(W​l​​)=​1 / (n​l−1)​​

注意如果是ReLu激活函數的話,把分子設置成2效果更好,即​​。把權重設置成均值爲0,方差爲1的正態分佈的樣本也可以,它是的權重在1附近,不會很快出現梯度消失或者梯度爆炸。

另一個方法是把激活函數設置成TanH。但是一般有替換版本效果更好,如下(第一個叫Xavier初始化,第二個是Yoshua Bengio等人提出的):

​​

18、運用機器學習算法處理問題是一項非常有經驗性的工作。因此,想辦法加快訓練速度可以幫助我們更快的找到對的模型和合適的參數。

19、如果訓練集數量小於2000的話,推薦直接使用Batch Gradient Descent訓練。

20、如果訓練集數量大約2000,mini batch的數量推薦使用2的次方。如64、128、256等。由於計算機內存的佈局和訪問方式,採用這種大小可能在某些時候能加快訓練速度。但是要注意每個mini batch需要符合單臺計算機CPU/GPU內存的處理情況。

21、minibatch的大小也是一個超參數,在實際中也需要去考慮。

查看原文 >>
相關文章