【深度學習】理解dropout
理解dropout
注意:圖片都在github上放著,如果刷不開的話,可以考慮翻牆。
轉載請註明:http://blog.csdn.net/stdcoutzyx/article/details/49022443
開篇明義,dropout是指在深度學習網路的訓練過程中,對於神經網路單元,按照一定的概率將其暫時從網路中丟棄。注意是暫時,對於隨機梯度下降來說,由於是隨機丟棄,故而每一個mini-batch都在訓練不同的網路。
dropout是CNN中防止過擬合提高效果的一個大殺器,但對於其為何有效,卻眾說紛紜。在下讀到兩篇代表性的論文,代表兩種不同的觀點,特此分享給大家。
組合派
參考文獻中第一篇中的觀點,Hinton老大爺提出來的,關於Hinton在深度學習界的地位我就不再贅述了,光是這地位,估計這一派的觀點就是“武當少林”了。注意,派名是我自己起的,各位勿笑。
觀點
該論文從神經網路的難題出發,一步一步引出dropout為何有效的解釋。大規模的神經網路有兩個缺點:
- 費時
- 容易過擬合
這兩個缺點真是抱在深度學習大腿上的兩個大包袱,一左一右,相得益彰,額不,臭氣相投。過擬合是很多機器學習的通病,過擬合了,得到的模型基本就廢了。而為了解決過擬合問題,一般會採用ensemble方法,即訓練多個模型做組合,此時,費時就成為一個大問題,不僅訓練起來費時,測試起來多個模型也很費時。總之,幾乎形成了一個死鎖。
Dropout的出現很好的可以解決這個問題,每次做完dropout,相當於從原始的網路中找到一個更瘦
的網路,如下圖所示:
因而,對於一個有N個節點的神經網路,有了dropout後,就可以看做是2n
動機論
雖然直觀上看dropout是ensemble在分類效能上的一個近似,然而實際中,dropout畢竟還是在一個神經網路上進行的,只訓練出了一套模型引數。那麼他到底是因何而有效呢?這就要從動機上進行分析了。論文中作者對dropout的動機做了一個十分精彩的類比:
在自然界中,在中大型動物中,一般是有性繁殖,有性繁殖是指後代的基因從父母兩方各繼承一半。但是從直觀上看,似乎無性繁殖更加合理,因為無性繁殖可以保留大段大段的優秀基因。而有性繁殖則將基因隨機拆了又拆,破壞了大段基因的聯合適應性。
但是自然選擇中畢竟沒有選擇無性繁殖,而選擇了有性繁殖,須知物競天擇,適者生存。我們先做一個假設,那就是基因的力量在於混合的能力而非單個基因的能力。不管是有性繁殖還是無性繁殖都得遵循這個假設。為了證明有性繁殖的強大,我們先看一個概率學小知識。
比如要搞一次恐怖襲擊,兩種方式:
- 集中50人,讓這50個人密切精準分工,搞一次大爆破。
- 將50人分成10組,每組5人,分頭行事,去隨便什麼地方搞點動作,成功一次就算。
哪一個成功的概率比較大? 顯然是後者。因為將一個大團隊作戰變成了游擊戰。
那麼,類比過來,有性繁殖的方式不僅僅可以將優秀的基因傳下來,還可以降低基因之間的聯合適應性,使得複雜的大段大段基因聯合適應性變成比較小的一個一個小段基因的聯合適應性。
dropout也能達到同樣的效果,它強迫一個神經單元,和隨機挑選出來的其他神經單元共同工作,達到好的效果。消除減弱了神經元節點間的聯合適應性,增強了泛化能力。
個人補充一點:那就是植物和微生物大多采用無性繁殖,因為他們的生存環境的變化很小,因而不需要太強的適應新環境的能力,所以保留大段大段優秀的基因適應當前環境就足夠了。而高等動物卻不一樣,要準備隨時適應新的環境,因而將基因之間的聯合適應性變成一個一個小的,更能提高生存的概率。
dropout帶來的模型的變化
而為了達到ensemble的特性,有了dropout後,神經網路的訓練和預測就會發生一些變化。
訓練層面
無可避免的,訓練網路的每個單元要新增一道概率流程。
對應的公式變化如下如下:
- 沒有dropout的神經網路
- 有dropout的神經網路
- 沒有dropout的神經網路
測試層面
預測的時候,每一個單元的引數要預乘以p(只是簡單的乘以p?那麼這個p又該如何確定)。
論文中的其他技術點
防止過擬合的方法:
- 提前終止(當驗證集上的效果變差的時候)
- L1和L2正則化加權
- soft weight sharing(這是什麼?)
- dropout
dropout率的選擇
- 經過交叉驗證,隱含節點dropout率等於0.5的時候效果最好,原因是0.5的時候dropout隨機生成的網路結構最多。
- dropout也可以被用作一種新增噪聲的方法,直接對input進行操作。輸入層設為更接近1的數。使得輸入變化不會太大(0.8)(具體怎麼實現和發揮作用的?)
訓練過程
- 對引數w的訓練進行球形限制(max-normalization)(這是什麼?),對dropout的訓練非常有用。
- 球形半徑c是一個需要調整的引數。可以使用驗證集進行引數調優
- dropout自己雖然也很牛,但是dropout、max-normalization、large decaying learning rates and high momentum(瞭解一下這些防止過擬合的方法)組合起來效果更好,比如max-norm regularization就可以防止大的learning rate導致的引數blow up。
- 使用pretraining方法也可以幫助dropout訓練引數(是怎麼起到幫助作用的?),在使用dropout時,要將所有引數都乘以1/p。
部分實驗結論
該論文的實驗部分很豐富,有大量的評測資料。
maxout 神經網路中的另一種方法,Cifar-10上超越dropout
文字分類上,dropout效果提升有限,分析原因可能是Reuters-RCV1資料量足夠大,過擬合併不是模型的主要問題
- dropout與其他standerd regularizers的對比
- L2 weight decay(這是什麼)
- lasso(這是什麼)
- KL-sparsity(這是什麼)
- max-norm regularization(這是什麼)
- dropout
- 特徵學習
- 標準神經網路,節點之間的相關性使得他們可以合作去fix其他節點中得噪聲,但這些合作並不能在unseen data上泛化,於是,過擬合,dropout破壞了這種相關性。在autoencoder上,有dropout的演算法更能學習有意義的特徵(不過只能從直觀上,不能量化)。
- 產生的向量具有稀疏性。
- 保持隱含節點數目不變,dropout率變化;保持啟用的隱節點數目不變,隱節點數目變化。
- 資料量小的時候,dropout效果不好,資料量大了,dropout效果好
模型均值預測(以下兩個是什麼?)
- 使用weight-scaling來做預測的均值化
- 使用mente-carlo方法來做預測。即對每個樣本根據dropout率先sample出來k個net,然後做預測,k越大,效果越好。
Multiplicative Gaussian Noise
使用高斯分佈的dropout而不是伯努利模型dropout- dropout的缺點就在於訓練時間是沒有dropout網路的2-3倍。
進一步需要了解的知識點
- dropout RBM
- Marginalizing Dropout
具體來說就是將隨機化的dropout變為確定性的,比如對於Logistic迴歸,其dropout相當於加了一個正則化項。- Bayesian neural network對稀疏資料特別有用,比如medical diagnosis, genetics, drug discovery and other computational biology applications
噪聲派
參考文獻中第二篇論文中得觀點,也很強有力。
觀點
觀點十分明確,就是對於每一個dropout後的網路,進行訓練時,相當於做了Data Augmentation,因為,總可以找到一個樣本,使得在原始的網路上也能達到dropout單元后的效果。 比如,對於某一層,dropout一些單元后,形成的結果是(1.5,0,2.5,0,1,2,0),其中0是被drop的單元,那麼總能找到一個樣本,使得結果也是如此。這樣,每一次dropout其實都相當於增加了樣本。
稀疏性
知識點A
首先,先了解一個知識點:
When the data points belonging to a particular class are distributed along a linear manifold, or sub-space, of the input space, it is enough to learn a single set of features which can span the entire manifold. But when the data is distributed along a highly non-linear and discontinuous manifold, the best way to represent such a distribution is to learn features which can explicitly represent small local regions of the input space, effectively “tiling” the space to define non-linear decision boundaries.
大致含義就是:
線上性空間中,學習一個整個空間的特徵集合是足夠的,但是當資料分佈在非線性不連續的空間中得時候,則學習區域性空間的特徵集合會比較好。
知識點B
假設有一堆資料,這些資料由M個不同的非連續性簇表示,給定K個數據。那麼一個有效的特徵表示是將輸入的每個簇對映為特徵以後,簇之間的重疊度最低。使用A來表示每個簇的特徵表示中啟用的維度集合。重疊度是指兩個不同的簇的Ai和Aj之間的Jaccard相似度最小,那麼:
- 當K足夠大時,即便A也很大,也可以學習到最小的重疊度
- 當K小M大時,學習到最小的重疊度的方法就是減小A的大小,也就是稀疏性。
上述的解釋可能是有點太專業化,比較拗口。主旨意思是這樣,我們要把不同的類別區分出來,就要是學習到的特徵區分度比較大,在資料量足夠的情況下不會發生過擬合的行為,不用擔心。但當資料量小的時候,可以通過稀疏性,來增加特徵的區分度。
因而有意思的假設來了,使用了dropout後,相當於得到更多的區域性簇,同等的資料下,簇變多了,因而為了使區分性變大,就使得稀疏性變大。
為了驗證這個資料,論文還做了一個實驗,如下圖:
該實驗使用了一個模擬資料,即在一個圓上,有15000個點,將這個圓分為若干個弧,在一個弧上的屬於同一個類,一共10個類,即不同的弧也可能屬於同一個類。改變弧的大小,就可以使屬於同一類的弧變多。
實驗結論就是當弧長變大時,簇數目變少,稀疏度變低。與假設相符合。
個人觀點:該假設不僅僅解釋了dropout何以導致稀疏性,還解釋了dropout因為使區域性簇的更加顯露出來,而根據知識點A可得,使區域性簇顯露出來是dropout能防止過擬合的原因,而稀疏性只是其外在表現。
論文中的其他技術知識點
- 將dropout映射回得樣本訓練一個完整的網路,可以達到dropout的效果。
- dropout由固定值變為一個區間,可以提高效果
- 將dropout後的表示映射回輸入空間時,並不能找到一個樣本x*使得所有層都能滿足dropout的結果,但可以為每一層都找到一個樣本,這樣,對於每一個dropout,都可以找到一組樣本可以模擬結果。
dropout對應的還有一個dropConnect,公式如下:
dropout
dropConnect
- 試驗中,純二值化的特徵的效果也非常好,說明了稀疏表示在進行空間分割槽的假設是成立的,一個特徵是否被啟用表示該樣本是否在一個子空間中。
參考文獻
[1]. Srivastava N, Hinton G, Krizhevsky A, et al. Dropout: A simple way to prevent neural networks from overfitting[J]. The Journal of Machine Learning Research, 2014, 15(1): 1929-1958.