dropout和L1,L2正則化的理解筆記

理解dropout

from  http://blog.csdn.net/stdcoutzyx/article/details/49022443
  • 1
  • 2
  • 3

開篇明義,dropout是指在深度學習網絡的訓練過程中,對於神經網絡單元,按照一定的概率將其暫時從網絡中丟棄。注意是暫時,對於隨機梯度下降來說,由於是隨機丟棄,故而每一個mini-batch都在訓練不同的網絡。

dropout是CNN中防止過擬合提高效果的一個大殺器,但對於其爲何有效,卻衆說紛紜。在下讀到兩篇代表性的論文,代表兩種不同的觀點,特此分享給大家。

組合派

參考文獻中第一篇中的觀點,Hinton老大爺提出來的,關於Hinton在深度學習界的地位我就不再贅述了,光是這地位,估計這一派的觀點就是“武當少林”了。注意,派名是我自己起的,各位勿笑。

觀點

該論文從神經網絡的難題出發,一步一步引出dropout爲何有效的解釋。大規模的神經網絡有兩個缺點:

  • 費時
  • 容易過擬合

這兩個缺點真是抱在深度學習大腿上的兩個大包袱,一左一右,相得益彰,額不,臭氣相投。過擬合是很多機器學習的通病,過擬合了,得到的模型基本就廢了。而爲了解決過擬合問題,一般會採用ensemble方法,即訓練多個模型做組合,此時,費時就成爲一個大問題,不僅訓練起來費時,測試起來多個模型也很費時。總之,幾乎形成了一個死鎖。

Dropout的出現很好的可以解決這個問題,每次做完dropout,相當於從原始的網絡中找到一個更的網絡,如下圖所示:

img1

因而,對於一個有N個節點的神經網絡,有了dropout後,就可以看做是2n個模型的集合了,但此時要訓練的參數數目卻是不變的,這就解脫了費時的問題。

動機論

雖然直觀上看dropout是ensemble在分類性能上的一個近似,然而實際中,dropout畢竟還是在一個神經網絡上進行的,只訓練出了一套模型參數。那麼他到底是因何而有效呢?這就要從動機上進行分析了。論文中作者對dropout的動機做了一個十分精彩的類比:

在自然界中,在中大型動物中,一般是有性繁殖,有性繁殖是指後代的基因從父母兩方各繼承一半。但是從直觀上看,似乎無性繁殖更加合理,因爲無性繁殖可以保留大段大段的優秀基因。而有性繁殖則將基因隨機拆了又拆,破壞了大段基因的聯合適應性。

但是自然選擇中畢竟沒有選擇無性繁殖,而選擇了有性繁殖,須知物競天擇,適者生存。我們先做一個假設,那就是基因的力量在於混合的能力而非單個基因的能力。不管是有性繁殖還是無性繁殖都得遵循這個假設。爲了證明有性繁殖的強大,我們先看一個概率學小知識。

比如要搞一次恐怖襲擊,兩種方式: 
- 集中50人,讓這50個人密切精準分工,搞一次大爆破。 
- 將50人分成10組,每組5人,分頭行事,去隨便什麼地方搞點動作,成功一次就算。

哪一個成功的概率比較大? 顯然是後者。因爲將一個大團隊作戰變成了游擊戰。

那麼,類比過來,有性繁殖的方式不僅僅可以將優秀的基因傳下來,還可以降低基因之間的聯合適應性,使得複雜的大段大段基因聯合適應性變成比較小的一個一個小段基因的聯合適應性。

dropout也能達到同樣的效果,它強迫一個神經單元,和隨機挑選出來的其他神經單元共同工作,達到好的效果。消除減弱了神經元節點間的聯合適應性,增強了泛化能力。

個人補充一點:那就是植物和微生物大多采用無性繁殖,因爲他們的生存環境的變化很小,因而不需要太強的適應新環境的能力,所以保留大段大段優秀的基因適應當前環境就足夠了。而高等動物卻不一樣,要準備隨時適應新的環境,因而將基因之間的聯合適應性變成一個一個小的,更能提高生存的概率。

dropout帶來的模型的變化

而爲了達到ensemble的特性,有了dropout後,神經網絡的訓練和預測就會發生一些變化。

  • 訓練層面

    無可避免的,訓練網絡的每個單元要添加一道概率流程。 
    img2

    對應的公式變化如下如下:

    • 沒有dropout的神經網絡 
      img3
    • 有dropout的神經網絡 
      img4
  • 測試層面

    預測的時候,每一個單元的參數要預乘以p。 
    img5

論文中的其他技術點

  • 防止過擬合的方法:

    • 提前終止(當驗證集上的效果變差的時候)
    • 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)

機器學習中幾乎都可以看到損失函數後面會添加一個額外項,常用的額外項一般有兩種,一般英文稱作1-norm2-norm,中文稱作L1正則化L2正則化,或者L1範數L2範數

L1正則化和L2正則化可以看做是損失函數的懲罰項。所謂『懲罰』是指對損失函數中的某些參數做一些限制。對於線性迴歸模型,使用L1正則化的模型建叫做Lasso迴歸,使用L2正則化的模型叫做Ridge迴歸(嶺迴歸)。下圖是Python中Lasso迴歸的損失函數,式中加號後面一項α||w||1即爲L1正則化項。

lasso regression

下圖是Python中Ridge迴歸的損失函數,式中加號後面一項α||w||22即爲L2正則化項。

ridge regression

一般迴歸分析中迴歸w表示特徵的係數,從上式可以看到正則化項是對係數做了處理(限制)。L1正則化和L2正則化的說明如下:

  • 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正則化的損失函數: 

J=J0+αw|w|(1)

其中J0是原始的損失函數,加號後面的一項是L1正則化項,α是正則化係數。注意到L1正則化是權值的絕對值之和J是帶有絕對值符號的函數,因此J是不完全可微的。機器學習的任務就是要通過一些方法(比如梯度下降)求出損失函數的最小值。當我們在原始損失函數J0後添加L1正則化項時,相當於對J0做了一個約束。令L=αw|w|,則J=J0+L,此時我們的任務變成L約束下求出J0取最小值的解。考慮二維的情況,即只有兩個權值w1w2,此時L=|w1|+|w2|對於梯度下降法,求解J0的過程可以畫出等值線,同時L1正則化的函數L也可以在w1w2的二維平面上畫出來。如下圖:

@圖1 L1正則化 
圖1 L1正則化

圖中等值線是J0的等值線,黑色方形是L函數的圖形。在圖中,當J0等值線與L圖形首次相交的地方就是最優解。上圖中J0LL的一個頂點處相交,這個頂點就是最優解。注意到這個頂點的值是(w1,w2)=(0,w)。可以直觀想象,因爲L函數有很多『突出的角』(二維情況下四個,多維情況下更多),J0與這些角接觸的機率會遠大於與L其它部位接觸的機率,而在這些角上,會有很多權值等於0,這就是爲什麼L1正則化可以產生稀疏模型,進而可以用於特徵選擇。

而正則化前面的係數α,可以控制L圖形的大小。α越大,L的圖形越大(上圖中的黑色方框);α越小,L的圖形就越小,可以小到黑色方框只超出原點範圍一點點,這是最優點的值(w1,w2)=(0,w)中的w可以取到很小的值。

類似,假設有如下帶L2正則化的損失函數: 

J=J0+αww2(2)

同樣可以畫出他們在二維平面上的圖形,如下:

@圖2 L2正則化 
圖2 L2正則化

二維平面下L2正則化的函數圖形是個圓,與方形相比,被磨去了棱角。因此J0L相交時使得w1w2等於零的機率小了許多,這就是爲什麼L2正則化不具有稀疏性的原因。

L2正則化和過擬合

擬合過程中通常都傾向於讓權值儘可能小,最後構造一個所有參數都比較小的模型。因爲一般認爲參數值小的模型比較簡單,能適應不同的數據集,也在一定程度上避免了過擬合現象。可以設想一下對於一個線性迴歸方程,若參數很大,那麼只要數據偏移一點點,就會對結果造成很大的影響;但如果參數足夠小,數據偏移得多一點也不會對結果造成什麼影響,專業一點的說法是『抗擾動能力強』。

那爲什麼L2正則化可以獲得值很小的參數?

以線性迴歸中的梯度下降法爲例。假設要求的參數爲θhθ(x)是我們的假設函數,那麼線性迴歸的代價函數如下: 

J(θ)=12mi=1m(hθ(x(i))y(i))(3)

那麼在梯度下降法中,最終用於迭代計算參數θ的迭代式爲: 
θj:=θjα1mi=1m(hθ(x(i))y(i))x(i)j(4)

其中α是learning rate. 上式是沒有添加L2正則化項的迭代公式,如果在原始代價函數之後添加L2正則化,則迭代公式會變成下面的樣子: 
θj:=θj(1αλm)α1mi=1m(hθ(x(i))y(i))x(i)j(5)

其中λ就是正則化參數。從上式可以看到,與未添加L2正則化的迭代公式相比,每一次迭代,θj都要先乘以一個小於1的因子,從而使得θj不斷減小,因此總得來看,θ是不斷減小的。

最開始也提到L1正則化一定程度上也可以防止過擬合。之前做了解釋,當L1的正則化係數很小時,得到的最優解會很小,可以達到和L2正則化類似的效果。

Reference

http://blog.csdn.net/stdcoutzyx/article/details/49022443

http://blog.csdn.net/stdcoutzyx/article/details/49022443

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章