L1正則化與L2正則化詳解及解決過擬合的方法


歐氏距離(Euclidean distance)也稱歐幾里得度量、歐幾里得度量,是一個通常采用的距離定義,它是在m維空間中兩個點之間的真實距離。在二維和三維空間中的歐氏距離的就是兩點之間的距離。

Lp space


p范數:║x║p=(|x1|^p+|x2|^p+…+|xn|^p)^{1/p}

 每個值的p次方,加和,求根號p。0就是值加和,1是絕對值的加和,2是平方的加和開2次方。


1范數就是絕對值的和

L0范數是指向量中非0的元素的個數
L1范數是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)。
L2范數: ||W||2。它也不遜於L1范數,它有兩個美稱,在回歸里面,有人把有它的回歸叫“嶺回歸”(Ridge Regression),有人也叫它“權值衰減weight decay”。

重點內容


L1 norm就是絕對值相加,又稱曼哈頓距離
L2 norm就是平方和開根號,又稱歐幾里德距離

在詳細介紹L1與L2之前,先講講正則化的應用場景。

正則化方法:防止過擬合,提高泛化能力

所謂過擬合(over-fitting)其實就是所建的機器學習模型或者是深度學習模型在訓練樣本中表現得過於優越,導致在驗證數據集以及測試數據集中表現不佳。

造成過擬合的本質原因是模型學習的太過精密,導致連訓練集中的樣本噪聲也一絲不差的訓練進入了模型。

所謂欠擬合(under-fitting),與過擬合恰好相反,模型學習的太過粗糙,連訓練集中的樣本數據特征關系(數據分布)都沒有學出來。

解決過擬合的方法主要有以下幾種:

  • 數據層面:
    • 數據集擴增(Data augmentation),獲取更多的數據。
    • 特征工程,篩選組合得到更高質量的特征。
  • 模型層面:
    • 選擇較為簡單的模型
    • 集成學習,Bagging策略組合模型降低模型方差。
    • 加入正則項,如L1、L2正則項,以及樹模型的剪枝策略,XGBoost中的正則項懲罰(葉子節點值+葉子節點個數)。
  • 更多方法:
    • 早停(Early stopping),在模型的訓練精度已經到達一定的需求時停止訓練,以防止模型學習過多的樣本噪聲。
    • 加入噪聲,給定訓練樣本集更多的樣本噪聲,使得模型不易完全擬合這些噪聲,從而只在大程度上的訓練學習我們想要的數據特征關系。
    • dropout,在深度學習中,我們經常會使用dropout的方法來防止過擬合,dropout實際上借鑒來bagging的思想。
    • 正則化,常用的正則化方法就是加入L1、L2正則項。
    • BN(Batch Normalization),BN每一次訓練中所組成的Mini-Batch類似於Bagging策略,不同的Mini-Batch訓練出來的BN參數也不同。
    • 權重衰減(Weight Deacy),有時我們也會稱L2正則化為Weight Deacy,因為L2正則化會使得權重偏向於0.Weight Deacy實際上是使得模型在訓練后期,權重的變化變得很慢很慢,從而使得模型不至於在迭代后期轉而去學習更多的樣本噪聲。常用的權重衰減方法有滑動平均(Moving Average)

本文着重講解解決過擬合問題的兩大正則方法L1(Lasso)與L2(Ridge)。


在介紹L1、L2之前,我們稍微談一下L0。在談L0之前還要稍微講一下何為范數。

范數(norm)

數學上,范數是一個向量空間或矩陣上所有向量的長度和大小的求和。簡單一點,我們可以說范數越大,矩陣或者向量就越大。

L-P范數

Lp=\sqrt[p]{\sum\limits_{1}^n x_i^p},x=(x_1,x_2,\cdots,x_n)

例如一個向量:,其歐幾里得范數(2-范數)為:


L1-norm

L1范數是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)。現在我們來分析下這個價值一個億的問題:為什么L1范數會使權值稀疏?有人可能會這樣給你回答“它是L0范數的最優凸近似”。實際上,還存在一個更美的回答:任何的規則化算子,如果它在W_i=0的地方不可微,並且可以分解為一個“求和”的形式,那么這個規則化算子就可以實現稀疏。這說是這么說,W的L1范數是絕對值,|w|在w=0處是不可微,但這還是不夠直觀。這里因為我們需要和L2范數進行對比分析。

既然L0可以實現稀疏,為什么不用L0,而要用L1呢?個人理解一是因為L0范數很難優化求解(NP難問題,L0為一個0-1躍階函數,低於1范數的都不是凸的),二是L1范數是L0范數的最優凸近似,而且它比L0范數要容易優化求解。所以大家才把目光和萬千寵愛轉於L1范數。

 

 OK,來個一句話總結:L1范數和L0范數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用。

讓我們的參數稀疏有什么好處呢?這里扯兩點:

  1. 特征選擇(Feature Selection):大家對稀疏規則化趨之若鶩的一個關鍵原因在於它能實現特征的自動選擇。一般來說,xi的大部分元素(也就是特征)都是和最終的輸出yi沒有關系或者不提供任何信息的,在最小化目標函數的時候考慮xi這些額外的特征,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的信息反而會被考慮,從而干擾了對正確yi的預測。稀疏規則化算子的引入就是為了完成特征自動選擇的光榮使命,它會學習地去掉這些沒有信息的特征,也就是把這些特征對應的權重置為0。簡單來講,越好的特征包含的數據分布信息越多,差的特征也包含一定的數據分布信息,但同時還會包含大量的噪聲,特征選擇旨在於選擇出好的特征去學習,而不是為了一點點的模型訓練提升去引入學習更多的噪聲。​​​​​​​
  2. 可解釋性(Interpretability): 另一個青睞於稀疏的理由是,模型更容易解釋。最后的模型輸出是關於一堆特征的加權組合,如果特征有幾千個,解釋起來就很困難。但如果通過特征選擇過濾出來5個特征,然后經過訓練發現效果也不錯,那這樣的模型在解釋起來就容易多了。

L2-Norm

除了L1范數,還有一種更受寵幸的規則化范數是L2范數:\left \| W \right \|_2。它也不遜於L1范數,它有兩個美稱,在回歸里面,有人把有它的回歸叫“嶺回歸”(Ridge Regression),有人也叫它“權值衰減weight decay”。這用的很多吧,因為它的強大功效是改善機器學習里面一個非常重要的問題:過擬合。

L2范數是指向量各元素的平方和然后求平方根。我們讓L2范數的規則項\left \| W \right \|_2最小,可以使得W的每個元素都很小,都接近於0,但與L1范數不同,它不會讓它等於0,而是接近於0,這里是有很大的區別的哦。L2的作用就是讓所有的參數都接近於0,個人理解,L2的優越性並不主要體現在讓參數變小上,關鍵是在於讓所有的參數比較均衡。也就是說所有的特征的表達能力都差不多。這樣就不至於讓模型對某個特征特別敏感,也就是說在測試集上運行的時候,即使某個特征上有噪聲異常突出,但對於整體模型的輸出而言,並不會被這個噪聲帶偏特別多。

L2范數的好處是什么呢?這里也扯上兩點:

  1. 學習理論的角度:從學習理論的角度來說,L2范數可以防止過擬合,提升模型的泛化能力。
  2. 優化計算的角度:從優化或者數值計算的角度來說,L2范數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。參見L2范數之解救矩陣病態​​​​​​​

L1-Norm與L2-Norm

The main difference between L1 and L2 regularization is that L1 can yield sparse models while L2 doesn't. Sparse model is a great property to have when dealing with high-dimensional data, for at least 2 reasons.

  • Model compression: increasingly important due to the mobile growth
  • Feature selection: it helps to know which features are important and which features are not or redundant.

What is the difference between L1 and L2 regularization? How does it solve the problem of overfitting? Which regularizer to use and when?

翻譯過來就是,L1與L2正則化的主要差別在於L1正則化可以產出稀疏的模型但L2正則化不行。稀疏模型具有更好的特性去處理高維的數據特征,至少有以下兩個原因成立:

  • 模型壓縮:(不怎么好翻譯)隨着訓練的進行,那些真正有用的特征的重要性逐漸提高。
  • 特征選擇:可以幫助我們知道哪些特征是重要的,哪些特征是不重要的。
For simplicity, let's just consider the 1-dimensional case.

L2-regularized loss function   F(x)=f(x)+\lambda\left \| x \right \|_2^2 is smooth. This means that the optimum is the stationary point (0-derivative point). The stationary point of   F can get very small when you increase   \lambda , but still won't be 0 unless   f^{'}{(0)=0}.

L1-regularized loss function   F(x)=f(x)+\lambda\left \| x \right \|_1 is non-smooth. It's not differentiable at 0. Optimization theory says that the optimum of a function is either the point with 0-derivative or one of the irregularities (corners, kinks, etc.). So, it's possible that the optimal point of   F is 0 even if 0 isn't the stationary point of   f. In fact, it would be 0 if   \lambda is large enough (stronger regularization effect). Below is a graphical illustration.

 

In multi-dimensional settings: if a feature is not important, the loss contributed by it is small and hence the (non-differentiable) regularization effect would turn it off.

翻譯過來就是:

簡單來說,我們只考慮一維情形。L2正則化的損失函數F(x)=f(x)+\lambda\left \| x \right \|_2^2是光滑的,這意味着它的最優點是一個固定的點(在損失函數導數為0處),如果我們增大\lambda,那么這個點的函數值F會變得很小。但它不會是0,除非f^{'}{(0)=0}

L1正則化的損失函數是F(x)=f(x)+\lambda\left \| x \right \|_1是不光滑的,在x=0處不可導處不可導,最優化理論告訴我們,函數的最優點在導數為0處或者非規則點(不可導的點)處取到。x=0處不可導有可能作為函數F的最優點,即使x=0處不可導不是可導的。事實上,當\lambda足夠大的時候(強正則影響),最優點確實會在x=0處不可導處取到。

在高維情形下:如果一個特征是不重要的,那么它對於損失函數的影響就很小,即這個特征的權值即使很大,但對於損失函數的影響很小,但對於正則項的影響就很大了。此時在正則項的作用下,就會把這個特征給turn off掉(L1即為取0過濾掉,L2即為取一個很小的權重值)。


如果認真看完了上面一大段分析的話,對於L1正則與L2正則的原理應該是可以搞懂了(為什么L1是讓部分參數變為0,而L2是讓參數都趨向於0)。

 

因此,一句話總結就是:L1會趨向於產生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近於0。Lasso在特征選擇時候非常有用,而Ridge就只是一種規則化而已。

試想一下,在上圖中,如果不加正則化項,那么最優參數對應的等高線離中心點的距離可能會更近,加入正則化項后使得訓練出的參數對應的等高線離中心點的距離不會太近,也不會太遠。從而避免了過擬合。

離中心越近說明誤差越小,這樣就越容易過擬合,正則項保證了在誤差允許的范圍內卻不過與逼近中心點,即保持較好的泛化能力。

 

參考文章:

機器學習中的范數規則化之(一)L0、L1與L2范數

What is the difference between L1 and L2 regularization? How does it solve the problem of overfitting? Which regularizer to use and when?​​​​​​​

幾種范數的簡單介紹

L2正則化方法

https://blog.csdn.net/qq_32742009/article/details/81629210?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM