L1範數與L2範數的區別
把答案放在前面
L0範數是指向量中非0的元素的個數。(L0範數很難優化求解)
L1範數是指向量中各個元素絕對值之和
L2範數是指向量各元素的平方和然後求平方根
L1範數可以進行特徵選擇,即讓特徵的係數變為0.
L2範數可以防止過擬合,提升模型的泛化能力,有助於處理 condition number不好下的矩陣(數據變化很小矩陣求解後結果變化很大)
(核心:L2對大數,對outlier離群點更敏感!)
下降速度:最小化權值參數L1比L2變化的快
模型空間的限制:L1會產生稀疏 L2不會。
L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。
概念
範數是具有「長度」概念的函數。在向量空間內,為所有的向量的賦予非零的增長度或者大小。不同的範數,所求的向量的長度或者大小是不同的。
舉個例子,2維空間中,向量(3,4)的長度是5,那麼5就是這個向量的一個範數的值,更確切的說,是歐式範數或者L2範數的值。
特別的,L0範數:指向量中非零元素的個數。無窮範數:指向量中所有元素的最大絕對值。
1.監督學習的基本模型
監督機器學習問題無非就是「minimize your error while regularizing your parameters」,也就是在規則化參數的同時最小化誤差。最小化誤差是為了讓我們的模型擬合我們的訓練數據,而規則化參數是防止我們的模型過分擬合我們的訓練數據。因為參數太多,會導致我們的模型複雜度上升,容易過擬合,也就是我們的訓練誤差會很小。但訓練誤差小並不是我們的最終目標,我們的目標是希望模型的測試誤差小,也就是能準確的預測新的樣本。所以,我們需要保證模型「簡單」的基礎上最小化訓練誤差,這樣得到的參數才具有好的泛化性能(也就是測試誤差也小),而模型「簡單」就是通過規則函數來實現的。另外,規則項的使用還可以約束我們的模型的特性。這樣就可以將人對這個模型的先驗知識融入到模型的學習當中,強行地讓學習到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。要知道,有時候人的先驗是非常重要的。前人的經驗會讓你少走很多彎路,這就是為什麼我們平時學習最好找個大牛帶帶的原因。一句點撥可以為我們撥開眼前烏雲,還我們一片晴空萬里,醍醐灌頂。對機器學習也是一樣,如果被我們人稍微點撥一下,它肯定能更快的學習相應的任務。只是由於人和機器的交流目前還沒有那麼直接的方法,目前這個媒介只能由規則項來擔當了。
還有幾種角度來看待規則化的。規則化符合奧卡姆剃刀(Occam』s razor)原理。它的思想很平易近人:在所有可能選擇的模型中,我們應該選擇能夠很好地解釋已知數據並且十分簡單的模型。從貝葉斯估計的角度來看,規則化項對應於模型的先驗概率。民間還有個說法就是,規則化是結構風險最小化策略的實現,是在經驗風險上加一個正則化項(regularizer)或懲罰項(penalty term)。
一般來說,監督學習可以看做最小化下面的目標函數:
其中,第一項L(yi,f(xi;w)) 衡量我們的模型(分類或者回歸)對第i個樣本的預測值f(xi;w)和真實的標籤yi之前的誤差。因為我們的模型是要擬合我們的訓練樣本的嘛,所以我們要求這一項最小,也就是要求我們的模型盡量的擬合我們的訓練數據。但正如上面說言,我們不僅要保證訓練誤差最小,我們更希望我們的模型測試誤差小,所以我們需要加上第二項,也就是對參數w的規則化函數Ω(w)去約束我們的模型盡量的簡單。
OK,到這裡,如果你在機器學習浴血奮戰多年,你會發現,哎喲喲,機器學習的大部分帶參模型都和這個不但形似,而且神似。是的,其實大部分無非就是變換這兩項而已。對於第一項Loss函數,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了;還有等等。不同的loss函數,具有不同的擬合特性,這個也得就具體問題具體分析的。但這裡,我們先不究loss函數的問題,我們把目光轉向「規則項Ω(w)」。
規則化函數Ω(w)也有很多種選擇,一般是模型複雜度的單調遞增函數,模型越複雜,規則化值就越大。比如,規則化項可以是模型參數向量的範數。然而,不同的選擇對參數w的約束不同,取得的效果也不同,但我們在論文中常見的都聚集在:零範數、一範數、二範數、跡範數、Frobenius範數和核範數等等。這麼多範數,到底它們表達啥意思?具有啥能力?什麼時候才能用?什麼時候需要用呢?不急不急,下面我們挑幾個常見的娓娓道來。
2.L0範數與L1範數
L0範數是指向量中非0的元素的個數。如果我們用L0範數來規則化一個參數矩陣W的話,就是希望W的大部分元素都是0。這太直觀了,太露骨了吧,換句話說,讓參數W是稀疏的。OK,看到了「稀疏」二字,大家都應該從當下風風火火的「壓縮感知」和「稀疏編碼」中醒悟過來,原來用的漫山遍野的「稀疏」就是通過這玩意來實現的。但你又開始懷疑了,是這樣嗎?看到的papers世界中,稀疏不是都通過L1範數來實現嗎?腦海里是不是到處都是||W||1影子呀!幾乎是抬頭不見低頭見。沒錯,這就是這節的題目把L0和L1放在一起的原因,因為他們有著某種不尋常的關係。那我們再來看看L1範數是什麼?它為什麼可以實現稀疏?為什麼大家都用L1範數去實現稀疏,而不是L0範數呢?
L1範數是指向量中各個元素絕對值之和,也有個美稱叫「稀疏規則運算元」(Lasso regularization)。現在我們來分析下這個價值一個億的問題:為什麼L1範數會使權值稀疏?有人可能會這樣給你回答「它是L0範數的最優凸近似」。實際上,還存在一個更美的回答:任何的規則化運算元,如果他在Wi=0的地方不可微,並且可以分解為一個「求和」的形式,那麼這個規則化運算元就可以實現稀疏。這說是這麼說,W的L1範數是絕對值,|w|在w=0處是不可微,但這還是不夠直觀。這裡因為我們需要和L2範數進行對比分析。所以關於L1範數的直觀理解,請待會看看第二節。
對了,上面還有一個問題:既然L0可以實現稀疏,為什麼不用L0,而要用L1呢?個人理解一是因為L0範數很難優化求解(NP難問題),二是L1範數是L0範數的最優凸近似,而且它比L0範數要容易優化求解。所以大家才把目光和萬千寵愛轉於L1範數。
OK,來個一句話總結:L1範數和L0範數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用。
好,到這裡,我們大概知道了L1可以實現稀疏,但我們會想呀,為什麼要稀疏?讓我們的參數稀疏有什麼好處呢?這裡扯兩點:
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種因素,累覺不愛。3.L2範數
除了L1範數,還有一種更受寵幸的規則化範數是L2範數: ||W||2。它也不遜於L1範數,它有兩個美稱,在回歸裡面,有人把有它的回歸叫「嶺回歸」(Ridge Regression),有人也叫它「權值衰減weight decay」。這用的很多吧,因為它的強大功效是改善機器學習裡面一個非常重要的問題:過擬合。至於過擬合是什麼,上面也解釋了,就是模型訓練時候的誤差很小,但在測試的時候誤差很大,也就是我們的模型複雜到可以擬合到我們的所有訓練樣本了,但在實際預測新的樣本的時候,糟糕的一塌糊塗。通俗的講就是應試能力很強,實際應用能力很差。擅長背誦知識,卻不懂得靈活利用知識。例如下圖所示(來自Ng的course):
上面的圖是線性回歸,下面的圖是Logistic回歸,也可以說是分類的情況。從左到右分別是欠擬合(underfitting,也稱High-bias)、合適的擬合和過擬合(overfitting,也稱High variance)三種情況。可以看到,如果模型複雜(可以擬合任意的複雜函數),它可以讓我們的模型擬合所有的數據點,也就是基本上沒有誤差。對於回歸來說,就是我們的函數曲線通過了所有的數據點,如上圖右。對分類來說,就是我們的函數曲線要把所有的數據點都分類正確,如下圖右。這兩種情況很明顯過擬合了。
OK,那現在到我們非常關鍵的問題了,為什麼L2範數可以防止過擬合?回答這個問題之前,我們得先看看L2範數是個什麼東西。
L2範數是指向量各元素的平方和然後求平方根。我們讓L2範數的規則項||W||2最小,可以使得W的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0,這裡是有很大的區別的哦。而越小的參數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。為什麼越小的參數說明模型越簡單?我也不懂,我的理解是:限制了參數很小,實際上就限制了多項式某些分量的影響很小(看上麵線性回歸的模型的那個擬合的圖),這樣就相當於減少參數個數。其實我也不太懂,希望大家可以指點下。
這裡也一句話總結下:通過L2範數,我們可以實現了對模型空間的限制,從而在一定程度上避免了過擬合。限制解空間範圍,縮小解空間,來控制模型複雜度,降低結構化風險。
L2範數的好處是什麼呢?這裡也扯上兩點:
1)學習理論的角度: 從學習理論的角度來說,L2範數可以防止過擬合,提升模型的泛化能力。 2)優化計算的角度: 從優化或者數值計算的角度來說,L2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。(這個不明白)直觀地聊聊L1和L2的差別
為什麼一個讓絕對值最小,一個讓平方最小,會有那麼大的差別呢?我看到的有兩種幾何上直觀的解析:
1)下降速度:
我們知道,L1和L2都是規則化的方式,我們將權值參數以L1或者L2的方式放到代價函數裡面去。然後模型就會嘗試去最小化這些權值參數。而這個最小化就像一個下坡的過程,L1和L2的差別就在於這個「坡」不同,如下圖:L1就是按絕對值函數的「坡」下降的,而L2是按二次函數的「坡」下降。所以實際上在0附近,L1的下降速度比L2的下降速度要快。所以會非常快得降到0。不過我覺得這
里解釋的不太中肯,當然了也不知道是不是自己理解的問題。
L1在江湖上人稱Lasso,L2人稱Ridge。
2)模型空間的限制:
實際上,對於L1和L2規則化的代價函數來說,我們可以寫成以下形式:
也就是說,我們將模型空間限制在w的一個L1-ball 中。為了便於可視化,我們考慮兩維的情況,在(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就只是一種規則化而已。
REFERENCE
範數、L1範數和L2範數的基本概念 - lioncv的專欄 - CSDN博客
機器學習中的範數規則化之(一)L0、L1與L2範數 - bitcarmanlee的博客 - CSDN博客
推薦閱讀:
TAG:机器学习 |