訓練神經網絡調超參的總結


train loss與test loss結果分析:

train loss 不斷下降,test loss不斷下降,說明網絡仍在學習; 
train loss 不斷下降,test loss趨於不變,說明網絡過擬合; 
train loss 趨於不變,test loss不斷下降,說明數據集100%有問題; 
train loss 趨於不變,test loss趨於不變,說明學習遇到瓶頸,需要減小學習率或批量數目; 
train loss 不斷上升,test loss不斷上升,說明網絡結構設計不當,訓練超參數設置不當,數據集經過清洗等問題。

train loss 趨於不變,train accuracy不斷上升,說明網絡學習能力不強,正確分類多數是大於0.5多一點,就會造成train loss趨於不變,而train accuracy不斷上升

train loss很低,test loss卻很高,說明網絡的泛化能力低或者是過擬合

調整模型的一些心得:

很多人在剛開始訓練自己的模型的時候都容易進入一個誤區:一開始訓練數據准備的很大,訓練時間消耗太多,最后發現train loss不收斂,測試效果也理想。在進行大規模數據訓練的時候,應該先用少量的數據進行測試,證明你設計的模型是有學習能力的,在這基礎上把各個參數調到最佳,最后才是進行大規模的數據訓練。很多人都省略了開始的一步,造成許多麻煩,而且還很費時間。

訓練的神經網絡的常見問題:

數據集問題:

  檢查饋送到網絡的輸入數據是否正確。你的數據也許很好,但是讀取輸入數據到網絡的代碼可能有問題,所以我們應該在所有操作之前打印第一層的輸入並進行檢查。檢查少許輸入樣本是否有正確的標簽,同樣也確保 shuffling 輸入樣本同樣對輸出標簽有效。相較於隨機的部分(可以認為股票價格也是這種情況),輸入與輸出之間的非隨機部分也許太小,即輸入與輸出的關聯度太低。沒有一個統一的方法來檢測它,因為這要看數據的性質。我曾經遇到過這種情況,當我從一個食品網站抓取一個圖像數據集時,錯誤標簽太多以至於網絡無法學習。手動檢查一些輸入樣本並查看標簽是否大致正確。如果你的數據集沒有被 shuffle,並且有特定的序列(按標簽排序),這可能給學習帶來不利影響。你可以 shuffle 數據集來避免它,並確保輸入和標簽都被重新排列。一張類別 B 圖像和 1000 張類別 A 圖像?如果是這種情況,那么你也許需要平衡你的損失函數或者嘗試其他解決類別失衡的方法。如果你在從頭開始訓練一個網絡(即不是調試),你很可能需要大量數據。對於圖像分類,每個類別你需要 1000 張圖像甚至更多。這可能發生在排序數據集中(即前 10000 個樣本屬於同一個分類)。可通過 shuffle 數據集輕松修復。巨大的批量大小會降低模型的泛化能力

調參問題:

  過擬合數據的一個小子集,並確保其工作。例如,僅使用 1 或 2 個實例訓練,並查看你的網絡是否學習了區分它們。然后再訓練每個分類的更多實例。如果不確定,請使用 Xavier 或 He 初始化。同樣,初始化也許會給你帶來壞的局部最小值,因此嘗試不同的初始化,看看是否有效。或許你正在使用一個很糟糕的超參數集。如果可行,嘗試一下網格搜索。太多的正則化可致使網絡嚴重地欠擬合。減少正則化,比如 dropout、批規范、權重/偏差 L2 正則化等。也許你的網絡需要更多的時間來訓練,在它能做出有意義的預測之前。如果你的損失在穩步下降,那就再多訓練一會兒。一些框架的層很像批規范、Dropout,而其他的層在訓練和測試時表現並不同。轉換到適當的模式有助於網絡更好地預測。監督每一層的激活值、權重和更新。確保它們的大小匹配。例如,參數更新的大小(權重和偏差)應該是 1-e3。考慮可視化庫,比如 Tensorboard 和 Crayon。緊要時你也可以打印權重/偏差/激活值。尋找平均值遠大於 0 的層激活。嘗試批規范或者 ELUs。優化器的選擇不應當妨礙網絡的訓練,除非你選擇了一個特別糟糕的參數。但是,為任務選擇一個合適的優化器非常有助於在最短的時間內獲得最多的訓練。描述你正在使用的算法的論文應當指定優化器;如果沒有,我傾向於選擇 Adam 或者帶有動量的朴素 SGD。檢查隱蔽層的最新情況,過大的值可能代表梯度爆炸。這時,梯度截斷(Gradient clipping)可能會有所幫助。檢查隱蔽層的激活值。Deeplearning4j 中有一個很好的指導方針:「一個好的激活值標准差大約在 0.5 到 2.0 之間。明顯超過這一范圍可能就代表着激活值消失或爆炸。低學習速率將會導致你的模型收斂很慢;高學習速率將會在開始階段減少你的損失,但是可能會導致你很難找到一個好的解決方案。試着把你當前的學習速率乘以 0.1 或 10。

克服 NaNs:

  • 減小學習速率,尤其是如果你在前 100 次迭代中就得到了 NaNs。

  • NaNs 的出現可能是由於用零作了除數,或用零或負數作了自然對數。

 

最后在我經過無數次調參過后的心得:過擬合是訓練神經網絡的一個好的開始,過擬合總比欠擬合好

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM