Dropout的前世与今生
選自arXiv
作者:Alex Labach等
機器之心編譯
參與:Geek AI、張倩
Dropout 是一類用于神經(jīng)網(wǎng)絡(luò)訓練或推理的隨機化技術(shù),這類技術(shù)已經(jīng)引起了研究者們的廣泛興趣,并且被廣泛地應(yīng)用于神經(jīng)網(wǎng)絡(luò)正則化、模型壓縮等任務(wù)。雖然 Dropout 最初是為密集的神經(jīng)網(wǎng)絡(luò)層量身定制的,但是最近的一些進展使得 Dropout 也適用于卷積和循環(huán)神經(jīng)網(wǎng)絡(luò)層。本文總結(jié)了 Dropout 方法的發(fā)展歷史、應(yīng)用以及當下的研究熱點,還詳細介紹了研究者們提出的重要方法。?
圖 1:一些目前提出的 Dropout方法,以及 2012 到 2019 年間 Dropout 方法的理論進展。
?
標準的 Dropout
?
2012 年提出的原始??方法為避免前饋神經(jīng)網(wǎng)絡(luò)中出現(xiàn)的過擬合現(xiàn)象提供了一種簡單的技術(shù)[1]。在每輪迭代中,網(wǎng)絡(luò)中的每個神經(jīng)元以 p 的概率被丟棄。當訓練完成后,盡管神經(jīng)元的輸出要乘以該神經(jīng)元被丟棄的概率 p,整體的網(wǎng)絡(luò)架構(gòu)還是會被使用。這樣做抵消了沒有神經(jīng)元被丟棄的神經(jīng)網(wǎng)絡(luò)尺寸過大的影響,并且可以被解釋為在訓練時可能出現(xiàn)的網(wǎng)絡(luò)上取平均。每一層的 dropout 概率可能不盡相同,原始的 Dropout 論文建議輸入層的 p=0.2,而隱藏層的 p=0.5。輸出層中的神經(jīng)元不會被丟棄。這種技術(shù)通常被簡稱為 Dropout,但是處于本文論述的需要,我們將其稱之為標準 Dropout,從而將其與其它的 Dropout 方法區(qū)分開來。該方法如圖 2 所示。
圖 2:標準 Dropout 的示例。左側(cè)為全連接網(wǎng)絡(luò),右側(cè)的網(wǎng)絡(luò)以 0.5 的概率丟棄神經(jīng)元。輸出層并沒有應(yīng)用 Dropout。
從數(shù)學上來說,神經(jīng)網(wǎng)絡(luò)層訓練過程中使用的標準 Dropout 的行為可以被寫作:
?
?
其中 f(·)為,x 是該層的輸入,W 是該層的權(quán)值矩陣,y為該層的輸出,而 m 則為該層的 Dropout 掩膜(mask),mask 中每個元素為 1 的概率為 p。在測試階段,該層的輸出可以被寫作:
?
用于訓練的 Drpout 方法
?
本節(jié)介紹了重要的 Dropout 方法。和標準的 Dropout 一樣,他們通常被用來在訓練時正則化密集的前饋神經(jīng)網(wǎng)絡(luò)層。這些方法中的大多數(shù)都直接受到了標準 Dropout 的啟發(fā),并尋求提高其速度或的有效程度。
?
基于標準 Dropout 最早提出的變體之一便是由 Wan 等人[3]于 2013 年提出的 dropconnect。該方法是對 Dropout 的一種泛化,其中每個神經(jīng)元的權(quán)重或偏置以一定的概率被設(shè)置為 0,而不是將神經(jīng)元的輸出設(shè)置為 0。因此,在訓練時,某個網(wǎng)絡(luò)層的輸出可以被寫作:
?
?
其中各變量的定義與公式(1)中相同,但是這里使用了一個 Dropout mask 矩陣,而不是 mask 向量。Dropoutconnect 如圖 3 所示。
?
圖 3:Dropconnect 的示例。右側(cè)的網(wǎng)絡(luò)以 0.5 的概率將權(quán)值設(shè)置為 0。
Standout[4]是一種試圖通過自適應(yīng)地選擇待丟棄的神經(jīng)元(而不是隨機丟棄)來改進標準 Dropout的 Dropout 方法。這個過程是通過在神經(jīng)網(wǎng)絡(luò)上疊加一個控制神經(jīng)網(wǎng)架構(gòu)的二值信念網(wǎng)絡(luò)實現(xiàn)的。針對原始神經(jīng)網(wǎng)絡(luò)中的每一個權(quán)值,Standout 都會在二值信念網(wǎng)絡(luò)中為其添加一個相應(yīng)的權(quán)值參數(shù)。在訓練時,某一層的輸出可以被寫作:
?
?
其中各變量的定義與公式(1)相同,但是W 代表作用于該層的信念網(wǎng)絡(luò)的權(quán)值,而 g(·)代表的激活函數(shù)。
?
Fast Dropout[5]通過從貝葉斯的角度解釋 Dropout 方法,提供了一種更快速地進行類似于 Dropout 的正則化的方式。Fast Dropout 的作者表明,帶有 Dropout 的網(wǎng)絡(luò)層的輸出可以被看做是從一個潛在的分布(可以近似為高斯分布)中進行采樣。然后可以直接從這個分布中采樣,或者使用它的參數(shù)來傳播關(guān)于整個 Dropout 集合的信息。該技術(shù)可以比標準 Dropout 更快地進行訓練(在標準 Dropout 中,一次只采樣可能的網(wǎng)絡(luò)集合中的一個元素)。
?
受貝葉斯式dropout理解方法啟發(fā)的另一種方法是 Kingma 等人[6]提出的變分Dropout(不要與 Gal 和 Ghahramani 的工作[13]弄混)。作者指出,使用高斯乘性噪聲的 Dropout 變體(由 Srivastava 等人提出的[8])可以被解釋為給定一個網(wǎng)絡(luò)權(quán)值上的特定先驗和特定變分目標的變分方法。然后,它們會推導出一個自適應(yīng)的 Dropout 方案,該方案可以自動確定一個完整的網(wǎng)絡(luò)或單個層或神經(jīng)元的有效的Dropout 概率。相對于現(xiàn)有的使用確定的 Dropout 率的方法(如使用固定的概率或網(wǎng)格搜索)來說,這可能是一種改進。Concrete Dropout[20]是另外一種自動調(diào)整 Dropout 概率的方法。
?
卷積層
?
用于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的樸素Dropout 的定義為:在特征圖或輸入圖像中隨機地丟棄像素。這并沒有顯著地減少過擬合,主要是因為被丟棄的像素與其鄰接像素是高度相關(guān)的[21]。然而,最近研究人員取得了許多有發(fā)展前景的、使用 Dropout 作為正則化方法訓練 CNN 的研究進展。
?
最大池化 Dropout[12]是一種保留了最大池化層的行為的方法,它同時也以一定概率讓其它的特征值可以影響池化層的輸出。在執(zhí)行最大池化操作前,算子對特征值的某個子集進行 mask 運算。
?
圖 4:卷積神經(jīng)網(wǎng)絡(luò)中的最大池化Dropout[12]。
在論文「Analysis on the dropout effect inconvolutional neural networks」[23]中,作者提出了一種基于訓練的迭代過程改變 Dropout 概率的 Dropout 方法。丟棄神經(jīng)元的概率是從均勻分布或正態(tài)分布采樣得到的。該方法等價于向每一層的輸出特征圖添加噪聲。該方法提高了網(wǎng)絡(luò)對帶有噪聲的圖像變化的魯棒性[23]。作者也提出了「max-drop」,在這種方法中高激活值被有選擇性地丟棄。這些高激活值是在特征圖或通道上選擇出來的[23]。論文[23]中的實驗結(jié)果表明,文中所提出的方法的性能與「spatial dropout」相當。
?
Cutout 是另一種基于Dropout 的用于訓練 CNN 的正則化和數(shù)據(jù)增強方法[24],它在每一張輸入圖像的某個區(qū)域上應(yīng)用一個隨機的正方形掩膜。與其它常見的在特征圖級別上應(yīng)用 Dropout 的方法不同,該方法直接將 Dropout 應(yīng)用在輸入圖像上。Cutout 背后主要的動機是刪除 CNN 的后續(xù)層中帶有高激活值的視覺特征[24]。然而,令人驚訝的是,這種在輸入圖像上應(yīng)用掩膜的方法在執(zhí)行成本更低的情況下可以取得相同的性能。
?
循環(huán)層
?
通常而言,上述前饋 Dropout 方法可以被應(yīng)用到帶有循環(huán)層的網(wǎng)絡(luò)的前饋連接中。因此,一些研究著眼于將 Dropout 方法應(yīng)用于循環(huán)連接。因為在每一個時間步上由 Dropout 引起的噪聲讓網(wǎng)絡(luò)難以保留長期的記憶,將標準 Dropout 應(yīng)用于循環(huán)連接的效果很差[28]。然而,專門為循環(huán)層設(shè)計的 Dropout 方法也取得了成功,并且在實踐中被廣泛應(yīng)用。一般來說,它們通過一種仍然能夠保存長期記憶的方式將 Dropout 應(yīng)用于循環(huán)連接上。
?
2015 年提出的RNNDrop[30]提供了一種簡單的解決方案,能夠在應(yīng)用 Dropout 時更好地保留記憶。
?
圖 5:在一個展開的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)上,對于每一個時間步(左圖)和每一個序列(右圖)進行 Dropout 掩膜采樣的對比。水平連接是循環(huán)的,而垂直連接是前饋的。不同的顏色代表應(yīng)用于相應(yīng)連接的不同 Dropout 掩膜。
?
2016 年,Gal 和 Ghahramani 提出了一種RNN Dropout 變體,該變體基于一種對 Dropout 方法的貝葉斯化的解釋。作者指出,如果 Dropout 被看做一個貝葉斯后驗的變分蒙特卡羅逼近,那么將其應(yīng)用于循環(huán)層的自然方法就是生成一個同時將每個訓練序列的前饋連接和循環(huán)連接置零的 Dropout 掩膜,但是為序列中的每個時間步保持相同的掩膜。這與 RNNDrop 類似的地方在于,掩膜是基于每個序列生成的,但是求導過程導致在 LSTM 單元的不同位置應(yīng)用 Dropout。
?
循環(huán) Dropout[14]是另一種可以在一個 LSTM 中保存記憶,同時也能像在標準 Dropout 中一樣為每個輸入樣本生成不一樣的 Dropout 掩膜的方法。這只需將 Dropout 應(yīng)用于 RNN 中更新隱藏狀態(tài)的部分,而不是狀態(tài)本身。因此,如果一個元素被刪除,那么它就不會對網(wǎng)絡(luò)的記憶產(chǎn)生影響,而不是消除隱藏狀態(tài)。
?
用于模型壓縮的 Dropout 方法
?
標準 Dropout 加大了神經(jīng)網(wǎng)絡(luò)權(quán)值[8]的稀疏性。這一特性意味著 Dropout 方法可以通過減少有效執(zhí)行所需的參數(shù)數(shù)量來壓縮神經(jīng)網(wǎng)絡(luò)模型。自 2017 年以來,研究人員提出了幾種基于 Dropout 壓縮實際模型的方法。
?
2017 年,Molchanov 等人[9]提出使用變分 Dropout[6](本文第三節(jié)介紹過)同時對全連接層和卷積層進行稀疏化。結(jié)果表明,該方法在對性能影響最小的同時,大大減少了標準卷積網(wǎng)絡(luò)的參數(shù)。然后可以將這種稀疏表征傳遞到現(xiàn)有方法中,從而將稀疏網(wǎng)絡(luò)轉(zhuǎn)換為壓縮模型(如[31]中的工作)。Neklyudov 等人[10]也提出了類似的方法,他們使用了改進的變分 Dropout 方案,提高了稀疏性,但最終得到的網(wǎng)絡(luò)結(jié)構(gòu)特別易于壓縮。
?
最近,進一步開發(fā)用于模型壓縮的 Dropout 方法是一個十分活躍的研究領(lǐng)域。最近提出的方法包括 Targeted Dropout[32],其中神經(jīng)元被自適應(yīng)地選擇,并以使網(wǎng)絡(luò)適應(yīng)神經(jīng)剪枝的方式被丟棄,在不過多損失準確率的情況下大幅度縮小網(wǎng)絡(luò)規(guī)模。另一種最近提出的方法是 Ising-dropout[11],它在一個神經(jīng)網(wǎng)絡(luò)的頂部覆蓋了一個圖形化的「Ising」模型,以識別不太有用的神經(jīng)元,并在訓練和推理中把它們丟棄掉。
?
蒙特卡羅 Dropout
?
2016 年,Gal 和 Ghahramani[7]提出了一種從貝葉斯理論出發(fā)的Dropout理解方式,并且被廣泛接受。他們將Dropout 解釋為深度高斯過程的貝葉斯近似。
?
除了常見的點估計輸出,該方法還提供了一種估計神經(jīng)網(wǎng)絡(luò)輸出置信度的簡單方法。蒙特卡羅Dropout 在模型的不確定性估計中得到了廣泛的應(yīng)用。
論文鏈接:https://arxiv.org/abs/1904.13310
總結(jié)
以上是生活随笔為你收集整理的Dropout的前世与今生的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fast R-CNN: 我变快了,也变强
- 下一篇: 如何用OpenCV在Python中实现人