深度學習中過擬合、欠擬合現象以及解決方法

一、過擬合

1.過擬合現象

過擬合(overfitting)是指在模型參數擬合過程中的問題,由於訓練數據包含抽樣誤差,訓練時,複雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。

2.過擬合產生的原因?

(1)在對模型進行訓練時,有可能遇到訓練數據不夠,即訓練數據無法對整個數據的分佈進行估計的時候

(2)權值學習迭代次數足夠多(Overtraining),擬合了訓練數據中的噪聲和訓練樣例中沒有代表性的特徵.

3.過擬合解決方法

  1. 數據增強。
    1.  
  2. 採用正則化。
  3. Dropout。
  4. 提前終止訓練過程。
  5. Batch Nomalization。

二、欠擬合

欠擬合的表現:

訓練了很長時間,但是在訓練集上,loss值仍然很大甚至與初始值沒有太大區別,而且精確度也很低,幾乎接近於0,在測試集上亦如此。

神經網絡的欠擬合大致分爲兩種情況,一種是神經網絡的擬合能力不足,一種是網絡配置的問題。

解決方法:

對於大量的數據樣本,神經網絡無法去擬合全部數據,只能擬合大量樣本的整體特徵,或者少數樣本的具體特徵。此時,需要做的很簡單,只需要增加深度,也就是增加神經網絡的層數就可以了。也可以增加神經網絡的寬度,將每一層的神經單元數量增加,但是同等情況下,效果明顯不如增加層數,而且要想達到較好的效果,需要增加的神經元數遠超過增加一層增加的神經元數。深度深比寬度寬的模型更優這一點,是大家普遍認同的。

那麼如果loss和accurancy仍然如此呢?不論怎麼增加神經網絡的層數,用哪怕只有一條數據去訓練擬合,神經網絡就是“巋然不動”,loss的值“屹立不倒”,那麼這就與神經網絡的擬合能力無關了,就要考慮一下其他的因素了。這也是我遇到的那個問題的根源所在。

尋找最優的權重初始化方案

首先要說的就是權重的初始化方案。神經網絡在訓練之前,我們需要給其賦予一個初值,但是如何選擇這個初始值,這是個問題。神經網絡有大概如下的幾種初始化方案:

  • 全零初始化 Zeros

  • 全1初始化 Ones

  • 初始化爲固定值value Constant

  • 隨機正態分佈初始化 RandomNormal

  • 隨機均勻分佈初始化 RandomUniform

  • 截尾高斯分佈初始化 TruncatedNormal

  • VarianceScaling

  • 用隨機正交矩陣初始化Orthogonal

  • 使用單位矩陣初始化 Identiy

  • LeCun均勻分佈初始化方法 lecun_uniform

  • LeCun正態分佈初始化方法 lecun_normal

  • Glorot正態分佈初始化方法 glorot_normal

  • Glorot均勻分佈初始化 glorot_uniform

  • He正態分佈初始化 he_normal

  • LeCun均勻分佈初始化 he_uniform

使用適當的激活函數

不僅僅是初始化,在神經網絡的激活函數方面的選取,也不是隨意的。比如,卷積神經網絡中,卷積層的輸出,需要使用的激活函數一般爲ReLu,循環神經網絡中的循環層使用的激活函數一般爲tanh,或者ReLu,全連接層一般也是多用ReLu來激活,只有在神經網絡的輸出層,使用全連接層來分類的情況下,纔會使用softmax這種激活函數。而在各種機器學習入門教程裏面最常講到的sigmoid函數,想都不要想它,它已經不適用於深度學習了,哪怕是作爲其改進版的softmax函數,也僅僅是在輸出層才使用。

選擇合適的優化器和學習速率

神經網絡訓練的優化器也是需要考慮的一大因素。神經網絡的優化器其實有很多種,每種都有其不同的特點,我們最耳熟能詳的就是梯度下降法,對應着有批量梯度下降,隨機梯度下降。這種優化方法其實不賴,尤其是在神經網絡即將最終收斂的時候,使用一個合適的學習速率使得其最終下降到儘可能低的點上。但是隨機梯度下降有着明顯的缺點,尤其是跟Momentum、Adagrad、Adadelta等其他優化器對比之後。

使用更加複雜的模型

 

減少正則化的參數

 

 

參考:

1.《深度學習》

2.過擬合:https://blog.csdn.net/chen645096127/article/details/78990928

3.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章