我們在訓練的時候經常會遇到這兩種情況:
1、模型在訓練集上誤差很大。
2、模型在訓練集上誤差很小,表現不錯,但是在測試集上的誤差很大
我們先來分析一下這兩個問題:
對於第一個問題,明顯就是沒有訓練好,也就是模型沒有很好擬合數據的能力,並沒有學會如何擬合,可能是因為在訓練時我們選擇了較少的特征,或者是我們選擇的模型太簡單了,不能稍微復雜的擬合數據,我們可以通過嘗試選取更多的特征、增加一些多項式特征或者直接選用非線性的較復雜的模型來訓練。
對於第二個問題,可以說是第一個問題的另外一個極端,就是模型對訓練集擬合的太好了,以至於把訓練集數據中的那些無關緊要的特征或者噪音也學習到了,導致的結果就是當我們使用測試集來評估模型的泛化能力時,模型表現的很差。打個不恰當比方就是你平時把作業都背下來了,但是其實你並沒有學會如何正確解題,所以遇到考試就考的很差。解決方法就是增加訓練集的數據量或者減少特征數量來嘗試解決。
第一個問題我們叫做欠擬合(underfitting),第二個問題我們叫做過擬合(overfitting)

這兩個問題還存在一種解決方法,就是我接下來要說的正則化。
我們之前說模型學習的過程也就是調整權重參數的過程,通過訓練集中的數據來將模型的權重參數調整到一個使得損失函數最小的值。
對於一個分布較復雜的樣本,如果訓練得到的權重參數維度太少或者參數過小,也就是特征項很少,一些重要的特征沒有起到作用,那么這條擬合曲線就會變得很簡單,我們看上圖的欠擬合圖像,里面的擬合曲線是一條直線,這就是權重參數維度太少的結果。而如果權重參數維度過多或者參數過大,導致擬合曲線過於復雜,如上圖的過擬合圖像,擬合曲線可以完美的將兩類不同的樣本點區分開,但是我們也可以看出這條曲線很復雜,權重參數的項數一定很多。
現在進入正題,對於正則化,我們常見的形式是L2正則:
這里的
就是正則化系數。
我們將正則項直接添加到損失函數后即可使用,比如對於邏輯回歸模型,帶有L2正則項的損失函數為:
我們通過控制正則化系數來控制權重參數的大小。一般正則化用於解決模型過擬合的問題,我們的訓練目標是為了使損失函數最小,但是如果權重參數過大會導致過擬合,模型泛化能力下降,那么為了解決這個問題,將正則項加到損失函數后面,組成一個新的損失函數,為了最小化這個新的損失函數,我們在訓練過程中不僅要使得誤差小,還要保證正則項不能太大,於是如果我們選擇一個較大的正則化系數,那么為了保證正則項不能太大,就會使得權重參數變小,這也就是我們的最終目的:在保證誤差不大的情況下,使得權重參數也不能太大,緩解了過擬合問題。正則化系數越大,正則化越強,權重參數越小。
所以對於欠擬合的模型,我們也可以嘗試減小正則化系數來增大權重參數,而對於過擬合模型,我們嘗試增大正則化系數來減小權重參數。
