原理解析-過擬合與正則化

Dream-YH發表於2020-12-05

什麼是過擬合

本來關於過擬合與正則化,我是不打算寫一篇文章的,今晚想了想,還是寫一篇吧。

一是直接寫帶正則化的線性迴歸程式碼,顯得有些突兀;
二是這個東西確實比較重要,我這裡會儘量簡單的講清楚。

什麼是過擬合?
我們都知道,目前我們在講的線性迴歸,是監督學習裡面的一種,通過對樣本的學習訓練,得出合適的引數,使得損失函式在這些樣本上最小,即在樣本上表現良好,但是我們之所以訓練模型,是為了讓它在未知樣本上,同樣表現良好(所以正常的我們做機器學習,會把樣本分成訓練集、測試集,當模型在訓練集、測試集表現穩定,效果也很好時,我們的這次機器學習訓練才算成功,這個模型才有泛化能力)。

下面看一張很經典的圖:
在這裡插入圖片描述
圖二就是正常擬合,符合資料的趨勢,
而圖三,雖然在訓練集上擬合得很好,但是出現未知資料時,比如Size很大時,根據目前擬合來看,可能得到的結果很小,與實際誤差會很大。

因此,我們僅僅使得損失函式在樣本上最小,是不夠的,我們來看監督機器學習的核心原理公式:(這個LaTeX 數學公式必須手打了,畢竟核心公式)

m i n 1 M ∑ i = 1 M L ( y i , f ( x i ) ) + λ J ( f ) min\frac{1}{M}\sum_{i=1}^{M} L(y_i,f(x_i)) + \lambda{J(f)} minM1i=1ML(yi,f(xi))+λJ(f)

以上才是監督演算法的損失函式的完整形式, 1 M ∑ i = 1 M L ( y i , f ( x i ) ) \frac{1}{M}\sum_{i=1}^{M} L(y_i,f(x_i)) M1i=1ML(yi,f(xi))這個部分代表經驗誤差函式,即在樣本上訓練的損失,
而後面部分 λJ(f) 代表結構誤差函式,也稱為正則項,懲罰項,正則化引數的同時,最小化經驗誤差函式,最小化經驗誤差是為了極大程度的擬合訓練資料,正則化引數是為了防止過分的擬合訓練資料,因此對係數進行一定的懲罰。

OK,過擬合應該講得很清楚了,接下來講線性迴歸三種形式的正則化。

線性迴歸中,正則化一般怎麼實現?

L0正則化解析

L0是指向量中非0的元素的個數。如果用L0來規則化一個引數矩陣W的話,就是希望W的大部分元素都是0。換句話說,讓引數W是稀疏的。

L0正則化的最優化問題是一個NP hard問題,L1正則化是L0正則化的最優凸近似,這裡我們不展開L0的討論,大家知道有這麼個東西就可以了。

L1正則化解析

帶L1正則化的線性迴歸也叫Lasso迴歸,其全稱是The Least Absolute Shrinkage and Selectionator operator,直譯過來就是最小絕對值收縮和選擇運算元,表現形式為:
λ ∑ j = 1 n ∣ ∣ θ j ∣ ∣ \lambda{\sum_{j=1}^{n}}\vert\vert{\theta_j}\vert\vert λj=1nθj
代表向量中各個元素絕對值之和,λ為正則化係數。

L1正則化為什麼可以防止過擬合?

L1正則化之所以可以防止過擬合,是因為L1範數就是各個引數的絕對值相加得到的,引數值大小和模型複雜度是成正比的。因此如果擬合出一個複雜的模型(即出現了過擬合),其L1範數就大,這樣L1正則化懲罰就高,整體損失函式就沒有收斂,
所以最終不會選擇這些過擬合的引數。
同時,L1正則化會使得引數稀疏,一部分引數的係數會變為0。

問題:稀疏的引數代表模型越簡單嗎?
回答:是的,模型簡化,避免過擬合。因為一個模型中真正重要的引數可能並不多,如果考慮所有的引數起作用,
那麼可以對訓練資料可以預測的很好,但是對測試資料就很差了。引數變少也可以使整個模型獲得更好的可解釋性。

問題:引數值越小代表模型越簡單嗎?
回答:是的。為什麼引數越小,說明模型越簡單呢,這是因為越複雜的模型,越是會嘗試對所有的樣本進行擬合,
甚至包括一些異常樣本點,這就容易造成在較小的區間裡預測值產生較大的波動,這種較大的波動也反映了在這個區間裡的導數很大,
而只有較大的引數值才能產生較大的導數。因此複雜的模型,其引數值會比較大。

為什麼L1正則化會使得引數稀疏,一部分引數的係數會變為0?

1.從數學角度來看,我們手寫一下
在這裡插入圖片描述
2、從影像來看,
在這裡插入圖片描述
假設有2個引數,暫且用w1,w2來表示,y = |w1| + |w2| ,函式影像如上圖的四邊形,圓圈表示w1,w2取不同值時整個正則化項的值的等高線,很明顯很容易在頂點處相交,此時w1=0

後面會用例項來展示L1可以防止過擬合,也會使係數稀疏。

連結: 例項展示-L1防止過擬合,也會使得係數稀疏

L2正則化解析

帶L2正則化的線性迴歸也叫嶺迴歸,Ridge迴歸,也叫它“權值衰減weight decay”,表現形式為:
λ ∑ j = 1 n θ j 2 \lambda{\sum_{j=1}^{n}}{\theta_j}^2 λj=1nθj2
代表向量中各個元素平方之和,λ為正則化係數。

L2正則化為什麼可以防止過擬合?

L2正則化會使得引數接近於0。越小的引數說明模型越簡單,越簡單的模型越不容易產生過擬合現象。
同樣的,如果擬合出一個複雜的模型(即出現了過擬合),其L2範數就大,這樣L2正則化懲罰就高,整體損失函式就沒有收斂,
所以最終不會選擇這些過擬合的引數。

為什麼L2正則化會使得引數接近0,而不會變為0?

1、從數學角度來看,
在這裡插入圖片描述
2、從影像來看,
在這裡插入圖片描述
假設有2個引數,暫且用w1,w2來表示,y = w1^2 + w2^2 ,函式影像就是一個圓形,圓圈表示w1,w2取不同值時整個正則化項的值的等高線,很明顯不容易在頂點處相交,因此引數不會變為0,只會接近0。

後面會用例項來展示L2可以防止過擬合,也會使係數趨近於0。

連結: 例項展示-L2防止過擬合,也會使得係數趨近於0

總結

L1、L2應該講清楚了,其實還有一種正則化,彈性網Elastic Net,就是L1和L2結合在一起,L1、l2理解了,彈性網就能理解。介於兩者之間
在這裡插入圖片描述
接下來會寫2種正則化迴歸Python程式碼,裡面會用例項展示效果。

相關文章