深度學習調參策略(二)

2021-08-01 09:38:08 字數 2387 閱讀 2111

超引數(hyper-parameter)是困擾神經網路訓練的問題之一,因為這些引數不可通過常規方法學習獲得。

神經網路經典五大超引數:

學習率(leraning rate)、權值初始化(weight initialization)、網路層數(layers)

單層神經元數(units)、正則懲罰項(regularizer|normalization)

這五大超引數使得神經網路更像是一門實踐課,而不是理論課。

懂神經網路可能只要一小時,但是調神經網路可能要幾天。

英文介紹:]

知乎上的一些比較好的解答:

沒做過cnn,rnn,調過連續值dnn,以下經驗僅限於ctr

1.樣本要足夠隨機,防止大資料淹沒小資料

2.樣本要做歸一化

3.啟用函式要視樣本輸入選擇

4.minibatch很重要,幾百到幾千是比較合適的(很大資料量的情況下),無論是cnn還是rnn,batch normalization都有用,不一定結果提高幾個點,收斂快多了

5.learning rate很重要,可以直接用adagrad or adadelta,省去一些麻煩,然後把衝量調到0.9以上

6.權重初始化,可用高斯分布乘上乙個很小的數

7.loss不降了lr就除10

調了快1年的rnn, 深刻的感受到,深度學習是一門實驗科學,下面是一些煉丹心得,後面會不斷補充. 有問題的地方,也請大家指正.

引數初始化,下面幾種方式,隨便選乙個,結果基本都差不多.

uniform 

w = np.random.uniform(low=-scale, high=scale, size=shape)

glorot_uniform 

scale = np.sqrt(6. / (shape[0] + shape[1])) 

np.random.uniform(low=-scale, high=scale, size=shape)

高斯初始化: 

w = np.random.randn(n) / sqrt(n),n為引數數目 

啟用函式為relu的話,推薦 

w = np.random.randn(n) * sqrt(2.0/n)

svd ,對rnn效果比較好,可以有效提高收斂速度.

資料預處理方式

zero-center ,這個挺常用的.

x -= np.mean(x, axis = 0) # zero-center 

x /= np.std(x, axis = 0) # normalize

pca whitening,這個用的比較少.

訓練技巧

要做梯度歸一化,即算出來的梯度除以minibatch size

clip c(梯度裁剪): 限制最大梯度,其實是value = sqrt(w1^2+w2^2….),如果value超過了閾值,就算乙個衰減系係數,讓value的值等於閾值: 5,10,15

dropout對小資料防止過擬合有很好的效果,值一般設為0.5,小資料上dropout+sgd效果更好. dropout的位置比較有講究, 對於rnn,建議放到輸入->rnn與rnn->輸出的位置.關於rnn如何用dropout,可以參考這篇**:http://

arxiv.org/abs/1409.2329

adam,adadelta等,在小資料上,我這裡實驗的效果不如sgd,如果使用sgd的話,可以選擇從1.0或者0.1的學習率開始,隔一段時間,在驗證集上檢查一下,如果cost沒有下降,就對學習率減半. 我看過很多**都這麼搞,我自己實驗的結果也很好. 當然,也可以先用ada系列先跑,最後快收斂的時候,更換成sgd繼續訓練.同樣也會有提公升.

除了gate之類的地方,需要把輸出限制成0-1之外,盡量不要用sigmoid,可以用tanh或者relu之類的啟用函式.

rnn的dim和embdding size,一般從128上下開始調整. batch size,一般從128左右開始調整.batch size合適最重要,並不是越大越好.

word2vec初始化,在小資料上,不僅可以有效提高收斂速度,也可以可以提高結果.

盡量對資料做shuffle

lstm 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的結果,來自這篇**:http://

jmlr.org/proceedings/pa

pers/v37/jozefowicz15.pdf

, 我這裡實驗設成1.0,可以提高收斂速度.實際使用中,不同的任務,可能需要嘗試不同的值.

ensemble: **刷結果的終極核**,深度學習中一般有以下幾種方式

同樣的引數,不同的初始化方式

不同的引數,通過cross-validation,選取最好的幾組

同樣的引數,模型訓練的不同階段

不同的模型,進行線性融合. 例如rnn和傳統模型.

下面的**也有一些總結:

調參 深度學習模型24種優化策略

2.深度學習模型優化策略 2.2 更好的泛化技術 2.3 更好的 技術 2.4 網格搜尋超引數 深度學習神經網路學習對映功能。開發模型需要歷史資料作為訓練資料。該資料由觀察值或樣本組成,輸入元素描述了條件,輸出元素捕獲了樣本特徵。通常將輸出為數量的問題描述為回歸 建模問題 而將輸出作為標籤的問題通常...

深度學習調參技巧

模型引數的一般設定 epoch迭代幾十到幾百次。mini batch size從幾十到幾百,為了更好的利用硬體加速,通常取8的倍數,例如128,256。learning rate取0.1 資料集越大,模型越複雜,應取值越小 weight decay取0.005,momentum取0.9。dropou...

深度學習調參技巧

1 準備資料 務必保證有大量 高質量並且帶有乾淨標籤的資料,沒有如此的資料,學習是不可能的 2 預處理 這個不多說,就是0均值和1方差化 3 minibatch 建議值128,1最好,但是效率不高,但是千萬不要用過大的數值,否則很容易過擬合 4 梯度歸一化 其實就是計算出來梯度之後,要除以minib...