過擬合及常見處理辦法整理(總結)
一、總結
一句話總結:
I、參數過多:減少層數,減少每層節點個數
II、樣本過少:增加樣本(獲取更多樣本,在已有樣本上操作來增加樣本)
III、正則化(regularization):限制權值 Weight-decay:當網絡權值較小時,神經元的激活函數工作在線性區,此時神經元的擬合能力較弱(類似線性神經元)。對於每個神經元而言,其激活函數在不同區間的性能是不同的
IV、dropout:相當於有多個隨機數據模型
1、過擬合現象?
過擬合(over-fitting),機器學習模型或者是深度學習模型在訓練樣本中表現得過於優越,導致在驗證數據集以及測試數據集中表現不佳。出現這種現象的主要原因是訓練數據中存在噪音或者訓練數據太少。
2、過擬合原因?
造成過擬合的原因有可以歸結為:參數過多或樣本過少。
3、為什么增大數據量會解決過擬合問題?
只要給足夠多的數據,讓模型「看見」盡可能多的「例外情況」,它就會不斷修正自己,從而得到更好的結果:
4、數據增強(Data Augmentation)方式?
不行方式:在物體分類問題里,物體在圖像中的位置、姿態、尺度,整體圖片明暗度等都不會影響分類結果。
可以方式:我們就可以通過圖像平移、翻轉、縮放、切割等手段將數據庫成倍擴充;
5、為什么dropout可以解決過擬合問題?
在訓練時,每次隨機(如50%概率)忽略隱層的某些節點;這樣,我們相當於隨機從2^H個模型中采樣選擇模型;同時,由於每個網絡只見過一個訓練數據(每次都是隨機的新網絡),所以類似 bagging 的做法
二、過擬合及常見處理辦法整理
轉自或參考:過擬合及常見處理辦法整理
https://blog.csdn.net/jingbo18/article/details/80609006
訓練網絡時,遇到過擬合問題,查找后,整理成文檔,便於查看。
判斷方法
過擬合(over-fitting),機器學習模型或者是深度學習模型在訓練樣本中表現得過於優越,導致在驗證數據集以及測試數據集中表現不佳。出現這種現象的主要原因是訓練數據中存在噪音或者訓練數據太少。
過擬合問題,根本的原因則是特征維度(或參數)過多,導致擬合的函數完美的經過訓練集,但是對新數據的預測結果則較差。
常見原因
1)建模樣本選取有誤,如樣本數量太少,選樣方法錯誤,樣本標簽錯誤等,導致選取的樣本數據不足以代表預定的分類規則;
2)樣本噪音干擾過大,使得機器將部分噪音認為是特征從而擾亂了預設的分類規則;
3)假設的模型無法合理存在,或者說是假設成立的條件實際並不成立;
4)參數太多,模型復雜度過高;
5)對於決策樹模型,如果我們對於其生長沒有合理的限制,其自由生長有可能使節點只包含單純的事件數據(event)或非事件數據(no event),使其雖然可以完美匹配(擬合)訓練數據,但是無法適應其他數據集。
6)對於神經網絡模型:
a)對樣本數據可能存在分類決策面不唯一,隨着學習的進行,,BP算法使權值可能收斂過於復雜的決策面;
b)權值學習迭代次數足夠多(Overtraining),擬合了訓練數據中的噪聲和訓練樣例中沒有代表性的特征。
解決方法
1)在神經網絡模型中,可使用權值衰減的方法,即每次迭代過程中以某個小因子降低每個權值。
2)選取合適的停止訓練標准,使對機器的訓練在合適的程度;
3)保留驗證數據集,對訓練成果進行驗證;
4)獲取額外數據進行交叉驗證;
5)正則化,即在進行目標函數或代價函數優化時,在目標函數或代價函數。
以下摘抄自csdn-Fitz博客:
造成過擬合的原因有可以歸結為:參數過多或樣本過少。那么我們需要做的事情就是減少參數,提供兩種辦法:
1、回想下我們的模型,假如我們采用梯度下降算法將模型中的損失函數不斷減少,那么最終我們會在一定范圍內求出最優解,最后損失函數不斷趨近0。那么我們可以在所定義的損失函數后面加入一項永不為0的部分,那么最后經過不斷優化損失函數還是會存在。其實這就是所謂的“正則化”。
一個通俗的理解便是:更小的參數值w意味着模型的復雜度更低,對訓練數據的擬合剛剛好(奧卡姆剃刀)。
下面這張圖片就是加入了正則化(regulation)之后的損失函數。這里m是樣本數目,表示的是正則化系數。
當過大時,則會導致后面部分權重比加大,那么最終損失函數過大,從而導致欠擬合。
當過小時,甚至為0,導致過擬合。
2、對於神經網絡,參數膨脹原因可能是因為隨着網路深度的增加,同時參數也不斷增加,並且增加速度、規模都很大。那么可以采取減少神經網絡規模(深度)的方法。也可以用一種叫dropout的方法。dropout的思想是當一組參數經過某一層神經元的時候,去掉這一層上的一部分神經元,讓參數只經過一部分神經元進行計算。注意這里的去掉並不是真正意義上的去除,只是讓參數不經過一部分神經元計算而已。
以下摘抄自知乎-flyqq:
https://www.zhihu.com/question/59201590
過擬合(overfitting)是指在模型參數擬合過程中的問題,由於訓練數據包含抽樣誤差,訓練時,復雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。
具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。
為什么要解決過擬合現象?這是因為我們擬合的模型一般是用來預測未知的結果(不在訓練集內),過擬合雖然在訓練集上效果好,但是在實際使用時(測試集)效果差。同時,在很多問題上,我們無法窮盡所有狀態,不可能將所有情況都包含在訓練集上。所以,必須要解決過擬合問題。
為什么在機器學習中比較常見?這是因為機器學習算法為了滿足盡可能復雜的任務,其模型的擬合能力一般遠遠高於問題復雜度,也就是說,機器學習算法有「擬合出正確規則的前提下,進一步擬合噪聲」的能力。
而傳統的函數擬合問題(如機器人系統辨識),一般都是通過經驗、物理、數學等推導出一個含參模型,模型復雜度確定了,只需要調整個別參數即可。模型「無多余能力」擬合噪聲。
既然過擬合這么討厭,我們應該怎么防止過擬合呢?最近深度學習比較火,我就以神經網絡為例吧:
1、獲取更多數據
這是解決過擬合最有效的方法,只要給足夠多的數據,讓模型「看見」盡可能多的「例外情況」,它就會不斷修正自己,從而得到更好的結果:
如何獲取更多數據,可以有以下幾個方法:
1)從數據源頭獲取更多數據:這個是容易想到的,例如物體分類,我就再多拍幾張照片好了;但是,在很多情況下,大幅增加數據本身就不容易;另外,我們不清楚獲取多少數據才算夠;
根據當前數據集估計數據分布參數,使用該分布產生更多數據:這個一般不用,因為估計分布參數的過程也會代入抽樣誤差。
2)數據增強(Data Augmentation):通過一定規則擴充數據。如在物體分類問題里,物體在圖像中的位置、姿態、尺度,整體圖片明暗度等都不會影響分類結果。我們就可以通過圖像平移、翻轉、縮放、切割等手段將數據庫成倍擴充;
2、使用合適的模型
前面說了,過擬合主要是有兩個原因造成的:數據太少+模型太復雜。所以,我們可以通過使用合適復雜度的模型來防止過擬合問題,讓其足夠擬合真正的規則,同時又不至於擬合太多抽樣誤差。
對於神經網絡而言,我們可以從以下四個方面來限制網絡能力:
2.1、網絡結構 Architecture
這個很好理解,減少網絡的層數、神經元個數等均可以限制網絡的擬合能力;
2.2、訓練時間 Early stopping
對於每個神經元而言,其激活函數在不同區間的性能是不同的:
當網絡權值較小時,神經元的激活函數工作在線性區,此時神經元的擬合能力較弱(類似線性神經元)。
有了上述共識之后,我們就可以解釋為什么限制訓練時間(early stopping)有用:因為我們在初始化網絡的時候一般都是初始為較小的權值。訓練時間越長,部分網絡權值可能越大。如果我們在合適時間停止訓練,就可以將網絡的能力限制在一定范圍內。
2.3、限制權值 Weight-decay,也叫正則化(regularization)
原理同上,但是這類方法直接將權值的大小加入到 Cost 里,在訓練的時候限制權值變大。以 L2 regularization為例:
訓練過程需要降低整體的Cost,這時候,一方面能降低實際輸出與樣本之間的誤差 ,也能降低權值大小。
2.4、增加噪聲 Noise
給網絡加噪聲也有很多方法:
2.4.1、在輸入中加噪聲:
噪聲會隨着網絡傳播,按照權值的平方放大,並傳播到輸出層,對誤差 Cost 產生影響。推導直接看 Hinton 的 PPT 吧:
在輸入中加高斯噪聲,會在輸出中生成 的干擾項。訓練時,減小誤差,同時也會對噪聲產生的干擾項進行懲罰,達到減小權值的平方的目的,達到與 L2 regularization 類似的效果(對比公式)。
2.4.2、在權值上加噪聲
在初始化網絡的時候,用0均值的高斯分布作為初始化。Alex Graves 的手寫識別 RNN 就是用了這個方法
Graves,Alex, et al. "A novel connectionist system for unconstrained handwritingrecognition." IEEE transactions on pattern analysis and machineintelligence 31.5 (2009): 855-868.
- Itmay work better, especially in recurrent networks (Hinton)
2.4.3、對網絡的響應加噪聲
如在前向傳播過程中,讓默寫神經元的輸出變為 binary 或 random。顯然,這種有點亂來的做法會打亂網絡的訓練過程,讓訓練更慢,但據 Hinton 說,在測試集上效果會有顯著提升 (But it doessignificantly better on the test set!)。
3、結合多種模型
簡而言之,訓練多個模型,以每個模型的平均輸出作為結果。
從 N 個模型里隨機選擇一個作為輸出的期望誤差,會比所有模型的平均輸出的誤差 大(我不知道公式里的圓括號為什么顯示不了):
大概基於這個原理,就可以有很多方法了:
3.1、Bagging
簡單理解,就是分段函數的概念:用不同的模型擬合不同部分的訓練集。以隨機森林(Rand Forests)為例,就是訓練了一堆互不關聯的決策樹。但由於訓練神經網絡本身就需要耗費較多自由,所以一般不單獨使用神經網絡做Bagging。
3.2、Boosting
既然訓練復雜神經網絡比較慢,那我們就可以只使用簡單的神經網絡(層數、神經元數限制等)。通過訓練一系列簡單的神經網絡,加權平均其輸出。
3.3、Dropout
這是一個很高效的方法。
在訓練時,每次隨機(如50%概率)忽略隱層的某些節點;這樣,我們相當於隨機從2^H個模型中采樣選擇模型;同時,由於每個網絡只見過一個訓練數據(每次都是隨機的新網絡),所以類似 bagging 的做法,這就是我為什么將它分類到「結合多種模型」中;
此外,而不同模型之間權值共享(共同使用這 H 個神經元的連接權值),相當於一種權值正則方法,實際效果比 L2regularization 更好。
4、貝葉斯方法
這部分我還沒有想好怎么才能講得清楚,為了不誤導初學者,我就先空着,以后如果想清楚了再更新。當然,這也是防止過擬合的一類重要方法。
知乎-李俊毅:
防止overfitting三個角度:
1)數據:augmentation;
2)網絡:簡單化網絡;
3)plus:正則,dropout等網絡模型的變種。