神经网络优化篇:如何理解 dropout(Understanding Dropout)
理解 dropout
Dropout可以隨機刪除網絡中的神經單元,為什么可以通過正則化發揮如此大的作用呢?
直觀上理解:不要依賴于任何一個特征,因為該單元的輸入可能隨時被清除,因此該單元通過這種方式傳播下去,并為單元的四個輸入增加一點權重,通過傳播所有權重,dropout將產生收縮權重的平方范數的效果,和之前講的\(L2\)正則化類似;實施dropout的結果實它會壓縮權重,并完成一些預防過擬合的外層正則化;\(L2\)對不同權重的衰減是不同的,它取決于激活函數倍增的大小。
總結一下,dropout的功能類似于\(L2\)正則化,與\(L2\)正則化不同的是應用方式不同會帶來一點點小變化,甚至更適用于不同的輸入范圍。
第二個直觀認識是,從單個神經元入手,如圖,這個單元的工作就是輸入并生成一些有意義的輸出。通過dropout,該單元的輸入幾乎被消除,有時這兩個單元會被刪除,有時會刪除其它單元,就是說,用紫色圈起來的這個單元,它不能依靠任何特征,因為特征都有可能被隨機清除,或者說該單元的輸入也都可能被隨機清除。不愿意把所有賭注都放在一個節點上,不愿意給任何一個輸入加上太多權重,因為它可能會被刪除,因此該單元將通過這種方式積極地傳播開,并為單元的四個輸入增加一點權重,通過傳播所有權重,dropout將產生收縮權重的平方范數的效果,和之前講過的\(L2\)正則化類似,實施dropout的結果是它會壓縮權重,并完成一些預防過擬合的外層正則化。
事實證明,dropout被正式地作為一種正則化的替代形式,\(L2\)對不同權重的衰減是不同的,它取決于倍增的激活函數的大小。
總結一下,dropout的功能類似于\(L2\)正則化,與\(L2\)正則化不同的是,被應用的方式不同,dropout也會有所不同,甚至更適用于不同的輸入范圍。
實施dropout的另一個細節是,這是一個擁有三個輸入特征的網絡,其中一個要選擇的參數是keep-prob,它代表每一層上保留單元的概率。所以不同層的keep-prob也可以變化。第一層,矩陣\(W^{[1]}\)是7×3,第二個權重矩陣\(W^{[2]}\)是7×7,第三個權重矩陣\(W^{[3]}\)是3×7,以此類推,\(W^{[2]}\)是最大的權重矩陣,因為\(W^{[2]}\)擁有最大參數集,即7×7,為了預防矩陣的過擬合,對于這一層,認為這是第二層,它的keep-prob值應該相對較低,假設是0.5。對于其它層,過擬合的程度可能沒那么嚴重,它們的keep-prob值可能高一些,可能是0.7,這里是0.7。如果在某一層,不必擔心其過擬合的問題,那么keep-prob可以為1,為了表達清除,用紫色線筆把它們圈出來,每層keep-prob的值可能不同。
注意keep-prob的值是1,意味著保留所有單元,并且不在這一層使用dropout,對于有可能出現過擬合,且含有諸多參數的層,可以把keep-prob設置成比較小的值,以便應用更強大的dropout,有點像在處理\(L2\)正則化的正則化參數\(\lambda\),嘗試對某些層施行更多正則化,從技術上講,也可以對輸入層應用dropout,有機會刪除一個或多個輸入特征,雖然現實中通常不這么做,keep-prob的值為1,是非常常用的輸入值,也可以用更大的值,或許是0.9。但是消除一半的輸入特征是不太可能的,如果遵守這個準則,keep-prob會接近于1,即使對輸入層應用dropout。
總結一下,如果擔心某些層比其它層更容易發生過擬合,可以把某些層的keep-prob值設置得比其它層更低,缺點是為了使用交叉驗證,要搜索更多的超級參數,另一種方案是在一些層上應用dropout,而有些層不用dropout,應用dropout的層只含有一個超級參數,就是keep-prob。
結束前分享兩個實施過程中的技巧,實施dropout,在計算機視覺領域有很多成功的第一次。計算視覺中的輸入量非常大,輸入太多像素,以至于沒有足夠的數據,所以dropout在計算機視覺中應用得比較頻繁,有些計算機視覺研究人員非常喜歡用它,幾乎成了默認的選擇,但要牢記一點,dropout是一種正則化方法,它有助于預防過擬合,因此除非算法過擬合,不然是不會使用dropout的,所以它在其它領域應用得比較少,主要存在于計算機視覺領域,因為通常沒有足夠的數據,所以一直存在過擬合,這就是有些計算機視覺研究人員如此鐘情于dropout函數的原因。直觀上認為不能概括其它學科。
dropout一大缺點就是代價函數\(J\)不再被明確定義,每次迭代,都會隨機移除一些節點,如果再三檢查梯度下降的性能,實際上是很難進行復查的。定義明確的代價函數\(J\)每次迭代后都會下降,因為所優化的代價函數\(J\)實際上并沒有明確定義,或者說在某種程度上很難計算,所以失去了調試工具來繪制這樣的圖片。通常會關閉dropout函數,將keep-prob的值設為1,運行代碼,確保J函數單調遞減。然后打開dropout函數,希望在dropout過程中,代碼并未引入bug。覺得也可以嘗試其它方法,雖然并沒有關于這些方法性能的數據統計,但可以把它們與dropout方法一起使用。
總結
以上是生活随笔為你收集整理的神经网络优化篇:如何理解 dropout(Understanding Dropout)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车尾气排放控制研究的论文
- 下一篇: CAD中SHX字体与大字体有什么区别