一、正則化背景
監督機器學習問題無非就是“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網絡中的特征選擇功能,那麼複雜度提升+精度下降可能也是可以接受的。
————————————————
版權聲明:本文為CSDN部落客「悟乙己」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/sinat_26917383/article/details/52092040