天天看點

機器學習中的規則化範數(L0, L1, L2, 核範數)

今天我們聊聊機器學習中出現的非常頻繁的問題:過拟合與規則化。我們先簡單的來了解下常用的L0、L1、L2和核範數規則化。最後聊下規則化項參數的選擇問題。這裡因為篇幅比較龐大,為了不吓到大家,我将這個五個部分分成兩篇博文。知識有限,以下都是我一些淺顯的看法,如果了解存在錯誤,希望大家不吝指正。謝謝。

      監督機器學習問題無非就是“minimizeyour error while regularizing your parameters”,也就是在規則化參數的同時最小化誤差。最小化誤差是為了讓我們的模型拟合我們的訓練資料,而規則化參數是防止我們的模型過分拟合我們的訓練資料。多麼簡約的哲學啊!因為參數太多,會導緻我們的模型複雜度上升,容易過拟合,也就是我們的訓練誤差會很小。但訓練誤差小并不是我們的最終目标,我們的目标是希望模型的測試誤差小,也就是能準确的預測新的樣本。是以,我們需要保證模型“簡單”的基礎上最小化訓練誤差,這樣得到的參數才具有好的泛化性能(也就是測試誤差也小),而模型“簡單”就是通過規則函數來實作的。另外,規則項的使用還可以限制我們的模型的特性。這樣就可以将人對這個模型的先驗知識融入到模型的學習當中,強行地讓學習到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。要知道,有時候人的先驗是非常重要的。前人的經驗會讓你少走很多彎路,這就是為什麼我們平時學習最好找個大牛帶帶的原因。一句點撥可以為我們撥開眼前烏雲,還我們一片晴空萬裡,醍醐灌頂。對機器學習也是一樣,如果被我們人稍微點撥一下,它肯定能更快的學習相應的任務。隻是由于人和機器的交流目前還沒有那麼直接的方法,目前這個媒介隻能由規則項來擔當了。

      還有幾種角度來看待規則化的。規則化符合奧卡姆剃刀(Occam's razor)原理。這名字好霸氣,razor!不過它的思想很平易近人:在所有可能選擇的模型中,我們應該選擇能夠很好地解釋已知資料并且十分簡單的模型。從貝葉斯估計的角度來看,規則化項對應于模型的先驗機率。民間還有個說法就是,規則化是結構風險最小化政策的實作,是在經驗風險上加一個正則化項(regularizer)或懲罰項(penalty term)。

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

機器學習中的規則化範數(L0, L1, L2, 核範數)

      其中,第一項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範數和核範數等等。這麼多範數,到底它們表達啥意思?具有啥能力?什麼時候才能用?什麼時候需要用呢?不急不急,下面我們挑幾個常見的娓娓道來。

一、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範數。

機器學習中的規則化範數(L0, L1, L2, 核範數)

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

關鍵詞:

繼續閱讀