天天看點

深度學習中正則化的了解

在CSDN閱讀大佬們的文章,作為一個深度學習小白,收獲良多,心生向往。尋思着,一來權當做記筆記,加強記憶;二來說不定未來會有和我一樣的萌新遇到和我一樣的問題,希望能幫到一二;三來若有大佬對本文所寫的纰漏之處批評指正,相比會受益良多。本文大綱主線為吳恩達教授的深度學習系列課程,加上在各論壇閱讀的博文與自我了解。第一次發文不懂規矩,參考文獻在文末,如果有侵權或者不妥之處,希望大佬們批評,我一定改正。

問題背景

深度學習中可能存在過拟合問題——高方差。這種情況有兩個解決方法,一個是正則化,另一個是準備更多的資料,考慮到擷取更多資料的成本較高,且某些情況下無法擷取更多資料,是以正則化通常有助于避免過拟合或減少網絡誤差。

正則化的目的是為了防止過拟合,進而增強泛化能力,用“人話”說就是避免利用訓練集訓練出來的模型過度“迎合”訓練集,而導緻測試集輸入模型後的效果變差。

思路

正則化的英文為Regularization,直譯為“規則化”,即通過給模型增加“規則、限制”,進而使模型具有較強的泛化能力,防止過拟合。

在深層神經網絡中,理論上隻要層數夠大,每一層的神經元數量夠多,則該深層神經網絡完美拟合任意資料集。但是如果深層神經網絡模型真的完全拟合了訓練集的所有資料,則必然對測試集導緻過拟合。正則化的目的是避免過拟合,是以正則化的思路可以概括為:通過一定手段使神經網絡中的部分神經元關閉,進而降低神經網絡的複雜程度,進而避免過拟合。

分類

常見的正則化方法包括:L0正則化、L1正則化、L2正則化(最常用)、dropout正則化。

除此之外,還有資料擴增、早停法(early stopping)等,由于也可以起到防止過拟合的作用,也被歸類為正則化方法。

L2正則化

L2正則化就是在代價函數後面再加上一個正則化項(也稱為“權重衰減項”):

深度學習中正則化的了解

其中 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) \frac{1}{m}\displaystyle\sum_{i=1}^{m} L(\hat{y}^{(i)},y^{(i)}) m1​i=1∑m​L(y^​(i),y(i))就是原始的代價函數,後面一項 λ 2 m ∑ l = 1 L ∣ ∣ w [ l ] ∣ ∣ F 2 \frac{\lambda}{2m}\displaystyle\sum_{l=1}^{L}||w^{[l]}||^{2}_{F} 2mλ​l=1∑L​∣∣w[l]∣∣F2​就是L2正則化項。 ∣ ∣ w [ l ] ∣ ∣ F ||w^{[l]}||_{F} ∣∣w[l]∣∣F​是參數矩陣的F範數(L2範數),即對各參數的平方和再求平方根。所有F範數的平方和除以訓練集的樣本大小m,再乘以正則項系數 λ \lambda λ即為L2正則化項。

由于正則化項的存在,我們在使用梯隊下降法,求損失函數對w的偏導數時,就會發現偏導數相比于沒有正則化項,有所增加:

w [ l ] : = w [ l ] − α ( ∂ J ∂ w [ l ] + λ m w [ l ] ) w^{[l]}:=w^{[l]}-\alpha(\frac{\partial J}{\partial w^{[l]}}+\frac{\lambda}{m}w^{[l]}) w[l]:=w[l]−α(∂w[l]∂J​+mλ​w[l])

是以最終選擇時,參數w會變得更小。參數更小,對于模型來說,就意味着更加簡單,越簡單的模型越不容易産生過拟合現象。直覺上了解就是,正則化項 λ \lambda λ設定的足夠大,權重矩陣w會随之變小,即更多的神經元權重降低,甚至于徹底消除部分神經元的影響。此時原本複雜的神經網絡就會被簡化成一個神經元數量較少,但深度不變的網絡,網絡會從過度拟合(高方差)狀态向高偏差、低方差方向發展。

L0、L1正則化

L0、L1正則化與L2正則化類似。把L2正則化項中的L2範數計算替換成L0範數、L1範數計算即可得到L0、L1正則化項。

L0正則化的值是模型參數中非零參數的個數。

L1正則化表示各個參數絕對值之和。

L2正則化辨別各個參數的平方的和的開方值。

從直覺上看,利用非零參數的個數,可以很好的來選擇特征,實作特征稀疏的效果,具體操作時選擇參數非零的特征即可。但因為L0正則化很難求解,是個NP難問題,是以一般采用L1正則化。L1正則化是L0正則化的最優凸近似,比L0容易求解,并且也可以實作稀疏的效果。又由于參數值大小和模型複雜度是成正比的,是以複雜的模型,其L1範數就大,最終導緻損失函數就大,說明這個模型不夠好。

L1正則化與L2正則化的對比

L1會趨向于産生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近于0。L1在特征選擇時候非常有用,而L2就隻是一種規則化而已。在所有特征中隻有少數特征起重要作用的情況下,選擇L1比較合适,因為它能自動選擇特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那麼使用L2也許更合适。

随機失活(dropout)正則化

了解dropout

随機失活正則化存在兩個版本:直接和反轉,直接dropout不常用,這裡隻對反轉dropout(Inverted Dropout)進行說明。

dropout是指在神經網絡的訓練過程中,對于神經元,按照一定的機率将其暫時從網絡中丢棄。

深度學習中正則化的了解

上圖為Dropout的可視化表示,左邊是應用Dropout之前的網絡,右邊是應用了Dropout的同一個網絡。

dropout如何工作

典型的神經網絡其訓練流程是将輸入通過網絡進行正向傳導,然後将誤差進行反向傳播。Dropout就是針對這一過程之中,随機地删除隐藏層的部分單元,進行上述過程。

綜合而言,上述過程可以分步驟為:

1.随機删除網絡中的一些隐藏神經元,保持輸入輸出神經元不變;

2.将輸入的資料通過修改後的網絡進行前向傳播,然後将誤差通過修改後的網絡進行反向傳播;

3.對于另外一批的訓練樣本,重複上述操作(每一次在隐藏神經元這一操作,都“重新随機”);

dropout為何有效

1.由于每次用輸入網絡的樣本進行權值更新時,隐含節點都是以一定機率随機出現,是以不能保證每2個隐含節點每次都同時出現,這樣權值的更新不再依賴于有固定關系隐含節點的共同作用,阻止了某些特征僅僅在其它特定特征下才有效果的情況,減少神經元之間複雜的共适應性。

2.由于每一次都會随機地删除節點,下一個節點的輸出不再那麼依靠上一個節點,也就是說它在配置設定權重時,不會給上一層的某一結點非配過多的權重,起到了和L2正則化壓縮權重差不多的作用。

3.可以将dropout看作是模型平均的一種,平均一個大量不同的網絡。不同的網絡在不同的情況下過拟合,雖然不同的網絡可能會産生不同程度的過拟合,但是将其公用一個損失函數,相當于對其同時進行了優化,取了平均,是以可以較為有效地防止過拟合的發生。對于每次輸入到網絡中的樣本(可能是一個樣本,也可能是一個batch的樣本),其對應的網絡結構都是不同的,但所有的這些不同的網絡結構又同時共享隐含節點的權值,這種平均的架構被發現通常是十分有用的來減少過拟合方法。

dropout使用技巧

1.在可能出現過拟合的網絡層使用dropout

2.dropout也可以被用作一種添加噪聲的方法,直接對input進行操作。輸入層設為更接近1的數,使得輸入變化不會太大

dropout缺點

明确定義的損失函數每一次疊代都會下降,而dropout每一次都會随機删除節點,也就是說每一次訓練的網絡都是不同的,損失函數不再被明确地定義,在某種程度上很難計算,我們失去了調試工具。

目前dropout的使用情況

目前Dropout被大量利用于全連接配接網絡,而且一般人為設定為0.5或者0.3,而在卷積隐藏層由于卷積自身的稀疏化以及稀疏化的ReLu函數的大量使用等原因,Dropout政策在卷積隐藏層中使用較少。

總體而言,Dropout是一個超參,需要根據具體的網路,具體的應用領域進行嘗試。

資料擴增

過拟合問題的産生,是因為可用資料集較少/神經網絡複雜度過高。過拟合問題說到底就是神經網絡足夠複雜可以完全拟合資料集中的全部資料。想要解決這個問題,增強泛化能力,dropout正則化、L2正則化的思路是降低神經網絡複雜度;與上述幾種方法解決過拟合問題的思路不同,資料擴增解決過拟合問題的中心思想是:增加可用資料集,讓現有的神經網絡不足以完全拟合全部資料。

資料擴增一般用于圖像處理和視訊處理領域,常見的方法包括反轉、平移、縮放、亮度變化、裁剪、光照等外部影響、顔色變換、模糊、灰階等。

比如,資料集訓練模型,用于識别貓。當資料集中資料不足時,可以把每一張圖檔水準反轉,這樣就相當于資料集擴充一倍。

通過資料擴增得到的僞訓練資料雖然不如額外收集一組新圖檔效果好,但是擴充後的資料集相比于原始資料集,效果會更好一些。

早停法(early stopping)

在模型訓練過程中,我們追求的目标是訓練集誤差和驗證集誤差同時盡可能小。

在神經網絡訓練過程中,訓練集誤差一般會随着疊代次數的增加不斷降低。而驗證集誤差一般會先随着疊代次數增加而降低,這一過程是模型不斷拟合資料的過程。當疊代次數繼續增加,驗證集誤差會開始增加,這是因為模型對訓練集過度拟合,泛化能力下降,以至于驗證集效果變差。

早停法的核心思想就是在驗證集誤差“觸底反彈”之前,停止訓練。使用L2正則化、dropout正則化、資料擴增等方法,即使對模型進行充分訓練,也可以一定程度上規避過拟合問題,而早停法解決過拟合問題的方法是:根本不讓模型充分訓練,讓模型在過拟合之前停止訓練。

早停法的優點是:隻運作一次梯度下降,計算代價較低。相比之下,L2正則化由于要調試正則化參數的值,需要多次運作梯度下降,多次訓練模型。

早停法的缺點是:不能獨立的處理兩個問題,因為提早停止梯度下降,也就是停止了優化代價函數J。因為不再繼續嘗試降低代價函數J,是以代價函數J的值可能不夠小,同時又要避免出現過拟合問題。早停法沒有采取不同的方式來解決這兩個問題,而是用一個方法同時解決兩個問題,這樣做的結果就是要考慮的東西會變得更複雜。

總結

本文簡單介紹了L2正則化、dropout正則化、資料擴增、早停法等多種正則化方法。其中L2正則化、dropout正則化通過簡化神經網絡模型解決過拟合問題;資料擴增常用于圖檔或視訊處理,通過制作僞訓練資料,達到擴充訓練資料集的目的,進而解決了過拟合問題;早停法通過提前結束梯度下降,在犧牲了損失函數J的優化的前提下,達到了避免過拟合的目的。

參考文獻

[1].吳恩達-深度學習課程《DeepLearning》

[2].L0,L1,L2正則化淺析,本文為CSDN部落客「vivi」的原創文章,遵循 CC 4.0 BY-SA 版權協定,原文連結:https://blog.csdn.net/vividonly/article/details/50723852

[3].深度學習中的正則化(Regularization)),作者:冉冉說,來源:慕課網,連結:http://www.imooc.com/article/69484

[4].Dropout正則化,作者:zzkdev,來源:簡書,連結:https://www.jianshu.com/p/257d3da535ab

繼續閱讀