L1和L2正則化------直觀和全面的解釋

1.   1範數和2範數

L1和L2正則化,其實就是在損失函數後面加一個1範數或2範數約束。

1-範數:

,1範數表示向量元素絕對值之和。

2-範數:

也稱歐幾里得範數。即向量元素絕對值的平方和再開方。

 

2.   L1正則化

假設有如下帶L1正則化的損失函數:

,則 J = J0 + L

其中J0爲原來損失函數,J爲加了L1正則項後的損失函數。α是正則化係數。注意到L1正則化是權值的絕對值之和,J是帶有絕對值符號的函數,因此J是不完全可微的。機器學習的任務就是要通過一些方法(比如梯度下降)求出損失函數的最小值。當我們在原始損失函數J0 ​後添加L1正則化項時,相當於對J0做了一個約束。此時我們的任務變成在L約束下求出J0取最小值的解。

考慮二維(即兩個變量:w^{1}w^{2} )的情況,即只有兩個權值w^{1}w^{2} 。求解J0的過程可以畫出等值線(下圖彩色的圓),同時L1正則化的函數L也可以在w^{1}w^{2}二維平面上(解空間)畫出。
其中,彩色的圈是J0 的等值線,最裏面的是J0取得最小值時,w^{1}w^{2} 的取值位置。當然有人問,爲什麼J0是圓,這個鏈接有寫,感興趣可以看一看:https://blog.csdn.net/peter_mama/article/details/104208172。 而L1正則項在平面上的圖形就是菱形。若沒有正則項(即菱形),那麼w^{1}w^{2} 可以在解空間裏面 任意地取值:

有人問:爲什麼要搞個正則項,直接讓w^{1}w^{2} 任意地取值,取到J0 的最小處不就最好嗎?

原因是:J0是表示模型對訓練集的損失值,如果w^{1}w^{2} 直接去到J0的最小處(假設爲K點),則表示,模型對訓練集過擬合。因此我們加入正則項的目的是,防止模型過擬合。正則項規定,w^{1}w^{2} 只能在菱形連取值。不能超過菱形。

因此,在圖中,當菱形和等值線首次相交的地方(上圖中的黑點),就是最優解。注意到這個頂點的值是(w_{1})\left ( w^{1},w^{2} \right )=\left ( 0,w^{2} \right ),可以直觀想象,因爲LLL函數有很多『突出的角』(二維情況下四個,多維情況下更多),J0與這些角接觸的機率會遠大於與L其它部位接觸的機率,而在這些角上,會有很多權值等於0,這就是爲什麼L1正則化可以產生稀疏模型,進而可以用於特徵選擇


而正則化前面的係數α,可以控制L圖形的大小。α越小,L的圖形越大(上圖中的菱形);α越大,L的圖形就越小,可以小到黑色方框只超出原點範圍一點點。

當α很小時,則以L1爲例,上圖的菱形區域將會覆蓋 J0 的最小處(K點),則表示\left ( w^{1},w^{2} \right )能取到K點,則正則化失效,模型仍會過擬合。當α很大時,菱形區域很小,容易造成過擬合。

從梯度角度說明爲什麼L1容易稀疏:

那梯度下降法來訓練權重爲例:

切向量方向是當前運動方向,法向量是垂直切向量的。設最小點爲左圖紅色點,只有當法向量方向與 當前點與最小值方向 重合,那麼(w1,w2)點才停止運動,否則它還會沿着切向量方向運動,所以多數情況,對於L1來說,(w1,w2)點都是會運動到菱形的端點(0,w2)的,所以L1正則化,容易-產生稀疏的權重。

 

總結L1:

1. L1正則化的特點是,優化時,會有很多權值等於0,使得特徵矩陣稀疏化,進而可以用於特徵選擇。

2. 由於L1正則化容易產生權值稀疏,所以 L1也能有解決過擬合的效果。

 

3.   L2正則化

L2正則化的損失函數:

正則化也有另外的一種表達形式:

和L1畫圖的方式一樣,當損失函數應用L2正則化時,圖如下:

可以看到與L1不同的是,L2在二維(兩個變量)的圖是個圓形。那麼損失函數 J 的最優點就是圓形和等值線重合的地方,如上圖黑點處。與L1相比,L2的“菱角”被磨平,因此L與J0相交時,w^{1}w^{2} 等於0的機率小了很多。所以L2正則化是不具有稀疏性的。

L2正則化爲什麼可以獲得值很小的參數?

首先直觀看一個例子:

設輸入向量x=[1,1,1,1],兩個權重向量w_1=[1,0,0,0],w_2=[0.25,0.25,0.25,0.25]。則w_{1}^{T}x=w_{2}^{T}x=1。兩個權重向量都得到同樣的內積,但是w^{1}的L2懲罰是1.0,而w^{2} 的L2懲罰是0.25。因此,根據L2懲罰來看,w^{2}更好,因爲它的正則化損失更小。從直觀上來看,這是因爲w^{2}的權重值更小且更分散。所以L2正則化傾向於是特徵分散,更小。

理論:

以線性迴歸中的梯度下降法爲例。假設要求的參數爲θ,h_{\Theta }\left ( x \right )是我們的假設函數。線性迴歸一般使用平方差損失函數。單個樣本的平方差是\left ( h_{\Theta }\left ( x \right ) -y \right )^{2},,如果考慮所有樣本,損失函數是對每個樣本的平方差求和,假設有mmm個樣本,線性迴歸的代價函數如下,爲了後續處理方便,乘以一個常數\frac{1}{2m}。  

所以,未加正則項的損失函數如下:

在梯度下降算法中,需要先對參數求導,得到梯度。梯度本身是上升最快的方向,爲了讓損失儘可能小,沿梯度的負方向更新參數即可。

對於單個樣本,先對某個參數\Theta _{j}求導:

假設h_{\Theta }\left ( x \right )的表達式是:h_{\Theta }\left ( x \right )=\Theta _{0}x_{0}+\Theta _{1}x_{1}+....+\Theta _{n}x_{n}. 單個樣本對某個參數\Theta _{j}求導,有\frac{\partial }{\partial \Theta _{j}}h_{\Theta }(x)=x_{j},最終(3.1)式結果如下:

在考慮所有樣本的情況,將每個樣本對\Theta _{j}的導數求和即可,得到下式:

梯度下降算法中,爲了儘快收斂,會沿梯度的負方向更新參數,因此在(3.3)式前添加一個負號,並乘以一個係數α(即學習率),得到最終用於迭代計算參數\Theta _{j}的形式:

上式是沒有添加L2正則化項的迭代公式.

如果在原始代價函數之後添加L2正則化,即:

J(\Theta )=\frac{1}{2m} \sum_{m}^{i=1}(h_{\Theta }(x^{(i)})-y^{(i)})^{2}+\frac{\lambda }{2m}\sum_{j}^{n} \Theta _{j}^{2}

求導後:

\frac{\partial }{\partial \Theta _{j}}J(\Theta )=\frac{1}{m} \sum_{m}^{i=1}(h_{\Theta }(x^{(i)})-y^{(i)})\frac{\partial }{\partial \Theta_{j}}h_{\Theta (x^{(i)})}+\frac{\lambda }{m} \Theta _{j}

又在(3.2)已證:\frac{\partial }{\partial \Theta _{j}}h_{\Theta }(x)=x_{j},所以有:

\frac{\partial }{\partial \Theta _{j}}J(\Theta )=\frac{1}{m} \sum_{m}^{i=1}(h_{\Theta }(x^{(i)})-y^{(i)})x_{j}+\frac{\lambda }{m} \Theta _{j}

加入學習率α,得到最終加入L2正則後,用於迭代計算參數\Theta _{j}的形式:

我們可以看到,\Theta _{j}每次迭代時,都會先乘上一個小於1的參數,那麼\Theta _{j}就會變量越來越小。

有人問:如果λ很大,變成一個很大的負數怎麼辦?\Theta _{j}不就越來越小啦?,這個我們看看,如果λ很大,那麼正則化的區域就會非常小,由於L2正則化是一個圓,所以λ很大,那麼圓就很小,甚至接近0,所以\Theta _{j}多小都會有個極限的。

總結L2:

1. L2正則化傾向於是特徵(權重)分散,更小

2.  沒有特殊要求的情況下,能用L2就不用L1。

4.    L2正則化在pytorch的應用

優化器採用Adam,並且設置參數weight_decay=10.0,即正則化項的權重等於10.0。

當weight_decay=0.0時,表示未使用正則化

optimizer = optim.Adam(model.parameters(),lr=learning_rate,weight_decay=10.0)

但是pytorch目前的接口只支持L2正則化,不支持L1正則化

如果要用L1正則化,則需要手動實現:

regularization_loss = 0
for param in model.parameters():
    regularization_loss += torch.sum(abs(param))
 
classify_loss = criterion(pred,target)
loss = classify_loss + lamda * regularization_loss
 
optimizer.zero_grad()
loss.backward()
optimizer.step()

5.  結論性語言:

1. L1正則化容易產生稀疏權重矩陣,利於特徵選擇。也有一定的正則化能力;

2. L2正則化則傾向於生成權值較小的且分散的權值矩陣。生成的權值小的好處是,抗干擾性強,如果權值很大,那麼可能數據移動(變化)了一點點,就會產生很大的偏差。有利於提高魯棒性;

3. L1和L2都有提高泛化性能力,因爲都是要解決過擬合問題;

4. 沒有特殊要求,能用L2就用L2;

5. L1正則化符合拉普拉斯分佈,L2正則化符合高斯分佈;

 

6. Reference

https://blog.csdn.net/jinping_shi/article/details/52433975

https://blog.csdn.net/lxlhexl/article/details/90712302

https://blog.csdn.net/liuweiyuxiang/article/details/99984288

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章