9、改善深層神經網絡之正則化、Dropout正則化


首先我們理解一下,什么叫做正則化?

  目的角度:防止過擬合

  簡單來說,正則化是一種為了減小測試誤差的行為(有時候會增加訓練誤差)。我們在構造機器學習模型時,最終目的是讓模型在面對新數據的時候,可以有很好的表現。當你用比較復雜的模型比如神經網絡,去擬合數據時,很容易出現過擬合現象(訓練集表現很好,測試集表現較差),這會導致模型的泛化能力下降,這時候,我們就需要使用正則化,降低模型的復雜度。

一、神經網路得L1、L2正則化

1、矩陣的F-1范數、F-2范數

說明:這里的F-范數指的是Frobenius范數,和logistics回歸的L1、L2正則化的向量范數不一樣。

矩陣的F-1范數:矩陣所有元素的絕對值之和。公式為:

矩陣的F-2范數:矩陣所有元素的平方求和后開根號。公式為:

 

2、L1正則化與L2正則化(主要使用L2)

 假設神經網絡的損失函數為 J(W,b),參考邏輯回歸的正則化,是在損失函數J(W,b)后面加一個正則化項,神經網絡DNN也是一樣的,只是變成了加F-范數,L1正則化與L2正則化如下所示:

這里m為樣本數,l為各個隱藏層,λλ為超參數,需要自己調試,L2中2m是為了后面求梯度的時候可以抵消掉常數2。

3、L1正則化與L2正則化的區別

  L1 正則化項的效果是讓權值 W 往 0 靠,使網絡中的權值盡可能為 0,也就相當於減小了網絡復雜度,防止過擬合。事實上,L1 正則化能產生稀疏性,導致 W 中許多項變成零。

  L2 正則化項的效果是減小權值 W。事實上,更小的權值 W,從某種意義上說,表示網絡的復雜度更低,對數據的擬合剛剛好。

二、Dropout正則化(隨機失活)

  Dropout提供了正則化一大類模型的方法,計算方便且功能強大。它不同於L1、L2正則項那樣改變損失函數。而是改變模型本身。Dropout可以被認為是集成大量深層神經網絡的使用Bagging的方法。Dropout提供一種廉價的Bagging集成近似,能夠訓練和評估指數級數量的神經網絡。

  假設訓練的網絡:

   對於使用dropout技術的話,我們隨機刪除隱層的神經元,形成新的網絡:

   然后,我們通過前向求損失,反向傳到損失,批量梯度下降完成一批,更新完w和b,然后繼續隨機刪除隱藏層的神經元,繼續批量梯度下降更新權值和偏置。

反向隨機失活(inverted dropout):

  反向隨機失活(inverted dropout),是在訓練時就進行數值范圍調整,從而讓前向傳播在測試時保持不變。這樣做還有一個好處,無論你決定是否使用隨機失活,預測方法的代碼可以保持不變。

  反向隨機失活的代碼如下:

"""
反向隨機失活推薦實現方式
在訓練時drop和調整數值范圍,測試時不做任何事
"""

p = 0.5 #激活神經元得概率,P值更高=隨機失活更弱

def train_step(x):
    #三層neural network的向前傳播
    H1 = np.maximum(0,np.dot(w1,X) + b1)
    U1 = (np.random.rand(*H1.shape) < p) / p #第一個隨機失活遮罩。注意P!!!
    H1 *=U1 #drop!
    H2 = np.maximum(0,np.dot(w2,H1) + b2)
    U2 = (np.random.rand(*H2.shape) < p) / p #第一個隨機失活遮罩。注意P!!!
    H2 *=U2 #drop!
    out = np.dot(w3,H2)+b3
    
    #反向傳播:計算梯度。。。(略)
    #進行參數更新。。。(略)

def predict(X):
    # 向前傳播時模型集成
    H1 = np.maximum(0,np.dot(w1,X) + b1) #不用進行數值范圍調整
    H2 = np.maximum(0,np.dot(w2,H1) + b2)
    out = np.dot(w3,H2) + b3

 


免責聲明!

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



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