參考:http://blog.csdn.net/vividonly/article/details/50723852
http://www.cnblogs.com/little-YTMM/p/5879093.html
http://blog.csdn.net/zouxy09/article/details/24971995
引子
在介紹L0/L1/L2範數之前,先做個鋪墊:L0/L1/L2範數有什麼用?為什麼要引入L0/L1/L2範數。
監督機器學習問題,就是在規則化參數的同時最小化誤差。最小化誤差是為了讓我們的模型拟合我們的訓練資料,而規則化參數是防止我們的模型過分拟合我們的訓練資料,也就是能使模型“簡單”,使模型稀疏、低秩、平滑等,進而具有更好的泛化能力。
規則化符合奧卡姆剃刀(Occam's razor)原理:在所有可能選擇的模型中,我們應該選擇能夠很好地解釋已知資料并且十分簡單的模型。從貝葉斯估計的角度來看,規則化項對應于模型的先驗機率。民間還有個說法就是,規則化是結構風險最小化政策的實作,是在經驗風險上加一個正則化項(regularizer)或懲罰項(penalty term)。
監督學習可以看做最小化下面的目标函數:

第一項Loss函數,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了。不同的loss函數,具有不同的拟合特性。
規則化函數Ω(w)也有很多種選擇,一般是模型複雜度的單調遞增函數,模型越複雜,規則化值就越大。常見的都聚集在:L0範數、L1範數、L2範數等。
L0範數
L0範數表示參數中非零元素的個數:
也就是如果我們使用L0範數,即希望參數w是稀疏的(大部分元素都是0,隻有幾個非零參數對應的特征對結果有影響)是以可以用于ML中做稀疏編碼,特征選擇。通過最小化L0範數,來尋找最少最優的稀疏特征項。既然L0可以實作稀疏,為什麼不用L0,而要用L1呢?個人了解一是因為L0範數很難優化求解(NP難問題),二是L1範數是L0範數的最優凸近似,而且它比L0範數要容易優化求解。
實作參數的稀疏有什麼好處嗎?
一是可以簡化模型,避免過拟合。因為一個模型中真正重要的參數可能并不多,如果考慮所有的參數起作用,那麼可以對訓練資料可以預測的很好,但是對測試資料就隻能呵呵了。二是可以特征選擇,選擇參數非零的特征即可,而且使整個模型獲得更好的可解釋性,隻有幾個非零參數對結果有影響,更好解釋。
L1範數 -- (Lasso Regression)
L1正則化表示各個參數絕對值之和。
L1正則化之是以可以防止過拟合,是因為L1範數就是各個參數的絕對值相加得到的,參數值大小和模型複雜度是成正比的。是以複雜的模型,其L1範數就大,最終導緻損失函數就大,說明這個模型就不夠好。L1範數的解通常是稀疏性的。
參數值越小代表模型越簡單嗎?
是的。越複雜的模型,越是會嘗試對所有的樣本進行拟合,甚至包括一些異常樣本點,這就容易造成在較小的區間裡預測值産生較大的波動,這種較大的波動也反映了在這個區間裡的導數很大,而隻有較大的參數值才能産生較大的導數。是以複雜的模型,其參數值會比較大。
L2範數 -- (Ridge Regression)
L2正則化辨別各個參數的平方的和的開方值,也就是歐氏距離,在正則項上沒有添加sqrt根号是為了更加容易優化
L2正則化可以防止過拟合的原因和L1正則化一樣,隻是形式不太一樣。L2範數越小,可以使得參數的每個元素都很小,接近于0,但L1範數不同的是他不會讓參數等于0而是接近于0,有參數平滑的作用
L1會趨向于産生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近于0。Lasso在特征選擇時候非常有用,而Ridge就隻是一種規則化而已。L1能産生稀疏性,而L2不行。在所有特征中隻有少數特征起重要作用的情況下,選擇Lasso比較合适,因為它能自動選擇特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那麼使用Ridge也許更合适。
L1正則化的優點是優化後的參數向量往往比較稀疏;L2正則化的優點是其正則化項處處可導。
貝葉斯先驗
從貝葉斯先驗的角度看,加入正則項相當于加入了一種先驗。即當訓練一個模型時,僅依靠目前的訓練資料集是不夠的,為了實作更好的泛化能力,往往需要加入先驗項。
- L1範數相當于加入了一個Laplacian先驗;
-
L2範數相當于加入了一個Gaussian先驗。
如下圖所示:
L0、L1與L2範數