❶ 過擬合及解決方案
是什麼
過擬合(overfitting)是指在模型參數擬合過程中的問題,由於訓練數據包含 抽樣誤差 ,訓練時,復雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。
具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。
為什麼
為什麼要解決過擬合現象?這是因為我們擬合的模型一般是用來預測未知的結果(不在訓練集內),過擬合雖然在訓練集上效果好,但是在實際使用時(測試集)效果差。同時,在很多問題上,我們無法窮盡所有狀態,不可能將所有情況都包含在訓練集上。所以,必須要解決過擬合問題。
為什麼在機器學習中比較常見?這是因為機器學習演算法為了滿足盡可能復雜的任務,其模型的擬合能力一般遠遠高於問題復雜度,也就是說,機器學習演算法有「擬合出正確規則的前提下,進一步擬合雜訊」的能力。
而傳統的函數擬合問題(如機器人系統辨識),一般都是通過經驗、物理、數學等推導出一個含參模型,模型復雜度確定了,只需要調整個別參數即可。模型「無多餘能力」擬合雜訊。
怎麼樣
如何防止過擬合:
主要是以下4點
1. 獲取更多數據
這是解決過擬合最有效的方法,只要給足夠多的數據,讓模型「看見」盡可能多的「例外情況」,它就會不斷修正自己,從而得到更好的結果:
如何獲取更多數據,可以有以下幾個方法:
2. 使用合適的模型
前面說了,過擬合主要是有兩個原因造成的:數據太少 + 模型太復雜。所以,我們可以通過使用合適復雜度的模型來防止過擬合問題,讓其足夠擬合真正的規則,同時又不至於擬合太多抽樣誤差。
(PS:如果能通過物理、數學建模,確定模型復雜度,這是最好的方法,這也就是為什麼深度學習這么火的現在,我還堅持說初學者要學掌握傳統的建模方法。)
對於神經網路而言,我們可以從以下四個方面來 限制網路能力 :
2.1 網路結構 Architecture
這個很好理解,減少網路的層數、神經元個數等均可以限制網路的擬合能力;
2.2 訓練時間 Early stopping
對於每個神經元而言,其激活函數在不同區間的性能是不同的:
當網路權值較小時,神經元的激活函數工作在線性區,此時神經元的擬合能力較弱(類似線性神經元)。
有了上述共識之後,我們就可以解釋為什麼限制訓練時間(early stopping)有用:因為我們在初始化網路的時候一般都是初始為較小的權值。訓練時間越長,部分網路權值可能越大。如果我們在合適時間停止訓練,就可以將網路的能力限制在一定范圍內。
2.3 限制權值 Weight-decay,也叫正則化(regularization)
原理同上,但是這類方法直接將權值的大小加入到 Cost 里,在訓練的時候限制權值變大。以 L2 regularization 為例:
訓練過程需要降低整體的 Cost,這時候,一方面能降低實際輸出與樣本之間的誤差C 0 ,也能降低權值大小。
2.4 增加雜訊 Noise
給網路加雜訊也有很多方法:
2.4.1 在輸入中加雜訊:
雜訊會隨著網路傳播,按照權值的平方放大,並傳播到輸出層,對誤差 Cost 產生影響。推導直接看 Hinton 的 PPT 吧:
在輸入中加高斯雜訊,會在輸出中生成 Sigma_isigma^2_icdot w^2_i 的干擾項。訓練時,減小誤差,同時也會對雜訊產生的干擾項進行懲罰,達到減小權值的平方的目的,達到與 L2 regularization 類似的效果(對比公式)。
2.4.2 在權值上加雜訊
在初始化網路的時候,用 0 均值的高斯分布作為初始化。Alex Graves 的手寫識別 RNN 就是用了這個方法
2.4.3 對網路的響應加雜訊
如在前向傳播過程中,讓默寫神經元的輸出變為 binary 或 random。顯然,這種有點亂來的做法會打亂網路的訓練過程,讓訓練更慢,但據 Hinton 說,在測試集上效果會有顯著提升 (But it does significantly better on the test set!)。
3. 結合多種模型
簡而言之,訓練多個模型,以每個模型的平均輸出作為結果。
從 N 個模型里隨機選擇一個作為輸出的期望誤差 <[t-y_i]^2> ,會比所有模型的平均輸出的誤差 <[t-ar{y}]^2> 大 (我不知道公式里的圓括弧為什麼顯示不了) :
大概基於這個原理,就可以有很多方法了:
3.1 Bagging
簡單理解,就是分段函數的概念:用不同的模型擬合不同部分的訓練集。以隨機森林(Rand Forests)為例,就是訓練了一堆互不關聯的決策樹。但由於訓練神經網路本身就需要耗費較多自由,所以一般不單獨使用神經網路做 Bagging。
3.2 Boosting
既然訓練復雜神經網路比較慢,那我們就可以只使用簡單的神經網路(層數、神經元數限制等)。通過訓練一系列簡單的神經網路,加權平均其輸出。
3.3 Dropout
這是一個很高效的方法。
在訓練時, 每次 隨機(如 50% 概率)忽略隱層的某些節點;這樣,我們相當於隨機從 2^H 個模型中采樣選擇模型;同時,由於每個網路只見過一個訓練數據(每次都是隨機的新網路),所以類似 bagging 的做法,這就是我為什麼將它分類到「結合多種模型」中;
此外,而不同模型之間權值共享(共同使用這 H 個神經元的連接權值),相當於一種權值正則方法,實際效果比 L2 regularization 更好。
4. 貝葉斯方法
這部分我還沒有想好怎麼才能講得清楚,為了不誤導初學者,我就先空著,以後如果想清楚了再更新。當然,這也是防止過擬合的一類重要方法。
❷ 如何防止神經網路過擬合,用什麼方法可以防止
1、正則化
2、early stopping
3、貝葉斯優化
你用的庫里一定會有這些東西。
但這個問題不可能從根本上解決。
❸ 過擬合解決辦法之一:權重衰減
用於對付過擬合問題
權重衰減等價於 L2 范數正則化(regularization)
我們知道線性回歸損失函數例如:
將權重參數用向量 w=[w1,w2] 表示,帶有 L2 范數懲罰項的新損失函數為:
其中超參數 λ>0 。當權重參數均為0時,懲罰項最小。當 λ 較大時,懲罰項在損失函數中的比重較大,這通常會使學到的權重參數的元素較接近0。當 λ 設為0時,懲罰項完全不起作用。
上式中 L2 范數平方 展開後得到 。有了 L2 范數懲罰項後,在小批量隨機梯度下降中,權重 w1 和 w2 的迭代方式更改為:
我們以高維線性回歸為例來引入一個過擬合問題,並使用權重衰減來應對過擬合。設數據樣本特徵的維度為p。對於訓練數據集和測試數據集中特徵為x1,x2,…,xp的任一樣本,我們使用如下的線性函數來生成該樣本的標簽:
其中雜訊項 ϵ 服從均值為0、標准差為0.01的正態分布。為了較容易地觀察過擬合,我們考慮高維線性回歸問題,如設維度 p=200 ;同時,我們特意把訓練數據集的樣本數設低,如20。
數據導入
可以看到,過擬合中幾個周期後,訓練誤差急速下降,導致訓練誤差比測試誤差小很多
可以看到,使用權重衰減之後,訓練誤差
❹ 機器學習中用來防止過擬合的方法有哪些
比如用Ensemble類的,例如adaboost那樣,不訓練單個分類而是平均多個弱分類。
類似的方法對深度神經網路而言有Random Dropout,訓練的過程中每次都隨機遮蔽一些神經元(比如用Binomial隨機出1或者0 ,概率為p),保證實際測試的時候,網路的輸出類似於訓練時隨機遮蔽過後的不同的神經網路的平均。就結果而言也可以緩解過擬合。
還有提早終止訓練的。
不過更普遍的方法一般都是歸一化,用L2或者L1來壓制模型本身的復雜度。參考「Structural Risk Minimization」。
❺ 如何解決過擬合問題具體怎麼做
這是一個model selection的問題,一般可採用的方法有兩種:cross-validation和regularization。當然也可以以bayes的角度來看,增加先驗,這種方法一定程度上可以解釋regularization,以及解超參數問題。
❻ 機器學習中用來防止過擬合的方法有哪些
防止過擬合的方法:
1,從模型&數據角度。
獲取更多數據,你的模型可以存儲很多很多的信息,這意味著你輸入模型的訓練數據越多,模型就越不可能發生過擬合。原因是隨著你添加更多數據,模型會無法過擬合所有的數據樣本,被迫產生泛化以取得進步。
收集更多的數據樣本應該是所有數據科學任務的第一步,數據越多會讓模型的准確率更高,這樣也就能降低發生過擬合的概率。
2,數據增強&雜訊數據。
收集更多的數據會比較耗時耗力。如果沒有時間和精力做這個,應該嘗試讓你的數據看起來更多元化一些。利用數據增強的方法可以做到這一點,這樣模型每次處理樣本的時候,都會以不同於前一次的角度看待樣本。這就提高了模型從每個樣本中學習參數的難度。
3,簡化模型
即時你現在手中獲取了所有需要的數據,如果你的模型仍然過擬合訓練數據集,可能是因為模型過於強大。那麼你可以試著降低模型的復雜程度。
4,從訓練過程角度。
大部分情況下,模型會首先學習數據的正確分布,然後在某個時間點上開始對數據過擬合。通過識別模型是從哪些地方開始發生轉變的,那麼就可以在過擬合出現之前停止模型的學習過程。和前面一樣,通過查看隨著時間推移的訓練錯誤,就可以做到這一點。
5,從正則化角度。
正則化是指約束模型的學習以減少過擬合的過程。它可以有多種形式,下面我們看看部分形式。L1和L2正則化 正則化的一個最強大最知名的特性就是能向損失函數增加「懲罰項」(penalty)。
所謂『懲罰』是指對損失函數中的某些參數做一些限制。最常見的懲罰項是L1和L2:L1懲罰項的目的是將權重的絕對值最小化,L2懲罰項的目的是將權重的平方值最小化。
❼ 怎麼解決cnn matlab小樣本過擬合的問題
抑制過擬合的方法通常包括:
(1)減少演算法迭代輪數。
(2)增加L1正則和L2正則。
(3)增加訓練樣本數目。
(4)減少模型的參數個數。
❽ 機器學習 matlab 過擬合 怎麼辦
抑制過擬合的方法通常包括:
(1)減少演算法迭代輪數
(2)增加L1正則和L2正則
(3)增加訓練樣本數目
(4)減少模型的參數個數
❾ 過擬合怎麼辦
解決方法
1)在神經網路模型中,可使用權值衰減的方法,即每次迭代過程中以某個小因子降低每個權值。
2)選取合適的停止訓練標准,使對機器的訓練在合適的程度;
3)保留驗證數據集,對訓練成果進行驗證;
4)獲取額外數據進行交叉驗證;
5)正則化,即在進行目標函數或代價函數優化時,在目標函數或代價函數。
————————————————
版權聲明:本文為CSDN博主「「已注銷」」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jingbo18/article/details/80609006
❿ 什麼是「過擬合」,如何判斷,常見的原因是什麼
從標準定義來說,過擬合是指,給定一個假設空間H,一個假設h屬於H,如果存在其他的假設h』屬於H,使得在訓練樣例上h的錯誤率比h』小,但在整個實例分布上h』比h的錯誤率小,那麼就說假設h過度擬合訓練數據。判斷方法是,模型在驗證集合上和訓練集合上表現都很好,而在測試集合上變現很差。
常見原因主要是學習過度和樣本特徵不均衡,如果細分,還可以包括(並未能列舉全部原因)。
1、建模樣本選取有誤,樣本標簽錯誤等,導致選取的樣本數據不足以代表預定的分類規則。
2、樣本噪音干擾過大,使得機器將學習了噪音,還認為是特徵,從而擾亂了預設的分類規則。
3、假設的模型無法合理存在,或者說是假設成立的條件實際並不成立。
4、參數太多,模型復雜度過高。
5、對於tree-based模型,如果我們對於其深度與split沒有合理的限制,有可能使節點只包含單純的事件數據(event)或非事件數據(no event),使其雖然可以完美匹配(擬合)訓練數據,但是無法適應其他數據集。
6、對於神經網路模型,權值學習迭代次數太多(Overtraining),BP演算法使權值可能收斂過於復雜的決策面。
解決方法,模型上,神經網路加dropout,batch normalization,基於樹的模型限制深度,加入正則化項等,設置提前終止條件。數據上,增加數據集,對數據集進行增強處理(augmentation)。