1. 程式人生 > >範數正則化L0、L1、L2-嶺迴歸&Lasso迴歸(稀疏與特徵工程)

範數正則化L0、L1、L2-嶺迴歸&Lasso迴歸(稀疏與特徵工程)

轉載自:http://blog.csdn.net/sinat_26917383/article/details/52092040

一、正則化背景

監督機器學習問題無非就是“minimizeyour error while regularizing your parameters”,也就是在規則化引數的同時最小化誤差。最小化誤差是為了讓我們的模型擬合我們的訓練資料,

而規則化引數是防止我們的模型過分擬合我們的訓練資料。

問題背景:引數太多,會導致我們的模型複雜度上升,容易過擬合。

作用:

1、約束引數,降低模型複雜度。

2、規則項的使用還可以約束我們的模型的特性。這樣就可以將人對這個模型的先驗知識融入到模型的學習當中,強行地讓學習到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。

————————————————————————————————————————————

二、目標函式

 一般來說,監督學習可以看做最小化下面的目標函式:

       其中,第一項L(yi,f(xi;w)) 就是誤差平方和;第二項則為懲罰項,對引數w的規則化函式Ω(w)去約束我們的模型儘量的簡單。

機器學習的大部分帶參模型都和這個不但形似,而且神似。是的,其實大部分無非就是變換這兩項而已。

1、第一項-Loss函式

如果是Square loss,那就是最小二乘了;

如果是Hinge Loss,那就是著名的SVM了;

如果是exp-Loss,那就是牛逼的 Boosting了;

如果是log-Loss,那就是Logistic Regression了;還有等等。不同的loss函式,具有不同的擬合特性,這個也得就具體問題具體分析的。但這裡,我們先不究loss函式的問題,我們把目光轉向“規則項Ω(w)”。

2、第二項-規則化函式Ω(w)

一般是模型複雜度的單調遞增函式,模型越複雜,規則化值就越大。比如,規則化項可以是模型引數向量的範數。然而,不同的選擇對引數w的約束不同,取得的效果也不同,但我們在論文中常見的都聚集在:零範數、一範數、二範數、跡範數、Frobenius範數和核範數等等。這麼多範數,到底它們表達啥意思?具有啥能力?什麼時候才能用?什麼時候需要用呢?不急不急,下面我們挑幾個常見的娓娓道來。

————————————————————————————————————————————

三、L0/L1範數

1、分別定義

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

 L1範數是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則運算元”(Lasso regularization)。

2、兩者關係:

為什麼L1範數會使權值稀疏?有人可能會這樣給你回答“它是L0範數的最優凸近似”。

任何的L0規則化運算元,如果他在Wi=0的地方不可微(L1),並且可以分解為一個“求和”的形式,那麼這個規則化運算元就可以實現稀疏。

L1範數和L0範數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用。

3、引數稀疏的好處

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種因素,累覺不愛。

————————————————————————————————————————————

四、L1(Lasso)、L2(嶺迴歸)範數

      L2範數是指向量各元素的平方和然後求平方根。我們讓L2範數的規則項||W||2最小,可以使得W的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0。

L2的作用=引數變小=模型變簡單≈模型引數資訊變少。

L2的作用:

1、L2範數不但可以防止過擬合,還可以讓我們的優化求解變得穩定和快速。

2、優化計算的角度。L2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。

(condition number:condition number衡量的是輸入發生微小變化的時候,輸出會發生多大的變化。也就是系統對微小變化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。

如果一個矩陣的condition number在1附近,那麼它就是well-conditioned的,如果遠大於1,那麼它就是ill-conditioned的,如果一個系統是ill-conditioned的,它的輸出結果就不要太相信了。)

————————————————————————————————————————————

五、Lasso演算法和嶺迴歸演算法區別

1、梯度下降速度

L1和L2的差別就在於這個“坡”不同,如下圖:L1就是按絕對值函式的“坡”下降的,而L2是按二次函式的“坡”下降。所以實際上在0附近,L1的下降速度比L2的下降速度要快。所以會非常快得降到0。

       L1在江湖上人稱Lasso,L2人稱Ridge。不過這兩個名字還挺讓人迷糊的,看上面的圖片,Lasso的圖看起來就像ridge,而ridge的圖看起來就像lasso。

2、模型空間的限制

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

       可以看到,L1-ball 與L2-ball 的不同就在於L1在和每個座標軸相交的地方都有“角”出現,而目標函式的測地線除非位置擺得非常好,大部分時候都會在角的地方相交。注意到在角的位置就會產生稀疏性,例如圖中的相交點就有w1=0,而更高維的時候(想象一下三維的L1-ball 是什麼樣的?)除了角點以外,還有很多邊的輪廓也是既有很大的概率成為第一次相交的地方,又會產生稀疏性。

       相比之下,L2-ball 就沒有這樣的性質,因為沒有角,所以第一次相交的地方出現在具有稀疏性的位置的概率就變得非常小了。這就從直觀上來解釋了為什麼L1-regularization 能產生稀疏性,而L2-regularization 不行的原因了。

       因此,一句話總結就是:L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。Lasso在特徵選擇時候非常有用,而Ridge就只是一種規則化而已。

——————————————————————————————————————————

延伸一:L1&L2正則化一起結合的Elastic Nets效果真的很好嗎?

一般來說,如果L1和L2對比,L2比L1要好一些,因為L2之後,精度更好且較好適應、擬合。L1的效果在處理稀疏資料時候比較棒,且有利於稀疏資料的特徵。

那麼從理論上來說,L1+L2=Elastic Nets的辦法,既可以處理稀疏問題,同時也可以保證精度。

但是,實際上引入超引數會難以適當,至少在超引數搜尋上成本較高,實際案例中很少有L1+L2的效果優於L2的。Elastic Nets會更為複雜,不過如果你看中的是Elastic Nets網路中的特徵選擇功能,那麼複雜度提升+精度下降可能也是可以接受的。