神經網路正則化(1):L1/L2正則化

在神經網路出現high variance也就是overfitting的時候,regularization(正則化)是一個很常用的方法。現在應用最為廣泛的包括兩種regularization方式:

  1. L1/L2 regularization
  2. dropout regularization

其中本篇介紹L1/L2 regularization,主要包括:

  1. L1/L2 regularization以及效果
  2. 加入正則化之後的梯度下降推導
  3. 代碼實現
  4. regularization能夠解決overfitting問題的解釋

1. L1/L2 regularization

假設一個神經網路樣本為 left{ (x^{(i)},y^{(i)}) 
ight},i=1,...,m ,訓練過程中訓練樣本的預測結果為 hat{y}^{(i)},i=1,...,m .

cost function如下所示:

J(w,b)=frac{1}{m}sum_{i=1}^{m}{L(hat{y}^{(i)},{y}^{(i)})} 	ag{1}

1.1 L2 regularization

L2正則化是給cost function加上正則項:

J(w,b)=frac{1}{m}sum_{i=1}^{m}{L(hat{y}^{(i)},{y}^{(i)})} + frac{lambda}{2m}||w||^2_2 	ag{2}

例如針對交叉熵代價函數,得到的損失函數為:

J(w,b)=small underbrace{-frac{1}{m} sumlimits_{i = 1}^{m} large{(}small y^{(i)}logleft(a^{[L](i)}
ight) + (1-y^{(i)})logleft(1- a^{[L](i)}
ight) large{)} }_	ext{cross-entropy cost} + underbrace{frac{1}{m} frac{lambda}{2} sumlimits_lsumlimits_ksumlimits_j W_{k,j}^{[l]2} }_	ext{L2 regularization cost} 	ag{3}

L2正則損失部分是神經網路中每一層的權重矩陣 W^{[l]} 的Frobenius範數的平方和,假設第l層的權重矩陣維度是 W^{[l]}in R^{n_l	imes n_{l-1}} ,那麼計算如下所示:

||w||^2_2=sum_{l=1}^{L}{||W^{[l]}||_F^2}=sum_{l=1}^{L}{sum_{i=1}^{n_l}{sum_{j=1}^{n_{l-1}}{W^{[l]}_{i,j}}^2}} 	ag{4}

在實現中可以採用下面的方式來求取每一層的權重矩陣的L2正則損失部分,然後累加即可。

np.sum(np.square(Wl))

在修改了損失函數之後,必然要修改梯度下降方向,由於正則化部分的影響,需要對原本的梯度下降方向加上下面的部分:

frac{d}{dW} ( frac{1}{2}frac{lambda}{m} W^2) = frac{lambda}{m} W 	ag{5}

因此梯度下降方向變為:

W^{[l]}:=W^{[l]}-alpha(frac{1}{m} dZ^{[l]} A^{[l-1] T}+frac{lambda}{m}W^{[l]})\ =W^{[l]}-alphafrac{1}{m} dZ^{[l]} A^{[l-1] T}-frac{alphalambda}{m}W^{[l]})\ =(1-frac{alphalambda}{m})W^{[l]}-alphafrac{1}{m} dZ^{[l]} A^{[l-1] T} 	ag{6}

可以看到不論 W^{[l]} 是什麼,我們都試圖讓它變得更小,實際上,相當於我們給矩陣W乘以 (1-frac{alphalambda}{m}) 倍的權重,矩陣減去 frac{alphalambda}{m} 倍的它,因此範數正則化也被稱為「權重衰減」.

在計算 dW^{[l]} 時可以採用如下所示的方法:

dW2 = 1./m * np.dot(dZ2, A1.T) + lambd / m * W2

1.2 L1 regularization

L1正則化採用的正則化項如下所示:

J(w,b)=frac{1}{m}sum_{i=1}^{m}{L(hat{y}^{(i)},{y}^{(i)})} + frac{lambda}{2m}||w||_1 	ag{7}

其中正則項計算為:

||w||^2_2=sum_{l=1}^{L}{||W^{[l]}||_F^2}=sum_{l=1}^{L}{sum_{i=1}^{n_l}{sum_{j=1}^{n_{l-1}}{|W^{[l]}_{i,j}}|}} 	ag{8}

這裡稱為L1正則化,其實是對應到向量的1-範數,而矩陣範數里的1範數並不是這裡的正則化計算方法,因此有點尷尬容易混淆。

修改加入了L1正則化的梯度下降方法為:

frac{d}{dW} (frac{lambda}{m}||w||_1) = frac{lambda}{m}sgn(w) 	ag{9}

整體梯度下降為:

W^{[l]}:=W^{[l]}-alpha(frac{1}{m} dZ^{[l]} A^{[l-1] T}+ frac{lambda}{m}sgn(W^{[l]}) )\ =W^{[l]}-alphafrac{1}{m} dZ^{[l]} A^{[l-1] T}-frac{alphalambda}{m}sgn(W^{[l]})\	ag{10}

可以看到在L1正則化中,權重通過一個常量向0進行縮小,因為取得是 sgn(W^{[l]})


2. L1/L2正則化的區別

通過上面的推導我們可以看出,

  1. 在L1規範化中,權重通過一個常量向0進行縮小;在L2規範化中,權重通過一個和w成比例的量進行縮小
  2. 當一個特定的權重絕對值|w|很大時,L1規範化的權重縮小要比L2規範化小很多;當一個特定的權重絕對值|w|很小時,L1規範化的權重縮小要比L2規範化大很多
  3. L1規範化傾向於聚集網路的權重在相對少量的高重要度的連接上,而其他權重會被驅使向0接近
  4. 在w=0處偏導數不存在,此時使用無規範化的隨機梯度下降規則,因為規範化的效果是縮小權重,不能對一個已經是0的權重進行縮小

3. 正則化為什麼能解決overfitting的問題?

為什麼正則化有利於預防過擬合呢?為什麼它可以減少方差問題?我們通過兩個例子來直觀體會一下

左圖是高偏差,右圖是高方差,中間是Just Right

現在我們來看下這個龐大的深度擬合神經網路。我知道這張圖不夠大,深度也不夠,但你可以想像這是一個過擬合的神經網路。我們添加正則項,它可以避免數據權值矩陣過大,這就是弗羅貝尼烏斯範數,為什麼壓縮範數,或者弗羅貝尼烏斯範數或者參數可以減少過擬合?

直觀上理解就是如果正則化設置得足夠大,權重矩陣被設置為接近於0的值,直觀理解就是把多隱藏單元的權重設為0,於是基本上消除了這些隱藏單元的許多影響。如果是這種情況,這個被大大簡化了的神經網路會變成一個很小的網路,小到如同一個邏輯回歸單元,可是深度卻很大,它會使這個網路從過度擬合的狀態更接近左圖的高偏差狀態。

但是會存在一個中間值,於是會有一個接近「Just Right」的中間狀態。

直觀理解就是增加到足夠大,會接近於0,實際上是不會發生這種情況的,我們嘗試消除或至少減少許多隱藏單元的影響,最終這個網路會變得更簡單,這個神經網路越來越接近邏輯回歸,我們直覺上認為大量隱藏單元被完全消除了,其實不然,實際上是該神經網路的所有隱藏單元依然存在,但是它們的影響變得更小了。神經網路變得更簡單了,貌似這樣更不容易發生過擬合,因此我不確定這個直覺經驗是否有用,不過在編程中執行正則化時,你實際看到一些方差減少的結果。

我們進入到神經網路內部來直觀感受下為什麼正則化會預防過擬合的問題,假設我們採用了tanh的雙曲線激活函數

如果使用了正則化部分,那麼權重W會傾向於更小,因此得到的 Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]} 會更小,在作用在激活函數的時候會接近於上圖中橫軸零點左右的部分,如下圖所示:

如果 z 的值最終在這個範圍內,都是相對較小的值, g(z)=	anh(z) 大致呈線性,每層幾乎都是線性的,和線性回歸函數一樣。如果每層都是線性的,那麼整個網路就是一個線性網路,即使是一個非常深的深層網路,因具有線性激活函數的特徵,最終我們只能計算線性函數,因此,它不適用於非常複雜的決策,以及過度擬合數據集的非線性決策邊界。

下一章我們實現加入L2正則化的神經網路模型。

推薦閱讀:

Paper Reading | 讓機器像人類一樣學畫畫?GANs 「全家福」一覽
機器學習研究人員需要了解的8個神經網路架構(上)
【4】如何理解CNN中的卷積?
膠囊網路結構Capsule初探

TAG:機器學習 | 神經網路 |