1-6 dropout 正則化


dropout 正則化( Dropout Regularization

除了L2正則化,還有一個非常實用的正則化方法——Dropout( 隨機失活):

假設你在訓練上圖這樣的神經網絡,它存在過擬合,這就是 dropout 所要處理的,我們復制這個神經網絡, dropout 會遍歷網絡的每一層,並設置消除神經網絡中節點的概率。假設網絡中的每一層,每個節點都以拋硬幣的方式設置概率,每個節點得以保留和消除的概率都是 0.5,設置完節點概率,我們會消除一些節點,然后刪除掉從該節點進出的連線,最后得到一個節點更少,規模更小的網絡,然后用 backprop 方法進行訓練。

以上就是網絡精簡的一個樣本,對於每個訓練樣本,我們都將采用一個精簡后神經網絡來訓練它,這種方法似乎有點怪,單純遍歷節點,編碼也是隨機的,可它真的有效。
實施dropout的方法有幾種,最常用的是inverted dropout(反向隨機失活),例如在一個3層網絡中:首先要定義向量d,${d^{[3]}}$表示一個三層的 dropout 向量:

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

然后看它是否小於某數,我們稱之為 keep-probkeep-prob 是一個具體數字 ,它表示保留某個隱藏單元的概率 ,例如 keep-prob 等於 0.8,它意味着消除任意一個隱藏單元的概率是 0.2,它的作用就是生成隨機矩陣 。 
${d^{[3]}}$中的對應值為 1 的概率都是 0.8,對應為 0 的概率是 0.2,隨機數字小於 0.8
接下來要做的就是從第三層中獲取激活函數,這里我們叫它 ${a^{[3]}}$:

 a3 =np.multiply(a3,d3)

這里是元素相乘,也可寫為 : 

a3 *= d3

乘法運算最終把 ${d^{[3]}}$中相應元素輸出 ,即讓 ${d^{[3]}}$0 元素與 ${a^{[3]}}$中相對元素歸零。

如果用 python 實現該算法的話,${d^{[3]}}$ ,則是一個布爾型數組,值為 true false,而不是1 0,乘法運算依然有效, python 會把 true false 翻譯為 1 0 。
最后,我們向外擴展 ${a^{[3]}}$,用它除以 keep-prob 參數。

a3 /= keep-prob

keep-prob 參數:

不論 keep-prop 的值是多少 0.8, 0.9 甚至是 1,如果 keep-prop 設置為 1,那么就不存在 dropout,因為它會保留所有節點。 反向隨機失活( inverted dropout)方法通過除以 keep-prob,確保 ${a^{[3]}}$的期望值不變。 在測試階段,我們並未使用 dropout,自然也就不用拋硬幣來決定失活概率,以及要消除哪些隱藏單元了,因為在測試階段進行預測時,我們不期望輸出結果是隨機的,如果測試階段應用 dropout 函數,預測會受到干擾。 


免責聲明!

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



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