国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【DL-CV】正則化,Dropout

Codeing_ls / 450人閱讀

摘要:下面介紹這兩種方法正則化正則化通過在損失函數上加上正則化損失來實現,根據正則化損失定義的不同,正則化又能分為好幾種。正則化正則化是另一個常用的正則化方法,即對于網絡中每個權重值,向損失函數增加一個作為其正則化懲罰,其中是正則化強度。

??????????????????????/--->【DL-CV】更高級的參數更新/優化(一)
【DL-CV】批量歸一化(BN算法)<前篇---后篇>
??????????????????????/--->【DL-CV】更高級的參數更新/優化(二)


在損失函數那篇文章中,我們引入了正則化并簡單介紹了L2正則化。其作用是防止網絡過擬合,提高網絡的泛化能力。本文將介紹一些防止過擬合的方法,

過擬合

所謂過擬合,就是網絡對訓練集極度適應,以至于訓練出來的權重幾乎只服務于訓練集,導致在訓練好的網絡在跑訓練集的時候表現得很好(準確率高),而跑測試集或其他數據表現得很差。過擬合的出現將降低網絡的泛化能力,是非常糟糕的事情。


正則化是抑制網絡過擬合,提高網絡泛化能力的一種方法。Dropout是其替代品,也能防止過擬合提高泛化能力。下面介紹這兩種方法

正則化

正則化通過在損失函數上加上正則化損失來實現,根據正則化損失定義的不同,正則化又能分為好幾種。

L2正則化

$$R(W)=sum_k sum_l W^2_{k,l}$$
L2正則化是是最常用的正則化方法,即對于網絡中的每個權重值$w$,向損失函數中增加一個$frac{1}{2}lambda w^2$作為正則化懲罰,其中$lambda$是正則化強度;乘了個$frac{1}{2}$是很常見的事,因為這樣式子關于 $w$ 梯度就是 $lambda w$ 而不是 $2lambda w$ 了。

L2正則化可以直觀地理解為對于大數值的權重向量進行嚴厲懲罰(平方懲罰),驅使權重往更加均勻的方向發展而不是某些權重絕對值很大某些權重絕對值很小,這樣能提高網絡的泛化能力。

L1正則化

$$R(W)=sum_k sum_l| W_{k,l}|$$
L1正則化是另一個常用的正則化方法,即對于網絡中每個權重值$w$,向損失函數增加一個$lambda|w|$作為其正則化懲罰,其中$lambda$是正則化強度。

L1正則化相對于L2正則化對大數值權重的懲罰沒那么重(沒有平方懲罰),他會讓權值在最訓練的過程中非常接近零(L2則是讓權重變成分散的小數值)。在實踐中,如果不是特別關注某些明確的特征選擇,一般說來L2正則化都會比L1正則化效果好


L1正則化也可以和L2正則化組合使用變成$lambda_1|w|+lambda_2w^2$,這也被稱作Elastic net regularizaton。不過沒這么常用就是了

隨機失活(Dropout)

Dropout堪稱對付過擬合的超級武器,其使用簡單,效果強勁。我們先來介紹dropout的使用:

在訓練的時候,Dropout的實現方法是讓隱層神經元以超參數$1-p$的概率被設置為0,$p$的概率維持激活值(隨機失活,加入隨機性)

在預測時不使用隨機失活,但是每層的輸出要乘以$p$(因為訓練時每層只有有p的激活值被維持,為維持同樣的輸出,預測時每層激活值要乘以p,抵消隨機性)

Dropout可以理解為,在每次訓練時,隨機抽取一部分神經元組成一個子網絡,基于輸入數據只更新子網絡的參數(子網絡并不相互獨立,因為他們共享著參數)。最后在測試時不使用隨機失活,可以理解為對子網絡們做了模型集成,以此來計算出一個平均的預測。

p = 0.5 # 激活神經元的概率. p值更高 = 隨機失活更弱

def train_step(X):
  """ X中是輸入數據 """
  
  # 3層neural network的前向傳播
  H1 = np.maximum(0, np.dot(X, W1 ) + b1)
  U1 = np.random.rand(*H1.shape) < p # 第一個隨機失活遮罩
  H1 *= U1 # drop!
  H2 = np.maximum(0, np.dot(H1, W2) + b2)
  U2 = np.random.rand(*H2.shape) < p # 第二個隨機失活遮罩
  H2 *= U2 # drop!
  out = np.dot(H2, W3) + b3
  
  # 反向傳播略
  # 參數更新略
  
def predict(X):
  H1 = np.maximum(0, np.dot(W1, X) + b1) * p # 注意:激活數據要乘以p
  H2 = np.maximum(0, np.dot(W2, H1) + b2) * p # 注意:激活數據要乘以p
  out = np.dot(W3, H2) + b3
Dropout的理解

一種理解是Dropout避免了特征間的相互適應。如上圖,假如網絡中的神經元學到了如上特征,“有耳朵”,“有尾巴”,“毛毛的”等等特征,這些特征組合起來判斷是否是貓。正常來說(作為人來說),特征越多越好,但在這種情況下(深度學習),完全依靠這些特征將可能導致過擬合的發生。使用Dropout后,網絡的部分連接將被中斷,網絡不能依賴這些特征的組合來給出結果,而是只能使用零散的特征來給出判斷,這在某種程度上防止了過擬合,提高了網路的泛化能力。

更多解釋和理解可參考此文

推薦:反向隨機失活(Inverted Dropout)

上面提到的Dropout方法在測試時每層激活值是要乘$p$的,額外的乘法操作會降低測試時的效率。所以更多時候我們會使用一個叫Inverted Dropout 的方法,他把隨機性抵消的操作從預測階段搬到了訓練階段:在訓練階段的Dropout操作后,我們對神經元的激活值除以$p$來抵消隨機性。這樣預測階段會更高效。

p = 0.5 # 激活神經元的概率. p值更高 = 隨機失活更弱

def train_step(X):
  """ X中是輸入數據 """
  
  # 3層neural network的前向傳播
  H1 = np.maximum(0, np.dot(X, W1 ) + b1)
  U1 = (np.random.rand(*H1.shape) < p) / p # 第一個隨機失活遮罩,/p
  H1 *= U1 # drop!
  H2 = np.maximum(0, np.dot(H1, W2) + b2)
  U2 = (np.random.rand(*H2.shape) < p) / p # 第二個隨機失活遮罩
  H2 *= U2 # drop!
  out = np.dot(H2, W3) + b3
  
  # 反向傳播略
  # 參數更新略
  
def predict(X):
  H1 = np.maximum(0, np.dot(X, W1) + b1)  # 免去*p
  H2 = np.maximum(0, np.dot(H1, W2) + b2) 
  out = np.dot(H2, W3) + b3

除了將神經元隨機置0的Dropout外,還有將權重值隨機置0的DropConnect,興趣自查

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19805.html

相關文章

  • DL-CV正則Dropout

    摘要:下面介紹這兩種方法正則化正則化通過在損失函數上加上正則化損失來實現,根據正則化損失定義的不同,正則化又能分為好幾種。正則化正則化是另一個常用的正則化方法,即對于網絡中每個權重值,向損失函數增加一個作為其正則化懲罰,其中是正則化強度。 ??????????????????????/--->【DL-CV】更高級的參數更新/優化(一)【DL-CV】批量歸一化(BN算法)???????????...

    dack 評論0 收藏0
  • DL-CV】批量歸一(BN算法)

    摘要:為了解決這個問題出現了批量歸一化的算法,他對每一層的輸入進行歸一化,保證每層的輸入數據分布是穩定的,從而加速訓練批量歸一化歸一化批,一批樣本輸入,,個樣本與激活函數層卷積層全連接層池化層一樣,批量歸一化也屬于網絡的一層,簡稱。 【DL-CV】數據預處理&權重初始化【DL-CV】正則化,Dropout 先來交代一下背景:在網絡訓練的過程中,參數的更新會導致網絡的各層輸入數據的分布不斷變化...

    miya 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<