原博客:https://daya-jin.github.io/2018/10/09/Regularization/
正則化
傳統學習模型的一般目標函數為:
后面的那一項即正則化項,也是本文主要討論的項,其中為懲罰系數,
,常用的選擇是范數。
L0范數
零范數比較特殊,一個向量的零范數是向量中非零元素的個數:
如果使用L0范數當作正則函數的話,那么肯定是希望參數向量中的零元素越多越好。但是因為L0范數是一個計數值,在優化目標時不便運算(如求導),所以一般不選用。
L1范數
顯而易見L1范數為向量中所有值的絕對值之和,是L0范數的最優凸近似,而且比L0范數要容易優化求解,所以一般不使用L0范數,而是使用L1范數來代替它。
使用L1范數作為正則函數時,優化的目標函數變為:
這也被稱為LASSO (Least Absolute Shrinkage and Selection Operator) ,它能夠產生稀疏解。下面來看一個直觀的解釋,我們需要求的最優解為:
假設此處用的損失函數為二次函數,那么目標函數的等值線是一個橢圓或圓;而約束條件為L1范數,其等值線為一個菱形。目標函數的等值線與約束邊界的圖像如下圖所示(以二維為例):
(不支持矢量圖,請移步原博客查看)
可以看到,在約束條件下的最優解,總是處于約束條件的角上,而約束條件的角上必定會出現一個或多個的情況,這就導致了解解稀疏性,在更高維的情況下也是如此。
以L1范數為正則項可以用來篩選特征,得出的非零所對應的特征是關聯特征,而那些為零的
對應的特征肯定是弱特征。
L2范數
L2范數也是應用很廣的一種正則化手段,使用L2范數的條件下,目標函數變為:
以上問題也被稱為Ridge。在講L2范數的作用之前,先要了解兩個概念:病態(ill-conditioned)矩陣與條件數(condition number)。
下面是一個病態矩陣的求解示例:
病態矩陣列向量之間的線性相關性非常高,在稍微改變一下原數據(400 -> 401)的情況下,得出來的解全然不同,這說明病態矩陣的解對與
的系數高度敏感,這明顯不是我們想要的結果。因為原始數據和真實數據有一定誤差,如果因為這些數據中的誤差而導致求出來的解與期望解相差巨大,那么這個解就是無用的。
我們用范數來衡量矩陣的病態度。首先假設數據中出現了誤差,那么有:
根據范數的三角性質
有:
易得:
可得:
同理,對于變化的,也有:
令條件數等于:
它表示了解關于方程系數的敏感度,也側面體現了矩陣中列向量之間的線性相關強度。
在線性回歸中,常用的目標函數是MSE,這種情況下,最優解可以用正規方程顯式地求出來:
但是,如果矩陣X的行數要小于列數,在數據上體現為樣本數小于特征數,那么不滿秩且不可求逆,這樣就無法求解了。
即使滿秩可求逆,如果矩陣
的條件數
很大,即數據的特征之間線性相關性很高,那么求出來的解也是不穩定的,它會因數據集的微小擾動而發生巨大變化。
然后我們看一下加入了L2正則項之后的正規方程(正規方程推導過程待補充):
因為單位陣是滿秩的,所以一定是可逆的,這樣就保證了目標函數一定有最優解。
另一方面,目標函數中加入L2正則項,也將目標函數變成了一個強凸函數(此處沒理解),能加速迭代。
最后來看一個直觀的解釋,在L2正則下,我們需要求解的最優解為:
假設此處用的損失函數為二次函數,那么目標函數的等值線是一個橢圓或圓;而約束條件為L2范數,其等值線為一個圓形。目標函數的等值線與約束邊界的圖像如下圖所示(以二維為例):
(不支持矢量圖,請移步原博客查看)
對于L2正則需要注意的幾點是:
- L2正則并沒有解決數據中特征線性相關的問題
- L2正則引入了偏差,是一種以增加偏差降低方差的方法