1. 程式人生 > >解決過擬合的方式(一):正則化

解決過擬合的方式(一):正則化

一、過擬合

監督機器學習問題無非就是“minimizeyour error while regularizing your parameters”,也就是在規則化引數的同時最小化誤差。最小化誤差是為了讓我們的模型擬合我們的訓練資料,而規則化引數是防止我們的模型過分擬合我們的訓練資料。因為引數太多,會導致我們的模型複雜度上升,容易過擬合,也就是我們的訓練誤差會很小。
過擬合問題是指過於完美擬合了訓練集資料,而對新的樣本失去了一般性,不能有效預測新樣本,這個問題也叫做高方差(high variances)。造成過擬合的原因可能是特徵量太多或者模型函式過於複雜。但訓練誤差小並不是我們的最終目標,我們的目標是希望模型的測試誤差小,也就是能準確的預測新的樣本。
所以,我們需要保證模型“簡單”的基礎上最小化訓練誤差,這樣得到的引數才具有好的泛化效能(也就是測試誤差也小)。

解決過擬合問題通常的方法如下:
1.減少特徵數量
2.手動篩選特徵
3.採用特徵篩選演算法
4.正則化:保留所有的特徵,但儘可能使引數θjθj儘量小。
正則化在很多特徵變數對目標值只有很小影響的情況下非常有用。

二、正則化

正則化是指通過引入額外新資訊來解決機器學習中過擬合問題的一種方法。這種額外資訊通常的形式是模型複雜性帶來的懲罰度。
正則化可以保持模型簡單,另外,規則項的使用還可以約束我們的模型的特性。正則化的一種理論解釋是它試圖引入奧卡姆剃刀原則,其思想為:在所有可能選擇的模型中,我們應該選擇能夠很好地解釋已知資料並且十分簡單的模型。。而從貝葉斯的觀點來看,正則化則是在模型引數上引入了某種先驗的分佈,可以表示為權值w上的零均值高斯先驗分佈的負對數(詳見PRML)。這樣就可以將人對這個模型的先驗知識融入到模型的學習當中,強行地讓學習到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。李航老師的《統計學習方法》裡從結構風險和經驗風險的角度說,正則化是結構風險最小化策略的實現,是在經驗風險上加一個正則化項(regularizer)或懲罰項(penalty term)。
對監督學習問題,如果只有較少的樣本,導致特徵數量大於樣本數量,那麼矩陣 XTX 將是不可逆矩陣或奇異(singluar)矩陣,或者用另一種說法是這個矩陣是退化(degenerate)的,那麼我們就沒有辦法使用正規方程來求出 θ 。幸運的是,正規化也為我們解決了這個問題,具體的說只要正則引數是嚴格大於零,即可證明
image


是可逆的,因此,使用正則還可以照顧任何 XTX 不可逆的問題,即確保了矩陣是非奇異的。
一般來說,監督學習可以看做最小化下面的目標函式:

其中,第一項L(yi,f(xi;w)) 為經驗風險,衡量我們的模型(分類或者回歸)對第i個樣本的預測值f(xi;w)和真實的標籤yi之前的誤差。因為我們的模型是要擬合我們的訓練樣本的嘛,所以我們要求這一項最小,也就是要求我們的模型儘量的擬合我們的訓練資料。第二項為正則化項,也就是對引數w的規則化函式Ω(w)去約束我們的模型儘量的簡單。
具體來說,對於第一項Loss函式,如果是Square loss,那就是最小二乘;如果是Hinge Loss(合頁損失),那就是SVM;如果是exp-Loss,那就是Boosting;如果是log-Loss,那就是Logistic Regression;還有等等。不同的loss函式,具有不同的擬合特性。
對第二項正則化函式Ω(w)也有很多種選擇,一般是模型複雜度的單調遞增函式,模型越複雜,規則化值就越大。比如,規則化項可以是模型引數向量的範數。然而,不同的選擇對引數w的約束不同,取得的效果也不同,但我們在論文中常見的都聚集在:零範數、一範數、二範數、跡範數、Frobenius範數和核範數等等。
這裡寫圖片描述

1、L0範數與L1範數

L0範數是指向量中非0的元素的個數。如果我們用L0範數來規則化一個引數矩陣W的話,就是希望W的大部分元素都是0即讓引數W是稀疏的。
L1範數是指向量中各個元素絕對值之和,也叫“稀疏規則運算元”(Lasso regularization)。為什麼L1範數會使權值稀疏?有人可能會這樣給你回答“它是L0範數的最優凸近似”。實際上,還存在一個更美的回答:任何的規則化運算元,如果他在Wi=0的地方不可微,並且可以分解為一個“求和”的形式,那麼這個規則化運算元就可以實現稀疏。W的L1範數是絕對值,|w|在w=0處是不可微,
為什麼L0和L1都可以實現稀疏,但常用的為L1?因為L0範數很難優化求解(NP難問題),二是L1範數是L0範數的最優凸近似,而且它比L0範數要容易優化求解。所以大家才把目光和萬千寵愛轉於L1範數。

綜上,L1範數和L0範數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用。
那麼引數稀疏有什麼好處呢?這裡扯兩點:
1)特徵選擇(Feature Selection):
大家對稀疏規則化趨之若鶩的一個關鍵原因在於它能實現特徵的自動選擇。一般來說,xi的大部分元素(也就是特徵)都是和最終的輸出yi沒有關係或者不提供任何資訊的,在最小化目標函式的時候考慮xi這些額外的特徵,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的資訊反而會被考慮,從而干擾了對正確yi的預測。稀疏規則化運算元的引入就是為了完成特徵自動選擇的光榮使命,它會學習地去掉這些沒有資訊的特徵,也就是把這些特徵對應的權重置為0。
2)可解釋性(Interpretability):
另一個青睞於稀疏的理由是,模型更容易解釋。例如患某種病的概率是y,然後我們收集到的資料x是1000維的,也就是我們需要尋找這1000種因素到底是怎麼影響患上這種病的概率的。假設我們這個是個迴歸模型:y=w1*x1+w2*x2+…+w1000*x1000+b(當然了,為了讓y限定在[0,1]的範圍,一般還得加個Logistic函式)。通過學習,如果最後學習到的w*就只有很少的非零元素,例如只有5個非零的wi,那麼我們就有理由相信,這些對應的特徵在患病分析上面提供的資訊是巨大的,決策性的。也就是說,患不患這種病只和這5個因素有關,那醫生就好分析多了。但如果1000個wi都非0,醫生面對這1000種因素,累覺不愛。

2、L2範數

除了L1範數,還有一種更受寵幸的規則化範數是L2範數: ||W||2。它也不遜於L1範數,它有兩個美稱,在迴歸裡面,有人把有它的迴歸叫“嶺迴歸”(Ridge Regression),有人也叫它“權值衰減”(weight decay)。 weight decay還有一個好處,它使得目標函式變為凸函式,梯度下降法和L-BFGS都能收斂到全域性最優解。
L2範數是指向量各元素的平方和然後求平方根。我們讓L2範數的規則項||W||2最小,可以使得W的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0。而越小的引數說明模型越簡單,越能適應不同的資料集,越不容易產生過擬合現象。為什麼越小的引數說明模型越簡單?一種理解是:限制了引數很小,實際上就限制了多項式某些分量的影響很小(看上面線性迴歸的模型的那個擬合的圖),這樣就相當於減少引數個數。我的理解是,如果引數足夠小,資料偏移得多一點也不會對結果造成什麼影響,即抗擾動能力強。
綜上,通過L2範數,我們可以實現了對模型空間的限制,從而在一定程度上避免了過擬合。
L2範數的好處是什麼呢?這裡也扯上兩點:
1)學習理論的角度:
從學習理論的角度來說,L2範數可以防止過擬合,提升模型的泛化能力。
2)優化計算的角度:
從優化或者數值計算的角度來說,L2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。(優化有兩大難題,一是:區域性最小值,二是:ill-condition病態問題。condition number衡量的是輸入發生微小變化的時候,輸出會發生多大的變化。也就是系統對微小變化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。詳見參考資料1)

3、L1和L2的直觀解釋

1)下降速度:
我們知道,L1和L2都是正則化的方式,我們將權值引數以L1或者L2的方式放到代價函式裡面去。然後模型就會嘗試去最小化這些權值引數。而這個最小化就像一個下坡的過程,L1和L2的差別就在於這個“坡”不同,如下圖:L1就是按絕對值函式的“坡”下降的,而L2是按二次函式的“坡”下降。所以實際上在0附近,L1的下降速度比L2的下降速度要快。所以會非常快得降到0。

2)模型空間的限制:
實際上,對於L1和L2規則化的代價函式來說,我們可以寫成以下形式:

也就是說,我們將模型空間限制在w的一個L1-ball 中。為了便於視覺化,我們考慮兩維的情況,在(w1, w2)平面上可以畫出目標函式的等高線,而約束條件則成為平面上半徑為C的一個 norm ball 。等高線與 norm ball 首次相交的地方就是最優解:

正則化前面的係數λ,可以控制L圖形的大小。λ越小,L的圖形越大(上圖中的黑色方框);λ越大,L的圖形就越小,可以看到,L1-ball 與L2-ball 的不同就在於L1在和每個座標軸相交的地方都有“角”出現,而目標函式的測地線除非位置擺得非常好,大部分時候都會在角的地方相交。注意到在角的位置就會產生稀疏性,例如圖中的相交點就有w1=0,而更高維的時候(想象一下三維的L1-ball 是什麼樣的?)除了角點以外,還有很多邊的輪廓也是既有很大的概率成為第一次相交的地方,又會產生稀疏性。
相比之下,L2-ball 就沒有這樣的性質,因為沒有角,所以第一次相交的地方出現在具有稀疏性的位置的概率就變得非常小了。這就從直觀上來解釋了為什麼L1-regularization 能產生稀疏性,而L2-regularization 不行的原因了。
因此,一句話總結就是:L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。Lasso在特徵選擇時候非常有用,而Ridge就只是一種規則化而已。

正則化引數λ的選擇

λ是一個超引數,λ越大,就表示規則項要比模型訓練誤差更重要,也就是相比於要模型擬合我們的資料,我們更希望我們的模型能滿足我們約束的Ω(w)的特性。但泛化效能並不是λ的簡單的函式,它具有很多的區域性最大值,而且它的搜尋空間很大。
因此調參時,一是嘗試很多的經驗值,二是通過分析我們的模型來選擇。即在訓練之前,我們大概計算下這時候的loss項的值是多少?Ω(w)的值是多少?然後針對他們的比例來確定我們的λ,這種啟發式的方法會縮小我們的搜尋空間。另外一種最常見的方法就是交叉驗證Cross validation。
對L1,越大的λ越容易使F(x)在x=0時取到最小值。
對L2,λ越大,由梯度下降公式可得,θj衰減得越快;L2圓的半徑越小,最後求得代價函式最值時各引數也會變得很小。