前言:
這幾天忙着秋招,也沒時間總結自己最近學習的知識點,由於自己應聘的是算法崗位,所以就把最近面試時遇到的問題和大家一起分享一下,有什么不對的還需各位讀者指出來。最后希望自己和我的那個她能夠找到一份滿意的工作。
解決過擬合的問題
1.什么是過擬合?
一般提及到過擬合就是說在訓練集上模型表現很好,但是在測試集上效果很差,即模型的泛化能力不行。過擬合是模型訓練過程中參數擬合的問題,由於訓練數據本身有采樣誤差,擬合模型參數時這些采樣誤差都擬合進去就會帶來所謂的過擬合問題。
傳統的函數擬合問題,一般是通過物理、數學等推導出的一個含參數的模型(數學建模),模型復雜度是確定的,沒有多余的能力擬合噪聲。而機器學習算法的復雜度更高,一般都遠高於具體問題的復雜度。也就說數據量不足有支撐龐大的模型(也可以說是參數)。
怎么樣解決過擬合?
1.獲取更多的數據
一方面可以獲取更多的源數據,另一方面也可以在現有數據的基礎上進行數據增強(圖像平移,旋轉等)
2.使用合適的模型
這主要是解決數據量與模型參數之間的矛盾,即固定數據量只能支撐對應的參數量的模型的擬合(通俗的說,幾十個幾百個數據就不要使用深度網絡了)。該方法主要可以從四個方面入手:
a.簡化網絡結構,如層數,單層神經元個數
b. early stopping,每個神經元激活函數在不同數值區間的性能是不同的,值較小時為線性區,適當增大后為非線性區,過度增大則為飽合區(梯度消失)。初始化時,神經元一般工作在線性區(擬合能力有限),訓練時間增大時,部分值會增大進入非線性區(擬合能力提高),但是訓練時間過大時,就會進入飽合區,神經元就“死掉”。所以應該在適當時間內就stopping訓練。
c.限制權值,正則化
d.增加噪聲:在輸入中增加噪聲(效果類似正則化);在權值中加入噪聲(非零初始化);
3.集成多種模型
a. bagging,類似於分段函數的概念,不同部分的訓練集使用不同模型擬合;
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.
