給出自己的建議:
① 建議優先在對數尺度上進行超參數搜索:
比較典型的是學習率和正則化項,我們可以從諸如0.001 0.01 0.1 1 10,以10為階數進行嘗試。因為他們對訓練的影響是相乘的效果。不過有些參數,還是建議在原始尺度上進行搜索,例如dropout值: 0.3 0.5 0.7)。
② 選擇合適的Epoch訓練次數
如果隨著Epoch的次數增加,準確度在一定時間內(比如5到10次)變化很小,就可以停止Epoch。開始時可以把Epoch次數設置的大一些,觀察在哪個地方準確度變化很小,就把Epoch設置成幾。也可以用早停法,防止過擬合。
③ 調節Regularization parameter lambda
實驗lambda,從1.0,10,100…找到一個合適的。注意:lambda的大小是和樣本數成正比關係的,比如現在樣本數、lambda分別是1000、0.4,以後把樣本數擴大到10000時,對應的lambda也要擴大到4。
④ 調節mini-batch size
mini-batch選擇太小:沒有充分利用計算資源;太大:更新權重和偏向比較慢,mini-batch size和其他參數相對獨立,一旦找到一個合適的以後,就不需要再改了。一般就是16,32,64,128,256找一個就行。
詳細見深度機器學習中的batch的大小對學習效果有何影響?——https://www.zhihu.com/question/32673260
⑤ 如何選擇梯度下降算法
adam或者SGD,當然還有其他自適應的梯度下降算法都可以試試。
⑥ 如何選擇激勵函數
如何選擇激勵函數,沒有特別好的方法,只能靠實驗比較。常用的激勵函數有:sigmoid,tanh,relu。
⑦ 如何設置Weights和biases
最簡單的方法:讓W和b服從N(0, 1 / sqrt(n_in) ),n_in:輸入神經元的個數,設置合適的W和b可以加快學習的速率,在極個別的神經網絡中,W和b甚至可以影響最後訓練的準確度。
⑧ 選擇何種Regularization
L1和L2是對cost函數後面增加一項。L1和L2都是為了減少連接對cost影響的權重,但是L1和L2又存在一定的區別。L1減少的是一個常量,L2減少權重的一個固定比例,如果權重本身很大,L1減少的比L2少很多,反之,如果權重本身很小,L1減少的更多。L1傾向於集中在少部分重要的連接上。
注意:對於L1,當W=0時,cost關於W的偏導沒有意義,因為在W=0時不可導,此時就使用un-regulazied表達式,sgn(0)=0,本來regularization的目的就是減少權重,到權重=0時,就沒有必要再減少。
編程的時候發現這個在pytorch裡是用weight decay來實現的,選擇L2範式的係數就行了,但是一般用了dropout再用L2範式性能會下降,這點我沒弄清楚,可能我這裡說的不對,以後補充。
⑨ 是否使用dropout
pytorch裡的dropout方法就是對Tensor進行隨機mask,這樣做可以避免過擬合,一般就是0.2,0.3,0.5,用了效果都挺好的,而且不一定拘泥於神經元,你也可以試試對訓練過程中各種Tensor是用dropout。
⑩ 訓練集多大比較合適
訓練集越大越好,增加訓練集在一定程度上也可以減少過擬合,數據集對模型很重要,有文章說,參數是對應於數據集的,多大的數據集需要數量差不多的參數就夠了。
⑪ Loss函數選擇
一般用交叉熵就能解決,但是具體問題具體對待,每個人都可以定義自己的損失函數。
⑫ 神經元的個數
這個在實驗中其實起到挺大作用的,句子匹配中,一般第一個隱層要和輸入層差不多,最後用於分類的MLP神經元2倍左右,經驗值。具體任務具體對待。
⑬ 自己模型的超參數
這個最小二乘法唄。
以後有新的感悟再更新,參考文獻寫的並不是很好,自己先按照這個順序寫了一下,調參感覺是個玄學,就像神經網絡並不是很好解釋。
References:
[1] https://blog.csdn.net/qoopqpqp/article/details/75271203
[2] https://zhuanlan.zhihu.com/p/24720954
版權聲明:本文為CSDN博主「IndexFziQ」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/sinat_34611224/article/details/84072205
關於 Imagination微信號