1. 程式人生 > >訓練中的基礎技巧(數據處理,驗證集設置,參數處理)

訓練中的基礎技巧(數據處理,驗證集設置,參數處理)

ref 比較 可能 隨機 style 參加 避免 不知道 區域

訓練中的基礎技巧(數據處理,驗證集設置,參數處理)

首先,對於數據
我們需要統一其量綱。通用的做法是數據標準化。
就是讓一個樣本內的均值為0,不同樣本類內方差盡量一致
然後就是為標簽做one-hot encoding



對於權重
1.隨機初始化
2.均值為0,且盡量不同意義的權重間盡量有一致的方差

這是因為初始化對最後的結果實際上很重要,如果我們有機器學習基礎,我們就知道。而對於神經網絡這樣一個較復雜的模型,我們並不知道初始化在哪裏比較合適,我們想盡量避免初始化對模型產生較大影響,就采用隨機初始化的方法較為合適。
而均值為0的道理,還記得我們之前解析神經網絡中的激勵函數嘛,如果采用sigmoid這樣的函數,均值偏大或者偏小都會導致更新較慢。

1.梯度方向往往受到解平面某點附近的變化趨勢影響,不見得會向著目標局部極小值收斂。所以在我們訓練過程中會出現錯誤率是螺旋式下降的。那麽對於這個問題,我們可以這樣子解決。讓
新的梯度方向=0.9×前一個梯度方向+0.1新的梯度方向
得到新的梯度方向。當然這個參數是可以變的

2.而學習速率這裏我們直接上一張圖
技術分享

可以看到,雖然大的學習速率比小的更快收斂,但是大的也更加快地到達了‘平原區域’
這是因為學習速率高很可能進不去小的‘坑’,而小坑下面連接的可能是更低的谷底
所以小的學習速率總是可以在最終收斂結果上比大的要好。但是如果一直采用小學習速率,在一開始的下降過程又太慢了。這時候我們想要學習率在step增加時逐漸減小。

我以上說的這兩點被總結起來叫做AdaGD,自適應梯度下降。tf中為我們提供的就是它,所以我們不需要關心學習速率和梯度方向的問題。當然,如果到很熟練需要定制的最優化方法時,可以去改動。但目前還用不到。

對於訓練集、驗證集、測試集
我這裏的觀點是,在參加競賽之類的不需要我們自己設置測試集,而發paper時需要設置小部分測試集。

我以上說的這兩點被總結起來叫做AdaGD,自適應梯度下降。tf中為我們提供的就是它,所以我們不需要關心學習速率和梯度方向的問題。當然,如果到很熟練需要定制的最優化方法時,可以去改動。但目前還用不到。

對於訓練集、驗證集、測試集
我這裏的觀點是,在參加競賽之類的不需要我們自己設置測試集,而發paper時需要設置小部分測試集。

訓練中的基礎技巧(數據處理,驗證集設置,參數處理)