Regularizing your neural network

Regularizing

如果懷疑神經(jīng)網(wǎng)絡過度擬合了數(shù)據(jù),即存在高方差問題那么最先想到的方法可能就是正則化,另一個解決高方差的方法就是準備更多數(shù)據(jù),這也是非常可靠的辦法,但你可能無法時時準備足夠多的訓練數(shù)據(jù)或者獲取數(shù)據(jù)的成本很高。

  • 接下來使用邏輯回歸實現(xiàn)一下正則化:

L2正則化是最常見的正則化類型,加的L2范數(shù);及L1正則化。
如果用的L1正則化,W最終會是稀疏的,W向量中會有很多0。越來越傾向于使用L2正則化
注:在python編程語言中,λ(lambda)是一個保留字段,所以我們用 lambd代替 lambda正則化參數(shù)

  • 神經(jīng)網(wǎng)絡中怎么實現(xiàn)正則化

代價函數(shù)是m個訓練樣本上 的損失之和,至于正則化 再加上lambda/2m 乘以所有參數(shù)W的范數(shù)的平方之和 。這里W是你的參數(shù)矩陣 ,這里矩陣范數(shù)的平方:定義為 對于i和j 對矩陣中每一個元素的平方求和 。如果你想為這個求和加上索引 ,這個求和是i從1到n[l-1], j從1到n[l] 。因為w是一個n[l-1]列 、n[l]行的矩陣 。這些是第l-1層和第l層的隱藏單元數(shù)量單元數(shù)量 。或 這個矩陣的范數(shù)稱為矩陣的弗羅貝尼烏斯范數(shù) ,使用角標F標記。

Why regularization reduces overfitting?


如果lamda被設置的足夠大,權重矩陣被設置為接近于0的值,直觀理解就是把多隱藏單元的權重設置為0,于是基本消除了這些隱藏單元的許多影響,這個被大大簡化了的神經(jīng)網(wǎng)絡會變成一個很小的網(wǎng)絡,小到如同一個邏輯單元,可是深度卻很大。它會使這個網(wǎng)絡從過擬合狀態(tài)更接近左圖的高偏差狀態(tài)。但是lamda會有一個中間值,于是會有一個接近與“just right ”的狀態(tài)


再來看一個例子:
假設我們用的是這樣雙曲激活函數(shù),g(z)表示tanh(z),我們發(fā)現(xiàn),只要z非常小,并且只取一個小范圍的參數(shù),利用了雙曲正切函數(shù)的線性狀態(tài),同理,lamda增大,W會變小,相對于Z也會變小,在一個線性區(qū)間。


Understanding Dropout

  • 反向隨機失活(inverted dropout)
    定義一個向量d,d3表示第三層的dropout向量

d3 = np.random.rand( a3.shape[0],a3.shape[1])

Other regularization methods

除了 ??2正則化和隨機失活( dropout),還有幾種方法可以減少神經(jīng)網(wǎng)絡中的過擬合。

  • 數(shù)據(jù)擴增

假設你正在擬合貓咪圖片分類器,如果你想通過擴增訓練數(shù)據(jù)來 解決過擬合,但擴增 數(shù)據(jù)代價高,而且有時候 我們無法擴增數(shù)據(jù),但我們可以添加這類圖片來增加數(shù)據(jù)集。例如 ,水平翻轉(zhuǎn)圖片,并把它添加到訓練集。除了水平翻轉(zhuǎn),你也可以隨意裁剪圖片,可以把原圖旋轉(zhuǎn)并隨意放大后裁剪的。
對于光學字符識別,我們還可以通過添加數(shù)字,隨意旋轉(zhuǎn)或扭曲數(shù)字來擴增數(shù)據(jù)

  • early stopping
    運行梯度下降時,代價函數(shù)J的優(yōu)化過程單調(diào)下降趨勢,如圖。



    我們不但可以繪制代價函數(shù)loss,還可以繪制驗證集誤差,你會發(fā)現(xiàn)驗證集誤差通常會呈先下降,然后在某個節(jié)點 處開始上升。early stopping的作用就是,就在那個點停止訓練。

Normalizing inputs

訓練神經(jīng)網(wǎng)絡,其中一個加速訓練的方法就是歸一化輸入,假設一個訓練集有兩個特征,輸入特征為2維,歸一化需要兩個步驟:

  • 零均值
  • 歸一化方差
    我們希望無論是訓練集還是測試集都是通過相同的μ,σ2定義的數(shù)據(jù)裝換
    1.第一步是零均值化 :

    它是一個向量,x等于每個訓練數(shù)據(jù) x減去μ,意思是移動訓練集,直到完成零均值化
    2 .第二步是歸一化方差 ,注意特征x1的方差比特征x2的方差要大得多 。

    每個特征都有方差,注意,我們已經(jīng)完成了零均值 ,x2就是y2的方差,然后把所有數(shù)據(jù)除以σ2向量

tips:如果用它來調(diào)整數(shù)據(jù),那么用相同的μ,σ2來歸一化測試集,而不是在測試集和訓練集分別預估μ,σ2。尤其是,你不希望訓練集和測試集的歸一化有什么不同。其中:μ,σ2是由訓練集數(shù)據(jù)計算得來的。

為什么做歸一化:然而如果你歸一化特征,代價函數(shù)看起來更對稱,更容易優(yōu)化,前提是特征都在相似范圍內(nèi),不是從1到1000,,0到1的范圍而是在-1到1的范圍內(nèi)或相似偏差。
所以如果輸入特征處于不同范圍內(nèi),可能有些特征值從1到1000,那么歸一化特征值就非常重要了,如果特征值處于相似范圍內(nèi) ,那么歸一化就不是很重要了,執(zhí)行這類歸一化并不會產(chǎn)生設么危害,我通常會做歸一化處理,雖然我不確定能否提高訓練或算法速度。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容