Dropout:隨機失活


 1. Dropout:是指在深度學習網絡的訓練過程中,對於神經網絡單元,按照一定的概率將其暫時從網絡中丟棄(使其暫時不工作),使一部分神經元工作,使另一部分神經元不工作;沒有被刪除的部分的參數得到更新,被刪除的神經元參數保持之前的狀態,此次訓練過程中暫時不參加神經網絡的計算,不更新權值,以達到避免過擬合,增加模型泛化的目的

△實質:讓每個神經元的激活函數的輸出值(激活函數值)以p的概率保持原樣,以1-p的概率等於0

①在訓練階段,每個神經單元以概率p被保留,以1-p的概率被丟棄

②在測試階段,每個神經單元都是存在的,激活函數輸出值要乘以p,即[ f(W*x+b)]*p     (有的博客說是權值矩陣W*p  不知道這兩者有什么聯系?)

一般p=0.5,使其激活函數值=0:

 

每次都是隨機失活:

 

訓練階段以p的概率被保留;測試階段(W*x + b)*p:

 

 

2. Dropout的運行:(訓練階段)一般p=0.5

①首先隨機(臨時)刪掉網絡中一半的隱藏神經元,輸入輸出神經元保持不變

②將輸入x通過修改后的網絡進行前向傳播,然后把得到的損失結果通過修改的網絡反向傳播;1個batch執行完這個過程后,在沒有被刪除的神經元上按照SGD更新對應的參數W、b

③然后繼續重復這一過程,直到訓練結束:

(1)恢復被刪掉的神經元 -- 被刪除的神經元保持原樣,而沒有被刪除的神經元已經有所更新
(2)從隱藏層神經元中隨機選擇一個一半大小的子集臨時刪除掉,備份被刪除神經元的參數
(3)對1個batch,先前向傳播然后反向傳播損失並根據隨機梯度下降法更新參數(w,b)- 沒有被刪除的那一部分參數得到更新,刪除的神經元參數保持之前的狀態

 

虛線為部分臨時被刪除的神經元:

 

3.  Dropout的運行(測試階段)

在測試時,每個神經元的激活函數輸出值乘以p:在測試時,不采用dropout,所有的神經元總是活躍的;為了讓測試時的輸出與訓練時的數學期望輸出相同,要調整測試時激活的范圍,每個神經元的權重矩陣W乘以p以使得每個神經元 ->測試時的輸出 = 訓練時的期望輸出

(1)在測試階段要盡可能消除隨機性,所以不dropout,因為采用隨機失活會導致測試結果不穩定

(2)在訓練階段每個神經元以p的概率參與運算,以1-p的概率失活,假設輸入=x,(不經過激活函數)那么訓練階段輸出的數學期望:E = p * x +(1-p)*0 = p *x,而測試階段的為x,所以要乘以p才相等

 

p乘以輸出 -> 測試時的輸出 = 訓練時的期望輸出:

 

 

4. Inverted dropout(反轉dropout):為了減少測試時的運算,提高測試階段的速度,不在測試階段乘以p,而是在訓練階段除以p,來讓二者的輸出的數學期望相等

測試階段不變,訓練時除以p:

 

 

5. dropConnect:在訓練時,不是將激活函數置0,而是隨機將權重矩陣的一些值置為0

  

 

6. 正則化的共同點

①在訓練時增加隨機噪聲

②在測試時邊緣化噪聲

 

 

常見的regularization:

 

參考:

https://blog.csdn.net/program_developer/article/details/80737724

https://www.jianshu.com/p/cb9a7a7465b8

https://blog.csdn.net/AG9GgG/article/details/88668192


免責聲明!

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



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