1. 程式人生 > >機器學習筆記:正則化項

機器學習筆記:正則化項

在機器學習演算法中如果只使用經驗風險最小化去優化損失函式則很可能造成過擬合的問題,通常我們要在損失函式中加入一些描述模型複雜程度的正則化項,使得模型在擁有較好的預測能力的同時不會因為模型過於複雜而產生過擬合現象,即結構風險最小化
正則化項一般是模型複雜程度的單調遞增函式,因此可以使用模型引數向量的範數來計算

一部分內容在數學上的定義更為廣泛,大家可以看看相關資料。這裡只涉及了一些和機器學習有關的定義,可能不是很嚴謹

L-p範數

L-p範數定義如下
Lp=(ixip)1p L^{p} = (\sum_{i}{|x_{i}|^{p}})^{\frac{1}{p}}

p)p1
在機器學習中常見的有L0、L1和L2範數

L0範數

L0範數為引數向量中非零值的個數
x0=iI(xi0) ||x||_{0} = \sum_{i}{I(x_{i} \neq 0)}
其中 I(bool)I(bool)bool 的值為 True 時值為1,為 False 時值為0
因為L0範數沒有很好的數學表達形式,所以很少直接優化L0範數

L1範數

L1範數為引數向量中元素絕對值之和
x1=ixi ||x||_{1} = \sum_{i}{|x_{i}|}

L2範數

L2範數為引數向量的歐氏距離

x2=ixi2 ||x||_{2} = \sqrt{\sum_{i}{x_{i}^{2}}}
通常直接使用L2範數的平方值 x22||x||_{2}^{2}

不同正則化項的區別

最常用的應該是使用L1範數的L1正則化和使用L2範數的L2正則化,二者都能對模型起到一定的防止過擬合的效果,但是在對引數的更新上,因為二者的梯度計算方式不同,使得二者的性質也有很大的不同

L1正則化

帶L1正則化項的損失函式
Loss=C0+λnw1 Loss = C_{0} + \frac{\lambda}{n} ||w||_{1}

0+nλw1
其中 λ\lambda 為正則化引數,對其求導得到
Losswi=C0wi+λnjwjwi=C0wi+λnsign(wi) \frac{\partial Loss}{\partial w_{i}} = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} * \frac{\partial \sum_{j}{|w_{j}|}}{\partial w_{i}} \\ = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} sign(w_{i})
因此引數更新方程為
wi=:wiη(C0wi+λnsign(wi)) w_{i} =: w_{i} - \eta (\frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} sign(w_{i}))
這使得在梯度下降時,引數 w 的更新直接向著 w 反方向移動,在 w 大於零時減小,在 w 小於零時增大,最後的結果就是有更多的引數會等於零
因此L1正則化項能使得引數等於零,實現引數的稀疏化,也可以視為一種特徵的選擇,從而達到防止過擬合的作用
L1正則化因為存在絕對值函式,所以並不能保證所有點都可導,因此也有很多額外的理論研究

L2正則化

帶L2正則化的損失函式通常使用L2範數的平方
Loss=C0+λ2nw22 Loss = C_{0} + \frac{\lambda}{2 n} ||w||_{2}^{2}
其中分母中的2是為了求導運算的方便而加入的,L2範數有較好的數學性質,也易於求導,對其求導得到
Losswi=C0wi+λ2njw2wi=C0wi+λnwi \frac{\partial Loss}{\partial w_{i}} = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{2n} * \frac{\partial \sum_{j}{w^{2}}}{\partial w_{i}} \\ = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} w_{i}
因此引數更新方程為
wi=:wiη(C0wi+λnwi)=(1ηλn)wiηC0wi w_{i} =: w_{i} - \eta (\frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} w_{i}) \\ = (1 - \frac{\eta \lambda}{n}) w_{i} - \eta \frac{\partial C_{0}}{\partial w_{i}}
與L1正則化最大的不同是引數 w 在更新時是按比例 1ηλn1 - \frac{\eta \lambda}{n} 變化的,所以部分引數會減小,而不是變為0
很容易理解引數變為0可以防止過擬合,那麼減小引數是如何減小過擬合的呢?
直觀的講,過擬合就是對區域性的錯誤樣本進行擬合,這使得在錯誤樣本附近函式會劇烈的變化
在這裡插入圖片描述
如果所有引數都很小,那麼在輸入變化很小的情況下,輸出就很難有這麼大的變化,在一定程度上就能環節過擬合現象