DeepNetwork中一般Dropout原理
Dropout現在這個操作在目前這個深度學習時代中是非常常見的一個操作。對于Dropout的好處我們也聽過很多,降低過擬合,提高模型的魯棒性,控制模型復雜度等blabla。。
但我比較好奇的是,Dropout是怎么實現以上好處,經過一番了解,簡單描述下。

Dropout實際上我們可以先理解成給予Network結構中的一種噪音,但是我們這個噪音不是隨便給,是有一定數學理論支撐,我們是選擇無偏差地往網絡結構中加入噪音。


通常來說,訓練的時候才需要用到dropout,推理的時候不需要。理由也很簡單,一個保證推理的時候有確定性輸出,另一個是dropout的好處并沒有在推理時體現,無需徒增計算。

這是李沐在《動手學深度學習》里面實現的代碼,不得不說真的簡單易懂。
當dropout等于1的時候,要返回跟上一層輸出shape一致的全零矩陣。當dropout=0時,說明無需丟棄,則返回原值。
當在0<dropout<1之間,(torch.randn(X.shape) > dropout).float()生成一個跟X的shape一致的零一矩陣表示不同 輸出與否,然后這個mask*X就是實際輸出的X結果,再除以之前期望公式所需要的(1-dropout),得到最終結果。
論文出處:https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf
本文轉載自 ??沐白AI筆記??,作者: 沐白
贊
收藏
回復
分享
微博
QQ
微信
舉報
回復
相關推薦

















