提高泛化能力的方法



返回 我的研究方向(Research Interests)



數據增強

所謂數據增強,就是樣本數據有限的情況下,通過對樣本圖像進行平移、旋轉或者鏡像翻轉等方式進行變換,來得到更多新的樣本。

除此之外,變換方式還包括幾何變換、對比度變換、顏色變換、添加隨機噪聲以及圖像模糊等。

在對圖像進行平移或旋轉處理時,可能會出現樣本偏離圖像區域的情況,需要特別注意。

例如:使用ImageNet數據集的樣本進行物體識別時,如下圖所示,把原始樣本的中央區域設定為感興趣區域后,可以對該區域進行偏移或旋轉,像這樣進行圖像變換可以防止變換后的樣本偏離圖像區域。
image

對於手寫字符識別等樣本會產生形狀變化的情況,可以先改變其形狀(變形)再進行數據增強。
變形方法可以使用彈性變換算法( elasticdistortion ) 。彈性變換算法可以使用雙線性插值( bilinear interpolation)或雙三次插值( bicubic interpolation)等插值法,處理流程如下圖所示:
image
首先選取感興趣像素(2,1),並使用隨機數確定移動量。這里假設移動范圍為±l。因為移動量是實數,所以我們假設感興趣像素移動后的新位置為(2.4,1.2)。根據(x,y)位置周圍像素點的像素值進行雙線性插值,就可以得到(x,y)的像素值。對全部像素進行相同處理后,就可以對原始樣本添加手寫字符中可能會出現的形狀變化,如下圖:
image


預處理

均值減法

大規模的物體識別經常使用均值減法進行預處理。如下圖所示計算所有訓練樣本的均值圖像時,可使用下述公式:

\[\bar{x}=\frac{1}{N}\sum_{n=1}^{N} x_n \]

image

然后,訓練樣本和均值圖像相減可得到差分圖像 \(\bar{x}\) ,這里將其作為樣本數據輸入網絡,

\[\tilde{x}= x-\bar x \]

這樣一來,各數據的平均值就會變為零,圖像整體的亮度變化就能得到抑制。如下圖所示:
image

均一化

均一化( normalization)是為樣本的均值和方差添加約束的一種預處理方法。

均值減法是使各數據的均值為零,而均一化是將方差設為1以減少樣本數據的波動。

首先計算各數據的標准差\(\sigma _i\):

\[\sigma _i = \sqrt{\frac{1}{N} \sum_{n=1}^{N}(x_{ni}-\bar{x_{i}} ) } \]

然后對樣本圖像進行均值減法后,再除以標准差:

\[x_{ni} =\frac{\tilde{x_{ni}} }{\sigma _i } \]

這樣就能得到均值為0、方差為1的標准化數據。

對物體識別使用的CIFAR-10數據集中的圖像進行均一化處理后,結果如下圖所示。
image
可見,和只進行均值減法時相比,均一化處理后的圖像之間亮度差異更小。

白化

白化( whitening)是一種消除數據間相關性的方法。

經過白化處理后,數據之間相關性較低,圖像邊緣增強。這樣就可以消除直流分量等相關性較高的像素的信息,只保留邊緣等相關性較低的像素。像這樣提取圖像特征,能夠提高圖像識別性能。
image


Dropout

Dropout是由辛頓等人提出的一種提高網絡泛化能力的方法。

過擬合問題是神經網絡中的常見問題。在20世紀80年代至20世紀90年代神經網絡的鼎盛時期,用來訓練神經網絡的數據量遠不及現在多。如果訓練時使用的數據過少,那么神經網絡的訓練會比較簡單,對訓練數據的識別准確率接近於100%,但也會出現對測試數據的識別性能較差的情況。

過擬合指的就是能夠很好地擬合訓練數據,卻不能很好地擬合測試數據的現象。
當處於過擬合狀態時,神經網絡就無法發揮其巨大的潛能。
這些年,人們提出了很多方案去解決過擬合問題,其中一種就是Dropout。所謂Dropout,是指在網絡的訓練過程中,按照一定的概率將一部分中間層的單元暫時從網絡中丟棄,通過把該單元的輸出設置為О使其不工作,來避免過擬合。
Dropout可用於訓練包含全連接層的神經網絡。神經網絡的訓練過程就是對每個Mini-Batch 使用誤差反向傳播算法不斷迭代調整各參數的值,而 Dropout就是在每次迭代調整時,隨機選取一部分單元將其輸出設置為0。
image
計算誤差時原本是使用所有單元的輸出值,但是由於有部分單元被丟棄,所以從結果來看,Dropout起到了與均一化方法類似的作用。
但是,對被舍棄的單元進行誤差反向傳播計算時,仍要使用被舍棄之前的原始輸出值。
Dropout的概率通常會設置為50%,即單元輸出值有50%的概率被設置為0。但這個數值並非絕對,也可以不同層使用不同的舍棄概率,有事例顯示這樣也能提高性能。自Dropout被提出以來,人們已通過各種基准測試證明了其有效性,它已經成為深度學習中不可或缺的一種技術。

利用訓練好的網絡進行識別時,需要輸入樣本並進行正向傳播,此時進行過Dropout處理的層,其輸出值需要在原始輸出的基礎上乘以訓練時使用的 Dropout概率
image
雖然訓練時網絡通過Dropout舍棄了一定概率的單元,但是在識別時仍要使用所有單元。所以,有輸出值的單元個數會增加 Dropout概率的倒數倍。由於單元之間通過權重系數相連接,所以這里還需要乘以 Dropout的概率。像這樣對網絡進行參數約束后仍然能訓練出合理的網絡,這就達到了抑制過擬合的目的。


DropConnect

和 Dropout一樣,DropConnect也是通過舍棄一部分單元來防止過擬合問題的方法。

Dropout是把單元的輸出值設置為0,而DropConnect是把一部分連接權重設置為0。
image

下圖顯示了使用MNIST數據集進行訓練和測試時的誤差變化情況。
image
圖(a)是針對不使用Dropout、使用 Dropout、使用 DropConnect這三種情況下,測試誤差隨着中間層單元個數的推移而變化的趨勢。這里的神經網絡有兩個中間層。不使用 Dropout時,如果選取的單元個數太多,測試誤差就會上升。這是由於訓練數據過多導致了過擬合。
使用Dropout時,測試誤差先是隨着單元個數的增加而急劇下降,而當單元個數達到400后,下降速度逐漸緩慢。
使用DropConnect時,即使單元個數只有200,測試誤差也低於使用Dropout時的情況。並且這種情況下,單元個數增多時,測試誤差也不會發生太大變化,單元個數較少時也能得到很好的識別性能。

圖(b)顯示了訓練誤差和測試誤差隨着訓練次數的推移而變化的趨勢。
不使用Dropout時,訓練誤差在很早的階段就開始下降,但是測試誤差一直很大且沒有顯著變化。從這個結果也能看出這里發生了過擬合問題。
使用Dropout時的訓練誤差要小於使用DropConnect時的,但是測試誤差則比使用DropConnect時的要稍微高一些。使用DropConnect時,由於連接權重設置為0,所以被舍棄單元的組合數遠大於使用Dropout時的。

因此,相比 Dropout,使用 DropConnect 時更不容易發生過擬合。

雖然 DropConnect的識別性能優於Dropout,但是其訓練難度也高於Dropout。DropConnect是隨機將單元的連接權重設置為0的,如果隨機數的生成方法不同,就很難得到相同的識別性能,這是 DropConnect的一個主要問題。所以現在人們更多使用的是 Dropout,因為它對隨機數的依賴性比較低。

對於深度學習中提高泛化能力的方法來說,重要的並不只是算法,還有訓練樣本。收集海量的訓練樣本非常困難,最方便的做法是使用ImageNet和 Places等公開的數據集。除了使用這些數據集,通過預處理抑制樣本各類別內的變動也非常重要。另外在算法方面,我們還可以使用Dropout和 DropConnect,這些都是能夠有效防止過擬合問題的方法,也是當前深度學習中必不可少的技術。


參考: [1]圖解深度學習/(日)山下隆義著;張彌譯.--北京:人民郵電出版社,2018.5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM