深入理解L1、L2正则化
過節(jié)福利,我們來深入理解下L1與L2正則化。
1 正則化的概念
- 正則化(Regularization) 是機器學(xué)習(xí)中對原始損失函數(shù)引入額外信息,以便防止過擬合和提高模型泛化性能的一類方法的統(tǒng)稱。也就是目標函數(shù)變成了原始損失函數(shù)+額外項,常用的額外項一般有兩種,英文稱作\(?1-norm\)和\(?2-norm\),中文稱作L1正則化和L2正則化,或者L1范數(shù)和L2范數(shù)(實際是L2范數(shù)的平方)。
L1正則化和L2正則化可以看做是損失函數(shù)的懲罰項。所謂懲罰是指對損失函數(shù)中的某些參數(shù)做一些限制。對于線性回歸模型,使用L1正則化的模型叫做Lasso回歸,使用L2正則化的模型叫做Ridge回歸(嶺回歸)。
線性回歸L1正則化損失函數(shù):
\[\min_w [\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda \|w\|_1 ]........(1)\]線性回歸L2正則化損失函數(shù):
\[\min_w[\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda\|w\|_2^2] ........(2)\]- 公式(1)(2)中\(w\)表示特征的系數(shù)(\(x\)的參數(shù)),可以看到正則化項是對系數(shù)做了限制。L1正則化和L2正則化的說明如下:
- L1正則化是指權(quán)值向量\(w\)中各個元素的絕對值之和,通常表示為\(\|w\|_1\)。
- L2正則化是指權(quán)值向量\(w\)中各個元素的平方和然后再求平方根(可以看到Ridge回歸的L2正則化項有平方符號),通常表示為\(\|w\|_2^2\)。
- 一般都會在正則化項之前添加一個系數(shù)\(\lambda\)。Python中用\(\alpha\)表示,這個系數(shù)需要用戶指定(也就是我們要調(diào)的超參)。
2 正則化的作用
- L1正則化可以使得參數(shù)稀疏化,即得到的參數(shù)是一個稀疏矩陣,可以用于特征選擇。
- 稀疏性,說白了就是模型的很多參數(shù)是0。通常機器學(xué)習(xí)中特征數(shù)量很多,例如文本處理時,如果將一個詞組(term)作為一個特征,那么特征數(shù)量會達到上萬個(bigram)。在預(yù)測或分類時,那么多特征顯然難以選擇,但是如果代入這些特征得到的模型是一個稀疏模型,很多參數(shù)是0,表示只有少數(shù)特征對這個模型有貢獻,絕大部分特征是沒有貢獻的,即使去掉對模型也沒有什么影響,此時我們就可以只關(guān)注系數(shù)是非零值的特征。這相當(dāng)于對模型進行了一次特征選擇,只留下一些比較重要的特征,提高模型的泛化能力,降低過擬合的可能。
- L2正則化可以防止模型過擬合(overfitting);一定程度上,L1也可以防止過擬合。
3 L1正則化與稀疏性
- 事實上,”帶正則項”和“帶約束條件”是等價的。
為了約束w的可能取值空間從而防止過擬合,我們?yōu)樵撟顑?yōu)化問題加上一個約束,就是w的L1范數(shù)不能大于m:
\[ \begin{cases} \min \sum_{i=1}^{N}(w^Tx_i - y_i)^2 \\ s.t. \|w\|_1 \leqslant m. \end{cases}........(3) \]- 問題轉(zhuǎn)化成了帶約束條件的凸優(yōu)化問題,寫出拉格朗日函數(shù):
\[ \sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda (\|w\|_1-m)........(4)\] 設(shè)\(W_*\)和\(\lambda_*\)是原問題的最優(yōu)解,則根據(jù)\(KKT\)條件得:
\[ \begin{cases} 0 = \nabla_w[\sum_{i=1}^{N}(W_*^Tx_i - y_i)^2 + \lambda_* (\|w\|_1-m)] \\ 0 \leqslant \lambda_*. \end{cases}........(5) \]- 仔細看上面第一個式子,與公式(1)其實是等價的,等價于(3)式。
- 設(shè)L1正則化損失函數(shù):\(J = J_0 + \lambda \sum_{w} |w|\),其中\(J_0 = \sum_{i=1}^{N}(w^Tx_i - y_i)^2\)是原始損失函數(shù),加號后面的一項是L1正則化項,\(\lambda\)是正則化系數(shù)。
- 注意到L1正則化是權(quán)值的絕對值之和,\(J\)是帶有絕對值符號的函數(shù),因此\(J\)是不完全可微的。機器學(xué)習(xí)的任務(wù)就是要通過一些方法(比如梯度下降)求出損失函數(shù)的最小值。當(dāng)我們在原始損失函數(shù)\(J_0\)后添加L1正則化項時,相當(dāng)于對\(J_0\)做了一個約束。令\(L=\lambda \sum_w|w|\),則\(J=J_0+L\),此時我們的任務(wù)變成在\(L\)約束下求出\(J_0\)取最小值的解。
- 考慮二維的情況,即只有兩個權(quán)值\(w_1\)和\(w_2\),此時\(L=|w_1|+|w_2|\)對于梯度下降法,求解\(J_0\)的過程可以畫出等值線,同時L1正則化的函數(shù)\(L\)也可以在\(w_1\)、\(w_2\)的二維平面上畫出來。如下圖:
- 上圖中等值線是\(J_0\)的等值線,黑色方形是\(L\)函數(shù)的圖形。在圖中,當(dāng)\(J_0\)等值線與\(L\)圖形首次相交的地方就是最優(yōu)解。上圖中\(J_0\)與\(L\)在\(L\)的一個頂點處相交,這個頂點就是最優(yōu)解。注意到這個頂點的值是\((w_1,w_2)=(0,w_2)\)??梢灾庇^想象,因為\(L\)函數(shù)有很多突出的角(二維情況下四個,多維情況下更多),\(J_0\)與這些角接觸的機率會遠大于與\(L\)其它部位接觸的機率,而在這些角上,會有很多權(quán)值等于\(0\),這就是為什么L1正則化可以產(chǎn)生稀疏模型,進而可以用于特征選擇。
而正則化前面的系數(shù)\(\lambda\),可以控制\(L\)圖形的大小。\(\lambda\)越小,\(L\)的圖形越大(上圖中的黑色方框);\(\lambda\) 越大,\(L\)的圖形就越小,可以小到黑色方框只超出原點范圍一點點,這是最優(yōu)點的值\((w_1,w_2)=(0,w_2)\)中的\(w_2\)可以取到很小的值。
- 同理,又L2正則化損失函數(shù):\(J = J_0 + \lambda \sum_w w^2\),同樣可畫出其在二維平面的圖像,如下:
二維平面下L2正則化的函數(shù)圖形是個圓,與方形相比,被磨去了棱角。因此\(J_0\)與\(L\)相交時使得\(w_1\)或\(w_2\)等于零的機率小了許多,這就是為什么L2正則化不具有稀疏性的原因。
4 L2正則化為什么能防止過擬合
- 擬合過程中通常都傾向于讓權(quán)值盡可能小,最后構(gòu)造一個所有參數(shù)都比較小的模型。因為一般認為參數(shù)值小的模型比較簡單,能適應(yīng)不同的數(shù)據(jù)集,也在一定程度上避免了過擬合現(xiàn)象。可以設(shè)想一下對于一個線性回歸方程,若參數(shù)很大,那么只要數(shù)據(jù)偏移一點點,就會對結(jié)果造成很大的影響;但如果參數(shù)足夠小,數(shù)據(jù)偏移得多一點也不會對結(jié)果造成什么影響,專業(yè)一點的說法是抗擾動能力強。
- 為什么L2正則化可以獲得值很小的參數(shù)?
- (1) 以線性回歸中的梯度下降法為例。假設(shè)要求的參數(shù)為\(\theta\),\(h \theta (x)\)是我們的假設(shè)函數(shù),那么線性回歸的代價函數(shù)如下:
\[ J_{\theta} = \frac{1}{2n}\sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)})^2 ........(6)\] - (2)在梯度下降中\(\theta\)的迭代公式為:
\[\theta_j = \theta_j - \alpha \frac{1}{n} \sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)}) x_j^{(i)}........(7)\] - (3) 其中\(\alpha\)是learning rate。 上式是沒有添加L2正則化項的迭代公式,如果在原始代價函數(shù)之后添加L2正則化,則迭代公式為:
\[\theta_j = \theta_j(1- \alpha \frac{\lambda}{n}) - \alpha \frac{1}{n} \sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)}) x_j^{(i)} ........(8)\] - 其中\(\lambda\)就是正則化參數(shù)。從上式可以看到,與未添加L2正則化的迭代公式相比,每一次迭代,\(\theta_j\)都要先乘以一個小于1的因子,從而使得\(\theta_j\)不斷減小,因此總得來看,\(\theta\)是不斷減小的。
最開始也提到L1正則化一定程度上也可以防止過擬合。之前做了解釋,當(dāng)L1的正則化系數(shù)很小時,得到的最優(yōu)解會很小,可以達到和L2正則化類似的效果。
5 正則化項的參數(shù)選擇
- L1、L2的參數(shù)\(\lambda\)如何選擇好?
- 以L2正則化參數(shù)為例:從公式(8)可以看到,λ越大,\(\theta_j\)衰減得越快。另一個理解可以參考L2求解圖, \(\lambda\)越大,L2圓的半徑越小,最后求得代價函數(shù)最值時各參數(shù)也會變得很小;當(dāng)然也不是越大越好,太大容易引起欠擬合。
- 經(jīng)驗
從0開始,逐漸增大\(\lambda\)。在訓(xùn)練集上學(xué)習(xí)到參數(shù),然后在測試集上驗證誤差。反復(fù)進行這個過程,直到測試集上的誤差最小。一般的說,隨著\(\lambda\)從0開始增大,測試集的誤分類率應(yīng)該是先減小后增大,交叉驗證的目的,就是為了找到誤分類率最小的那個位置。建議一開始將正則項系數(shù)λ設(shè)置為0,先確定一個比較好的learning rate。然后固定該learning rate,給\(\lambda\)一個值(比如1.0),然后根據(jù)validation accuracy,將λ增大或者減小10倍,增減10倍是粗調(diào)節(jié),當(dāng)你確定了\(\lambda\)的合適的數(shù)量級后,比如\(\lambda= 0.01\),再進一步地細調(diào)節(jié),比如調(diào)節(jié)為0.02,0.03,0.009之類。
參考文獻
- https://blog.csdn.net/jinping_shi/article/details/52433975
- 《百面機器學(xué)習(xí)》
轉(zhuǎn)載于:https://www.cnblogs.com/zingp/p/10375691.html
總結(jié)
以上是生活随笔為你收集整理的深入理解L1、L2正则化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 学习第四十七天shelve
- 下一篇: 从零开始的全栈工程师——js篇2.12(