
過節福利,咱們來深刻理解下L1與L2正則化。機器學習
1 正則化的概念
- 正則化(Regularization) 是機器學習中對原始損失函數引入額外信息,以便防止過擬合和提升模型泛化性能的一類方法的統稱。也就是目標函數變成了原始損失函數+額外項,經常使用的額外項通常有兩種,英文稱做\(ℓ1-norm\)和\(ℓ2-norm\),中文稱做L1正則化和L2正則化,或者L1範數和L2範數(實際是L2範數的平方)。
L1正則化和L2正則化能夠看作是損失函數的懲罰項。所謂懲罰是指對損失函數中的某些參數作一些限制。對於線性迴歸模型,使用L1正則化的模型叫作Lasso迴歸,使用L2正則化的模型叫作Ridge迴歸(嶺迴歸)。函數
線性迴歸L1正則化損失函數:
\[\min_w [\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda \|w\|_1 ]........(1)\]性能
線性迴歸L2正則化損失函數:
\[\min_w[\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda\|w\|_2^2] ........(2)\]學習
- 公式(1)(2)中\(w\)表示特徵的係數(\(x\)的參數),能夠看到正則化項是對係數作了限制。L1正則化和L2正則化的說明以下:
- L1正則化是指權值向量\(w\)中各個元素的絕對值之和,一般表示爲\(\|w\|_1\)。
- L2正則化是指權值向量\(w\)中各個元素的平方和而後再求平方根(能夠看到Ridge迴歸的L2正則化項有平方符號),一般表示爲\(\|w\|_2^2\)。
- 通常都會在正則化項以前添加一個係數\(\lambda\)。Python中用\(\alpha\)表示,這個係數須要用戶指定(也就是咱們要調的超參)。
2 正則化的做用
- L1正則化可使得參數稀疏化,即獲得的參數是一個稀疏矩陣,能夠用於特徵選擇。
- 稀疏性,說白了就是模型的不少參數是0。一般機器學習中特徵數量不少,例如文本處理時,若是將一個詞組(term)做爲一個特徵,那麼特徵數量會達到上萬個(bigram)。在預測或分類時,那麼多特徵顯然難以選擇,可是若是代入這些特徵獲得的模型是一個稀疏模型,不少參數是0,表示只有少數特徵對這個模型有貢獻,絕大部分特徵是沒有貢獻的,即便去掉對模型也沒有什麼影響,此時咱們就能夠只關注係數是非零值的特徵。這至關於對模型進行了一次特徵選擇,只留下一些比較重要的特徵,提升模型的泛化能力,下降過擬合的可能。
- L2正則化能夠防止模型過擬合(overfitting);必定程度上,L1也能夠防止過擬合。
3 L1正則化與稀疏性
- 事實上,」帶正則項」和「帶約束條件」是等價的。
爲了約束w的可能取值空間從而防止過擬合,咱們爲該最優化問題加上一個約束,就是w的L1範數不能大於m:
\[ \begin{cases} \min \sum_{i=1}^{N}(w^Tx_i - y_i)^2 \\ s.t. \|w\|_1 \leqslant m. \end{cases}........(3) \]測試
- 問題轉化成了帶約束條件的凸優化問題,寫出拉格朗日函數:
\[ \sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda (\|w\|_1-m)........(4)\]
設\(W_*\)和\(\lambda_*\)是原問題的最優解,則根據\(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)式。
- 設L1正則化損失函數:\(J = J_0 + \lambda \sum_{w} |w|\),其中\(J_0 = \sum_{i=1}^{N}(w^Tx_i - y_i)^2\)是原始損失函數,加號後面的一項是L1正則化項,\(\lambda\)是正則化係數。
- 注意到L1正則化是權值的絕對值之和,\(J\)是帶有絕對值符號的函數,所以\(J\)是不徹底可微的。機器學習的任務就是要經過一些方法(好比梯度降低)求出損失函數的最小值。當咱們在原始損失函數\(J_0\)後添加L1正則化項時,至關於對\(J_0\)作了一個約束。令\(L=\lambda \sum_w|w|\),則\(J=J_0+L\),此時咱們的任務變成在\(L\)約束下求出\(J_0\)取最小值的解。
- 考慮二維的狀況,即只有兩個權值\(w_1\)和\(w_2\),此時\(L=|w_1|+|w_2|\)對於梯度降低法,求解\(J_0\)的過程能夠畫出等值線,同時L1正則化的函數\(L\)也能夠在\(w_1\)、\(w_2\)的二維平面上畫出來。以下圖:

- 上圖中等值線是\(J_0\)的等值線,黑色方形是\(L\)函數的圖形。在圖中,當\(J_0\)等值線與\(L\)圖形首次相交的地方就是最優解。上圖中\(J_0\)與\(L\)在\(L\)的一個頂點處相交,這個頂點就是最優解。注意到這個頂點的值是\((w_1,w_2)=(0,w_2)\)。能夠直觀想象,由於\(L\)函數有不少突出的角(二維狀況下四個,多維狀況下更多),\(J_0\)與這些角接觸的機率會遠大於與\(L\)其它部位接觸的機率,而在這些角上,會有不少權值等於\(0\),這就是爲何L1正則化能夠產生稀疏模型,進而能夠用於特徵選擇。
而正則化前面的係數\(\lambda\),能夠控制\(L\)圖形的大小。\(\lambda\)越小,\(L\)的圖形越大(上圖中的黑色方框);\(\lambda\) 越大,\(L\)的圖形就越小,能夠小到黑色方框只超出原點範圍一點點,這是最優勢的值\((w_1,w_2)=(0,w_2)\)中的\(w_2\)能夠取到很小的值。spa
- 同理,又L2正則化損失函數:\(J = J_0 + \lambda \sum_w w^2\),一樣可畫出其在二維平面的圖像,以下:

二維平面下L2正則化的函數圖形是個圓,與方形相比,被磨去了棱角。所以\(J_0\)與\(L\)相交時使得\(w_1\)或\(w_2\)等於零的機率小了許多,這就是爲何L2正則化不具備稀疏性的緣由。.net
4 L2正則化爲何能防止過擬合
- 擬合過程當中一般都傾向於讓權值儘量小,最後構造一個全部參數都比較小的模型。由於通常認爲參數值小的模型比較簡單,能適應不一樣的數據集,也在必定程度上避免了過擬合現象。能夠設想一下對於一個線性迴歸方程,若參數很大,那麼只要數據偏移一點點,就會對結果形成很大的影響;但若是參數足夠小,數據偏移得多一點也不會對結果形成什麼影響,專業一點的說法是抗擾動能力強。
- 爲何L2正則化能夠得到值很小的參數?
- (1) 以線性迴歸中的梯度降低法爲例。假設要求的參數爲\(\theta\),\(h \theta (x)\)是咱們的假設函數,那麼線性迴歸的代價函數以下:
\[ 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正則化項的迭代公式,若是在原始代價函數以後添加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\)就是正則化參數。從上式能夠看到,與未添加L2正則化的迭代公式相比,每一次迭代,\(\theta_j\)都要先乘以一個小於1的因子,從而使得\(\theta_j\)不斷減少,所以總得來看,\(\theta\)是不斷減少的。
最開始也提到L1正則化必定程度上也能夠防止過擬合。以前作了解釋,當L1的正則化係數很小時,獲得的最優解會很小,能夠達到和L2正則化相似的效果。
5 正則化項的參數選擇
- L一、L2的參數\(\lambda\)如何選擇好?
- 以L2正則化參數爲例:從公式(8)能夠看到,λ越大,\(\theta_j\)衰減得越快。另外一個理解能夠參考L2求解圖, \(\lambda\)越大,L2圓的半徑越小,最後求得代價函數最值時各參數也會變得很小;固然也不是越大越好,太大容易引發欠擬合。
- 經驗
從0開始,逐漸增大\(\lambda\)。在訓練集上學習到參數,而後在測試集上驗證偏差。反覆進行這個過程,直到測試集上的偏差最小。通常的說,隨着\(\lambda\)從0開始增大,測試集的誤分類率應該是先減少後增大,交叉驗證的目的,就是爲了找到誤分類率最小的那個位置。建議一開始將正則項係數λ設置爲0,先肯定一個比較好的learning rate。而後固定該learning rate,給\(\lambda\)一個值(好比1.0),而後根據validation accuracy,將λ增大或者減少10倍,增減10倍是粗調節,當你肯定了\(\lambda\)的合適的數量級後,好比\(\lambda= 0.01\),再進一步地細調節,好比調節爲0.02,0.03,0.009之類。
參考文獻