正則化(Regularization)
機(jī)器學(xué)習(xí)中幾乎都可以看到損失函數(shù)后面會添加一個額外項(xiàng)蝗拿,常用的額外項(xiàng)一般有兩種,一般英文稱作?1-norm和?2-norm蒿涎,中文稱作L1正則化和L2正則化哀托,或者L1范數(shù)和L2范數(shù)。
L1正則化和L2正則化可以看做是損失函數(shù)的懲罰項(xiàng)劳秋。對于線性回歸模型仓手,使用L1正則化的模型建叫做Lasso回歸胖齐,使用L2正則化的模型叫做Ridge回歸(嶺回歸)。下圖是Python中Lasso回歸的損失函數(shù)嗽冒,式中加號后面一項(xiàng)α||w||1即為L1正則化項(xiàng)呀伙。
下圖是Python中Ridge回歸的損失函數(shù),式中加號后面一項(xiàng)α||w||22即為L2正則化項(xiàng)添坊。
一般回歸分析中回歸w表示特征的系數(shù)剿另,從上式可以看到正則化項(xiàng)是對系數(shù)做了處理。L1正則化和L2正則化的說明如下:
L1正則化是指權(quán)值向量w中各個元素的絕對值之和帅腌,通常表示為||w||1L2正則化是指權(quán)值向量w中各個元素的平方和然后再求平方根(可以看到Ridge回歸的L2正則化項(xiàng)有平方符號)驰弄,通常表示為||w||2
一般都會在正則化項(xiàng)之前添加一個系數(shù),Python中用α表示速客,一些文章也用λ表示戚篙。這個系數(shù)需要用戶指定。
那添加L1和L2正則化有什么用溺职?下面是L1正則化和L2正則化的作用岔擂,這些表述可以在很多文章中找到。
L1正則化可以產(chǎn)生稀疏權(quán)值矩陣浪耘,即產(chǎn)生一個稀疏模型乱灵,因此可以用于特征選擇 L2正則化可以防止模型過擬合(overfitting);一定程度上七冲,L1也可以防止過擬合
稀疏模型與特征選擇
上面提到L1正則化有助于生成一個稀疏權(quán)值矩陣痛倚,進(jìn)而可以用于特征選擇。為什么要生成一個稀疏矩陣澜躺?
稀疏矩陣指的是很多元素為0蝉稳,只有少數(shù)元素是非零值的矩陣,即得到的線性回歸模型的大部分系數(shù)都是0. 通常機(jī)器學(xué)習(xí)中特征數(shù)量很多掘鄙,例如文本處理時耘戚,如果將一個詞組(term)作為一個特征,那么特征數(shù)量會達(dá)到上萬個(bigram)操漠。在預(yù)測或分類時收津,那么多特征顯然難以選擇,但是如果代入這些特征得到的模型是一個稀疏模型浊伙,表示只有少數(shù)特征對這個模型有貢獻(xiàn)撞秋,絕大部分特征是沒有貢獻(xiàn)的,或者貢獻(xiàn)微邪苫啤(因?yàn)樗鼈兦懊娴南禂?shù)是0或者是很小的值部服,即使去掉對模型也沒有什么影響),此時我們就可以只關(guān)注系數(shù)是非零值的特征拗慨。這就是稀疏模型與特征選擇的關(guān)系廓八。
L1和L2正則化的直觀理解
這部分內(nèi)容將解釋為什么L1正則化可以產(chǎn)生稀疏模型(L1是怎么讓系數(shù)等于零的)奉芦,以及為什么L2正則化可以防止過擬合。
L1正則化和特征選擇
假設(shè)有如下帶L1正則化的損失函數(shù):
J=J0+α∑w|w|(1)
其中J0是原始的損失函數(shù)剧蹂,加號后面的一項(xiàng)是L1正則化項(xiàng)声功,α是正則化系數(shù)。注意到L1正則化是權(quán)值的絕對值之和宠叼,J是帶有絕對值符號的函數(shù)先巴,因此J是不完全可微的。機(jī)器學(xué)習(xí)的任務(wù)就是要通過一些方法(比如梯度下降)求出損失函數(shù)的最小值冒冬。當(dāng)我們在原始損失函數(shù)J0后添加L1正則化項(xiàng)時伸蚯,相當(dāng)于對J0做了一個約束。令L=α∑w|w|简烤,則J=J0+L剂邮,此時我們的任務(wù)變成在L約束下求出J0取最小值的解『嵴欤考慮二維的情況挥萌,即只有兩個權(quán)值w1和w2,此時L=|w1|+|w2|對于梯度下降法枉侧,求解J0的過程可以畫出等值線引瀑,同時L1正則化的函數(shù)L也可以在w1w2的二維平面上畫出來。如下圖:
圖1 L1正則化
圖中等值線是J0的等值線,黑色方形是L函數(shù)的圖形。在圖中,當(dāng)J0等值線與L首次相交的地方就是最優(yōu)解。上圖中J0與L在L的一個頂點(diǎn)處相交洞斯,這個頂點(diǎn)就是最優(yōu)解。注意到這個頂點(diǎn)的值是(w1,w2)=(0,w)⌒蕉。可以直觀想象,因?yàn)長函數(shù)有很多『突出的角』(二維情況下四個灭衷,多維情況下更多)次慢,J0與這些角接觸的機(jī)率會遠(yuǎn)大于與L其它部位接觸的機(jī)率,而在這些角上翔曲,會有很多權(quán)值等于0迫像,這就是為什么L1正則化可以產(chǎn)生稀疏模型,進(jìn)而可以用于特征選擇瞳遍。
類似闻妓,假設(shè)有如下帶L2正則化的損失函數(shù):
J=J0+α∑ww2(2)
同樣可以畫出他們在二維平面上的圖形,如下:
圖2 L2正則化
二維平面下L2正則化的函數(shù)圖形是個圓掠械,與方形相比由缆,被磨去了棱角注祖。因此J0與L相交時使得w1或w2等于零的機(jī)率小了許多,這就是為什么L2正則化不具有稀疏性的原因均唉。
L2正則化和過擬合
擬合過程中通常都傾向于讓權(quán)值盡可能小是晨,最后構(gòu)造一個所有參數(shù)都比較小的模型。因?yàn)橐话阏J(rèn)為參數(shù)值小的模型比較簡單舔箭,能適應(yīng)不同的數(shù)據(jù)集罩缴,也在一定程度上避免了過擬合現(xiàn)象〔惴觯可以設(shè)想一下對于一個線性回歸方程箫章,若參數(shù)很大,那么只要數(shù)據(jù)偏移一點(diǎn)點(diǎn)镜会,就會對結(jié)果造成很大的影響檬寂;但如果參數(shù)足夠小,數(shù)據(jù)偏移得多一點(diǎn)也不會對結(jié)果造成什么影響稚叹,專業(yè)一點(diǎn)的說法是『抗擾動能力強(qiáng)』焰薄。
那為什么L2正則化可以獲得值很小的參數(shù)?
以線性回歸中的梯度下降法為例扒袖。假設(shè)要求的參數(shù)為θ塞茅,hθ(x)是我們的假設(shè)函數(shù),那么線性回歸的代價函數(shù)如下:
J(θ)=12m∑i=1m(hθ(x(i))?y(i))(3)
那么在梯度下降法中季率,最終用于迭代計(jì)算參數(shù)θ的迭代式為:
θj:=θj?α1m∑i=1m(hθ(x(i))?y(i))x(i)j(4)
其中α是learning rate. 上式是沒有添加L2正則化項(xiàng)的迭代公式野瘦,如果在原始代價函數(shù)之后添加L2正則化,則迭代公式會變成下面的樣子:
θj:=θj(1?αλm)?α1m∑i=1m(hθ(x(i))?y(i))x(i)j(5)
其中λ就是正則化參數(shù)飒泻。從上式可以看到鞭光,與未添加L2正則化的迭代公式相比,每一次迭代泞遗,θj都要先乘以一個小于1的因子惰许,從而使得θj不斷減小,因此總得來看史辙,θ是不斷減小的汹买。
正則化參數(shù)的選擇
L1正則化參數(shù)
通常越大的λ可以讓代價函數(shù)在參數(shù)為0時取到最小值。下面是一個簡單的例子聊倔,這個例子來自Quora上的問答晦毙。為了方便敘述,一些符號跟這篇帖子的符號保持一致耙蔑。
假設(shè)有如下帶L1正則化項(xiàng)的代價函數(shù):
F(x)=f(x)+λ||x||1
其中x是要估計(jì)的參數(shù)见妒,相當(dāng)于上文中提到的w以及θ. 注意到L1正則化在某些位置是不可導(dǎo)的,當(dāng)λ足夠大時可以使得F(x)在x=0時取到最小值甸陌。如下圖:
圖3 L1正則化參數(shù)的選擇
分別取λ=0.5和λ=2须揣,可以看到越大的λ越容易使F(x)在x=0時取到最小值盐股。
L2正則化參數(shù)
從公式5可以看到,λ越大返敬,θj衰減得越快遂庄。另一個理解可以參考圖2,λ越大劲赠,L2圓的半徑越小涛目,最后求得代價函數(shù)最值時各參數(shù)也會變得很小。