過擬合即模型在訓練過程中對模型引數進行擬合的過程中,由於訓練資料集存在抽樣誤差(雜訊),複雜的模型在訓練的過程中會將抽樣誤差也一同進行擬合。這就導致訓練好的模型在訓練集上的表現很好,在測試集上的表現很差的原因。
導致過擬合的主要原因有兩個:資料量太少和模型過於複雜
因為機器學習演算法在擬合出正確的規則後,具有進一步擬合雜訊的能力,因此,模型在訓練的過程中極有可能會發生過擬合。過擬合會大大降低模型的魯棒性,因此在實際應用的過程中我們要盡可能的防止模型發生過擬合現象。
關於如何防止過擬合先放一張圖
防止過擬合可以從資料和模型這兩個角度進行琢磨。
馬雲曾經說過(被說過):資料是二十一世紀的石油。不管這個命題是否為真,我們都能意識到資料對當今社會的重要性。的確,增加資料也是解決過擬合問題最為有效的手段。資料量越大,抽樣誤差就越小,模型擬合的誤差就越小,模型的泛化效能就越好。
如果我們已經有了足夠多的訓練資料,但是我們訓練的模型還是會發生過擬合的話,那就有可能是我們的模型過於複雜了,導致模型對一些資料中的一些雜訊都進行了和好的擬合。模型只是對部分資料產生過擬合,我們可以在保證模型能夠正確的擬合出資料中的規則的同時,又能適當的降低模型的複雜度,減少模型對抽樣誤差的擬合程度。適當的降低模型的複雜度,不僅能很好降低模型的過擬合程度,同時也能提高模型的訓練速度以及執行速度。
降低模型的複雜度可以提前結束模型的訓練過程(early stopping)。通常情況下,模型在訓練的過程中會優先擬合資料的正確的規則,擬合出正確的規則之後,才會擬合資料中的誤差。所以在訓練的過程中就存在乙個轉折點,在這個轉折點之前,模型一致都處於欠擬合狀態,在這個轉折點之後,模型就開始過擬合。所以在訓練的過程中我們可以通過迭代不同的訓練週期,從而觀察這個轉折點的位置,然後在這個轉折點結束訓練,這樣也可以很好的防止模型發生過擬合。
對於線性模型如lr而言,可以在損失函式中引入正則化項來降低模型的複雜度,從而有效的防止模型發生過擬合現象。正則化項分為l1正則(l1範數)和l2正則(l2範數)。
優化目標:
引入l1正則項:
引入l2正則項
加入正則化的目的就是為了使得模型在訓練的時候,既要降低模型的訓練誤差,又要使得引數的範數盡可能的小,也就是降低模型的複雜度。關於引入l1正則化項和l2正則化項為什麼能夠防止模型發生過擬合可以參照這兩篇知乎回答:
對於深度學習模型而言,可以在模型中引入dropout層防止模型發生過擬合,提高模型的泛化效能。
所謂dropout, 就是在模型的訓練過程中,在模型的前向傳輸過程中,當傳輸至dropout層時,會隨機的刪除一定比例(dropout中的引數)的隱藏神經元,輸入和輸出神經元保持不變,如下圖所示:
然後再根據訓練誤差利用反向傳播演算法更新網格中未隱藏的神經元引數的大小。更新完為隱藏的引數後,再恢復之前被隱藏的神經元。這就導致訓練一次後,只更新未被隱藏神經元引數,被隱藏的神經元的引數則保持不變。
繼續重複上述套路,隨機更新模型中的引數。
至於dropout為什麼能有效的防止模型發生過擬合,其一是是因為引入dropout層進行訓練後,相當於訓練了了多個模型,最後訓練的結果也就相當於取多個模型的平均值,類似於bagging;其二是dropoout通過隨機更新引數,減少了不同特徵之間的宮適應性,從而能有效提高模型的泛化效能。
這是對近期複習過擬合以及如何防止過擬合做的乙個簡單的學習總結。其中難免會有一些錯誤,希望各位大佬批評指正。
防止過擬合以及解決過擬合
過擬合 為了得到一致假設而使假設變得過度複雜稱為過擬合。乙個過配的模型試圖連誤差 噪音 都去解釋 而實際上噪音又是不需要解釋的 導致泛化能力比較差,顯然就過猶不及了。這句話很好的詮釋了過擬合產生的原因,但我認為這只是一部分原因,另乙個原因是模型本身並不能很好地解釋 匹配 資料,也就是說觀測到的資料並...
如何防止過擬合及欠擬合
1.過擬合 1.1 定義 是指模型對於訓練資料擬合呈現過當的情況,反映到評估指標上就是模型在訓練集上的表現很好,但是在測試集上的表現較差。結果就是訓練出的模型泛化能力差。1.2 如何防止過擬合 防止過擬合的方法有4種 1 增加訓練集資料 該方式是從資料入手,將更多的資料參與到模型的訓練中,這是最有效...
如何防止過擬合和欠擬合
過擬合和欠擬合是模型訓練過程中經常出現的問題,兩種情況正好相反,現將兩者的定義及如何防止進行簡要總結。是指模型對於訓練資料擬合呈現過當的情況,反映到評估指標上就是模型在訓練集上的表現很好,但是在測試集上的表現較差。結果就是訓練出的模型泛化能力差。防止過擬合的方法有4種 1 增加訓練集資料 該方式是從...