淺談過擬合問題與梯度爆炸問題

算法常見面試問題總結

前言:

這幾天忙着秋招,也沒時間總結本身最近學習的知識點,因爲本身應聘的是算法崗位,因此就把最近面試時遇到的問題和你們一塊兒分享一下,有什麼不對的還需各位讀者指出來。最後但願本身和個人那個她可以找到一份滿意的工做。面試

解決過擬合的問題

1.什麼是過擬合?

通常說起到過擬合就是說在訓練集上模型表現很好,可是在測試集上效果不好,即模型的泛化能力不行。過擬合是模型訓練過程當中參數擬合的問題,因爲訓練數據自己有采樣偏差,擬合模型參數時這些採樣偏差都擬合進去就會帶來所謂的過擬合問題。算法

2.機器學習中爲何會容易出現過擬合?

傳統的函數擬合問題,通常是經過物理、數學等推導出的一個含參數的模型(數學建模),模型複雜度是肯定的,沒有多餘的能力擬合噪聲。而機器學習算法的複雜度更高,通常都遠高於具體問題的複雜度。也就說數據量不足有支撐龐大的模型(也能夠說是參數)。網絡

怎麼樣解決過擬合?

1.獲取更多的數據

一方面能夠獲取更多的源數據,另外一方面也能夠在現有數據的基礎上進行數據加強(圖像平移,旋轉等)機器學習

2.使用合適的模型

這主要是解決數據量與模型參數之間的矛盾,即固定數據量只能支撐對應的參數量的模型的擬合(通俗的說,幾十個幾百個數據就不要使用深度網絡了)。該方法主要能夠從四個方面入手:ide

a.簡化網絡結構,如層數,單層神經元個數函數

b. early stopping,每一個神經元激活函數在不一樣數值區間的性能是不一樣的,值較小時爲線性區,適當增大後爲非線性區,過分增大則爲飽合區(梯度消失)。初始化時,神經元通常工做在線性區(擬合能力有限),訓練時間增大時,部分值會增大進入非線性區(擬合能力提升),可是訓練時間過大時,就會進入飽合區,神經元就「死掉」。因此應該在適當時間內就stopping訓練。性能

c.限制權值,正則化學習

d.增長噪聲:在輸入中增長噪聲(效果相似正則化);在權值中加入噪聲(非零初始化);測試

3.集成多種模型

a. bagging,相似於分段函數的概念,不一樣部分的訓練集使用不一樣模型擬合;spa

b. boosting,綜合多個簡單的模型的結果獲得一個‘靠譜的結果。

c. dropout,實際效果實際上是用不一樣的訓練集訓練了不一樣的網絡模型,而後這些網絡模型造成了一個總體的模型。

梯度爆炸的相關問題

梯度爆炸:指神經網絡訓練過程當中大的偏差梯度不斷累積,致使模型權重出現重大更新。會形成模型不穩定,沒法利用訓練數據學習。

什麼是梯度爆炸?

偏差梯度是神經網絡訓練過程當中計算的方向和數量,用於以正確的方向和合適的量更新網絡權重。 在深層網絡或循環神經網絡中,偏差梯度可在更新中累積,變成很是大的梯度,而後致使網絡權重的大幅更新,並所以使網絡變得不穩定。在極端狀況下,權重的值變得很是大,以致於溢出,致使 NaN 值。 網絡層之間的梯度(值大於 1.0)重複相乘致使的指數級增加會產生梯度爆炸。

梯度爆炸引起的問題

在深度多層感知機網絡中,梯度爆炸會引發網絡不穩定,最好的結果是沒法從訓練數據中學習,而最壞的結果是出現沒法再更新的 NaN 權重值。

如何修復梯度爆炸問題?

1.從新設計網絡模型

在深度神經網絡中,梯度爆炸能夠經過從新設計層數更少的網絡來解決。 使用更小的批尺寸對網絡訓練也有好處。 在循環神經網絡中,訓練過程當中在更少的先前時間步上進行更新(沿時間的截斷反向傳播,truncated Backpropagation through time)能夠緩解梯度爆炸問題。

2. 使用 ReLU 激活函數

在深度多層感知機神經網絡中,梯度爆炸的發生多是由於激活函數,如以前很流行的 Sigmoid 和 Tanh 函數。 使用 ReLU 激活函數能夠減小梯度爆炸。採用 ReLU 激活函數是最適合隱藏層的新實踐。

3. 使用長短時間記憶網絡

在循環神經網絡中,梯度爆炸的發生多是由於某種網絡的訓練自己就存在不穩定性,如隨時間的反向傳播本質上將循環網絡轉換成深度多層感知機神經網絡。 使用長短時間記憶(LSTM)單元和相關的門類型神經元結構能夠減小梯度爆炸問題。 採用 LSTM 單元是適合循環神經網絡的序列預測的最新最好實踐。

4. 使用梯度截斷(Gradient Clipping)

在很是深且批尺寸較大的多層感知機網絡和輸入序列較長的 LSTM 中,仍然有可能出現梯度爆炸。 若是梯度爆炸仍然出現,你能夠在訓練過程當中檢查和限制梯度的大小。這就是梯度截斷。

5. 使用權重正則化(Weight Regularization)

若是梯度爆炸仍然存在,能夠嘗試另外一種方法,即檢查網絡權重的大小,並懲罰產生較大權重值的損失函數。該過程被稱爲權重正則化,一般使用的是 L1 懲罰項(權重絕對值)或 L2 懲罰項(權重平方)。

L1與L2的區別:

機器學習中幾乎均可以看到損失函數後面會添加一個額外項,經常使用的額外項通常有兩種,中文稱做 L1正則化 和 L2正則化,或者 L1範數 和 L2範數。L1正則化和L2正則化能夠看作是損失函數的懲罰項。所謂『懲罰』是指對損失函數中的某些參數作一些限制。對於線性迴歸模型,使用L1正則化的模型建叫作Lasso迴歸,使用L2正則化的模型叫作Ridge迴歸(嶺迴歸)。

通常回歸分析中迴歸www表示特徵的係數,從上式能夠看到正則化項是對係數作了處理(限制)。L1正則化和L2正則化的說明以下:

  • L1正則化是指權值向量www中各個元素的絕對值之和

  • L2正則化是指權值向量www中各個元素的平方和而後再求平方根(能夠看到Ridge迴歸的L2正則化項有平方符號)

那添加L1和L2正則化有什麼用?下面是L1正則化和L2正則化的做用,這些表述能夠在不少文章中找到。

  • L1正則化能夠產生稀疏權值矩陣,即產生一個稀疏模型,能夠用於特徵選擇

  • L2正則化能夠防止模型過擬合(overfitting);必定程度上,L1也能夠防止過擬合

 

 

 

參考連接:

1.https://blog.csdn.net/dulingtingzi/article/details/80254038

2.http://baijiahao.baidu.com/s?id=1587462776558160221&wfr=spider&for=pc

3.http://www.javashuo.com/article/p-cskvckwl-kn.html

相關文章
相關標籤/搜索