1. 程式人生 > >【深度學習篇】--神經網絡中的調優

【深度學習篇】--神經網絡中的調優

flow 初始 clas 根據 叠代 pan 容易 組合 語音

一、前述

調優對於模型訓練速度,準確率方面至關重要,所以本文對神經網絡中的調優做一個總結。

二、神經網絡超參數調優

1、適當調整隱藏層數
對於許多問題,你可以開始只用一個隱藏層,就可以獲得不錯的結果,比如對於復雜的問題我們可以在隱藏層上使用足夠多的神經元就行了, 很長一段時間人們滿足了就沒有去探索深度神經網絡,

但是深度神經網絡有更高的參數效率,神經元個數可以指數倍減少,並且訓練起來也更快!(因為每個隱藏層上面神經元個數減少了可以完成相同的功能,則連接的參數就少了)

就好像直接畫一個森林會很慢,但是如果畫了樹枝,復制粘貼樹枝成大樹,再復制粘貼大樹成森林卻很快。真實的世界通常是這種層級的結構,DNN就是利用這種優勢。

前面的隱藏層構建低級的結構,組成各種各樣形狀和方向的線,中間的隱藏層組合低級的結構,譬如方塊、圓形,後面的隱藏層和輸出層組成更高級的結構,比如面部。

僅這種層級的結構幫助DNN收斂更快,同時增加了復用能力到新的數據集,例如,如果你已經訓練了一個神經網絡去識別面部,你現在想訓練一個新的網絡去識別發型,你可以復用前面的幾層,就是不去隨機初始化Weights和biases,你可以把第一個網絡裏面前面幾層的權重值賦給新的網絡作為初始化,然後開始訓練(整體來看會提高速度)。

這樣網絡不必從原始訓練低層網絡結構,它只需要訓練高層結構,例如,發型

對於很多問題,一個到兩個隱藏層就是夠用的了,MNIST可以達到97%當使用一個隱藏層上百個神經元,達到98%使用兩
個隱藏層,對於更復雜的問題,你可以逐漸增加隱藏層,直到對於訓練集過擬合。(會經常過擬合,因為會不斷地調整參數)

非常復雜的任務譬如圖像分類和語音識別,需要幾十層甚至上百層,但不全是全連接,並且它們需要大量的數據,不過,你很少需要從頭訓練,非常方便的是復用一些提前訓練好的類似業務的經典的網絡。那樣訓練會快很多並且需要不太多的數據

技術分享圖片

當數據量不大的時候選擇機器學習(淺層模型)準確率好,數據量大的時候選擇深度學習。


2、每個隱藏層的神經元個數

輸入層和輸出層的神經元個數很容易確定,根據需求,比如MNIST輸入層28*28=784,輸出層10

通常的做法是每個隱藏層的神經元越來越少,比如第一個隱藏層300個神經元,第二個隱藏層100個神經元,可是,現在更多的是每個隱藏層神經元數量一樣,比如都是150個,這樣超參數需要調節的就少了

,正如前面尋找隱藏層數量一樣,可以逐漸增加數量直到過擬合,找到完美的數量更多還是黑科技。

簡單的方式是選擇比你實際需要更多的層數和神經元個數(很容易過擬合),然後使用early stopping去防止過擬合,還有L1、L2正則化技術,還有dropout

三、防止過擬合技術

1、Early stopping(需要驗證集)

去防止在訓練集上面過擬合,

1.1 一個很好的手段是early stopping

當在驗證集上面開始下降的時候中斷訓練,一種方式使用TensorFlow去實現,是間隔的比如每50 steps,在驗證集上去評估模型,然後保存一下快照如果輸出性能優於前面的快照,記住最後一次保存快照時候叠代的steps的數量,當到達step的limit次數的時候,restore最後一次勝出的快照。
盡管early stopping實際工作做不錯,你還是可以得到更好的性能當結合其他正則化技術一起的話

技術分享圖片

上圖中則需要當叠代次數運行完後,resotore損失函數最小的w參數。

1.2、代碼示範:

技術分享圖片

【深度學習篇】--神經網絡中的調優