本文主要介紹Dropout及延伸下來的一些方法,以便更深刻的理解。算法
想要提升CNN的表達或分類能力,最直接的方法就是採用更深的網絡和更多的神經元,即deeper and wider。可是,複雜的網絡也意味着更加容易過擬合。因而就有了Dropout,大部分實驗代表其具備必定的防止過擬合的能力。網絡
最先的Dropout能夠看Hinton的這篇文章
《Improving neural networks by preventing co-adaptation of feature Detectors》數據結構
從文章的名字咱們就能夠先對Dropout的工做原理有個猜想:過擬合意味着網絡記住了訓練樣本,而打破網絡固定的工做方式,就有可能打破這種很差的記憶。框架
Ok,咱們直接來看什麼是Dropout:ide
須要注意的是:論文中Dropout被使用在全鏈接層以後,而目前的caffe框架中,其可使用在各類層以後。函數
如上圖左,爲沒有Dropout的普通2層全鏈接結構,記爲 r=a(Wv),其中a爲激活函數。性能
如上圖右,爲在第2層全鏈接後添加Dropout層的示意圖。即在 模 型 訓 練 時 隨機讓網絡的某些節點不工做(輸出置0),其它過程不變。學習
對於Dropout這樣的操做爲什麼能夠防止訓練過擬合,原做者也沒有給出數學證實,只是有一些直觀的理解或者說猜測。下面說幾個我認爲比較靠譜的解釋:測試
(1) 因爲隨機的讓一些節點不工做了,所以能夠避免某些特徵只在固定組合下才生效,有意識地讓網絡去學習一些廣泛的共性(而不是某些訓練樣本的一些特性).net
(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反而會下降性能。
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並非越大越好,具體須要你們多作實驗多體會。