最近在做深度學習實驗,跑一次實驗輕則以小時計、重則以天計,實在沒有那么多的時間可以等待,因此想想用盡可能少的實驗次數,得到盡可能好的實驗效果。這樣的話,問題就可以歸結為如何設計合適的網絡結構、如何設計合適的訓練策略,主要就是:
- 層數、每一層卷積核個數、卷積權重初始化方式、dropout ratio、BN、全連接層神經元個數、Relu等網絡結構參數應該如何選?
- 學習率、decay等solver參數又該如何設置?
在參考煉丹實驗室的基礎上,並結合自己的體會,談談對調參的理解,大家如果有其他技巧,也歡迎多多交流。
- 網絡結構設計
如果我們在Cifar10數據集上進行實驗,最好能夠找幾個在該數據集上效果較好的網絡結構,看看別人的網絡超參數是如何設置的,有什么共性(比如每一層卷積核的個數、大小、層數等)。原則就是“盡可能采用成熟的網絡結構,近可能少改動網絡結構”。
- 實驗的輸出
一般情況下,在實驗的時候會有,train loss、test loss、訓練集准確率、測試集准確率,根據它們的特點,我們大致可以得出網絡的狀態。訓練集准確率高、測試集准確率低,過擬合;訓練集准確率低、測試集准確率低,欠擬合;訓練集、測試集上的准確率和初始狀態相比,沒有明顯的變化,網絡在“徘徊”。
- “過擬合”
這時候需要提高網絡的泛化能力,例如引入dropout、或者增大已有dropout ration等。
- “欠擬合”
這時候需要增強模型的擬合能力,,例如增加網絡層數、增加節點數,減少dropout等。
- “徘徊”
我現在面對的就是這樣的狀態,現在還沒有明確的“應對指導思想”。
