神经网络优化篇:详解正则化(Regularization)
正則化
深度學習可能存在過擬合問題——高方差,有兩個解決方法,一個是正則化,另一個是準備更多的數據,這是非常可靠的方法,但可能無法時時刻刻準備足夠多的訓練數據或者獲取更多數據的成本很高,但正則化通常有助于避免過擬合或減少的網絡誤差。
如果懷疑神經網絡過度擬合了數據,即存在高方差問題,那么最先想到的方法可能是正則化,另一個解決高方差的方法就是準備更多數據,這也是非常可靠的辦法,但可能無法時時準備足夠多的訓練數據,或者,獲取更多數據的成本很高,但正則化有助于避免過度擬合,或者減少網絡誤差,下面就來講講正則化的作用原理。
用邏輯回歸來實現這些設想,求成本函數\(J\)的最小值,它是定義的成本函數,參數包含一些訓練數據和不同數據中個體預測的損失,\(w\)和\(b\)是邏輯回歸的兩個參數,\(w\)是一個多維度參數矢量,\(b\)是一個實數。在邏輯回歸函數中加入正則化,只需添加參數λ,也就是正則化參數。
\(\frac{\lambda}{2m}\)乘以\(w\)范數的平方,其中\(\left\| w \right\|_2^2\)是\(w\)的歐幾里德范數的平方,等于\(w_{j}\)(\(j\) 值從1到\(n_{x}\))平方的和,也可表示為\(w^{T}w\),也就是向量參數\(w\) 的歐幾里德范數(2范數)的平方,此方法稱為\(L2\)正則化,因為這里用了歐幾里德范數,被稱為向量參數\(w\)的\(L2\)范數。
為什么只正則化參數\(w\)?為什么不再加上參數 \(b\) 呢?可以這么做,只是習慣省略不寫,因為\(w\)通常是一個高維參數矢量,已經可以表達高偏差問題,\(w\)可能包含有很多參數,不可能擬合所有參數,而\(b\)只是單個數字,所以\(w\)幾乎涵蓋所有參數,而不是\(b\),如果加了參數\(b\),其實也沒太大影響,因為\(b\)只是眾多參數中的一個,所以通常省略不計,如果想加上這個參數,完全沒問題。
\(L2\)正則化是最常見的正則化類型,們可能聽說過\(L1\)正則化,\(L1\)正則化,加的不是\(L2\)范數,而是正則項\(\frac{\lambda}{m}\)乘以\(\sum_{j= 1}^{n_{x}}{|w|}\),\(\sum_{j =1}^{n_{x}}{|w|}\)也被稱為參數\(w\)向量的\(L1\)范數,無論分母是\(m\)還是\(2m\),它都是一個比例常量。
如果用的是\(L1\)正則化,\(w\)最終會是稀疏的,也就是說\(w\)向量中有很多0,有人說這樣有利于壓縮模型,因為集合中參數均為0,存儲模型所占用的內存更少。實際上,雖然\(L1\)正則化使模型變得稀疏,卻沒有降低太多存儲內存,所以認為這并不是\(L1\)正則化的目的,至少不是為了壓縮模型,人們在訓練網絡時,越來越傾向于使用\(L2\)正則化。
來看最后一個細節,\(\lambda\)是正則化參數,通常使用驗證集或交叉驗證集來配置這個參數,嘗試各種各樣的數據,尋找最好的參數,要考慮訓練集之間的權衡,把參數設置為較小值,這樣可以避免過擬合,所以λ是另外一個需要調整的超級參數,順便說一下,為了方便寫代碼,在Python編程語言中,\(\lambda\)是一個保留字段,編寫代碼時,刪掉\(a\),寫成\(lambd\),以免與Python中的保留字段沖突,這就是在邏輯回歸函數中實現\(L2\)正則化的過程,如何在神經網絡中實現\(L2\)正則化呢?
神經網絡含有一個成本函數,該函數包含\(W^{[1]}\),\(b^{[1]}\)到\(W^{[l]}\),\(b^{[l]}\)所有參數,字母\(L\)是神經網絡所含的層數,因此成本函數等于\(m\)個訓練樣本損失函數的總和乘以\(\frac{1}{m}\),正則項為\(\frac{\lambda }{2m}{{\sum\nolimits_{1}^{L}{| {{W}^{[l]}}|}}^{2}}\),稱\({||W^{\left[l\right]}||}^{2}\)為范數平方,這個矩陣范數\({||W^{\left[l\right]}||}^{2}\)(即平方范數),被定義為矩陣中所有元素的平方求和,
看下求和公式的具體參數,第一個求和符號其值\(i\)從1到\(n^{[l - 1]}\),第二個其\(J\)值從1到\(n^{[l]}\),因為\(W\)是一個\(n^{[l]}\times n^{[l-1]}\)的多維矩陣,\(n^{[l]}\)表示\(l\) 層單元的數量,\(n^{[l-1]}\)表示第\(l-1\)層隱藏單元的數量。
該矩陣范數被稱作“弗羅貝尼烏斯范數”,用下標\(F\)標注”,鑒于線性代數中一些神秘晦澀的原因,不稱之為“矩陣\(L2\)范數”,而稱它為“弗羅貝尼烏斯范數”,矩陣\(L2\)范數聽起來更自然,但鑒于一些大家無須知道的特殊原因,按照慣例,稱之為“弗羅貝尼烏斯范數”,它表示一個矩陣中所有元素的平方和。
該如何使用該范數實現梯度下降呢?
用backprop計算出\(dW\)的值,backprop會給出\(J\)對\(W\)的偏導數,實際上是$ W{[l]}$,把$W\(替換為\)W^{[l]}\(減去學習率乘以\)dW$。
這就是之前額外增加的正則化項,既然已經增加了這個正則項,現在要做的就是給\(dW\)加上這一項\(\frac {\lambda}{m}W^{[l]}\),然后計算這個更新項,使用新定義的\(dW^{[l]}\),它的定義含有相關參數代價函數導數和,以及最后添加的額外正則項,這也是\(L2\)正則化有時被稱為“權重衰減”的原因。
用$ dW{[l]}$的定義替換此處的$dW\(,可以看到,\)W{[l]}$的定義被更新為$W\(減去學習率\)\alpha$ 乘以backprop 再加上\(\frac{\lambda}{m}W^{[l]}\)。
該正則項說明,不論\(W^{[l]}\)是什么,都試圖讓它變得更小,實際上,相當于給矩陣W乘以\((1 - \alpha\frac{\lambda}{m})\)倍的權重,矩陣\(W\)減去\(\alpha\frac{\lambda}{m}\)倍的它,也就是用這個系數\((1-\alpha\frac{\lambda}{m})\)乘以矩陣\(W\),該系數小于1,因此\(L2\)范數正則化也被稱為“權重衰減”,因為它就像一般的梯度下降,\(W\)被更新為少了\(\alpha\)乘以backprop輸出的最初梯度值,同時\(W\)也乘以了這個系數,這個系數小于1,因此\(L2\)正則化也被稱為“權重衰減”。
不打算這么叫它,之所以叫它“權重衰減”是因為這兩項相等,權重指標乘以了一個小于1的系數。
以上就是在神經網絡中應用\(L2\)正則化的過程。
總結
以上是生活随笔為你收集整理的神经网络优化篇:详解正则化(Regularization)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个人独自去看海
- 下一篇: Keepalived 安装