如何降低過擬合?這是深度學習中非常重要的問題。關於過擬合的相關概念和過擬合帶來的危害,可參考筆者之前的部落格:過擬合與欠擬合簡要總結。
如何解決過擬合?
1. 獲取和使用更多的資料集
對於解決過擬合的辦法就是給與足夠多的資料集,讓模型在更可能多的資料上進行「觀察」和擬合,從而不斷修正自己。然而事實上,收集無限多的資料集幾乎是不可能的,因此乙個常用的辦法就是調整已有的資料,新增大量的「噪音」,或者對影象進行銳化、旋轉、明暗度調整等優化。
另外補充一句,cnn在影象識別的過程中有強大的「不變性」規則,即待辨識的物體在影象中的形狀、姿勢、位置、明暗度都不會影響分類結果。
2. 採用合適的模型
目前來說,針對不同的情況和分類要求,對使用的模型也是千差萬別。過於複雜的模型會帶來過擬合問題。
對於模型的設計,目前公認的乙個深度學習規律「deeper is better」。國內外各種大牛通過實驗和競賽發現,對於cnn來說,層數越多效果越好,但是也更容易產生過擬合,並且計算所耗費的時間也越長。因此對於模型的設計需要合理參考各種模型的取捨。
3. 使用 dropout
dropout 是乙個非常有用和常用的方法。dropout 指的是在訓練過程中每次按一定的機率關閉或忽略某些層的節點。使得模型在使用同樣的資料進行訓練時相當於從不同的模型中隨機選擇乙個進行訓練。
至於 dropout 起作用的原因,可以簡單理解成在訓練過程中會產生不同的訓練模型,不同的訓練模型也會產生不同的的計算結果,隨著訓練的不斷進行,計算結果會在乙個範圍內波動,但是均值卻不會有很大變化,因此可以把最終的訓練結果看作是不同模型的平均輸出。
4. 正則化
5. early stopping
early stopping 是引數微調中的一種,即在每個迴圈結束一次以後(這裡的迴圈可能是 full data batch,也可能是 mini batch size),計算模型的準確率(accuracy)。當準確率不再增加時就停止訓練。
這是一種非常簡單和自然的辦法,準確率不再增加時就停止訓練,防止模型對已有的資料繼續訓練。但是問題在於,準確率在每個迴圈之後的計算是變化的,沒有任何人和任何模型能保證準確率不會變化,可能某次迴圈結束後,準確率很高,但是下一輪結束後準確率又降得很低。
這裡筆者建議的乙個辦法是人為地設定乙個範圍。當連續10次準確率在此範圍內波動時就停止迴圈。
6. 可變化的學習率
可變化的學習率也是根據模型計算出的準確率進行調整。乙個簡單的方法是在人為設定的準確率範圍內,達到10次範圍內的波動後,依次將學習率減半,直到最終的學習率降為原始的 1/1024 時停止模型的訓練。
7. 使用 batch_normalization
還有乙個資料處理的方法 batch_normalization,即資料在經過卷積層之後,真正進入啟用函式之前需要對其進行一次 batch_normalization,分批對輸入的資料求取均值和方差之後重新對資料進行歸一化計算。
這樣做的好處就是對資料進行一定程度的預處理,使得無論是訓練集還是測試集都在一定範圍內進行分布和波動,對資料點中包含的誤差進行掩蓋化處理,從而增大模型的泛化能力。
除此之外還有哪些常用的消除過擬合的方法?
除了上述提到的方法,還有常用的是交叉驗證、pca特徵提取、增加各種噪音等。這樣實際上還是屬於增加了資料集,增加資料集是解決過擬合的根本性方法。除此之外對於模型來說,盡量選擇較為簡單的模型也是解決過擬合的乙個常用方法。
如何解決過擬合(overfitting)問題?
為了得到一致假設而使假設變得過度嚴格稱為過擬合。過擬合的模型一般對訓練資料表現很好,而對測試資料表現很差。early stopping 可以設定乙個迭代截斷的閾值,到了這個閾值迭代終止 也可以設定兩次迭代之間的accuracy提高很小的時候,停止迭代。l1 l2正則化 使整體cost取較大值,避免某...
過擬合 欠擬合,如何解決
乙個模型所能提供的資訊一般 於2個方面,一是訓練資料中蘊含的資訊,二是在模型的形成過程中 包括構造,學習,推理等 人們提供的先驗資訊。當訓練資料不足時,說明模型從原始資料中獲取的資訊比較少,這種情況下要保證模型的效果,就需要更多的先驗資訊。先驗資訊可以作用在模型上,例如讓模型採用特定的內在結構,條件...
如何解決訓練網路過擬合的問題?
二 降低模型複雜度 三 正則化方法 四 訓練 五 整合方法 補充 降低 欠擬合 風險的方法 如何解決網路過擬合的問題?判斷乙個訓練模型過擬合,主要依據來自於,該模型在訓練集上的表現很好。但是在測試集合和新資料上的表現都不太好的情況。可以從以下的三個角度去解決訓練網路過擬合的問題。從資料入手,獲得更多...