深度学习Dropout技术分析
深度學(xué)習(xí)Dropout技術(shù)分析
什么是Dropout?
dropout是指在深度學(xué)習(xí)網(wǎng)絡(luò)的訓(xùn)練過程中,對(duì)于神經(jīng)網(wǎng)絡(luò)單元,按照一定的概率將其暫時(shí)從網(wǎng)絡(luò)中丟棄。注意是暫時(shí),對(duì)于隨機(jī)梯度下降來說,由于是隨機(jī)丟棄,故而每一個(gè)mini-batch都在訓(xùn)練不同的網(wǎng)絡(luò)。dropout是CNN中防止過擬合提高效果的一個(gè)大殺器,但對(duì)于其為何有效,卻眾說紛紜。在下讀到兩篇代表性的論文,代表兩種不同的觀點(diǎn),特此分享給大家。
從神經(jīng)網(wǎng)絡(luò)的難題出發(fā),一步一步引出dropout為何有效的解釋。大規(guī)模的神經(jīng)網(wǎng)絡(luò)有兩個(gè)缺點(diǎn):
1)費(fèi)時(shí)
2)容易過擬合
這兩個(gè)缺點(diǎn)真是抱在深度學(xué)習(xí)大腿上的兩個(gè)大包袱,一左一右,相得益彰,額不,臭氣相投。過擬合是很多機(jī)器學(xué)習(xí)的通病,過擬合了,得到的模型基本就廢了。而為了解決過擬合問題,一般會(huì)采用ensemble方法,即訓(xùn)練多個(gè)模型做組合,此時(shí),費(fèi)時(shí)就成為一個(gè)大問題,不僅訓(xùn)練起來費(fèi)時(shí),測(cè)試起來多個(gè)模型也很費(fèi)時(shí)。總之,幾乎形成了一個(gè)死鎖。
當(dāng)一個(gè)復(fù)雜的前饋神經(jīng)網(wǎng)絡(luò)被訓(xùn)練在小的數(shù)據(jù)集時(shí),容易造成過擬合。為了防止過擬合,可以通過阻止特征檢測(cè)器的共同作用來提高神經(jīng)網(wǎng)絡(luò)的性能。
當(dāng)一個(gè)復(fù)雜的前饋神經(jīng)網(wǎng)絡(luò)被訓(xùn)練在小的數(shù)據(jù)集時(shí),容易造成過擬合。為了防止過擬合,可以通過阻止特征檢測(cè)器的共同作用來提高神經(jīng)網(wǎng)絡(luò)的性能。
在機(jī)器學(xué)習(xí)的模型中,如果模型的參數(shù)太多,而訓(xùn)練樣本又太少,訓(xùn)練出來的模型很容易產(chǎn)生過擬合的現(xiàn)象。在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時(shí)候經(jīng)常會(huì)遇到過擬合的問題,過擬合具體表現(xiàn)在:模型在訓(xùn)練數(shù)據(jù)上損失函數(shù)較小,預(yù)測(cè)準(zhǔn)確率較高;但是在測(cè)試數(shù)據(jù)上損失函數(shù)比較大,預(yù)測(cè)準(zhǔn)確率較低。過擬合是很多機(jī)器學(xué)習(xí)的通病。如果模型過擬合,那么得到的模型幾乎不能用。為了解決過擬合問題,一般會(huì)采用模型集成的方法,即訓(xùn)練多個(gè)模型進(jìn)行組合。此時(shí),訓(xùn)練模型費(fèi)時(shí)就成為一個(gè)很大的問題,不僅訓(xùn)練多個(gè)模型費(fèi)時(shí),測(cè)試多個(gè)模型也是很費(fèi)時(shí)。綜上所述,訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的時(shí)候,總是會(huì)遇到兩大缺點(diǎn):(1)容易過擬合(2)費(fèi)時(shí)Dropout可以比較有效的緩解過擬合的發(fā)生,在一定程度上達(dá)到正則化的效果。
深入了解DNNs,CNNs以及RNNs中的Dropout來進(jìn)行正則化,蒙特卡洛不確定性和模型壓縮的方法。
在深度機(jī)器學(xué)習(xí)中訓(xùn)練一個(gè)模型的主要挑戰(zhàn)之一是協(xié)同適應(yīng)。這意味著神經(jīng)元是相互依賴的。他們對(duì)彼此的影響相當(dāng)大,相對(duì)于他們的輸入還不夠獨(dú)立。也經(jīng)常發(fā)現(xiàn)一些神經(jīng)元具有比其他神經(jīng)元更重要的預(yù)測(cè)能力的情況。換句話說,會(huì)過度依賴于個(gè)別的神經(jīng)元的輸出。
這些影響必須避免,權(quán)重必須具有一定的分布,以防止過擬合。某些神經(jīng)元的協(xié)同適應(yīng)和高預(yù)測(cè)能力可以通過不同的正則化方法進(jìn)行調(diào)節(jié)。其中最常用的是Dropout。然而,dropout方法的全部功能很少被使用。
取決于它是DNN,一個(gè)CNN或一個(gè)RNN,不同的dropout方法可以被應(yīng)用。在實(shí)踐中,只(或幾乎)使用一個(gè)。我認(rèn)為這是一個(gè)可怕的陷阱。所以在本文中,將從數(shù)學(xué)和可視化上深入到dropouts的世界中去理解:
· 標(biāo)準(zhǔn)的Dropout方法
· 標(biāo)準(zhǔn)Dropout的變體
· 用在CNNs上的dropout方法
· 用在RNNs上的dropout方法
· 其他的dropout應(yīng)用(蒙特卡洛和壓縮)
符號(hào)
標(biāo)準(zhǔn)的Dropout
最常用的dropout方法是Hinton等人在2012年推出的Standard dropout。通常簡(jiǎn)單地稱為“Dropout”,由于顯而易見的原因,在本文中將稱之為標(biāo)準(zhǔn)的Dropout。
為了防止訓(xùn)練階段的過擬合,隨機(jī)去掉神經(jīng)元。在一個(gè)密集的(或全連接的)網(wǎng)絡(luò)中,對(duì)于每一層,給出了一個(gè)dropout的概率p。在每次迭代中,每個(gè)神經(jīng)元被去掉的概率為p。Hinton等人的論文建議,輸入層的dropout概率為“p=0.2”,隱藏層的dropout概率為“p=0.5”。顯然,對(duì)輸出層感興趣,這是的預(yù)測(cè)。所以不會(huì)在輸出層應(yīng)用dropout。
數(shù)學(xué)上,說每個(gè)神經(jīng)元的丟棄概率遵循概率p的伯努利分布。因此,用一個(gè)mask對(duì)神經(jīng)元向量(層)進(jìn)行了一個(gè)元素級(jí)的操作,其中每個(gè)元素都是遵循伯努利分布的隨機(jī)變量。
在測(cè)試(或推斷)階段,沒有dropout。所有的神經(jīng)元都是活躍的。為了補(bǔ)償與訓(xùn)練階段相比較的額外信息,用出現(xiàn)的概率來衡加權(quán)權(quán)重。所以神經(jīng)元沒有被忽略的概率,是“1- p”。
DropConnect
也許你已經(jīng)熟悉標(biāo)準(zhǔn)的Dropout方法。但也有很多變化。要對(duì)密集網(wǎng)絡(luò)的前向傳遞進(jìn)行正則,可以在神經(jīng)元上應(yīng)用dropout。L. Wan等人介紹的DropConnect沒有直接在神經(jīng)元上應(yīng)用dropout,而是應(yīng)用在連接這些神經(jīng)元的權(quán)重和偏置上。
因此,找到了與標(biāo)準(zhǔn)Dropout方法相同的機(jī)制。除了掩碼(它的元素是遵循一個(gè)分布的隨機(jī)變量)不是應(yīng)用在某一層的神經(jīng)元向量上,而是應(yīng)用在連接該層與前一層的權(quán)重矩陣上。
對(duì)于測(cè)試階段,可以使用與標(biāo)準(zhǔn)Dropout方法相同的邏輯。可以乘以出現(xiàn)的概率。但這并不是L. Wan等人提出的方法。他們提出了一個(gè)很有趣的隨機(jī)方法,即使在測(cè)試階段也是如此,他們采用了DropConnect的高斯近似。然后由從這個(gè)高斯表示中隨機(jī)采樣樣本。會(huì)在Standout之后回到高斯近似。
Standout
L. J. Ba和B. Frey介紹的Standout是一個(gè)標(biāo)準(zhǔn)的Dropout方法,基于一個(gè)Bernoulli mask(我將根據(jù)它們遵循的分布來命名這些mask,這樣會(huì)更簡(jiǎn)單)。不同之處在于,神經(jīng)元被遺漏的概率p在這一層中并不恒定。根據(jù)權(quán)重的值,它是自適應(yīng)的。
這可以適用于任何g激活函數(shù),甚至是一個(gè)單獨(dú)的神經(jīng)網(wǎng)絡(luò)。類似地,對(duì)于Ws,可以是一個(gè)W的函數(shù)。然后在測(cè)試階段,根據(jù)存在的可能性進(jìn)行平衡。
例子
這樣不是很清楚,舉個(gè)例子。在他們的論文中,他們表明在實(shí)踐中,置信網(wǎng)絡(luò)的權(quán)值可以近似為權(quán)值的仿射函數(shù)。例如,我取s的絕對(duì)值作為激活函數(shù)。
因此,可以看到,權(quán)重越大,神經(jīng)元被丟棄的概率就越大。這有力地限制了某些神經(jīng)元可能具有的高預(yù)測(cè)能力。
Gaussian Dropout
應(yīng)用于神經(jīng)網(wǎng)絡(luò)的dropout方法在繼續(xù)增長(zhǎng)。所以,在討論DNNs以外的其他東西之前,我想先談?wù)勔环Ndropout方法,它當(dāng)然是最吸引人的。
舉幾個(gè)例子,Fast Dropout, 變分Dropout或Concrete Dropout是從貝葉斯角度解釋Dropout的方法。具體地說,沒有使用伯努利mask,而是使用了一個(gè)mask,它的元素是遵循高斯分布的隨機(jī)變量**(**正態(tài)分布)。我不會(huì)在這里演示大數(shù)定律,這不是重點(diǎn)。來直觀地理解一下。
可以模擬一個(gè)伯努利mask,使用正態(tài)規(guī)律進(jìn)行dropouts。但這有什么區(qū)別呢?什么都做,什么都不做。由于神經(jīng)元的協(xié)同適應(yīng)和/或預(yù)測(cè)能力,它不會(huì)改變這些方法與過擬合的相關(guān)性。但是,與之前的方法相比,它改變了訓(xùn)練階段所需的執(zhí)行時(shí)間。
邏輯上,通過在每次迭代中丟棄帶有dropout的神經(jīng)元,那些在迭代中丟棄的神經(jīng)元在反向傳播期間不會(huì)被更新。它們并不存在。所以訓(xùn)練階段被“放慢”了。另一方面,通過使用Gaussian Dropout方法,在每次迭代和每個(gè)訓(xùn)練樣本中,所有的神經(jīng)元都暴露出來。這就避免了減速。
在數(shù)學(xué)上,有一個(gè)高斯mask的乘法(例如以1為中心的伯努利定律的標(biāo)準(zhǔn)差p(1-p))。通過在每次迭代中保持所有的神經(jīng)元都是活躍的,從而隨機(jī)地對(duì)其預(yù)測(cè)能力進(jìn)行加權(quán),從而模擬了dropout。這種方法的另一個(gè)實(shí)際優(yōu)勢(shì)集中在測(cè)試階段,與沒有dropout的模型相比,不需要進(jìn)行任何修改。
Pooling Dropout
本文的“難”理解部分結(jié)束了。剩下的更直覺的部分可以給更好的性能。
圖像和特征圖的問題是像素非常依賴于它們的鄰居。簡(jiǎn)單地說,在一張貓的圖片上,如果你取一個(gè)與它的外表相對(duì)應(yīng)的像素,那么所有鄰近的像素都將與同樣的外表相對(duì)應(yīng)。兩者幾乎沒有區(qū)別。
所以理解了標(biāo)準(zhǔn)Dropout方法的限制。甚至可以說它是低效的,它帶來的唯一改變就是額外的計(jì)算時(shí)間。如果隨機(jī)丟棄圖像上的像素,那么幾乎沒有信息被刪除。丟棄的像素幾乎與它們的鄰居相同。防止過擬合的性能很差。
為什么不利用CNNs中經(jīng)常使用的的合適的層。例如最大池化層。最大池化層是一個(gè)過濾器,通過一個(gè)圖片或(特征圖)選擇重疊區(qū)域的最大激活。
Max-Pooling Dropout是H. Wu和X. Gu提出的一種用于CNNs的Dropout方法。它在執(zhí)行池化操作之前,直接將伯努利mask應(yīng)用到最大池化層的內(nèi)核上。直觀地說,這允許對(duì)具有高激活的pooling結(jié)果最小化。這是一個(gè)限制某些神經(jīng)元的高預(yù)測(cè)能力的很好的觀點(diǎn)。在測(cè)試階段,你可以根據(jù)出現(xiàn)的概率來確定前面方法的權(quán)重。
以最大池化層為例,但同樣可以對(duì)其他池化層進(jìn)行操作。例如,對(duì)于平均池化層,可以在訓(xùn)練階段以同樣的方式應(yīng)用一個(gè)dropout。然后在測(cè)試階段,沒有變化,因?yàn)樗呀?jīng)是一個(gè)加權(quán)平均值了。
Spatial Dropout
對(duì)于CNNs,可以利用池化層。但是也可以更聰明地遵循J.Tompson等人提出的Spatial Dropout方法。他們提出用經(jīng)典的dropout方法來解決這個(gè)問題,因?yàn)橄噜徬袼馗叨认嚓P(guān)。
可以不去隨機(jī)應(yīng)用一個(gè)dropout在像素上,可以考慮把dropout應(yīng)用在每個(gè)特征圖上。如果以的貓為例,那么這就像從圖像中移除紅色通道并強(qiáng)迫它去總結(jié)圖像中的藍(lán)色和綠色通道。然后在下一次迭代中隨機(jī)放置其他特征圖。
我不知道如何用數(shù)學(xué)正確地書寫,使它易于理解。但是如果你理解了前面的方法,你就不會(huì)有任何問題。在訓(xùn)練階段,對(duì)每個(gè)feature
map應(yīng)用Bernoulli mask,其丟棄概率為p。然后在測(cè)試階段,沒有dropout,只有一個(gè)概率為1-p的加權(quán)。
Cutout
讓進(jìn)一步了解的方法,以克服相鄰像素高度相關(guān)的事實(shí)。不是對(duì)每個(gè)特征圖應(yīng)用伯努利mask,可以在不同的區(qū)域中應(yīng)用。這就是T. DeVries和G. W. Taylor提出的Cutout方法。
最后以的貓圖像為例:該方法可以通過對(duì)圖像的隱藏區(qū)域進(jìn)行泛化從而限制過擬合。最后看到的是貓的頭丟棄掉的畫面。這迫使CNN了解到可以描述貓的不太明顯的屬性。
同樣,在本節(jié)中沒有數(shù)學(xué)。這種方法很大程度上依賴于的想象力:正方形、長(zhǎng)方形、圓形,在所有的特征圖上,一次在一個(gè)特征圖上,或者可能在幾個(gè)特征圖上……這取決于你。
Max-Drop
最后,為了結(jié)束關(guān)于CNNs的這一節(jié),我必須指出,很明顯,幾個(gè)方法可以進(jìn)行組合。當(dāng)知道了不同的方法時(shí),這就是使強(qiáng)大的原因:可以同時(shí)利用他們的好處。這是S. Park和N. Kwak提出的Max-Drop方法。
這種方法在某種程度上是化dropout和高斯dropout的混合。dropout是在最大池化層上執(zhí)行的,但使用的是貝葉斯方法。
在他們的論文中,他們表明這種方法給出的結(jié)果與 Spatial Dropout一樣有效。除此之外,在每次迭代中,所有的神經(jīng)元都保持活躍,這限制了訓(xùn)練階段的減速。這些結(jié)果都是用μ = 0.02和σ2 = 0.05的數(shù)據(jù)得到的。
RNNDrop
已經(jīng)看到了一些DNNs和CNNs的dropout的方法。一些研究還試圖找出哪些方法對(duì)遞歸神經(jīng)網(wǎng)絡(luò)是有效的。它們通常依賴于LSTMs,所以我將以RNNs為例。它可以推廣到其他的RNNs。
問題很簡(jiǎn)單:在RNN上應(yīng)用dropout是危險(xiǎn)的。RNN的目的是長(zhǎng)期保存事件的記憶。但傳統(tǒng)的dropout方法效率不高,因?yàn)樗鼈儠?huì)產(chǎn)生噪音,阻止這些模型長(zhǎng)期保存記憶。下面這些方法可以長(zhǎng)期保存記憶。
T. Moon等人提出的RNNDrop是最簡(jiǎn)單的方法。一個(gè)伯努利mask只應(yīng)用于隱藏的單元格狀態(tài)。但是這個(gè)掩碼從一個(gè)序列到另一個(gè)序列保持不變。這稱為dropout的逐序列采樣。它只是意味著在每個(gè)迭代中創(chuàng)建一個(gè)隨機(jī)掩碼。然后從一個(gè)序列到另一個(gè)序列,這個(gè)掩碼保持不變。所以被丟棄的元素一直被丟棄而留下來的元素一直留著。所有的序列都是這樣。
循環(huán)Dropout
S. Semeniuta等人提出的循環(huán)Dropout是一個(gè)有趣的變體。單元格狀態(tài)保持不變。dropout只應(yīng)用于更新單元格狀態(tài)的部分。所以在每次迭代中,伯努利的mask使一些元素不再對(duì)長(zhǎng)期記憶有貢獻(xiàn)。但是記憶并沒有改變。
變分RNN dropout
最后,簡(jiǎn)單而有效的,由Y. Gal和Z. Ghahramani介紹的RNN Dropout是在internal gates前的基于序列的Dropout的應(yīng)用。這將導(dǎo)致LSTM在不同的點(diǎn)進(jìn)行dropout。
打開的思路
還有很多不同的dropout方法,但將在這里停下來。我發(fā)現(xiàn)非常有趣的是,Dropout方法不僅僅是正則化的方法。
Monte Carlo Dropout
Dropout方法也可以提供一個(gè)模型不確定性的指標(biāo)。讓我解釋一下。對(duì)于相同的輸入,經(jīng)歷了dropout的模型在每次迭代中會(huì)有一個(gè)不同的架構(gòu)。這將導(dǎo)致輸出中的方差。如果網(wǎng)絡(luò)是相當(dāng)廣義的,并且協(xié)同適應(yīng)是有限的,那么預(yù)測(cè)是在整個(gè)模型中分布的。這將導(dǎo)致在每次迭代中使用相同的輸入時(shí)輸出的方差降低。研究這個(gè)方差可以給出一個(gè)可以分配給模型的置信度的概念。這可以從Y. Gal和Z. Ghahramani的方法中看出。
模型壓縮
最后,直觀地,通過隨機(jī)應(yīng)用dropouts,可以看到給定神經(jīng)元對(duì)預(yù)測(cè)是否有效。根據(jù)這個(gè)觀察結(jié)果,可以通過減少參數(shù)的數(shù)量來壓縮模型,同時(shí)最大限度地降低性能的損耗。K. Neklyudov等人提出了利用變分dropout來剪枝DNNs和CNNs的方法。
總結(jié)
以上是生活随笔為你收集整理的深度学习Dropout技术分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模型压缩95%:Lite Transfo
- 下一篇: 激光雷达和毫米波雷达