正則化(Regularization)--(dropout、數據擴增、early stopping)


1  正則化(Regularization

深度學習可能存在過擬合問題——高方差,有兩個解決方法,一個是正則化,另一個是准備更多的數據。在邏輯回歸函數中加入正則化,只需添加參數 λ,λ是正則化參數,我們通常使用驗證集或交叉驗證集來配置這個參數,嘗試各種各樣的數據,尋找最好的參數,我們要考慮訓練集之間的權衡,把參數設置為較小值,這樣可以避免過擬合,所以 λ 是另外一個需要調整的超級參數。

λ/2m乘以w范數的平方,w歐幾里德范數的平方等於wjj 值從 1 nx)平方的和,也可表示為wTw,也就是向量參數w的歐幾里德范數(2 范數)的平方,此方法稱為L2正則化。因為這里用了歐幾里德法線,被稱為向量參數wL2范數.為什么只正則化參數w?為什么不再加上參數 b呢?因為w通常是一個高維參數矢量,已經可以表達高偏差問題,w可能包含有很多參數,b只是眾多參數中的一個,所以我通常省略不計,如果你想加上這個參數,完全沒問題。L2正則化是最常見的正則化類型,還有L1正則化,如果用的是L1正則化,w最終會是稀疏的,也就是說w向量中有很多 0,有人說這樣有利於壓縮模型,因為集合中參數均為 0,存儲模型所占用的內存更少,實際上,雖然L1正則化使模型變得稀疏,卻沒有降低太多存儲內存,人們在訓練網絡時,越來越傾向於使用L2正則化,在 Python 編程語言中,λ是一個保留字段,編寫代碼時,我們刪掉a,寫成lambd,以免與 Python 中的保留字段沖突,這就是在邏輯回歸函數中實現L2正則化的過程。

神經網絡含有一個成本函數,該函數包含w[1]b[1]w[l]b[l]所有參數,字母L是神經網絡所含的層數,因此成本函數等於m個訓練樣本損失函數的總和乘以 1/m,正則項為,我們稱||w[l]||2為范數平方,這個矩陣范數||w[l]||2(即平方范數),被定義為矩陣中所有元素的平方求和,求和公式的具體參數,第一個求和符號其值i1 n[l1],第二個其j值從 1 n[l],因為w是一個n[l] × n[l1]的多維矩陣,n[l]表示l層單元的數量,n[l1]表示第l1層隱藏單元的數量,該矩陣范數被稱作“弗羅貝尼烏斯范數”,用下標F標注.

 

 

 1.1 為什么正則化有利於預防過擬合呢?( Why regularization reduces overfitting?

 

 這個龐大的深度擬合神經網絡我知道這張圖不夠大,深度也不夠,可以想象這是一個過擬合的神經網絡,我們的代價函數J,含有參數wb,我們添加正則項,它可以避免數據權值矩陣過大,這就是弗羅貝尼烏斯范數,直觀上理解就是如果正則化λ設置得足夠大,權重矩陣w被設置為接近於 0 的值,直觀理解就是把多隱藏單元的權重設為 0,於是基本上消除了這些隱藏單元的許多影響,實際上是該神經網絡的所有隱藏單元依然存在,但是它們的影響變得更小了,L2正則化,它是我在訓練深度學習模型時最常用的一種方法,在深度學習中,還有一種方法也用到了正則化,就是 dropout 正則化.

 

1.2 dropout 正則化(Dropout Regularization

除了L2正則化,還有一個非常實用的正則化方法——“Dropout(隨機失活)”,假設你在訓練上圖這樣的神經網絡,它存在過擬合,這就是 dropout 所要處理的,我們復制這個神經網絡,dropout 會遍歷網絡的每一層,並設置消除神經網絡中節點的概率.

 

假設每個節點得以保留和消除的概率都是 0.5,設置完節點概率,我們會消除一些節點,然后刪除掉從該節點進出的連線,最后得到一個節點更少,規模更小的網絡,然后用 backprop 方法進行訓練

  

 

 如何實施 dropout 呢?方法有幾種,目前實施 dropout 最常用的方法就是 Inverted dropout(反向隨機失活),首先要定義向量dd[3]表示一個三層的 dropout 向量:d3=np.random.rand(a3.shape[0],a3.shape[1])d[3]中的對應值為 1 的概率都是 0.8,對應為 0 的概率是 0.2然后看它是否小於某數,我們稱之為 keep-probkeep-prob 是一個具體數字,它表示保留某個隱藏單元的概率,假設 keep-prob 等於 0.8,它意味着消除任意一個隱藏單元的概率是 0.2,它的作用就是生成隨機矩陣,a3 =np.multiply(a3,d3),這里是元素相乘,a[3]是第二層的激活函數,乘法運算最終把d[3]中相應元素輸出,即讓d[3] 0 元素與a[3]中相對元素歸零,最后,我們向外擴展a[3],用它除以 keep-prob 參數,即a3/=keep-prob,這就是所謂的 dropout 方法。下面我解釋一下為什么要這么做,為方便起見,我們假設第三隱藏層上有 50 個神經元,在一維上a[3] 50,我們通過因子分解將它拆分成50 × m維的,保留和刪除它們的概率分別為 80%20%,這意味着最后被刪除或歸零的單元平均有 1050×20%=10)個,現在我們看下z[4]z[4] = w[4]a[3] + b[4],我們的預期是,a[3]減少20%,也就是說a[3]中有 20%的元素被歸零,為了不影響z[4]的期望值,我們需要用w[4]a[3]/0.8,它將會修正或彌補我們所需的20%a[3]的期望值不會變。

1.3理解 dropoutUnderstanding Dropout

Dropout 可以隨機刪除網絡中的神經單元,因為該單元的輸入可能隨時被清除,因此該單元通過這種方式傳播下去,並為神經元的輸入增加一點權重,通過傳播所有權重,dropout將產生收縮權重的平方范數的效果,和之前講的L2正則化類似實施 dropout 的結果實它會壓縮權重,並完成一些預防過擬合的外層正則化;並完成一些預防過擬合的外層正則化;L2對不同權重的衰減是不同的,它取決於激活函數倍增的大小。

應用 dropout 的層只含有一個超級參數,就是 keep-prob不同層的 keep-prob 可以變化keep-prob 的值是 1,意味着保留所有單元,並且不在這一層使用 dropout,對於有可能出現過擬合,且含有諸多參數的層,我們可以把 keep-prob 設置成比較小的值,以便應用更強大的 dropoutdropout 一大缺點就是代價函數J不再被明確定義,或者說在某種程度上很難計算。

1.4 其他正則化方法(Other regularization methods

除了L2正則化和隨機失活(dropout)正則化,還有幾種方法可以減少神經網絡中的過擬合

第一種方法是數據擴增。對於圖片,我們可以通過隨意翻轉和裁剪圖片,我們可以增大數據集,額外生成假訓練數據;對於光學字符識別,我們還可以通過添加數字,隨意旋轉或扭曲數字來擴增數據。數據擴增的缺點是,如果你想通過擴增訓練數據來解決過擬合,但擴增數據代價高,而且有時候我們無法擴增數據。

第二種方法是early stopping,代表提早停止訓練神經網絡,因為在訓練過程中,訓練誤差,代價函數J差通常會先呈下降趨勢,然后在某個節點處開始上升,early stopping 的作用是,神經網絡已經在這個迭代過程中表現得很好了,我們在此停止訓練吧,得到驗證集誤差。說 early stopping 的主要缺點就是你不能獨立地處理這兩個問題:(1)因為提早停止梯度下降,也就是停止了優化代價函數J,因為現在你不再嘗試降低代價函數J,所以代價函數J的值可能不夠小;(2)希望不出現過擬合

選擇一個算法來優化代價函數J,我們有很多種工具來解決這個問題,如梯度下降, MomentumRMSprop Adam 等等,但是優化代價函數J之后,我們也不想發生過擬合,也有一些工具可以解決該問題,比如正則化,擴增數據等等.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM