深度學習Dropout技術分析

深度學習Dropout技術分析

什麼是Dropout?
dropout是指在深度學習網絡的訓練過程中,對於神經網絡單元,按照一定的概率將其暫時從網絡中丟棄。注意是暫時,對於隨機梯度下降來說,由於是隨機丟棄,故而每一個mini-batch都在訓練不同的網絡。dropout是CNN中防止過擬合提高效果的一個大殺器,但對於其爲何有效,卻衆說紛紜。在下讀到兩篇代表性的論文,代表兩種不同的觀點,特此分享給大家。

從神經網絡的難題出發,一步一步引出dropout爲何有效的解釋。大規模的神經網絡有兩個缺點:

1)費時

2)容易過擬合

這兩個缺點真是抱在深度學習大腿上的兩個大包袱,一左一右,相得益彰,額不,臭氣相投。過擬合是很多機器學習的通病,過擬合了,得到的模型基本就廢了。而爲了解決過擬合問題,一般會採用ensemble方法,即訓練多個模型做組合,此時,費時就成爲一個大問題,不僅訓練起來費時,測試起來多個模型也很費時。總之,幾乎形成了一個死鎖。

當一個複雜的前饋神經網絡被訓練在小的數據集時,容易造成過擬合。爲了防止過擬合,可以通過阻止特徵檢測器的共同作用來提高神經網絡的性能。

當一個複雜的前饋神經網絡被訓練在小的數據集時,容易造成過擬合。爲了防止過擬合,可以通過阻止特徵檢測器的共同作用來提高神經網絡的性能。

在機器學習的模型中,如果模型的參數太多,而訓練樣本又太少,訓練出來的模型很容易產生過擬合的現象。在訓練神經網絡的時候經常會遇到過擬合的問題,過擬合具體表現在:模型在訓練數據上損失函數較小,預測準確率較高;但是在測試數據上損失函數比較大,預測準確率較低。過擬合是很多機器學習的通病。如果模型過擬合,那麼得到的模型幾乎不能用。爲了解決過擬合問題,一般會採用模型集成的方法,即訓練多個模型進行組合。此時,訓練模型費時就成爲一個很大的問題,不僅訓練多個模型費時,測試多個模型也是很費時。綜上所述,訓練深度神經網絡的時候,總是會遇到兩大缺點:(1)容易過擬合(2)費時Dropout可以比較有效的緩解過擬合的發生,在一定程度上達到正則化的效果。

深入瞭解DNNs,CNNs以及RNNs中的Dropout來進行正則化,蒙特卡洛不確定性和模型壓縮的方法。
在這裏插入圖片描述
在深度機器學習中訓練一個模型的主要挑戰之一是協同適應。這意味着神經元是相互依賴的。他們對彼此的影響相當大,相對於他們的輸入還不夠獨立。也經常發現一些神經元具有比其他神經元更重要的預測能力的情況。換句話說,會過度依賴於個別的神經元的輸出。

這些影響必須避免,權重必須具有一定的分佈,以防止過擬合。某些神經元的協同適應和高預測能力可以通過不同的正則化方法進行調節。其中最常用的是Dropout。然而,dropout方法的全部功能很少被使用。

取決於它是DNN,一個CNN或一個RNN,不同的dropout方法可以被應用。在實踐中,只(或幾乎)使用一個。我認爲這是一個可怕的陷阱。所以在本文中,將從數學和可視化上深入到dropouts的世界中去理解:

· 標準的Dropout方法

· 標準Dropout的變體

· 用在CNNs上的dropout方法

· 用在RNNs上的dropout方法

· 其他的dropout應用(蒙特卡洛和壓縮)

符號
在這裏插入圖片描述
標準的Dropout

最常用的dropout方法是Hinton等人在2012年推出的Standard dropout。通常簡單地稱爲“Dropout”,由於顯而易見的原因,在本文中將稱之爲標準的Dropout。
在這裏插入圖片描述
爲了防止訓練階段的過擬合,隨機去掉神經元。在一個密集的(或全連接的)網絡中,對於每一層,給出了一個dropout的概率p。在每次迭代中,每個神經元被去掉的概率爲p。Hinton等人的論文建議,輸入層的dropout概率爲“p=0.2”,隱藏層的dropout概率爲“p=0.5”。顯然,對輸出層感興趣,這是的預測。所以不會在輸出層應用dropout。
在這裏插入圖片描述
數學上,說每個神經元的丟棄概率遵循概率p的伯努利分佈。因此,用一個mask對神經元向量(層)進行了一個元素級的操作,其中每個元素都是遵循伯努利分佈的隨機變量。

在測試(或推斷)階段,沒有dropout。所有的神經元都是活躍的。爲了補償與訓練階段相比較的額外信息,用出現的概率來衡加權權重。所以神經元沒有被忽略的概率,是“1- p”。

DropConnect

也許你已經熟悉標準的Dropout方法。但也有很多變化。要對密集網絡的前向傳遞進行正則,可以在神經元上應用dropout。L. Wan等人介紹的DropConnect沒有直接在神經元上應用dropout,而是應用在連接這些神經元的權重和偏置上。
在這裏插入圖片描述
因此,找到了與標準Dropout方法相同的機制。除了掩碼(它的元素是遵循一個分佈的隨機變量)不是應用在某一層的神經元向量上,而是應用在連接該層與前一層的權重矩陣上。
在這裏插入圖片描述
對於測試階段,可以使用與標準Dropout方法相同的邏輯。可以乘以出現的概率。但這並不是L. Wan等人提出的方法。他們提出了一個很有趣的隨機方法,即使在測試階段也是如此,他們採用了DropConnect的高斯近似。然後由從這個高斯表示中隨機採樣樣本。會在Standout之後回到高斯近似。

Standout

L. J. Ba和B. Frey介紹的Standout是一個標準的Dropout方法,基於一個Bernoulli mask(我將根據它們遵循的分佈來命名這些mask,這樣會更簡單)。不同之處在於,神經元被遺漏的概率p在這一層中並不恆定。根據權重的值,它是自適應的。
在這裏插入圖片描述
這可以適用於任何g激活函數,甚至是一個單獨的神經網絡。類似地,對於Ws,可以是一個W的函數。然後在測試階段,根據存在的可能性進行平衡。

例子
在這裏插入圖片描述
這樣不是很清楚,舉個例子。在他們的論文中,他們表明在實踐中,置信網絡的權值可以近似爲權值的仿射函數。例如,我取s的絕對值作爲激活函數。
在這裏插入圖片描述
因此,可以看到,權重越大,神經元被丟棄的概率就越大。這有力地限制了某些神經元可能具有的高預測能力。

Gaussian Dropout

應用於神經網絡的dropout方法在繼續增長。所以,在討論DNNs以外的其他東西之前,我想先談談一種dropout方法,它當然是最吸引人的。

舉幾個例子,Fast Dropout, 變分Dropout或Concrete Dropout是從貝葉斯角度解釋Dropout的方法。具體地說,沒有使用伯努利mask,而是使用了一個mask,它的元素是遵循高斯分佈的隨機變量**(**正態分佈)。我不會在這裏演示大數定律,這不是重點。來直觀地理解一下。
在這裏插入圖片描述
可以模擬一個伯努利mask,使用正態規律進行dropouts。但這有什麼區別呢?什麼都做,什麼都不做。由於神經元的協同適應和/或預測能力,它不會改變這些方法與過擬合的相關性。但是,與之前的方法相比,它改變了訓練階段所需的執行時間。

邏輯上,通過在每次迭代中丟棄帶有dropout的神經元,那些在迭代中丟棄的神經元在反向傳播期間不會被更新。它們並不存在。所以訓練階段被“放慢”了。另一方面,通過使用Gaussian Dropout方法,在每次迭代和每個訓練樣本中,所有的神經元都暴露出來。這就避免了減速。
在這裏插入圖片描述
在數學上,有一個高斯mask的乘法(例如以1爲中心的伯努利定律的標準差p(1-p))。通過在每次迭代中保持所有的神經元都是活躍的,從而隨機地對其預測能力進行加權,從而模擬了dropout。這種方法的另一個實際優勢集中在測試階段,與沒有dropout的模型相比,不需要進行任何修改。

Pooling Dropout

本文的“難”理解部分結束了。剩下的更直覺的部分可以給更好的性能。
在這裏插入圖片描述
圖像和特徵圖的問題是像素非常依賴於它們的鄰居。簡單地說,在一張貓的圖片上,如果你取一個與它的外表相對應的像素,那麼所有鄰近的像素都將與同樣的外表相對應。兩者幾乎沒有區別。

所以理解了標準Dropout方法的限制。甚至可以說它是低效的,它帶來的唯一改變就是額外的計算時間。如果隨機丟棄圖像上的像素,那麼幾乎沒有信息被刪除。丟棄的像素幾乎與它們的鄰居相同。防止過擬合的性能很差。
在這裏插入圖片描述
爲什麼不利用CNNs中經常使用的的合適的層。例如最大池化層。最大池化層是一個過濾器,通過一個圖片或(特徵圖)選擇重疊區域的最大激活。
在這裏插入圖片描述
Max-Pooling Dropout是H. Wu和X. Gu提出的一種用於CNNs的Dropout方法。它在執行池化操作之前,直接將伯努利mask應用到最大池化層的內核上。直觀地說,這允許對具有高激活的pooling結果最小化。這是一個限制某些神經元的高預測能力的很好的觀點。在測試階段,你可以根據出現的概率來確定前面方法的權重。
在這裏插入圖片描述
以最大池化層爲例,但同樣可以對其他池化層進行操作。例如,對於平均池化層,可以在訓練階段以同樣的方式應用一個dropout。然後在測試階段,沒有變化,因爲它已經是一個加權平均值了。

Spatial Dropout

對於CNNs,可以利用池化層。但是也可以更聰明地遵循J.Tompson等人提出的Spatial Dropout方法。他們提出用經典的dropout方法來解決這個問題,因爲相鄰像素高度相關。
在這裏插入圖片描述
可以不去隨機應用一個dropout在像素上,可以考慮把dropout應用在每個特徵圖上。如果以的貓爲例,那麼這就像從圖像中移除紅色通道並強迫它去總結圖像中的藍色和綠色通道。然後在下一次迭代中隨機放置其他特徵圖。

我不知道如何用數學正確地書寫,使它易於理解。但是如果你理解了前面的方法,你就不會有任何問題。在訓練階段,對每個feature
map應用Bernoulli mask,其丟棄概率爲p。然後在測試階段,沒有dropout,只有一個概率爲1-p的加權。

Cutout
在這裏插入圖片描述
讓進一步瞭解的方法,以克服相鄰像素高度相關的事實。不是對每個特徵圖應用伯努利mask,可以在不同的區域中應用。這就是T. DeVries和G. W. Taylor提出的Cutout方法。

最後以的貓圖像爲例:該方法可以通過對圖像的隱藏區域進行泛化從而限制過擬合。最後看到的是貓的頭丟棄掉的畫面。這迫使CNN瞭解到可以描述貓的不太明顯的屬性。

同樣,在本節中沒有數學。這種方法很大程度上依賴於的想象力:正方形、長方形、圓形,在所有的特徵圖上,一次在一個特徵圖上,或者可能在幾個特徵圖上……這取決於你。

Max-Drop

最後,爲了結束關於CNNs的這一節,我必須指出,很明顯,幾個方法可以進行組合。當知道了不同的方法時,這就是使強大的原因:可以同時利用他們的好處。這是S. Park和N. Kwak提出的Max-Drop方法。
在這裏插入圖片描述
這種方法在某種程度上是化dropout和高斯dropout的混合。dropout是在最大池化層上執行的,但使用的是貝葉斯方法。
在這裏插入圖片描述
在他們的論文中,他們表明這種方法給出的結果與 Spatial Dropout一樣有效。除此之外,在每次迭代中,所有的神經元都保持活躍,這限制了訓練階段的減速。這些結果都是用µ = 0.02和σ² = 0.05的數據得到的。

RNNDrop
在這裏插入圖片描述
已經看到了一些DNNs和CNNs的dropout的方法。一些研究還試圖找出哪些方法對遞歸神經網絡是有效的。它們通常依賴於LSTMs,所以我將以RNNs爲例。它可以推廣到其他的RNNs。

問題很簡單:在RNN上應用dropout是危險的。RNN的目的是長期保存事件的記憶。但傳統的dropout方法效率不高,因爲它們會產生噪音,阻止這些模型長期保存記憶。下面這些方法可以長期保存記憶。
在這裏插入圖片描述
T. Moon等人提出的RNNDrop是最簡單的方法。一個伯努利mask只應用於隱藏的單元格狀態。但是這個掩碼從一個序列到另一個序列保持不變。這稱爲dropout的逐序列採樣。它只是意味着在每個迭代中創建一個隨機掩碼。然後從一個序列到另一個序列,這個掩碼保持不變。所以被丟棄的元素一直被丟棄而留下來的元素一直留着。所有的序列都是這樣。

循環Dropout
在這裏插入圖片描述
S. Semeniuta等人提出的循環Dropout是一個有趣的變體。單元格狀態保持不變。dropout只應用於更新單元格狀態的部分。所以在每次迭代中,伯努利的mask使一些元素不再對長期記憶有貢獻。但是記憶並沒有改變。

變分RNN dropout
在這裏插入圖片描述
最後,簡單而有效的,由Y. Gal和Z. Ghahramani介紹的RNN Dropout是在internal gates前的基於序列的Dropout的應用。這將導致LSTM在不同的點進行dropout。

打開的思路

還有很多不同的dropout方法,但將在這裏停下來。我發現非常有趣的是,Dropout方法不僅僅是正則化的方法。

Monte Carlo Dropout
在這裏插入圖片描述
Dropout方法也可以提供一個模型不確定性的指標。讓我解釋一下。對於相同的輸入,經歷了dropout的模型在每次迭代中會有一個不同的架構。這將導致輸出中的方差。如果網絡是相當廣義的,並且協同適應是有限的,那麼預測是在整個模型中分佈的。這將導致在每次迭代中使用相同的輸入時輸出的方差降低。研究這個方差可以給出一個可以分配給模型的置信度的概念。這可以從Y. Gal和Z. Ghahramani的方法中看出。

模型壓縮

最後,直觀地,通過隨機應用dropouts,可以看到給定神經元對預測是否有效。根據這個觀察結果,可以通過減少參數的數量來壓縮模型,同時最大限度地降低性能的損耗。K. Neklyudov等人提出了利用變分dropout來剪枝DNNs和CNNs的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章