系列解讀Dropout


本文主要介紹Dropout及延伸下來的一些方法,以便更深入的理解。

想要提高CNN的表達或分類能力,最直接的方法就是采用更深的網絡和更多的神經元,即deeper and wider。但是,復雜的網絡也意味着更加容易過擬合。於是就有了Dropout,大部分實驗表明其具有一定的防止過擬合的能力。

1- Dropout

最早的Dropout可以看Hinton的這篇文章 
《Improving neural networks by preventing co-adaptation of feature Detectors》

從文章的名字我們就可以先對Dropout的工作原理有個猜測:過擬合意味着網絡記住了訓練樣本,而打破網絡固定的工作方式,就有可能打破這種不好的記憶。

Ok,我們直接來看什么是Dropout

需要注意的是:論文中Dropout被使用在全連接層之后,而目前的caffe框架中,其可以使用在各種層之后。

如上圖左,為沒有Dropout的普通2層全連接結構,記為 r=a(Wv),其中a為激活函數。

如上圖右,為在第2層全連接后添加Dropout層的示意圖。即在 模 型 訓 練 時 隨機讓網絡的某些節點不工作(輸出置0),其它過程不變。

對於Dropout這樣的操作為何可以防止訓練過擬合,原作者也沒有給出數學證明,只是有一些直觀的理解或者說猜想。下面說幾個我認為比較靠譜的解釋:

(1) 由於隨機的讓一些節點不工作了,因此可以避免某些特征只在固定組合下才生效,有意識地讓網絡去學習一些普遍的共性(而不是某些訓練樣本的一些特性)

(2) Bagging方法通過對訓練數據有放回的采樣來訓練多個模型。而Dropout的隨機意味着每次訓練時只訓練了一部分,而且其中大部分參數還是共享的,因此和Bagging有點相似。因此,Dropout可以看做訓練了多個模型,實際使用時采用了模型平均作為輸出 
(具體可以看一下論文,論文講的不是很明了,我理解的也夠嗆)

訓練的時候,我們通常設定一個dropout ratio = p,即每一個輸出節點以概率 p 置0(不工作)。假設每一個輸出都是相互獨立的,每個輸出都服從二項伯努利分布B(1-p),則大約認為訓練時 只使用了 (1-p)比例的輸出。

測試的時候,最直接的方法就是保留Dropout層的同時,將一張圖片重復測試M次,取M次結果的平均作為最終結果。假如有N個節點,則可能的情況為R=2^N,如果M遠小於R,則顯然平均效果不好;如果M≈N,那么計算量就太大了。因此作者做了一個近似:可以直接去掉Dropout層,將所有輸出 都使用 起來,為此需要將尺度對齊,即比例縮小輸出 r=r*(1-p)。 
即如下公式: 
 
特別的, 為了使用方便,我們不在測試時再縮小輸出,而在訓練時直接將輸出放大1/(1-p)倍。

結論: Dropout得到了廣泛的使用,但具體用到哪里、訓練一開始就用還是后面才用、dropout_ratio取多大,還要自己多多嘗試。有時添加Dropout反而會降低性能。

2- DropConnect

DropConnect來源於《Regularization of Neural Networks using DropConnect》這篇文章。

更詳細的實驗對比以及代碼,可以點擊http://cs.nyu.edu/~wanli/dropc/

該方法改進於第一節介紹的Dropout,具體可看下圖作對比 

由圖可知,二者的區別很明顯:Dropout是將輸出隨機置0,而DropConnect是將權重隨機置0。 
文章說之所以這么干是因為原來的Dropout進行的不夠充分,隨機采樣不夠合理。這可以從下圖進行理解:

如上圖所示,a表示不加任何Drop時的一層網絡模型。添加Drop相當於給權重再乘以一個隨機掩膜矩陣M。

 

不同的是,DropConnect由於直接對權重隨機置0,因此其掩膜顯得更加具有隨機性,如b所示。而Dropout僅對輸出進行隨機置0,因此其掩膜相當於是對隨機的行和列進行置0,如c所示。

訓練的時候,訓練過程與Dropout基本相同。

測試的時候,我們同樣需要一種近似的方法。如下圖公式所示: 

注意: 掩膜矩陣M的每一個元素都滿足二項伯努利分布。假如M的維度為m*n,則可能的掩膜有2^(m*n)種,之前提到過我們可以粗暴的遍歷所有的掩膜然后計算結果最后求平均。中心極限定理:和分布漸進於正態分布。 於是,我們可以不去遍歷,而是通過計算每一維的均值與方差,確定每一維的正態分布,最后在此正態分布上做多次采樣后求平均即可獲得最終的近似結果

具體測試時的算法流程如下: 

其中,Z是在正態分布上的采樣次數,一般來說越大越好,但會使得計算變慢。

實驗: 作者當然要做很多對比試驗,但其實發現效果並不比Dropout優秀太多,反而計算量要大很多,因此到目前DropConnect並沒有得到廣泛的應用。具體的對比,可以參看原文,這里我只貼一張圖來說明對於Drop ratio的看法: 

由此可以看出,drop ratio並不是越大越好,具體需要大家多做實驗多體會。

 


免責聲明!

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



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