正則化

                                                正則化

一、前言

  在學習Dropout的時候提到正則化,正則化也是一種緩解過擬合的方法,網上很多說法是防止過擬合(包括我自己的Dropout),竊以爲不太準確,不然爲什麼很多牛逼的網絡基本都是多種方法聯合使用。

  過擬合(Overfitting)發生於訓練數據不足、模型過大(參數量巨大)、過度訓練,從煉模型的角度可以知道,隨着訓練進行雖然loss曲線持續下降非常優美,然後在驗證集上反而越來越差,錯誤率持續走高,如圖

  從圖中可以看到,也可以通過提早停止訓練,但是事實上你很難找到那個你應該停止訓練的點,只能訓練完了在訓練完的模型中尋尋覓覓。正則化也是一個經典的辦法,值得搞明白,而不是僅僅知道它可以緩解過擬合。

二、正則化理論

1、基本概念複習

  機器學習算法中,訓練模型的數據通常會分爲:訓練集(Training set)、驗證集(Validation data set)和測試集(Test data set)。

  如上圖的標記所示。

  訓練集:用於訓練的實際數據集

  驗證集:指導超參數的調整,比如學習率、正則化係數調整,根據初步訓練效果調整超參數。

  測試集:模型訓練完畢之後,用測試集對模型的各項性能評估的數據集,比如準確度(Accuracy)、精確度(Precision)、召回率(Recall)、TP、FP等等。

  這就是煉模型的總體流程咯,以前都知道,但是並不知道我要調整的超參數意味着什麼。常用的正則化有L1正則化和L2正則化,這個在caffe的solver.prototxt經常見到weight decay,原來這個是L2正則化的係數。不失一般性,設模型訓練的損失函數爲

              

損失函數根據實際情況可以是最小二乘損失函數、交叉熵損失函數和均方差損失函數等。

2、L2正則化

正則化使用通常是在模型原損失函數上加上正則項懲罰項(正則項可微),對於L2正則項,原損失函數變爲

            

其中α (0<α<1)是正則項係數。直觀上便可以揣度加上正則項的用意,訓練的目標是最小化損失函數,要讓損失函數最小化,必定也會迫使正則項儘可能小,那麼模型權值被迫隨之變小,這樣就可以讓模型權重不至於過大。進一步對其求偏導,並寫出參數更新式,就會更加顯而易見

                                      

                                         

對於mini-batch隨機梯度下降的參數更新式

               

               

  其中β 是學習率(0和1之間的數),權值更新時,注意到1-βα 是小於1,則權值在更新時被衰減(變小),weight decay顧名思義。L2使得權值分佈儘可能在0周圍,這樣模型權值的方差也就不會太大,數值上比較接近,擬合函數波動就不會太大,也就不會使得模型過分地去擬合噪聲。比較優雅且牛逼的解釋:更小的權值w,從某種意義上說,表示網絡的複雜度更低,對數據的擬合剛剛好(這個法則也叫做奧卡姆剃刀)

  如果模型函數權值數值上相差不是很大且數值都接近0(比較小),那麼模型函數可視化後必定更爲光滑(如果對特徵求偏導權值大小即就是偏導數),不偏不倚,更能忽略噪聲學到本質分佈,如圖所示。

 

3、L1正則化

   同理在損失函數上加上L1正則項如下

            

  加上L1正則項的作用和L2基本一致,迫使模型權值儘可能小,只是形式和L2正則項不一樣,L1正則項在0處不可導,這就使得在參數更新時在正則項等於0時按照原來更新方式更新。再來看看此時損失函數偏導形式及權值更新形式(mini-batch)

         

       

其中sgn是符號函數,權值更新形式

        

        

  從更新形式可以看到權值更新方向,當w大於0,則使得權值減一個正數,等於是多一個迫使其向零靠近的引導;當w小於0,則使得權值加一個正數,同樣多一個使其向零靠的引導;當w等於0,則按原始更新方式。

  L1和L2正則化都是使得w波動範圍變小,即使其儘可能在0附近。那麼他們有什麼不同呢?講道理都是讓參數最小,一個是絕對值和最小,一個是平方和最小。

  從更新式看, L1範數更新參數時對於w大於0、小於0和等於0有着不同的形式,但是下降的速度大小(偏導絕對值爲1)不變;

        

       

       

       

  L2更新式無論w取何值都是一個形式,它的作用僅僅是讓權值衰減,等價的使其絕對值儘可能小,每一次都按相同的比例衰減w,但並沒有強制其往零靠。更新形式展開,可以很直接的看出區別,w的下降速度大小與w絕對值正相關,越接近0下降的越慢。

      

      

 

看看L1和L2函數圖像,針對其中任意一個權值w,

     

  我們調參的時候,實際上調的是正則化係數α ,這樣就可以控制正則項在損失函數中的作用大小,即weight decay超參數大小的調整。如果weight decay過大,則可能使得w過小,導致模型欠擬合(underfitting),過小則又會過擬合(overfitting),不偏不倚,中庸之道,方可。一般都有經驗值,一些牛逼的模型開源也一般都是作者調好了,一般默認是0.0005,知道了作用我們也可以在訓練時調整,很多調侃這項工作是“調參狗”,試問如果不懂原理,沒有方法,可能連調參狗都不如。

4、最大範數約束(Max norm constraints

  最大範數約束是通過向參數量級的範數設置上限對網絡進行正則化的手段,參數更新按照原始方式更新,只是在更新後需要檢查參數的2範數是否超越上界,

      

 

     

c一般取  ,如果參數超過上界則截斷爲c的值,這個辦法其實比較粗暴。

 

參考博客

http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html

 

http://www.cnblogs.com/alexanderkun/p/6922428.html

 

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