深入瞭解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變分DropoutConcrete 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瞭解到可以描述貓的不太明顯的屬性。

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

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的方法。

英文原文: https://towardsdatascience.com/12-main-dropout-methods-mathematical-and-visual-explanation-58cdc2112293

長按二維碼關注AI公園

相關文章