神經網路可能會存在過擬合,那麼建議你首先對模型進行正則化處理。雖然使用更多的訓練資料是肯定可以解決過擬合問題的,但問題是我們無法獲得更多訓練資料,即使能獲取也太貴了。所以正則化是首選方案。
正則化方法有很多。l2正則化就是其中一種常見的方法。它的實現主要分為兩步。第一步,就是在成本函式後面加點「尾巴」;第二步就是在計算偏導數的時候加點「尾巴」。我們以邏輯回歸為例來實現l2正則化,求成本函式j的最小值,
j =1
m∑i=
0ml(
y′i,
yi
)j=\frac\sum_^ml(y'^i,y^i)
j=m1∑
i=0m
l(y
′i,y
i)下式是加了l2正則化尾巴的成本函式。
j =1
m∑i=
0ml(
y′i,
yi)+
λ2m∣
∣w∣∣
2j=\frac\sum_^ml(y'^i,y^i)+\frac||w||^2
j=m1∑
i=0m
l(y
′i,y
i)+2
mλ∣
∣w∣∣
2它是我們定義的成本函式,引數包含一些訓練資料和不同資料中個體**的損失,w和b是邏輯回歸的兩個引數,w是乙個多維度引數向量,b是乙個實數,λ是乙個超引數,被稱為正則化引數,m是樣本數量。
上面所說的是單神經元網路的正則化,多神經元網路的正則化也是類似的。
j =1
m∑i=
0ml(
y′i,
yi)+
λ2m∑
l=0l
∣∣w∣
∣2
j=\frac\sum_^ml(y'^i,y^i)+\frac\sum_^l||w||^2
j=m1∑
i=0m
l(y
′i,y
i)+2
mλ∑
l=0l
∣∣w
∣∣2與單神經元網路不同的是多了乙個累加操作,就是把每層的結果再累加起來。通俗來說就是把神經元網路每層的每個權重的平方再統統累加起來(單神經元網路只有一層)。這裡的w已經從乙個向量變成了矩陣,但本質是沒有變的,還是簡單地將所有元素的平方累加起來,即所有元素的平方和。
在成本函式後面加了「尾巴」後,第二步就是在計算偏導數的時候加「尾巴」了。如下所示。
d wl
=1md
zl∗d
al−1
.t+λ
mw
ldw^l=\fracdz^l * da^.t+\fracw^l
dwl=m1
dzl
∗dal
−1.t
+mλ
wlw l=
wl−α
∗dwl
=(1−
αλm)
wl−1
mdzl
∗dal
−1.t
w^l=w^l-\alpha *dw^l=(1-\frac)w^l -\fracdz^l * da^.t
wl=wl−
α∗dw
l=(1
−mαλ
)wl
−m1
dzl∗
dal−
1.t
加了尾巴之後,實際上,相當於我們給矩陣w乘以(1-a λ/m)倍的權重,矩陣w減去α λ/m倍的它,也就是用這個係數(1-a λ/m)乘以矩陣w,該係數小於1,因此l2範數正則化也被稱為「權重衰減。
那麼為什麼l2正則化有利於防止過擬合?
直觀上理解就是,如果正則化λ設定得足夠大,權重矩陣w被設定為接近於0的值,直觀理解就是把多隱藏單元的權重設為0,於是基本上消除了這些隱藏單元的許多影響。如果是這種情況,這個被大大簡化了的神經網路會變成乙個很小的網路,小到如同乙個邏輯回歸單元,這個神經網路就變成了很簡單的網路了,所以就避免了過擬合,當然有時候反而會導致了欠擬合。
上面說權重為0後就變成了簡單的神經網路,這只是便於大家理解所說的極端的話。其它的神經元還是起作用的。如果不起作用,那我們為什麼要用大型神經網路呢,還不如直接用個小點的神經網路。
另外還有一點需要說明一下。上面我們只對引數w做了衰減。那為什麼不對b也作衰減呢。因為神經網路中w的數量很多,而b乙個神經元只有乙個,數量很少。所以我們一般懶得去衰減它,因為影響力太小。
深度學習之 L1和L2正則化
機器學習中,如果引數過多,模型過於複雜,容易造成過擬合 overfit 即模型在訓練樣本資料上表現的很好,但在實際測試樣本上表現的較差,不具備良好的泛化能力。為了避免過擬合,最常用的一種方法是使用使用正則化,例如 l1 和 l2 正則化。但是,正則化項是如何得來的?其背後的數學原理是什麼?l1 正則...
L1正則化和L2正則化
為了降低過擬合風險,需要控制模型複雜度,自然想到減少引數個數,但是這個問題不易直接解決,可以通過放寬條件控制。新增優化條件 這會使引數條件空間有明顯的凸角,這些突出點顯然會成為聯合優化時的最優解,但同時這些這些凸點中又會有較多的0值 由其限制條件可見,凸點都在座標軸上 因此l1範數會更易得到稀疏解,...
L1正則化和L2正則化
l1標準化與l2標準化 參考 l1 l2標準化及其python 實現 我們知道,正則化的目的是限制引數過多或者過大,避免模型更加複雜。l1 與 l2 解的稀疏性 以二維情況討論,上圖左邊是 l2 正則化,右邊是 l1 正則化。從另乙個方面來看,滿足正則化條件,實際上是求解藍色區域與黃色區域的交點,即...