引入
監督學習的過程可以概括為:最小化誤差的同時規則化參數。最小化誤差是為了讓模型擬合訓練數據,規則化參數是為了防止過擬合。參數過多會導致模型復雜度上升,產生過擬合,即訓練誤差很小,但測試誤差很大,這和監督學習的目標是相違背的。所以需要采取措施,保證模型盡量簡單的基礎上,最小化訓練誤差,使模型具有更好的泛化能力(即測試誤差也很小)。
范數規則化有兩個作用:
1)保證模型盡可能的簡單,避免過擬合。
2)約束模型特性,加入一些先驗知識,例如稀疏、低秩?等。
先討論幾個問題:
1)實現參數的稀疏有什么好處嗎?
一個好處是可以簡化模型,避免過擬合。因為一個模型中真正重要的參數可能并不多,如果考慮所有的參數起作用,那么可以對訓練數據可以預測的很好,但是對測試數據就只能呵呵了。另一個好處是參數變少可以使整個模型獲得更好的可解釋性。
2)參數值越小代表模型越簡單嗎?
是的。為什么參數越小,說明模型越簡單呢,這是因為越復雜的模型,越是會嘗試對所有的樣本進行擬合,甚至包括一些異常樣本點,這就容易造成在較小的區間里預測值產生較大的波動,這種較大的波動也反映了在這個區間里的導數很大,而只有較大的參數值才能產生較大的導數。因此復雜的模型,其參數值會比較大。
L0范數
L0是指向量中非0的元素的個數。如果我們用L0范數來規則化一個參數矩陣W的話,就是希望W的大部分元素都是0。換句話說,讓參數W是稀疏的。
但不幸的是,L0范數的最優化問題是一個NP hard問題,而且理論上有證明,L1范數是L0范數的最優凸近似,因此通常使用L1范數來代替。
L1范數
L1范數是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)。
L1正則化之所以可以防止過擬合,是因為L1范數就是各個參數的絕對值相加得到的,我們前面討論了,參數值大小和模型復雜度是成正比的。因此復雜的模型,其L1范數就大,最終導致損失函數就大,說明這個模型就不夠好。
L2范數
也叫“嶺回歸”(Ridge Regression),也叫它“權值衰減weight decay”
但與L1范數不一樣的是,它不會是每個元素為0,而只是接近于0。越小的參數說明模型越簡單,越簡單的模型越不容易產生過擬合現象。
L2范數即歐氏距離:
L1為什么比L2更容易獲得稀疏解?
為什么L1稀疏,L2平滑?
從兩個角度來解釋這個問題。
角度一:數學公式
這個角度從權值的更新公式來看權值的收斂結果。
首先來看看L1和L2的梯度(導數的反方向):
所以(不失一般性,我們假定:wi等于不為0的某個正的浮點數,學習速率η 為0.5):
L1的權值更新公式為wi= wi-?η * 1 ?= wi- 0.5 * 1,也就是說權值每次更新都固定減少一個特定的值(比如0.5),那么經過若干次迭代之后,權值就有可能減少到0。
L2的權值更新公式為wi= wi-?η * wi= wi- 0.5 * wi,也就是說權值每次都等于上一次的1/2,那么,雖然權值不斷變小,但是因為每次都等于上一次的一半,所以很快會收斂到較小的值但不為0。
L1能產生等于0的權值,即能夠剔除某些特征在模型中的作用(特征選擇),即產生稀疏的效果。
L2可以得迅速得到比較小的權值,但是難以收斂到0,所以產生的不是稀疏而是平滑的效果。
角度二:幾何空間
這個角度從幾何位置關系來看權值的取值情況。
直接來看下面這張圖:
高維我們無法想象,簡化到2維的情形,如上圖所示。其中,左邊是L1圖示,右邊是L2圖示,左邊的方形線上是L1中w1/w2取值區間,右邊得圓形線上是L2中w1/w2的取值區間,綠色的圓圈表示w1/w2取不同值時整個正則化項的值的等高線(凸函數),從等高線和w1/w2取值區間的交點可以看到,L1中兩個權值傾向于一個較大另一個為0,L2中兩個權值傾向于均為非零的較小數。這也就是L1稀疏,L2平滑的效果。
假設原先損失函數是C0,那么在L2和L1正則條件下對參數求導分別是:
可以想象用梯度下降的方法,當w小于1的時候,L2正則項的懲罰效果越來越小,L1正則項懲罰效果依然很大,L1可以懲罰到0,而L2很難。
elastic net
L1+L2結合的方式,即elastic net。這種方式同時兼顧特征選擇(L1)和權重衰減(L2)。其公式如下這種方式同時兼顧特征選擇(L1)和權重衰減(L2)。其公式如下
上式中,t為正則項與L(w)之間的trade-off系數,和之前的描述一致,p是elastic net里獨有的參數,它是L1和L2之間的一個trade-off,如果p為0,那么上式退化為L2正則化,如果p為1,那么上式退化為L1正則化。所以當p取值為0到1時(不包含端點),上式兼顧了L1和L2的特點。又由于L1為1范式,L2為2范式,那么elastic net就介于1范式和2范式之間。
總結:L1會趨向于產生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近于0。Lasso在特征選擇時候非常有用,而Ridge就只是一種規則化而已。在所有特征中只有少數特征起重要作用的情況下,選擇Lasso比較合適,因為它能自動選擇特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge也許更合適。
https://www.zhihu.com/question/20473040?utm_campaign=rss&utm_medium=rss&utm_source=rss&utm_content=title