正則化(Regularization)
機(jī)器學(xué)習(xí)中幾乎都可以看到損失函數(shù)后面會(huì)添加一個(gè)額外項(xiàng),常用的額外項(xiàng)一般有兩種分扎,一般英文稱作?1-norm和?2-norm,中文稱作L1正則化和L2正則化闷叉,或者L1范數(shù)和L2范數(shù)棍弄。
L1正則化和L2正則化可以看做是損失函數(shù)的懲罰項(xiàng)。所謂『懲罰』是指對損失函數(shù)中的某些參數(shù)做一些限制倒彰。對于線性回歸模型审洞,使用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中各個(gè)元素的絕對值之和誊酌,通常表示為||w||1
L2正則化是指權(quán)值向量w中各個(gè)元素的平方和然后再求平方根(可以看到Ridge回歸的L2正則化項(xiàng)有平方符號)部凑,通常表示為||w||2
一般都會(huì)在正則化項(xiàng)之前添加一個(gè)系數(shù),Python中用α表示碧浊,一些文章也用λ表示涂邀。這個(gè)系數(shù)需要用戶指定。
那添加L1和L2正則化有什么用箱锐?下面是L1正則化和L2正則化的作用比勉,這些表述可以在很多文章中找到。
L1正則化可以產(chǎn)生稀疏權(quán)值矩陣瑞躺,即產(chǎn)生一個(gè)稀疏模型敷搪,可以用于特征選擇
L2正則化可以防止模型過擬合(overfitting);一定程度上幢哨,L1也可以防止過擬合
上面提到L1正則化有助于生成一個(gè)稀疏權(quán)值矩陣赡勘,進(jìn)而可以用于特征選擇。為什么要生成一個(gè)稀疏矩陣捞镰?
稀疏矩陣指的是很多元素為0闸与,只有少數(shù)元素是非零值的矩陣,即得到的線性回歸模型的大部分系數(shù)都是0. 通常機(jī)器學(xué)習(xí)中特征數(shù)量很多岸售,例如文本處理時(shí)践樱,如果將一個(gè)詞組(term)作為一個(gè)特征,那么特征數(shù)量會(huì)達(dá)到上萬個(gè)(bigram)凸丸。在預(yù)測或分類時(shí)拷邢,那么多特征顯然難以選擇,但是如果代入這些特征得到的模型是一個(gè)稀疏模型屎慢,表示只有少數(shù)特征對這個(gè)模型有貢獻(xiàn)瞭稼,絕大部分特征是沒有貢獻(xiàn)的,或者貢獻(xiàn)微心寤荨(因?yàn)樗鼈兦懊娴南禂?shù)是0或者是很小的值环肘,即使去掉對模型也沒有什么影響),此時(shí)我們就可以只關(guān)注系數(shù)是非零值的特征集灌。這就是稀疏模型與特征選擇的關(guān)系悔雹。
這部分內(nèi)容將解釋為什么L1正則化可以產(chǎn)生稀疏模型(L1是怎么讓系數(shù)等于零的),以及為什么L2正則化可以防止過擬合欣喧。
假設(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)時(shí),相當(dāng)于對J0做了一個(gè)約束臼隔。令L=α∑w|w|嘹裂,則J=J0+L,此時(shí)我們的任務(wù)變成在L約束下求出J0取最小值的解摔握〖睦牵考慮二維的情況,即只有兩個(gè)權(quán)值w1和w2氨淌,此時(shí)L=|w1|+|w2|對于梯度下降法泊愧,求解J0的過程可以畫出等值線,同時(shí)L1正則化的函數(shù)L也可以在w1w2的二維平面上畫出來盛正。如下圖:
圖1 L1正則化
圖中等值線是J0的等值線删咱,黑色方形是L函數(shù)的圖形。在圖中豪筝,當(dāng)J0等值線與L圖形首次相交的地方就是最優(yōu)解痰滋。上圖中J0與L在L的一個(gè)頂點(diǎn)處相交,這個(gè)頂點(diǎn)就是最優(yōu)解续崖。注意到這個(gè)頂點(diǎn)的值是(w1,w2)=(0,w)敲街。可以直觀想象严望,因?yàn)長函數(shù)有很多『突出的角』(二維情況下四個(gè)多艇,多維情況下更多),J0與這些角接觸的機(jī)率會(huì)遠(yuǎn)大于與L其它部位接觸的機(jī)率像吻,而在這些角上峻黍,會(huì)有很多權(quán)值等于0,這就是為什么L1正則化可以產(chǎn)生稀疏模型萧豆,進(jìn)而可以用于特征選擇奸披。
而正則化前面的系數(shù)α,可以控制L圖形的大小涮雷。α越小阵面,L的圖形越大(上圖中的黑色方框);α越大洪鸭,L的圖形就越小样刷,可以小到黑色方框只超出原點(diǎn)范圍一點(diǎn)點(diǎn),這是最優(yōu)點(diǎn)的值(w1,w2)=(0,w)中的w可以取到很小的值览爵。
類似置鼻,假設(shè)有如下帶L2正則化的損失函數(shù):
J=J0+α∑ww2(2)
同樣可以畫出他們在二維平面上的圖形,如下:
圖2 L2正則化
二維平面下L2正則化的函數(shù)圖形是個(gè)圓蜓竹,與方形相比箕母,被磨去了棱角储藐。因此J0與L相交時(shí)使得w1或w2等于零的機(jī)率小了許多,這就是為什么L2正則化不具有稀疏性的原因嘶是。
擬合過程中通常都傾向于讓權(quán)值盡可能小钙勃,最后構(gòu)造一個(gè)所有參數(shù)都比較小的模型。因?yàn)橐话阏J(rèn)為參數(shù)值小的模型比較簡單聂喇,能適應(yīng)不同的數(shù)據(jù)集辖源,也在一定程度上避免了過擬合現(xiàn)象∠L可以設(shè)想一下對于一個(gè)線性回歸方程克饶,若參數(shù)很大,那么只要數(shù)據(jù)偏移一點(diǎn)點(diǎn)誊辉,就會(huì)對結(jié)果造成很大的影響矾湃;但如果參數(shù)足夠小,數(shù)據(jù)偏移得多一點(diǎn)也不會(huì)對結(jié)果造成什么影響芥映,專業(yè)一點(diǎn)的說法是『抗擾動(dòng)能力強(qiáng)』洲尊。
那為什么L2正則化可以獲得值很小的參數(shù)?
以線性回歸中的梯度下降法為例奈偏。假設(shè)要求的參數(shù)為θ坞嘀,hθ(x)是我們的假設(shè)函數(shù),那么線性回歸的代價(jià)函數(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)的迭代公式丽涩,如果在原始代價(jià)函數(shù)之后添加L2正則化,則迭代公式會(huì)變成下面的樣子:
θj:=θj(1?αλm)?α1m∑i=1m(hθ(x(i))?y(i))x(i)j(5)
其中λ就是正則化參數(shù)裁蚁。從上式可以看到矢渊,與未添加L2正則化的迭代公式相比,每一次迭代枉证,θj都要先乘以一個(gè)小于1的因子矮男,從而使得θj不斷減小,因此總得來看室谚,θ是不斷減小的毡鉴。
最開始也提到L1正則化一定程度上也可以防止過擬合。之前做了解釋秒赤,當(dāng)L1的正則化系數(shù)很小時(shí)猪瞬,得到的最優(yōu)解會(huì)很小,可以達(dá)到和L2正則化類似的效果入篮。
通常越大的λ可以讓代價(jià)函數(shù)在參數(shù)為0時(shí)取到最小值陈瘦。下面是一個(gè)簡單的例子,這個(gè)例子來自Quora上的問答潮售。為了方便敘述痊项,一些符號跟這篇帖子的符號保持一致锅风。
假設(shè)有如下帶L1正則化項(xiàng)的代價(jià)函數(shù):
F(x)=f(x)+λ||x||1
其中x是要估計(jì)的參數(shù),相當(dāng)于上文中提到的w以及θ. 注意到L1正則化在某些位置是不可導(dǎo)的线婚,當(dāng)λ足夠大時(shí)可以使得F(x)在x=0時(shí)取到最小值遏弱。如下圖:
圖3 L1正則化參數(shù)的選擇
分別取λ=0.5和λ=2,可以看到越大的λ越容易使F(x)在x=0時(shí)取到最小值塞弊。
從公式5可以看到,λ越大泪姨,θj衰減得越快游沿。另一個(gè)理解可以參考圖2,λ越大肮砾,L2圓的半徑越小诀黍,最后求得代價(jià)函數(shù)最值時(shí)各參數(shù)也會(huì)變得很小。
過擬合的解釋:
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap3/c3s5ss2.html
正則化的解釋:
https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap3/c3s5ss1.html
正則化的解釋:
http://blog.csdn.net/u012162613/article/details/44261657
正則化的數(shù)學(xué)解釋(一些圖來源于這里):