過擬合產生的原因和解決方法

2021-09-12 15:24:59 字數 1521 閱讀 5815

1. 訓練集的數量級和模型的複雜度不匹配。訓練集的數量級要小於模型的複雜度;

2. 訓練集和測試集特徵分布不一致;

3. 樣本裡的噪音資料干擾過大,大到模型過分記住了噪音特徵,反而忽略了真實的輸入輸出間的關係;

4. 權值學習迭代次數足夠多(overtraining),擬合了訓練資料中的雜訊和訓練樣例中沒有代表性的特徵。

1.******r model structure

調小模型複雜度,使其適合自己訓練集的數量級(縮小寬度和減小深度)

2. data augmentation

訓練集越多,過擬合的概率越小。在計算機視覺領域中,增廣的方式是對影象旋轉,縮放,剪下,新增雜訊等。

3. regularization

引數太多,會導致我們的模型複雜度上公升,容易過擬合,也就是我們的訓練誤差會很小。 正則化是指通過引入額外新資訊來解決機器學習中過擬合問題的一種方法。這種額外資訊通常的形式是模型複雜性帶來的懲罰度。 正則化可以保持模型簡單,另外,規則項的使用還可以約束我們的模型的特性。

4、 dropout

這個方法在神經網路裡面很常用。dropout方法是imagenet中提出的一種方法,通俗一點講就是dropout方法在訓練的時候讓神經元以一定的概率不工作。

5、 early stopping

對模型進行訓練的過程即是對模型的引數進行學習更新的過程,這個引數學習的過程往往會用到一些迭代方法,如梯度下降(gradient descent)學習演算法。early stopping便是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練資料集迭代收斂之前停止迭代來防止過擬合。

early stopping方法的具體做法是,在每乙個epoch結束時(乙個epoch集為對所有的訓練資料的一輪遍歷)計算validation data的accuracy,當accuracy不再提高時,就停止訓練。這種做法很符合直觀感受,因為accurary都不再提高了,在繼續訓練也是無益的,只會提高訓練的時間。那麼該做法的乙個重點便是怎樣才認為validation accurary不再提高了呢?並不是說validation accuracy一降下來便認為不再提高了,因為可能經過這個epoch後,accuracy降低了,但是隨後的epoch又讓accuracy又上去了,所以不能根據一兩次的連續降低就判斷不再提高。一般的做法是,在訓練的過程中,記錄到目前為止最好的validation accuracy,當連續10次epoch(或者更多次)沒達到最佳accuracy時,則可以認為accuracy不再提高了。此時便可以停止迭代了(early stopping)。這種策略也稱為「no-improvement-in-n」,n即epoch的次數,可以根據實際情況取,如10、20、30……

6、 ensemble

整合學習演算法也可以有效的減輕過擬合。bagging通過平均多個模型的結果,來降低模型的方差。boosting不僅能夠減小偏差,還能減小方差。

**:

深度學習中「過擬合」的產生原因和解決方法

過擬合定義 模型在訓練集上的表現很好,但在測試集和新資料上的表現很差。訓練集上的表現 測試集上的表現 結論不好 不好欠擬合好不好 過擬合好 好適度擬合 訓練資料集太小,過擬合出現的原因 模型複雜度過高,引數過多 數量資料比較小 訓練集和測試集分布不一致 樣本裡面的雜訊資料干擾過大,導致模型過分記住了...

過擬合與欠擬合 之原因和解決方法

目錄 如上左圖,由於是一次函式,沒有很好的擬合資料 右圖是二次函式,能夠較好地擬合所有資料。究其原因,兩者之間的差別在於有沒有二次項係數,即引數多少的問題。min quad frac sum l y f lambda j f 其中第一項是經驗風險,第二項是正則化項,lambda 0 為調整兩者之間關...

殭屍程序產生原因和解決方法

在linux系統中,當用ps命令觀察程序的執行狀態時,經常看到某些程序的狀態列為defunct,這就是所謂的 殭屍 程序。殭屍 程序是乙個早已死亡的程序,但在程序表 processs table 中仍佔了乙個位置 slot 由於程序表的容量是有限的,所以,defunct程序不僅占用系統的記憶體資源,...