在神經網絡中,有許多超參數需要設置,比如學習率,網絡層數,神經元節點數
所謂超參數,就是不需要訓練的參數,需要人為設定的參數。
這些超參數對模型的訓練和性能都有很大影響,非常重要,那么這些超參數該怎么設定呢?
一般我們可以根據經驗來設定,但是經驗畢竟有限,而且也不科學。
驗證數據
在模型訓練時,我們通常會有訓練數據和測試數據,訓練數據用來訓練,測試數據用來測試,但是這兩個數據都不能用來調參,為什么呢?因為如果用訓練數據來調參,很容易過擬合,如果用測試數據來調參,模型的泛華能力很難保障。
所以只能用驗證數據來調參。測試數據是用來評估模型的,而且最好只用一次。
在選取驗證數據時要打亂數據,原因如下:
1. 使得類別分布均勻,避免選取數據中只有某些類別
2. 如果不打亂,比如樣本按類別順序0-10排列,那么剛開始模型很快找到類別0的權重,但是到類別1時,又成了類別1的權重,最后成了類別10的權重,當然沒有這么極端,但是模型肯定會存在“偏向”
超參數的優化
超參數優化總體思路是重復探索,並且不斷縮小探索范圍。
具體怎么理解呢?
就是剛開始設置一個較大的范圍,然后隨機選擇某個值,訓練並評估模型的效果,然后重復該操作,從多個結果中選擇效果好的對應的參數區間,這就縮小了探索范圍,
然后重復上述操作,再次縮小范圍,直到取到合適范圍。(研究表明隨機取值效果比有規律取值效果好)
此過程注意以下幾點:
1. 初始范圍設定以10的階乘為尺度,如 10-3到104
2. 每次訓練迭代次數不能太大,因為神經網絡訓練本來就比較慢,在優化過程中需要多次訓練,如果每次訓練迭代次數很多,總耗時會非常長,
而且我們只是為了選參數,如果參數合適,會很快收斂,只要收斂效果就會不錯,沒必要非得收斂到最小值
總結一下步驟
1. 設定初始范圍,每個參數一個范圍
2. 隨機選擇參數值
3. 訓練模型驗證精度
4. 重復2 3步,根據精度來縮小取值范圍
5. 返回步驟1
圖示如下
上圖是多次試驗后,按精度高低順序畫出的效果圖,可以看到前5次准確率在0.8以上,從第6次開始,精度跌倒0.6以下
前5個圖對於的參數如圖
這個結果可以看出,學習率在 0.001 到0.01之間,等等
總結
其實無論是機器學習還是深度學習,調參思路都差不多,在實際項目中,要結合實際情況靈活運用。