理解dropout
- 1
- 2
- 3
開篇明義,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。
論文中的其他技術點
-
防止過擬合的方法:
- 提前終止(當驗證集上的效果變差的時候)
- 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倍。
-
正則化(Regularization)
機器學習中幾乎都可以看到損失函數後面會添加一個額外項,常用的額外項一般有兩種,一般英文稱作
L1正則化和L2正則化可以看做是損失函數的懲罰項。所謂『懲罰』是指對損失函數中的某些參數做一些限制。對於線性迴歸模型,使用L1正則化的模型建叫做Lasso迴歸,使用L2正則化的模型叫做Ridge迴歸(嶺迴歸)。下圖是Python中Lasso迴歸的損失函數,式中加號後面一項
下圖是Python中Ridge迴歸的損失函數,式中加號後面一項
一般迴歸分析中迴歸
- L1正則化是指權值向量
w 中各個元素的絕對值之和,通常表示爲||w||1 - L2正則化是指權值向量
w 中各個元素的平方和然後再求平方根(可以看到Ridge迴歸的L2正則化項有平方符號),通常表示爲||w||2
一般都會在正則化項之前添加一個係數,Python中用
那添加L1和L2正則化有什麼用?下面是L1正則化和L2正則化的作用,這些表述可以在很多文章中找到。
- L1正則化可以產生稀疏權值矩陣,即產生一個稀疏模型,可以用於特徵選擇
- L2正則化可以防止模型過擬合(overfitting);一定程度上,L1也可以防止過擬合
稀疏模型與特徵選擇
上面提到L1正則化有助於生成一個稀疏權值矩陣,進而可以用於特徵選擇。爲什麼要生成一個稀疏矩陣?
稀疏矩陣指的是很多元素爲0,只有少數元素是非零值的矩陣,即得到的線性迴歸模型的大部分系數都是0. 通常機器學習中特徵數量很多,例如文本處理時,如果將一個詞組(term)作爲一個特徵,那麼特徵數量會達到上萬個(bigram)。在預測或分類時,那麼多特徵顯然難以選擇,但是如果代入這些特徵得到的模型是一個稀疏模型,表示只有少數特徵對這個模型有貢獻,絕大部分特徵是沒有貢獻的,或者貢獻微小(因爲它們前面的係數是0或者是很小的值,即使去掉對模型也沒有什麼影響),此時我們就可以只關注係數是非零值的特徵。這就是稀疏模型與特徵選擇的關係。
L1和L2正則化的直觀理解
這部分內容將解釋爲什麼L1正則化可以產生稀疏模型(L1是怎麼讓係數等於零的),以及爲什麼L2正則化可以防止過擬合。
L1正則化和特徵選擇
假設有如下帶L1正則化的損失函數:
其中
圖1 L1正則化
圖中等值線是
而正則化前面的係數
類似,假設有如下帶L2正則化的損失函數:
同樣可以畫出他們在二維平面上的圖形,如下:
圖2 L2正則化
二維平面下L2正則化的函數圖形是個圓,與方形相比,被磨去了棱角。因此
L2正則化和過擬合
擬合過程中通常都傾向於讓權值儘可能小,最後構造一個所有參數都比較小的模型。因爲一般認爲參數值小的模型比較簡單,能適應不同的數據集,也在一定程度上避免了過擬合現象。可以設想一下對於一個線性迴歸方程,若參數很大,那麼只要數據偏移一點點,就會對結果造成很大的影響;但如果參數足夠小,數據偏移得多一點也不會對結果造成什麼影響,專業一點的說法是『抗擾動能力強』。
那爲什麼L2正則化可以獲得值很小的參數?
以線性迴歸中的梯度下降法爲例。假設要求的參數爲
那麼在梯度下降法中,最終用於迭代計算參數
其中
其中
最開始也提到L1正則化一定程度上也可以防止過擬合。之前做了解釋,當L1的正則化係數很小時,得到的最優解會很小,可以達到和L2正則化類似的效果。
Reference
http://blog.csdn.net/stdcoutzyx/article/details/49022443
http://blog.csdn.net/stdcoutzyx/article/details/49022443