1. 程式人生 > >欠擬合、過擬合、梯度爆炸、梯度消失等問題的原因與大概解決方法

欠擬合、過擬合、梯度爆炸、梯度消失等問題的原因與大概解決方法

  • 1、欠擬合:是一種不能很好擬合數據的的現象。

  導致結果:其會導致網路的訓練的準確度不高,不能很好的非線性擬合數據,進行分類。

   造成原因:這種現象很可能是網路層數不夠多,不夠深,導致其非線性不夠好。從而對於少量樣本能進行很好的擬合,而較多樣本無法很好的擬合。其實,現在的深度比較少出現欠擬合現象。

解決方法:加深網路。

  • 過擬合:是一種過度擬合訓練樣本,導致網路自身缺失了“泛化能力”,無法對訓練樣本之外的樣本進行準確分類。

造成原因:可能是網路訓練的時候進入到了網路極小值點。在其無法跳出極小值點時,則其就會出現過擬合。這個現象一般是網路層數深的時候比較常見。

解決方法:a、使用深度網路的加深,其網路引數也不斷增加,增加速度大,可以使用dropout來進行抑制一些神經元,防止過擬合。

b、回想下我們的模型,假如我們採用梯度下降演算法將模型中的損失函式不斷減少,那麼最終我們會在一定範圍內求出最優解,最後損失函式不斷趨近0。那麼我們可以在所定義的損失函式後面加入一項永不為0的部分,那麼最後經過不斷優化損失函式還是會存在。其實這就是所謂的“正則化”。

下面這張圖片就是加入了正則化(regulation)之後的損失函式。這裡m是樣本數目,landa(後面我用“t”表示,實在是打不出)表示的是正則化係數。

注意:當t(landa)過大時,則會導致後面部分權重比加大,那麼最終損失函式過大,從而導致欠擬合

   當t(landa)過小時,甚至為0,導致過擬合。

c、增加訓練樣本可以很好的防止過擬合。

  • 梯度消失:是一種隨著網路的訓練,導致反向傳播的損失loss變得越來越小,最後小到為0,這就會導致網路輸入層前面的神經元學習不到任何特徵,由於其每次訓練變化的梯度都是0.其引數不會改變。這就使其失去了意義。

造成原因:這個主要是因為以前的網路使用的了sigmoid作為啟用函式,其對於淺層的網路是適合的,但是對於深層的網路就容易導致梯度消失。具體可以參考: 深度神經網路為何很難訓練,其是使用了Nielsen在《Neural Networks and Deep Learning》中通過實驗說明了這種現象是普遍存在的。

解決方法:

a、2006年Hinton提出的逐層預訓練方法,為了解決深層神經網路的訓練問題,一種有效的手段是採取無監督逐層訓練(unsupervised layer-wise training),其基本思想是每次訓練一層隱節點,訓練時將上一層隱節點的輸出作為輸入,而本層隱節點的輸出作為下一層隱節點的輸入,這被稱之為“預訓練”(pre-training);在預訓練完成後,再對整個網路進行“微調”(fine-tunning)訓練。

b、使用其他啟用函式替代sigmoid函式。