神經網路如何調參,自己的一些心得和實戰經驗

2021-10-06 06:46:01 字數 1706 閱讀 4448

神經網路的調參十分重要,很多人都說深度學習是乙個黑箱模型,有人戲稱深度學習為「煉丹」。但是深度學習歸根結底是乙個數學優化的過程,超引數對於模型的效果影響很大。網上文章也有很多,比如梯度**應該怎麼辦,學習率怎麼調整,選什麼樣的優化器等等。下面我就說一下自己的一些心得以及借鑑的別人的一些想法。

為了訓練神經網路,其中乙個需要設定的關鍵超引數是學習率。提醒一下,為了最小化此網路的損失函式,這個引數縮放了權重更新的幅度。如果你把學習率設定太低,訓練會進展的很慢:因為你在網路的權重上只做了很少的調整。然而,如果你的學習率被設定的太高,它可能在你的損失函式上帶來不理想的後果。我已經視覺化了這些案例——如果你發現這些圖很難理解,我建議你事先參考一下(至少)我此前發布的關於梯度下降的第一部分。

學習速率退火的最流行方式是「步衰減」(step decay),其中學習率經過一定數量的訓練 epochs 後下降了一定的百分比。

啟用函式。我們啟用函式一般選擇relu,另一種常見的啟用函式是sigmoid,但是它不能再深度網路中很好的傳播梯度。另外我們都預設不會在輸出層中使用啟用函式。

初始分布。對於初始化大家都偏愛使用常規的高斯分布、截斷的正太分布,這裡我們推薦下variance-scaled初始化,variance scaling初始化根據每一層的輸入或輸出的數量來調整初始隨機權重的方差,從而幫助訊號更深入地傳播到網路中。

梯度裁剪。梯度**是深度學習中十分常見的現象,有時會導致尋優過程不收斂,或者算出來的結果乾脆直接溢位,例如在python裡都是nan,梯度裁剪是一種很好的解決方式。

預處理好你的資料。首先要歸一化你的資料,。訓練時,減去資料集的均值,然後除以其標準差。你的網路學習就會越快、越容易。注意訓練資料歸一化不要忘了也將測試資料歸一化哦,保持一致!

不用過於重視濾波器個數。如果你已經有了大量的濾波器,那麼新增更多的濾波器可能不會改善效能。

池化的意義。池化本質上是讓網路學習影象「那部分」的「大意」。例如,最大池可以幫助卷積網路對影象中特徵的平移、旋轉和縮放變得健壯。

這裡我們主要是針對一些結果達不到期望進行除錯,尋找bug。注意我們進行一些除錯時要用小規模資料集,小規模資料集,小規模資料集(重要問題說三遍)。

首先進行過擬合除錯確保神經網路是合理的。首先要做的就是在單個資料樣本上讓網路過擬合。這樣的話,準確度應該是 100%或 99.99%,或者接近於 0 的誤差。如果你的神經網路不能對單個資料點進行過擬合,那麼可能是體系結構出現嚴重問題。

改變batch_size。當我們增大batch_size時,減少梯度更新中的方差,使每次迭代更精確,帶bn的效果更好;當我們減小batch_size,可以提供與權重更新相關的更細粒度的反饋

更改學習率。降低學習率,雖然速度變慢,但它可能會進入乙個以前無法進入的最小值,因為之前它的步長太大了。提高學習率,會加快收斂,但可能不穩定。

bn的坑。在我以前的部落格裡介紹過了bn的坑。當網路存在一些問題或者梯度**時,bn會掩蓋這些問題,不方便你進行除錯。

慎用reshape。劇烈的 reshaping(比如改變影象的 x、y 維度)會破壞空間的區域性性,使得網路更難學習。

視覺化。我們可以視覺化一些錯誤的case進行分析,另外loss也可以通過tensorboard等進行視覺化。

神經網路設計及調參的一些建議

一 卷積相關 1 靠近資料層的卷積的數量一般會比後面卷積層的輸出要少,例子vgg16後面的conv層輸出通道比剛開始要多 2 在輸入的影象解析度較低時,不宜使用跨度太大的stride size。3 卷積層可以很好的保留位置資訊,如果要做位置資訊的提取,那麼可以從這個層中提取出來。4 卷積層之間最好是...

關於神經網路的調參經驗技巧和調參順序

二 調參順序 三 一句總結 一 模型方面基本上都做得非常好了,因此真正需要調的引數其實並不多了,或者說調很多引數實際帶來的提公升都非常小了。二 在訓練乙個深度學習模型的過程中,超引數選擇什麼最優,這是乙個基於實驗和經驗的過程。需要不停的嘗試,直到找到合適的引數值。調參就是trial and erro...

卷積神經網路的調參技巧1

方法 一 更多的優化演算法 二 啟用函式 三 網路的初始化 四 批歸一化 五 資料增強 六 採用更多的調參技巧 1 隨機梯度下降 問題 1.區域性極值 2.鞍點saddle point問題 動量梯度下降可以在一定程度上緩解以上的問題 此外的問題是 1.受到學習率的影響 導致梯度 不收斂 2.每乙個維...