數(shù)據(jù)增強(qiáng)(Data Augmentation)
人工智能,或者說(shuō)計(jì)算機(jī)視覺(jué)的一個(gè)最終目標(biāo)在于構(gòu)建一個(gè)真正可適用于真實(shí)世界復(fù)雜環(huán)境的系統(tǒng)。而就目前所應(yīng)用的機(jī)器學(xué)習(xí)系統(tǒng)而言,大部分采用了有監(jiān)督的學(xué)習(xí)方法,也必然導(dǎo)致了需要廣泛收集圖像樣本,并進(jìn)行對(duì)應(yīng)的圖像標(biāo)注的工作。而人力時(shí)有窮盡,高質(zhì)量的樣本集圖片又是構(gòu)建一個(gè)優(yōu)秀的機(jī)器學(xué)習(xí)系統(tǒng)的關(guān)鍵因素。使用適當(dāng)?shù)臄?shù)據(jù)增強(qiáng)方法可以將數(shù)據(jù)集的數(shù)量增大十倍以上,從而極大化利用小樣本集中的每個(gè)樣本,使之也可以訓(xùn)練得到一個(gè)較好的機(jī)器學(xué)習(xí)模型。數(shù)據(jù)增強(qiáng)方法也可以提高模型的魯棒性,防止其易在訓(xùn)練中出現(xiàn)過(guò)擬合的現(xiàn)象。
常用的數(shù)據(jù)增強(qiáng)方法主要來(lái)自數(shù)字圖像處理中的幾何變換,但不改變圖像中的像素值,而是改變了其空間位置,借此希望卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到圖像中更多的不變性特征,也有利于提高其泛化性能。
以下將對(duì)各種方法做簡(jiǎn)單的列舉與說(shuō)明。
平移(Shift)變換:對(duì)原始圖片在圖像平面內(nèi)以某種方式(預(yù)先定義或者隨機(jī)方式確定平移的步長(zhǎng)、范圍及其方向)進(jìn)行平移。
翻轉(zhuǎn)(Flip)變換:沿豎直或者水平方向?qū)υ紙D片進(jìn)行翻轉(zhuǎn)。
隨機(jī)裁剪(Random Crop):隨機(jī)定義感興趣區(qū)域以裁剪圖像,相當(dāng)于增加隨機(jī)擾動(dòng)。
噪聲擾動(dòng)(Noise):對(duì)圖像隨機(jī)添加高斯噪聲或者椒鹽噪聲等。
對(duì)比度變換(Contrast):改變圖像對(duì)比度,相當(dāng)于在HSV空間中,保持色調(diào)分量H不變,而改變亮度分量V和飽和度S,用于模擬現(xiàn)實(shí)環(huán)境的光照變化。
縮放變換(Zoom):以設(shè)定的比例縮小或者放大圖像。
尺度變換(Scale):與縮放變換有點(diǎn)類似,不過(guò)尺度變換的對(duì)象是圖像內(nèi)容而非圖像本身(可以參考SIFT特征提取方法),構(gòu)建圖像金字塔以得到不同大小、模糊程度的圖像。
權(quán)重初始化(weight initialization)
傳統(tǒng)神經(jīng)網(wǎng)絡(luò)之所以一直沒(méi)辦法加深網(wǎng)絡(luò)的深度,一個(gè)很重要的原因在于使用隨機(jī)梯度下降法訓(xùn)練時(shí),隨著訓(xùn)練迭代過(guò)程的深入會(huì)出現(xiàn)梯度彌散的現(xiàn)象,也就導(dǎo)致了神經(jīng)網(wǎng)絡(luò)無(wú)法有效地從樣本中進(jìn)行學(xué)習(xí)。而造成梯度彌散的一部分原因應(yīng)該歸結(jié)于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)使用了權(quán)重隨機(jī)初始化。
而現(xiàn)代深度神經(jīng)網(wǎng)絡(luò)拋棄了隨機(jī)初始化的方法,轉(zhuǎn)而使用高斯初始化、 Xavier算法等來(lái)解決這一問(wèn)題。
所謂的高斯初始化方法是指隨機(jī)選取一個(gè)固定均值(如0等)和固定方差(如0.01等)的高斯分布中的值作為網(wǎng)絡(luò)各個(gè)神經(jīng)元的權(quán)重參數(shù)的初值,從而保證權(quán)重參數(shù)訓(xùn)練開(kāi)始時(shí)符合高斯分布,以期獲得更好的結(jié)果。這是一種常用的權(quán)重初始化方法。
Xavier算法是Glorot于2010年提出的權(quán)值初始化方法。相比與隨機(jī)初始化或者高斯初始化方法中的隨機(jī)選取,Xavier算法為每一個(gè)深度神經(jīng)網(wǎng)絡(luò)的初始權(quán)值進(jìn)行了個(gè)性定制,因?yàn)樗歉鶕?jù)輸入輸出神經(jīng)元的個(gè)數(shù)來(lái)進(jìn)行權(quán)重的初始化。該算法假設(shè)對(duì)于一個(gè)網(wǎng)絡(luò)有n個(gè)線性神經(jīng)元,其初始權(quán)值為W,網(wǎng)絡(luò)輸出為Y,即:
Y=W_1 X_1+W_2 X_2+?+ W_n X_n (1-1)
計(jì)算每個(gè)神經(jīng)元輸出的方差如下:
Var(W_i X_i )=E[X_i ]^2 Var(W_i )+E[W_i ]^2 Var(X_i ) + Var(W_i )Var(X_i ) (1-2)
假設(shè)所有輸入權(quán)重的均值為0,上述公式可以簡(jiǎn)化如下:
Var(W_i X_i )= Var(W_i )Var(X_i ) (1-3)
同時(shí)假設(shè)Xi和Wi都是獨(dú)立同分布的,可得輸出Y的方差:
Var(Y)=Var(W_1 X_1+W_2 X_2+?+ W_n X_n )=nVar(W_i )Var(X_i ) (1-4)
故如果我們要求輸出分布要與輸入的分布一樣,則nVar(Wi)的值應(yīng)為1。
盡管算法中使用了諸多假設(shè),可是在實(shí)際應(yīng)用過(guò)程中取得了良好的效果。直觀上來(lái)講,對(duì)原始的Xavier算法來(lái)說(shuō),假設(shè)輸入的均值為0對(duì)于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)是合理的。因?yàn)槠涑跏蓟瘜又笫欠蔷€性激活層(tanh,sigmoid等)中的激活函數(shù)在0值附近的梯度值最大。而對(duì)于現(xiàn)代深度神經(jīng)網(wǎng)絡(luò)而言,由于其線性整流單元(ReLU)對(duì)于輸入的響應(yīng)有一半為0,故He等提出以下公式作為替代。
Var(W_i )=2/n_in (1-8)
隨機(jī)梯度下降法(Stochastic Gradient descent)
梯度下降法(Gradient descent)是當(dāng)前最為受歡迎的優(yōu)化算法之一,也是最常用的深度神經(jīng)網(wǎng)絡(luò)優(yōu)化方法。它通過(guò)沿著當(dāng)前函數(shù)點(diǎn)所對(duì)應(yīng)的梯度的反方向進(jìn)行迭代搜索,從而找到目標(biāo)函數(shù)的極值點(diǎn)。許多學(xué)者對(duì)其提出了改進(jìn)算法。
標(biāo)準(zhǔn)梯度下降法可以表征為:
θ(t+1)=θ_t- η?θ E(L(θ_t) (1-9)
其中η為每次迭代的學(xué)習(xí)率,L(θ)為目標(biāo)函數(shù)。E[L(θ)]整個(gè)數(shù)據(jù)集的數(shù)學(xué)期望。
標(biāo)準(zhǔn)梯度下降法要求在每次迭代的時(shí)候都要計(jì)算整個(gè)數(shù)據(jù)集的梯度方向。它可以保證凸目標(biāo)函數(shù)可以收斂到全局最小點(diǎn),而對(duì)于非凸目標(biāo)函數(shù)至少可以收斂到局部極值點(diǎn)。近幾十年來(lái),樣本數(shù)據(jù)的增長(zhǎng)速度遠(yuǎn)遠(yuǎn)大于處理器的計(jì)算能力的增長(zhǎng)。從這個(gè)角度上來(lái)說(shuō),統(tǒng)計(jì)機(jī)器學(xué)習(xí)方法的局限在于計(jì)算能力而不在于樣本量的大小。對(duì)于小樣本學(xué)習(xí)中標(biāo)準(zhǔn)梯度下降法是適用的,但是應(yīng)用于大數(shù)據(jù)集時(shí)是極其緩慢的,整個(gè)數(shù)據(jù)集無(wú)法一次性裝載進(jìn)內(nèi)存中的情況越來(lái)越普遍。因此標(biāo)準(zhǔn)梯度下降法無(wú)法勝任于現(xiàn)代大規(guī)模數(shù)據(jù)的優(yōu)化任務(wù),此時(shí)隨機(jī)梯度下降法 (stochastic gradient descent, SGD)的應(yīng)用效果要遠(yuǎn)遠(yuǎn)好于標(biāo)準(zhǔn)梯度下降法。
相比于計(jì)算整個(gè)數(shù)據(jù)集的梯度方向,隨機(jī)梯度下降法(SGD)以從訓(xùn)練集中隨機(jī)選取的單個(gè)樣本來(lái)估計(jì)目標(biāo)梯度,以迭代更新參數(shù)θ。
θ(t+1)=θ_t- η_t ?θ L(θ_t;x^((t) ),y^((t) )) (1-10)
在實(shí)際應(yīng)用過(guò)程中,每次的參數(shù)更新并不是根據(jù)單個(gè)樣本計(jì)算的,而是由所定義的最小批量樣本(mini-batch)來(lái)計(jì)算的。這可以降低單個(gè)樣本參數(shù)更新的劇烈波動(dòng)并使收斂過(guò)程更加穩(wěn)定。由于采用批量樣本并不能完全代表數(shù)據(jù)集的梯度方向,其參數(shù)更新的波動(dòng)也是無(wú)可避免的。但是這種波動(dòng)一定程度上使其能夠跳轉(zhuǎn)到潛在的更好的局部極小點(diǎn),并且最終到達(dá)全局最小點(diǎn)。盡管理論上,隨機(jī)梯度下降法(SGD)可以漸進(jìn)收斂,但是在實(shí)際應(yīng)用過(guò)程中仍有許多挑戰(zhàn)。
首先,收斂的速度取決于學(xué)習(xí)率η,一個(gè)合適的學(xué)習(xí)率并不是那么容易確定的。如果學(xué)習(xí)率太小會(huì)導(dǎo)致收斂過(guò)程極其緩慢,而過(guò)大的學(xué)習(xí)率η將會(huì)阻礙模型收斂并導(dǎo)致目標(biāo)函數(shù)在最小值附近波動(dòng)甚至發(fā)散。其次,對(duì)于神經(jīng)網(wǎng)絡(luò)這種高度非線性任務(wù)而言,其目標(biāo)函數(shù)通常都有大量的次優(yōu)局部極小點(diǎn),為保證收斂到全局最小點(diǎn)需要避免訓(xùn)練過(guò)程陷入局部極小點(diǎn)中。
對(duì)于學(xué)習(xí)率或者學(xué)習(xí)策略的選擇,可以參考以下方法:
- 選取一個(gè)足夠小的,在第一次迭代中可以收斂的常數(shù)值(或選取兩個(gè)取其均值),如果收斂速度有所下降,取η/2作為新的學(xué)習(xí)率;
- 在每次迭代之后引入評(píng)估機(jī)制,當(dāng)兩次迭代間的變化小于某個(gè)設(shè)定閾值時(shí)減小學(xué)習(xí)率。
為了避免訓(xùn)練陷入局部極小點(diǎn),Qian等提出了基于動(dòng)量(momentum)的梯度下降學(xué)習(xí)算法,通過(guò)增加歷史參數(shù)更新的權(quán)重項(xiàng),加速當(dāng)前參數(shù)更新的過(guò)程并減少振蕩。
ν(t+1)=〖γν〗_t- η_t ?θ L(θ_t;x^((t) ),y^((t) )) (1-11)
θ(t+1)=θ_t+ν(t+1) (1-12)
其中ν_(t+1)是當(dāng)前的更新向量,γ即為動(dòng)量,通常設(shè)為0.9或者其他常數(shù)。
2013年,Sutskever等對(duì)傳統(tǒng)動(dòng)量算法改進(jìn)動(dòng)量更新過(guò)程使得訓(xùn)練更加穩(wěn)定。而Recht等提出并行SGD以適應(yīng)現(xiàn)代海量數(shù)據(jù)集的訓(xùn)練任務(wù)。
批規(guī)范化(Batch normalization)
當(dāng)訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò)時(shí),由于各層參數(shù)不斷變化,所以各層輸入的概率分布也在不斷的變化,也導(dǎo)致了非線性激活函數(shù)(如sigmoid等)正負(fù)兩邊都會(huì)飽和,使得訓(xùn)練迭代的過(guò)程變得極其緩慢甚至無(wú)法進(jìn)行。這時(shí)候,通常需要采用較小的學(xué)習(xí)率以及精細(xì)進(jìn)行權(quán)重初始化。loffe等將這種現(xiàn)象稱為“內(nèi)部協(xié)方差偏移”(internal covariate shift),并提出了批規(guī)范化(Batch normalization,BN)解決此類問(wèn)題。
該論文中提出在每次隨機(jī)梯度下降迭代時(shí),在最小批量樣本(mini-batch)內(nèi)做規(guī)范化操作,使得輸出結(jié)果各個(gè)維度的均值為0,方差為1,有效地避免了非線性激活函數(shù)的飽和問(wèn)題(以sigmoid為例,觀察sigmoid函數(shù)即可知,該函數(shù)輸入集中在0附近時(shí),其輸出梯度較大);同時(shí)也讓梯度變化受參數(shù)及其初值的影響減小。
假設(shè)對(duì)當(dāng)前隱含層執(zhí)行規(guī)范化,其輸入有d個(gè),分別為 x=〖[x_1,x_1,…,x_d]〗^T,則其第k維輸出如下:
x ?k = (x_k-μβ)/√(δ_β^2+?) (1-13)
其中,μβ和δβ^2分別為最小批量樣本的均值和方差。
為了加強(qiáng)其表示能力,原作中引入了一對(duì)可學(xué)習(xí)參數(shù) γ,β,使得:
y_k=〖BN〗_(γ,β) (x_k )= γx ?_k+β (1-14)
總體而言,批規(guī)范化(Batch normalization)作用可以歸納如下:
(1) 可以使用更高的學(xué)習(xí)率,加快了訓(xùn)練速度;
(2) 可以移除或使用較低的dropout(下一小節(jié)將作介紹)。dropout是常用的防止過(guò)擬合的方法,較低的dropout也可以提高訓(xùn)練速度。
(3) 減少圖像預(yù)處理的使用。由于現(xiàn)在訓(xùn)練迭代次數(shù)降低,所以可以對(duì)樣本數(shù)據(jù)少做一些圖像扭曲,讓神經(jīng)網(wǎng)絡(luò)多從真實(shí)的數(shù)據(jù)中學(xué)習(xí)。
當(dāng)然,對(duì)于上述問(wèn)題的解決辦法并不是唯一的,Razvan等提出的自然梯度(Natural Gradient)也是對(duì)解決這一問(wèn)題的一種思路。
Dropout
眾所周知,過(guò)擬合問(wèn)題一直是機(jī)器學(xué)習(xí)的算法的致力于解決的問(wèn)題。對(duì)于大型神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),其參數(shù)規(guī)模相比于淺層學(xué)習(xí)算法有了躍進(jìn)式的增加,所以相對(duì)來(lái)說(shuō)也更加容易發(fā)生過(guò)擬合的現(xiàn)象。而為了解決過(guò)擬合問(wèn)題,一般會(huì)采用集成方法,即同時(shí)訓(xùn)練多個(gè)模型進(jìn)行組合,然而這種方法費(fèi)時(shí)費(fèi)力也不能保證取得預(yù)期效果。
2012年,Hinton等提出Dropout用于解決神經(jīng)網(wǎng)絡(luò)訓(xùn)練易過(guò)擬合的問(wèn)題。通過(guò)在其訓(xùn)練過(guò)程中,按照事先規(guī)定的概率暫時(shí)屏蔽掉其中的某些神經(jīng)元。由于這種屏蔽是暫時(shí)而是隨機(jī)的,對(duì)于隨機(jī)梯度下降來(lái)說(shuō),相當(dāng)于每一次批量樣本的訓(xùn)練均是在訓(xùn)練一個(gè)新的網(wǎng)絡(luò)。極端情況下,對(duì)于一個(gè)n節(jié)點(diǎn)的網(wǎng)絡(luò),相當(dāng)于同時(shí)在訓(xùn)練2^n個(gè)不同網(wǎng)絡(luò)模型, 但此時(shí)需要優(yōu)化的參數(shù)數(shù)量確實(shí)不變的,這也一定程度上符合傳統(tǒng)的集成方法的思想而同時(shí)解決了其費(fèi)時(shí)的問(wèn)題。
其數(shù)學(xué)表達(dá)如下:
y= εx (1-15)
其中,ε以一定的概率p等于0,使得該神經(jīng)元節(jié)點(diǎn)x暫時(shí)被屏蔽。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100719 -
人工智能
+關(guān)注
關(guān)注
1791文章
47183瀏覽量
238265 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121113
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論