-
資料增強(Data Augmentation)
人工智能,或者說計算機視覺的一個最終目标在于建構一個真正可适用于真實世界複雜環境的系統。而就目前所應用的機器學習系統而言,大部分采用了有監督的學習方法,也必然導緻了需要廣泛收集圖像樣本,并進行對應的圖像标注的工作。而人力時有窮盡,高品質的樣本集圖檔又是建構一個優秀的機器學習系統的關鍵因素。使用适當的資料增強方法可以将資料集的數量增大十倍以上,進而極大化利用小樣本集中的每個樣本,使之也可以訓練得到一個較好的機器學習模型。資料增強方法也可以提高模型的魯棒性,防止其易在訓練中出現過拟合的現象。
常用的資料增強方法主要來自數字圖像進行中的幾何變換,但不改變圖像中的像素值,而是改變了其空間位置,借此希望卷積神經網絡學習到圖像中更多的不變性特征,也有利于提高其泛化性能。
以下将對各種方法做簡單的列舉與說明。
平移(Shift)變換:對原始圖檔在圖像平面内以某種方式(預先定義或者随機方式确定平移的步長、範圍及其方向)進行平移。
翻轉(Flip)變換:沿豎直或者水準方向對原始圖檔進行翻轉。
随機裁剪(Random Crop):随機定義感興趣區域以裁剪圖像,相當于增加随機擾動。
噪聲擾動(Noise):對圖像随機添加高斯噪聲或者椒鹽噪聲等。
對比度變換(Contrast):改變圖像對比度,相當于在HSV空間中,保持色調分量H不變,而改變亮度分量V和飽和度S,用于模拟現實環境的光照變化。
縮放變換(Zoom):以設定的比例縮小或者放大圖像。
尺度變換(Scale):與縮放變換有點類似,不過尺度變換的對象是圖像内容而非圖像本身(可以參考SIFT特征提取方法),建構圖像金字塔以得到不同大小、模糊程度的圖像。
-
權重初始化(weight initialization)
傳統神經網絡之是以一直沒辦法加深網絡的深度,一個很重要的原因在于使用随機梯度下降法訓練時,随着訓練疊代過程的深入會出現梯度彌散的現象,也就導緻了神經網絡無法有效地從樣本中進行學習。而造成梯度彌散的一部分原因應該歸結于傳統神經網絡使用了權重随機初始化。
而現代深度神經網絡抛棄了随機初始化的方法,轉而使用高斯初始化、 Xavier算法等來解決這一問題。
所謂的高斯初始化方法是指随機選取一個固定均值(如0等)和固定方差(如0.01等)的高斯分布中的值作為網絡各個神經元的權重參數的初值,進而保證權重參數訓練開始時符合高斯分布,以期獲得更好的結果。這是一種常用的權重初始化方法。
Xavier算法是Glorot于2010年提出的權值初始化方法。相比與随機初始化或者高斯初始化方法中的随機選取,Xavier算法為每一個深度神經網絡的初始權值進行了個性定制,因為他是根據輸入輸出神經元的個數來進行權重的初始化。該算法假設對于一個網絡有n個線性神經元,其初始權值為W,網絡輸出為Y,即:
Y=W_1 X_1+W_2 X_2+⋯+ W_n X_n (1-1)
計算每個神經元輸出的方差如下:
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)
假設所有輸入權重的均值為0,上述公式可以簡化如下:
Var(W_i X_i )= Var(W_i )Var(X_i ) (1-3)
同時假設Xi和Wi都是獨立同分布的,可得輸出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)的值應為1。
盡管算法中使用了諸多假設,可是在實際應用過程中取得了良好的效果。直覺上來講,對原始的Xavier算法來說,假設輸入的均值為0對于傳統的神經網絡是合理的。因為其初始化層之後是非線性激活層(tanh,sigmoid等)中的激活函數在0值附近的梯度值最大。而對于現代深度神經網絡而言,由于其線性整流單元(ReLU)對于輸入的響應有一半為0,故He等提出以下公式作為替代。
Var(W_i )=2/n_in (1-8)
-
随機梯度下降法(Stochastic Gradient descent)
梯度下降法(Gradient descent)是目前最為受歡迎的優化算法之一,也是最常用的深度神經網絡優化方法。它通過沿着目前函數點所對應的梯度的反方向進行疊代搜尋,進而找到目标函數的極值點。許多學者對其提出了改進算法。
标準梯度下降法可以表征為:
θ(t+1)=θ_t- η∇θ E(L(θ_t) (1-9)
其中η為每次疊代的學習率,L(θ)為目标函數。E[L(θ)]整個資料集的數學期望。
标準梯度下降法要求在每次疊代的時候都要計算整個資料集的梯度方向。它可以保證凸目标函數可以收斂到全局最小點,而對于非凸目标函數至少可以收斂到局部極值點。近幾十年來,樣本資料的增長速度遠遠大于處理器的計算能力的增長。從這個角度上來說,統計機器學習方法的局限在于計算能力而不在于樣本量的大小。對于小樣本學習中标準梯度下降法是适用的,但是應用于大資料集時是極其緩慢的,整個資料集無法一次性裝載進記憶體中的情況越來越普遍。是以标準梯度下降法無法勝任于現代大規模資料的優化任務,此時随機梯度下降法 (stochastic gradient descent, SGD)的應用效果要遠遠好于标準梯度下降法。
相比于計算整個資料集的梯度方向,随機梯度下降法(SGD)以從訓練集中随機選取的單個樣本來估計目标梯度,以疊代更新參數θ。
θ(t+1)=θ_t- η_t ∇θ L(θ_t;x^((t) ),y^((t) )) (1-10)
在實際應用過程中,每次的參數更新并不是根據單個樣本計算的,而是由所定義的最小批量樣本(mini-batch)來計算的。這可以降低單個樣本參數更新的劇烈波動并使收斂過程更加穩定。由于采用批量樣本并不能完全代表資料集的梯度方向,其參數更新的波動也是無可避免的。但是這種波動一定程度上使其能夠跳轉到潛在的更好的局部極小點,并且最終到達全局最小點。盡管理論上,随機梯度下降法(SGD)可以漸進收斂,但是在實際應用過程中仍有許多挑戰。
首先,收斂的速度取決于學習率η,一個合适的學習率并不是那麼容易确定的。如果學習率太小會導緻收斂過程極其緩慢,而過大的學習率η将會阻礙模型收斂并導緻目标函數在最小值附近波動甚至發散。其次,對于神經網絡這種高度非線性任務而言,其目标函數通常都有大量的次優局部極小點,為保證收斂到全局最小點需要避免訓練過程陷入局部極小點中。對于學習率或者學習政策的選擇,可以參考以下方法:
- 選取一個足夠小的,在第一次疊代中可以收斂的常數值(或選取兩個取其均值),如果收斂速度有所下降,取η/2作為新的學習率;
-
在每次疊代之後引入評估機制,當兩次疊代間的變化小于某個設定門檻值時減國小習率。
為了避免訓練陷入局部極小點,Qian等提出了基于動量(momentum)的梯度下降學習算法,通過增加曆史參數更新的權重項,加速目前參數更新的過程并減少振蕩。
ν(t+1)=〖γν〗_t- η_t ∇θ L(θ_t;x^((t) ),y^((t) )) (1-11)
θ(t+1)=θ_t+ν(t+1) (1-12)
其中ν_(t+1)是目前的更新向量,γ即為動量,通常設為0.9或者其他常數。
2013年,Sutskever等對傳統動量算法改進動量更新過程使得訓練更加穩定。而Recht等提出并行SGD以适應現代海量資料集的訓練任務。
-
批規範化(Batch normalization)
當訓練一個深度神經網絡時,由于各層參數不斷變化,是以各層輸入的機率分布也在不斷的變化,也導緻了非線性激活函數(如sigmoid等)正負兩邊都會飽和,使得訓練疊代的過程變得極其緩慢甚至無法進行。這時候,通常需要采用較小的學習率以及精細進行權重初始化。loffe等将這種現象稱為“内部協方差偏移”(internal covariate shift),并提出了批規範化(Batch normalization,BN)解決此類問題。
該論文中提出在每次随機梯度下降疊代時,在最小批量樣本(mini-batch)内做規範化操作,使得輸出結果各個次元的均值為0,方差為1,有效地避免了非線性激活函數的飽和問題(以sigmoid為例,觀察sigmoid函數即可知,該函數輸入集中在0附近時,其輸出梯度較大);同時也讓梯度變化受參數及其初值的影響減小。
假設對目前隐含層執行規範化,其輸入有d個,分别為 x=〖[x_1,x_1,…,x_d]〗^T,則其第k維輸出如下:
x ̂k = (x_k-μβ)/√(δ_β^2+ϵ) (1-13)
其中,μβ和δβ^2分别為最小批量樣本的均值和方差。
為了加強其表示能力,原作中引入了一對可學習參數 γ,β,使得:
y_k=〖BN〗_(γ,β) (x_k )= γx ̂_k+β (1-14)
總體而言,批規範化(Batch normalization)作用可以歸納如下:
(1) 可以使用更高的學習率,加快了訓練速度;
(2) 可以移除或使用較低的dropout(下一小節将作介紹)。dropout是常用的防止過拟合的方法,較低的dropout也可以提高訓練速度。
(3) 減少圖像預處理的使用。由于現在訓練疊代次數降低,是以可以對樣本資料少做一些圖像扭曲,讓神經網絡多從真實的資料中學習。
當然,對于上述問題的解決辦法并不是唯一的,Razvan等提出的自然梯度(Natural Gradient)也是對解決這一問題的一種思路。
-
Dropout
衆所周知,過拟合問題一直是機器學習的算法的緻力于解決的問題。對于大型神經網絡來說,其參數規模相比于淺層學習算法有了躍進式的增加,是以相對來說也更加容易發生過拟合的現象。而為了解決過拟合問題,一般會采用內建方法,即同時訓練多個模型進行組合,然而這種方法費時費力也不能保證取得預期效果。
2012年,Hinton等提出Dropout用于解決神經網絡訓練易過拟合的問題。通過在其訓練過程中,按照事先規定的機率暫時屏蔽掉其中的某些神經元。由于這種屏蔽是暫時而是随機的,對于随機梯度下降來說,相當于每一次批量樣本的訓練均是在訓練一個新的網絡。極端情況下,對于一個n節點的網絡,相當于同時在訓練2^n個不同網絡模型, 但此時需要優化的參數數量确實不變的,這也一定程度上符合傳統的內建方法的思想而同時解決了其費時的問題。
其數學表達如下:
y= εx (1-15)
其中,ε以一定的機率p等于0,使得該神經元節點x暫時被屏蔽。