訓練深度神經網路的常用方法和技巧

2021-09-24 05:31:03 字數 2596 閱讀 9332

4.超引數的重要性從高到低

5.超引數的搜尋方式

6.偏差和方差分析(bias an variance)

7.如何解決高偏差(high bias)

8.如何解決高方差(high variance)

總結參考

神經網路基礎

前文三篇文章:

乙個簡單的3層神經網路模型part1,

乙個簡單的3層神經網路模型part2,

乙個簡單的3層神經網路模型part3(使用sklearn mlpclassifier)——3層神經網路完結篇,

從乙個簡單的模型出發,使用單隱藏層神經網路模型學習了**資料,不幸的是,單隱藏層模型在資料集上的效能表現一般,本文將從幾個角度闡述深度神經網路提公升效能表現的方法和技巧和神經網路偏差方差分析的方法。

叢神經網路誕生之日起,機器學習專家們就致力於解決模型架構問題、模型訓練提速問題,bias-variance的折中問題,模型收斂問題從而誕生了:

通常構建乙個神經網路程式包含以下過程:

1 初始化(randomhexariver等方式)

2 迴圈:

3 儲存引數

sgd(stochastic gradient descent)

最簡單的 bgd 以整個訓練集的梯度和作為更新方向,缺點是速度慢,乙個 epoch 只能更新一次模型引數。

sgd可以看做是mini-batch的一種特殊情況,當mini-batch size等於1時,mini-batch就退化為stochastic gradient descent。此時每次迭代中,對於資料集中每個樣本都做一次梯度下降。

sgd 以每個樣本的梯度作為更新方向,更新次數更頻繁。但有兩個缺點:

mini-batch(解決第乙個缺點)

mini-batch是將訓練集分組,分組之後,分別對每組求梯度,更新速度加快,batch-size通常為64,128,256,512,而512一般已經算是比較大了。

momentum(解決第乙個缺點)

momentum 演算法則設定了動量(momentum)的概念,可以理解為慣性,使當前梯度小幅影響優化方向,而不是完全決定優化方向。也起到了減小波動的效果。

adagrad(解決第二個缺點)

adagrad記錄了每個引數的歷史梯度平方和(平方是 element-wise 的),並以此表徵每個引數變化的劇烈程度,繼而自適應地為變化劇烈的引數選擇更小的學習率。

但 adagrad 有乙個缺點,即隨著時間的累積每個引數的歷史梯度平方和都會變得巨大,使得所有引數的學習率都急劇縮小。

rmsprop(解決第二個缺點)

rmsprop採用了一種遞推遞減的形式來記錄歷史梯度平方和,可以觀察其表示式:早期的歷史梯度平方和會逐漸失去影響力,係數逐漸衰減。

adam(解決第二個缺點)

簡單來講 adam 演算法就是綜合了 momentum 和 rmsprop 的一種演算法,其既記錄了歷史梯度均值作為動量,又考慮了歷史梯度平方和實現各個引數的學習率自適應調整,解決了 sgd 的上述兩個問題。

l2正則化,drop-out,early-stopping

當測試集或交叉驗證集的效能指標明顯低於訓練集時:

最重要:學習率

第二重要:mini-batch的大小和隱藏層的神經元數量

第三重要:隱藏層數和學習率衰減

第四重要:adam(beta1,beta2,epsilon), momentum(beta)

最好不要用網格搜尋,使用隨機搜尋。

一次只改乙個超引數,不要同時改多個超引數。

第一種情況,當測試集、開發集、訓練集是同分布資料時,此種情況比較簡單:

但是現實生活中通常測試集和訓練集不屬於同分布。

第二種情況,當測試集、開發集是同分布資料,開發訓練集和訓練集是另一分布資料時:

最佳貝葉斯錯誤率 bayes error

2 - 1 較大時解決bias

訓練集錯誤率 training set error

3 - 2較大時解決variance

開發和訓練集錯誤率 development - training set error

4 - 3較大時解決data mismatch

開發集錯誤率 development set error

5 - 4較大時解決degree of overfitting to the development set

測試集錯誤率 test set error

使用更大的神經網路

嘗試變換網路架構

訓練更久

任何一種方式都會在減少訓練集的誤差(減小bias)都會增加測試集(或驗證集)的誤差(增加variance),即偏差方差困境。

獲取更多的訓練資料

使用更簡單的模型

正則化,drop-out(本質就是簡化模型),early-stopping等

嘗試變化網路架構

任何一種方法通常都會在減少測試集(或驗證集)的誤差(較小variance)同時增加訓練集的誤差(增加bias),即偏差方差困境。

1.andrew ng 深度學習

2.3.

神經網路和深度學習 淺層神經網路

乙個淺層神經網路示意圖 如圖所示,表示乙個單隱層的網路結構。這裡主要需要注意的是,層與層之間引數矩陣的規格大小 隱藏層和輸出層之間 由上面我們可以總結出,在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的w引數矩陣大小為 n out,nin b引數矩陣大小為 n ...

神經網路和深度學習 深層神經網路

dnn結構示意圖如圖所示 對於第 l 層神經網路,單個樣本其各個引數的矩陣維度為 w l n l n l 1 b l n l 1 在運算過程中,使用python的 廣播 將b 1 複製為 n l m m為訓練集大小dw l n l n l 1 db l n l 1 z l n l 1 a l z l...

神經網路的訓練

既然我們希望網路的輸出盡可能的接近真正想要 的值。那麼就可以通過比較當前網路的 值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣 比如,如果網路的 值高了,就調整權重讓它 低一些,不斷調整,直到能夠 出目標值 因此就需要先定義 如何比較 值和目標值的差異 這便是損失函式或目標函式...