神經網路優化演算法

2021-09-26 18:40:32 字數 2572 閱讀 2644

1.訓練誤差:在訓練資料上表現的誤差

2.泛化誤差: 在任意測試資料集上的誤差期望

訓練誤差小於等於泛化誤差。由於無法估計泛化誤差,所以一味降低訓練誤差並不意味著泛化誤差會降低。

機器學習模型應該降低泛化誤差。

預留驗證集,判斷驗證集在模型中的表現能力 validation set 

當訓練資料不夠,不能預留很多驗證資料,使用 k 折。

將訓練資料集分成 k個不重合的子集,做 k 次模型訓練和驗證。用乙個驗證,k-1 個訓練  

最後對 k 次訓練誤差和驗證誤差分別求平均

欠擬合: 模型過於簡單,訓練誤差降不下去

過擬合: 模型過於複雜,訓練誤差很小,測試誤差很大

選擇合適的模型複雜度解決過擬合和欠擬合

模型複雜度大,需要的訓練資料大小就更大。訓練樣本少,比模型參數量少,過擬合容易發生。

權重衰減 = l2 範數正則化

倒置丟棄法(inverted dropout):不改變輸入的期望值 

反向傳播時,清零的神經元梯度為 0

原理:所有神經元都可能為 0,因此輸出層的計算無法過度依賴神經元,從而起到正則化的作用,降低過擬合。

測試模型時不使用 dropout

不合理的初始化和啟用函式(sigmoid) 會導致梯度過大或過小,引起消失或**

一層一層訓練 ,用的不多

1.梯度剪下針對梯度**,當梯度大於某個閾值,強制限制在閾值範圍內

2.權重正則化(weithts regularization)比較常見的是l1和l2正則。

具有加速網路收斂速度,提公升訓練穩定性的效果

通過規範化操作將輸出訊號x規範化到均值為0,方差為1保證網路的穩定性。

殘差的方式,能使得深層的網路梯度通過跳級連線路徑直接返回到淺層部分,使得網路無論多深都能將梯度進行有效的回    傳

lstm主要原因在於lstm內部複雜的「門」(gates)。在計算時,將過程中的梯度進行了抵消。

2 調節 batch_size 對訓練效果影響到底如何?

batch_size 太小,模型表現效果極其糟糕(error飆公升)。

隨著 batch_size 增大,處理相同資料量的速度越快。

隨著 batch_size 增大,達到相同精度所需要的 epoch 數量越來越多。

由於上述兩種因素的矛盾, batch_size 增大到某個時候,達到時間上的最優。

由於最終收斂精度會陷入不同的區域性極值,因此 batch_size 增大到某些時候,達到最終收斂精度上的最優。

每次迭代是根據當前位置的梯度更新變數會有一些問題,

x2 方向的梯度比x1 上的大  要解決問題就需要採用更小的學習率,但是學習率小了,就會使得移動緩慢 ,效率低下 

動量梯度法:在動量法中,⾃變數在各個⽅向上的移動幅度不僅取決當前梯度,還取決於過去的各個梯度在各個⽅向上是否⼀致。我們就可以使⽤較⼤的學習率,從而使⾃變數向最優解更快移動。

adagrad演算法,它根據⾃變數在每個維度的梯度值的⼤小來調整各個維度上的學習率,從而避免統⼀的學習率難以適應所有維度的問題。

當學習率在迭代早期降得較快且當前解依然不佳時,adagrad演算法在迭代後期由於學習率過小,可能較難找到⼀個有⽤的解。

超引數0 ≤ β1 < 1(演算法作者建議設為0.9

超引數0 ≤ β2 < 1(演算法作者建議設為0.999

2。前停止訓練:提前停止是指模型在驗證集上取得不錯的效能時停止訓練。這種方式本質和正則化是乙個道理,能減少方差的同時增加的偏差。目的為了平衡訓練集和未知資料之間在模型的表現差異。

4.特徵選擇:過高的特徵維度會使模型過擬合,減少特徵維度和正則一樣可能會處理好方差問題,但是同時會增大偏差。

神經網路優化演算法

神經網路優化演算法,反向傳播演算法 backpropagation 和梯度下降演算法 gradient decent 調整神經網路中引數的取值。梯度下賤演算法主要用於優化單個引數的取值,而反向傳播演算法給出了乙個高效的方式在所有引數上使用梯度下降演算法,從而使神經網路模型在訓練資料上的損失函式盡可能...

深度神經網路 優化演算法

好的優化演算法能夠讓神經網路執行的更快。本篇部落格根據吳恩達老師的講解,對幾種優化演算法進行總結。將訓練集分割為小一點子集,使用梯度下降法進行訓練。該過程叫做mini batch梯度下降。設每個子集中有m個樣本 因為考慮到電腦的記憶體設定和使用方式,一般的mini batch的大小m設定為62 51...

神經網路優化

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data 載入資料集 mnist input data.read data sets mnist data one hot true 每個批次的...