天天看點

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

來源商業新知網,原标題:深度學習中的五大正則化方法和七大優化政策

深度學習中,卷積神經網絡和循環神經網絡等深度模型在各種複雜的任務中表現十分優秀。例如卷積神經網絡(CNN)這種由生物啟發而誕生的網絡,它基于數學的卷積運算而能檢測大量的圖像特征,是以可用于解決多種圖像視覺應用、目标分類和語音識别等問題。

但是,深層網絡架構的學習要求大量資料,對計算能力的要求很高。神經元和參數之間的大量連接配接需要通過梯度下降及其變體以疊代的方式不斷調整。此外,有些架構可能因為強大的表征力而産生測試資料過拟合等現象。這時我們可以使用正則化和優化技術來解決這兩個問題。

梯度下降是一種優化技術,它通過最小化代價函數的誤差而決定參數的最優值,進而提升網絡的性能。盡管梯度下降是參數優化的自然選擇,但它在處理高度非凸函數和搜尋全局最小值時也存在很多局限性。

正則化技術令參數數量多于輸入資料量的網絡避免産生過拟合現象。正則化通過避免訓練完美拟合資料樣本的系數而有助于算法的泛化。為了防止過拟合,增加訓練樣本是一個好的解決方案。此外,還可使用資料增強、L1 正則化、L2 正則化、Dropout、DropConnect 和早停(Early stopping)法等。

增加輸入資料、資料增強、早停、dropout 及其變體是深度神經網絡中常用的調整方法。本論文作為之前文章《徒手實作 CNN:綜述論文詳解卷積網絡的數學本質 》的補充,旨在介紹開發典型卷積神經網絡架構時最常用的正則化和優化政策。

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

摘要:卷積神經網絡(ConvNet)在一些複雜的機器學習任務中性能表現非常好。ConvNet 架構需要大量資料和參數,是以其學習過程需要消耗大量算力,向全局最小值的收斂過程較慢,容易掉入局部極小值的陷阱導緻預測結果不好。在一些案例中,ConvNet 架構與資料産生過拟合,緻使架構難以泛化至新樣本。為了解決這些問題,近年來研究者開發了多種正則化和優化政策。此外,研究顯示這些技術能夠大幅提升網絡性能,同時減少算力消耗。使用這些技術的前提是全面了解該技術提升網絡表達能力的理論原理,本論文旨在介紹開發 ConvNet 架構最常用政策的理論概念和數學公式。

正則化技術

正則化技術是保證算法泛化能力的有效工具,是以算法正則化的研究成為機器學習中主要的研究主題 [9] [10]。此外,正則化還是訓練參數數量大于訓練資料集的深度學習模型的關鍵步驟。正則化可以避免算法過拟合,過拟合通常發生在算法學習的輸入資料無法反應真實的分布且存在一些噪聲的情況。過去數年,研究者提出和開發了多種适合機器學習算法的正則化方法,如資料增強、L2 正則化(權重衰減)、L1 正則化、Dropout、Drop Connect、随機池化和早停等。

除了泛化原因,奧卡姆剃刀原理和貝葉斯估計也都支援着正則化。根據奧卡姆剃刀原理,在所有可能選擇的模型中,能很好解釋已知資料,并且十分簡單的模型才是較好的模型。而從貝葉斯估計的角度來看,正則化項對應于模型的先驗機率。

4.1 資料增強

資料增強是提升算法性能、滿足深度學習模型對大量資料的需求的重要工具。資料增強通過向訓練資料添加轉換或擾動來人工增加訓練資料集。資料增強技術如水準或垂直翻轉圖像、裁剪、色彩變換、擴充和旋轉通常應用在視覺表象和圖像分類中。

4.2 L1 和 L2 正則化

L1 和 L2 正則化是最常用的正則化方法。L1 正則化向目标函數添加正則化項,以減少參數的值總和;而 L2 正則化中,添加正則化項的目的在于減少參數平方的總和。根據之前的研究,L1 正則化中的很多參數向量是稀疏向量,因為很多模型導緻參數趨近于 0,是以它常用于特征選擇設定中。機器學習中最常用的正則化方法是對權重施加 L2 範數限制。

标準正則化代價函數如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

其中正則化項 R(w) 是:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

另一種懲罰權重的值總和的方法是 L1 正則化:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

L1 正則化在零點不可微,是以權重以趨近于零的常數因子增長。很多神經網絡在權重衰減公式中使用一階步驟來解決非凸 L1 正則化問題 [19]。L1 範數的近似變體是:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

另一個正則化方法是混合 L1 和 L2 正則化,即彈性網絡罰項 [20]。

在《深度學習》一書中,參數範數懲罰 L2 正則化能讓深度學習算法「感覺」到具有較高方差的輸入 x,是以與輸出目标的協方差較小(相對增加方差)的特征權重将會收縮。而 L1 正則化會因為在方向 i 上 J(w; X, y) 對 J(w; X, y) hat 的貢獻被抵消而使 w_i 的值變為 0(J(w; X, y) hat 為 J(w; X, y) 加上 L1 正則項)。此外,參數的範數正則化也可以作為限制條件。對于 L2 範數來說,權重會被限制在一個 L2 範數的球體中,而對于 L1 範數,權重将被限制在 L1 所确定的範圍内。

4.3 Dropout

Bagging 是通過結合多個模型降低泛化誤差的技術,主要的做法是分别訓練幾個不同的模型,然後讓所有模型表決測試樣例的輸出。而 Dropout 可以被認為是內建了大量深層神經網絡的 Bagging 方法,是以它提供了一種廉價的 Bagging 內建近似方法,能夠訓練和評估值資料數量的神經網絡。

Dropout 指暫時丢棄一部分神經元及其連接配接。随機丢棄神經元可以防止過拟合,同時指數級、高效地連接配接不同網絡架構。神經元被丢棄的機率為 1 − p,減少神經元之間的共适應。隐藏層通常以 0.5 的機率丢棄神經元。使用完整網絡(每個節點的輸出權重為 p)對所有 2^n 個 dropout 神經元的樣本平均值進行近似計算。Dropout 顯著降低了過拟合,同時通過避免在訓練資料上的訓練節點提高了算法的學習速度。

4.4 Drop Connect

Drop Connect 是另一種減少算法過拟合的正則化政策,是 Dropout 的一般化。在 Drop Connect 的過程中需要将網絡架構權重的一個随機選擇子集設定為零,取代了在 Dropout 中對每個層随機選擇激活函數的子集設定為零的做法。由于每個單元接收來自過去層單元的随機子集的輸入,Drop Connect 和 Dropout 都可以獲得有限的泛化性能 [22]。Drop Connect 和 Dropout 相似的地方在于它涉及在模型中引入稀疏性,不同之處在于它引入的是權重的稀疏性而不是層的輸出向量的稀疏性。

4.5 早停法

早停法可以限制模型最小化代價函數所需的訓練疊代次數。早停法通常用于防止訓練中過度表達的模型泛化性能差。如果疊代次數太少,算法容易欠拟合(方差較小,偏差較大),而疊代次數太多,算法容易過拟合(方差較大,偏差較小)。早停法通過确定疊代次數解決這個問題,不需要對特定值進行手動設定。

優化技術

5.1 動量(Momentum)

随機梯度下降和小批量梯度下降是機器學習中最常見的優化技術,然而在大規模應用和複雜模型中,算法學習的效率是非常低的。而動量政策旨在加速學習過程,特别是在具有較高曲率的情況下。動量算法利用先前梯度的指數衰減滑動平均值在該方向上進行回退 [26]。該算法引入了變量 v 作為參數在參數空間中持續移動的速度向量,速度一般可以設定為負梯度的指數衰減滑動平均值。對于一個給定需要最小化的代價函數,動量可以表達為:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

其中 α 為學習率,γ ∈ (0, 1] 為動量系數,v 是速度向量,θ是保持和速度向量方向相同的參數。一般來說,梯度下降算法下降的方向為局部最速的方向(數學上稱為最速下降法),它的下降方向在每一個下降點一定與對應等高線的切線垂直,是以這也就導緻了 GD 算法的鋸齒現象。雖然 SGD 算法收斂較慢,但動量法是令梯度直接指向最優解的政策之一。在實踐中,γ初始設定為 0.5,并在初始學習穩定後增加到 0.9。同樣,α 一般也設定地非常小,因為梯度的量級通常是比較大的。

5.2 Nesterov 加速梯度(NAG)

Nesterov 加速梯度(NAG)和經典動量算法非常相似,它是一種一階優化算法,但在梯度評估方面有所不同。在 NAG 中,梯度的評估是通過速度的實作而完成的。NAG 根據參數進行更新,和動量算法一樣,不過 NAG 的收斂速度更好。在批量梯度下降中,與平滑的凸函數相比,NAG 的收斂速度超出 1/k 到 1/(k^2) [27]。但是,在 SGD 中,NAG 無法提高收斂速度。NAG 的更新如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

動量系數設定為 0.9。經典的動量算法先計算目前梯度,再轉向更新累積梯度。相反,在 NAG 中,先轉向更新累積梯度,再進行校正。其結果是防止算法速度過快,且增加了反應性(responsiveness)。

5.3 Adagrad

Adagrad 亦稱為自适應梯度(adaptive gradient),允許學習率基于參數進行調整,而不需要在學習過程中人為調整學習率。Adagrad 根據不常用的參數進行較大幅度的學習率更新,根據常用的參數進行較小幅度的學習率更新。是以,Adagrad 成了稀疏資料如圖像識别和 NLP 的天然選擇。然而 Adagrad 的較大問題在于,在某些案例中,學習率變得太小,學習率單調下降使得網絡停止學習過程。在經典的動量算法和 Nesterov 中,加速梯度參數更新是對所有參數進行的,并且學習過程中的學習率保持不變。在 Adagrad 中,每次疊代中每個參數使用的都是不同的學習率。

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

5.4 AdaDelta

AdaDelta 使用最近曆史梯度值縮放學習率,并且和經典的動量算法相似,累積曆史的更新以加速學習。AdaDelta 可以有效地克服 Adagrad 學習率收斂至零的缺點。AdaDelta 将累積過去平方梯度的範圍限制在固定視窗 w 内,取代了經典動量算法累積所有曆史梯度值的做法。在時間 t 運作的平均值計算 E

g^2

依賴于過去的平均值和目前的梯度值。是以,該平均值計算可以表示為:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

其中 γ 和動量項相同。實踐中,該值通常設為 0.9 左右。根據等式 3.13,SGD 更新的等式為:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

根據等式 5.6,Adagrad 的更新為:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

使用過往的平方梯度 替換對角矩陣 G_i,得到

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

其中分母是梯度的平方根誤差,

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

用 替換先前更新規則中的學習率 α,得到

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

5.5 RMS prop

RMS prop 類似于 Adadelta 的較早的更新向量,

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

RMS prop 的更新規則如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

在 RMS prop 中,學習率除以平方梯度的指數衰減平均值。

5.6 Adam

1.Adam 優化算法的基本機制

Adam 算法和傳統的随機梯度下降不同。随機梯度下降保持單一的學習率(即 alpha)更新所有的權重,學習率在訓練過程中并不會改變。而 Adam 通過計算梯度的一階矩估計和二階矩估計而為不同的參數設計獨立的自适應性學習率。

Adam 算法的提出者描述其為兩種随機梯度下降擴充式的優點集合,即:

适應性梯度算法(AdaGrad)為每一個參數保留一個學習率以提升在稀疏梯度(即自然語言和計算機視覺問題)上的性能。

均方根傳播(RMSProp)基于權重梯度最近量級的均值為每一個參數适應性地保留學習率。這意味着算法在非穩态和線上問題上有很有優秀的性能。

Adam 算法同時獲得了 AdaGrad 和 RMSProp 算法的優點。Adam 不僅如 RMSProp 算法那樣基于一階矩均值計算适應性參數學習率,它同時還充分利用了梯度的二階矩均值(即有偏方差/uncentered variance)。具體來說,算法計算了梯度的指數移動均值(exponential moving average),超參數 beta1 和 beta2 控制了這些移動均值的衰減率。

移動均值的初始值和 beta1、beta2 值接近于 1(推薦值),是以矩估計的偏差接近于 0。該偏差通過首先計算帶偏差的估計而後計算偏差修正後的估計而得到提升。

2.Adam算法

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

如上算法所述,在确定了參數α、β_1、β_2 和随機目标函數 f(θ) 之後,我們需要初始化參數向量、一階矩向量、二階矩向量和時間步。然後當參數 θ 沒有收斂時,循環疊代地更新各個部分。即時間步 t 加 1、更新目标函數在該時間步上對參數θ所求的梯度、更新偏差的一階矩估計和二階原始矩估計,再計算偏差修正的一階矩估計和偏差修正的二階矩估計,然後再用以上計算出來的值更新模型的參數θ。

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

該算法更新梯度的指數移動均值(mt)和平方梯度(vt),而參數 β_1、β_2 ∈ [0, 1) 控制了這些移動均值(moving average)指數衰減率。移動均值本身使用梯度的一階矩(均值)和二階原始矩(有偏方差)進行估計。然而因為這些移動均值初始化為 0 向量,是以矩估計值會偏差向 0,特别是在初始時間步中和衰減率非常小(即β接近于 1)的情況下是這樣的。但好消息是,初始化偏差很容易抵消,是以我們可以得到偏差修正(bias-corrected)的估計 m_t hat 和 v_t hat。

注意算法的效率可以通過改變計算順序而得到提升,例如将僞代碼最後三行循環語句替代為以下兩個:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策
  1. Adam 的更新規則
開發典型卷積神經網絡架構時,最常用的正則化和優化政策
開發典型卷積神經網絡架構時,最常用的正則化和優化政策
  1. 初始化偏差修正

正如本論文第二部分算法所述,Adam 利用了初始化偏差修正項。本部分将由二階矩估計推導出這一偏差修正項,一階矩估計的推導完全是相似的。首先我們可以求得随機目标函數 f 的梯度,然後我們希望能使用平方梯度(squared gradient)的指數移動均值和衰減率 β_2 來估計它的二階原始矩(有偏方差)。令 g1, …, gT 為時間步序列上的梯度,其中每個梯度都服從一個潛在的梯度分布 gt ~ p(gt)。現在我們初始化指數移動均值 v0=0(零向量),而指數移動均值在時間步 t 的更新可表示為: 其中 gt^2 表示 Hadamard 積 gt⊙gt,即對應元素之間的乘積。同樣我們可以将其改寫為在前面所有時間步上隻包含梯度和衰減率的函數,即消去 v:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

我們希望知道時間步 t 上指數移動均值的期望值 E[vt] 如何與真實的二階矩 相關聯,是以我們可以對這兩個量之間的偏差進行修正。下面我們同時對表達式(1)的左邊和右邊去期望,即如下所示:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

如果真實二階矩 E[g^2] 是靜态的(stationary),那麼ζ = 0。否則 ζ 可以保留一個很小的值,這是因為我們應該選擇指數衰減率 β1 以令指數移動均值配置設定很小的權重給梯度。是以初始化均值為零向量就造成了隻留下了 (1 − βt^2 ) 項。我們是以在算法 1 中除以了ζ項以修正初始化偏差。

在稀疏矩陣中,為了獲得一個可靠的二階矩估計,我們需要選擇一個很小的 β2 而在許多梯度上取均值。然而正好是這種小β2 值的情況導緻了初始化偏差修正的缺乏,是以也就令初始化步長過大。

5.7 Nadam

Nadam 是 NAG 和 Adam 優化器的結合 [28]。如果過往曆史平方梯度的指數衰減平均值為 v_t,而過往曆史梯度的指數衰減平均值為 m_t,那麼經典動量更新規則如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

我們需要修改動量規則以獲得 Nadam 優化器。是以将上述公式擴充為:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

NAG 的修改如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策
開發典型卷積神經網絡架構時,最常用的正則化和優化政策

可以通過更新梯度 g_t 時(第一次)和更新參數 θ_t+1(第二次)修改 NAG,而不是兩次更新動量。是以動量向量直接更新參數可以表述如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

為了添加 NAG 到 Adam,需要使用目前的動态向量替換先前的動态向量。是以,通過 m hat 和 m_t 擴充上述公式,Adam 更新規則如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策

利用先前時間步動量向量的偏差修正估計更新 Nadam 優化器的規則,如下:

開發典型卷積神經網絡架構時,最常用的正則化和優化政策