[深度學習-2.4] Dropout正則化

除了L2正則化之外,還有一個很常用的正則化技巧就是Dropout(隨機失活)。它的主要思想就是隨機丟棄網絡每一層的一些神經元。

原理和實現

  首先從原理上來理解一下什麼是Dropout正則化。如下圖所示(圖片來源於吳恩達老師深度學習課程課件),左圖爲一個正常的網絡,進行Dropout正則化就是對於每一層的單元,根據一定的概率來“刪除”掉他們,如下面右圖所示,以0.5的保留概率(keep-prob)進行Dropout之後,剩下的神經元組成了一個比較簡單的網絡。

  實現Dropout的方法很多,最常用的是inverted dropout。以一個深層神經網絡的某一個隱藏層爲例來解釋怎麼進行Dropout正則化。首先假設對於第 ll 層,其激活函數值爲 a[l]a^{[l]} ,我們設置的保留概率 keep_prob=0.8keep\_prob=0.8,這意味着隱藏層的每一個神經元被以0.8的概率得到保留。
  可以將inverted dropout方法歸納爲四步:

  1. 根據 keep_probkeep\_prob 生成和 a[l]a^{[l]} 同形的隨機概率矩陣 d[l]d^{[l]} , Dl = np.random.rand(Al.shape[0], Al.shape[1])
  2. d[l]d^{[l]} 轉化爲0-1矩陣, Dl = Dl < keep_prob
  3. a[l]a^{[l]}d[l]d^{[l]} 中的元素一一對應, d[l]d^{[l]} 爲1表示對應的神經元被保留,爲0表示捨棄掉, Al = Al * Dl
  4. 爲了確保 a[l]a^{[l]} 的期望值不變,將 a[l]a^{[l]} 除以 keep_probkeep\_probAl = Al / keep_prob

需要注意的是,在反向傳播的時候,也需要像上面一樣進行dropout操作,和前向傳播關閉相同的神經元,即,對於某一層的 da[l]da^{[l]} ,應該進行以下計算:

  1. dAl = dAl * Dl
  2. dAl = dAl / keep_prob

另一點是,Dropout正則化只在訓練階段實施,在測試階段只需要利用訓練好的參數進行正向預測,而不需要進行神經元的隨機失活。

理解

  Dropout正則化的作用可以從兩方面理解:1)通過隨機的神經元失活使得網絡更小,有效防止過擬合;2)由於每個隱藏神經元都可能被清楚,因此網絡的輸出不會偏向於某一個特徵,這樣Dropout會產生類似於L2範數的效果。

代碼

代碼可以在我Github上找到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章