【机器学习】L1正则化与L2正则化详解及解决过拟合的方法
在詳細介紹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范數
與閔可夫斯基距離的定義一樣,L-P范數不是一個范數,而是一組范數,其定義如下:?
根據P 的變化,范數也有著不同的變化,一個經典的有關P范數的變化圖如下:?
上圖表示了p從無窮到0變化時,三維空間中到原點的距離(范數)為1的點構成的圖形的變化情況。以常見的L-2范數(p=2)為例,此時的范數也即歐氏距離,空間中到原點的歐氏距離為1的點構成了一個球面。
例如一個向量:,其歐幾里得范數(2-范數)為:
L0-norm與L1-norm
L0范數是指向量中非0的元素的個數。如果我們用L0范數來規則化一個參數矩陣W的話,就是希望W的大部分元素都是0。這太直觀了,太露骨了吧,換句話說,讓參數W是稀疏的。OK,看到了“稀疏”二字,大家都應該從當下風風火火的“壓縮感知”和“稀疏編碼”中醒悟過來,原來用的漫山遍野的“稀疏”就是通過這玩意來實現的。但你又開始懷疑了,是這樣嗎?看到的papers世界中,稀疏不是都通過L1范數來實現嗎?腦海里是不是到處都是的影子呀!幾乎是抬頭不見低頭見。沒錯,這就是這節的題目把L0和L1放在一起的原因,因為他們有著某種不尋常的關系。那我們再來看看L1范數是什么?它為什么可以實現稀疏?為什么大家都用L1范數去實現稀疏,而不是L0范數呢?
L1范數是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)?,F在我們來分析下這個價值一個億的問題:為什么L1范數會使權值稀疏?有人可能會這樣給你回答“它是L0范數的最優凸近似”。實際上,還存在一個更美的回答:任何的規則化算子,如果它在的地方不可微,并且可以分解為一個“求和”的形式,那么這個規則化算子就可以實現稀疏。這說是這么說,W的L1范數是絕對值,|w|在w=0處是不可微,但這還是不夠直觀。這里因為我們需要和L2范數進行對比分析。
既然L0可以實現稀疏,為什么不用L0,而要用L1呢?個人理解一是因為L0范數很難優化求解(NP難問題,L0為一個0-1躍階函數,低于1范數的都不是凸的),二是L1范數是L0范數的最優凸近似,而且它比L0范數要容易優化求解。所以大家才把目光和萬千寵愛轉于L1范數。
?OK,來個一句話總結:L1范數和L0范數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用。
讓我們的參數稀疏有什么好處呢?這里扯兩點:
L2-Norm
除了L1范數,還有一種更受寵幸的規則化范數是L2范數:。它也不遜于L1范數,它有兩個美稱,在回歸里面,有人把有它的回歸叫“嶺回歸”(Ridge Regression),有人也叫它“權值衰減weight decay”。這用的很多吧,因為它的強大功效是改善機器學習里面一個非常重要的問題:過擬合。至于過擬合是什么,上面也解釋了,就是模型訓練時候的誤差很小,但在測試的時候誤差很大,也就是我們的模型復雜到可以擬合到我們的所有訓練樣本了,但在實際預測新的樣本的時候,糟糕的一塌糊涂。通俗的講就是應試能力很強,實際應用能力很差。擅長背誦知識,卻不懂得靈活利用知識。
L2范數是指向量各元素的平方和然后求平方根。我們讓L2范數的規則項最小,可以使得W的每個元素都很小,都接近于0,但與L1范數不同,它不會讓它等于0,而是接近于0,這里是有很大的區別的哦。L2的作用就是讓所有的參數都接近于0,個人理解,L2的優越性并不主要體現在讓參數變小上,關鍵是在于讓所有的參數比較均衡。也就是說所有的特征的表達能力都差不多。這樣就不至于讓模型對某個特征特別敏感,也就是說在測試集上運行的時候,即使某個特征上有噪聲異常突出,但對于整體模型的輸出而言,并不會被這個噪聲帶偏特別多。
L2范數的好處是什么呢?這里也扯上兩點:
關于L2在condition number優化角度的處理,篇幅問題,會再開一篇。
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正則化不行。稀疏模型具有更好的特性去處理高維的數據特征,至少有以下兩個原因成立:
- 模型壓縮:(不怎么好翻譯)隨著訓練的進行,那些真正有用的特征的重要性逐漸提高。
- 特征選擇:可以幫助我們知道哪些特征是重要的,哪些特征是不重要的。
L2-regularized loss function??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?,?but still won't be 0 unless?.
L1-regularized loss function??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??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正則化的損失函數是光滑的,這意味著它的最優點是一個固定的點(在損失函數導數為0處),如果我們增大,那么這個點的函數值會變得很小。但它不會是0,除非。
L1正則化的損失函數是是不光滑的,在處不可導,最優化理論告訴我們,函數的最優點在導數為0處或者非規則點(不可導的點)處取到。有可能作為函數的最優點,即使不是可導的。事實上,當足夠大的時候(強正則影響),最優點確實會在處取到。
在高維情形下:如果一個特征是不重要的,那么它對于損失函數的影響就很小,即這個特征的權值即使很大,但對于損失函數的影響很小,但對于正則項的影響就很大了。此時在正則項的作用下,就會把這個特征給turn off掉(L1即為取0過濾掉,L2即為取一個很小的權重值)。
如果認真看完了上面一大段分析的話,對于L1正則與L2正則的原理應該是可以搞懂了(為什么L1是讓部分參數變為0,而L2是讓參數都趨向于0)。
模型空間上的限制
實際上,對于L1和L2規則化的代價函數來說,我們可以寫成以下形式:
也就是說,我們要將模型空間限制在w的一個L1-ball 中。為了便于可視化,我們考慮兩維的情況,在(w1, w2)平面上可以畫出目標函數的等高線,而約束條件則成為平面上半徑為C的一個 norm ball 。等高線與 norm ball 首次相交的地方就是最優解:
彩色的圈就是min要最小化的損失函數等高線圖。最中心就是損失函數誤差最小的點。左圖的正方形邊界及內部點就是L1正則化所產生的約束條件。如何理解為什么是一個正方形:L1正則化的定義,畫出來就是這個樣子。
同理,L2正則化是一個圓形,也是這么來的。
可以看到,L1-ball 與L2-ball 的不同就在于L1在和每個坐標軸相交的地方都有“角”出現,而目標函數的測地線除非位置擺得非常好,大部分時候都會在角的地方相交。注意到在角的位置就會產生稀疏性,例如圖中的相交點就有w1=0,而更高維的時候(想象一下三維的L1-ball 是什么樣的?)除了角點以外,還有很多邊的輪廓也是既有很大的概率成為第一次相交的地方,又會產生稀疏性。
相比之下,L2-ball 就沒有這樣的性質,因為沒有角,所以第一次相交的地方出現在具有稀疏性的位置的概率就變得非常小了。這就從直觀上來解釋了為什么L1-regularization 能產生稀疏性,而L2-regularization 不行的原因了。
因此,一句話總結就是: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正則化方法
總結
以上是生活随笔為你收集整理的【机器学习】L1正则化与L2正则化详解及解决过拟合的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】最大熵模型(Maximum
- 下一篇: 【机器学习】岭回归(L2正则在干嘛!)