一文概覽深度學習中的五大正則化方法和七大優化策略

 2017-12-20 13:45:00.0

原標題:一文概覽深度學習中的五大正則化方法和七大優化策略

選自arXiv

深度學習中的正則化與優化策略一直是非常重要的部分,它們很大程度上決定了模型的泛化與收斂等性能。本文主要以深度卷積網絡爲例,探討了深度學習中的五項正則化與七項優化策略,並重點解釋了當前最爲流行的 Adam 優化算法。本文主體介紹和簡要分析基於南洋理工的概述論文,而 Adam 方法的具體介紹基於 14 年的 Adam 論文。

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

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

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

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

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

主體論文:Regularization and Optimization strategies in DeepConvolutional Neural Network

論文地址:https://arxiv.org/pdf/1712.04711.pdf

摘要:卷積神經網絡(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](t) 依賴於過去的平均值和當前的梯度值。因此,該平均值計算可以表示爲:

其中 γ 和動量項相同。實踐中,該值通常設爲 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算法

Adam論文地址:https://arxiv.org/abs/1412.6980

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

上圖僞代碼爲展現了 Adam 算法的基本步驟。假定 f(θ) 爲噪聲目標函數:即關於參數θ可微的隨機標量函數。我們對怎樣減少該函數的期望值比較感興趣,即對於不同參數 θ,f 的期望值 E[f(θ)]。其中 f1(θ), ..., , fT (θ) 表示在隨後時間步 1, ..., T 上的隨機函數值。這裏的隨機性來源於隨機子樣本(小批量)上的評估和固有的函數噪聲。而 表示 ft(θ) 關於θ的梯度,即在實踐步驟 t 下 ft 對θ的偏導數向量。

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

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

3. Adam 的更新規則

Adam 算法更新規則的一個重要特徵就是它會很謹慎地選擇步長的大小。假定 ε=0,則在時間步 t 和參數空間上的有效下降步長爲 有效下降步長有兩個上確界:即在 情況下,有效步長的上確界滿足 和其他情況下滿足 |∆t| ≤ α。第一種情況只有在極其稀疏的情況下才會發生:即梯度除了當前時間步不爲零外其他都爲零。而在不那麼稀疏的情況下,有效步長將會變得更小。當

時,我們有 ,因此可以得出上確界 |∆t| < α。在更通用的場景中,因爲 |E[g]/ p E[g^2]| ≤ 1,我們有 。每一個時間步的有效步長在參數空間中的量級近似受限於步長因子 α,即 。這個可以理解爲在當前參數值下確定一個置信域,因此其要優於沒有提供足夠信息的當前梯度估計。這正可以令其相對簡單地提前知道α正確的範圍。

對於許多機器學習模型來說,我們知道好的最優狀態是在參數空間內的集合域上有極高的概率。這並不罕見,例如我們可以在參數上有一個先驗分佈。因爲α確定了參數空間內有效步長的量級(即上確界),我們常常可以推斷出α的正確量級,而最優解也可以從θ0 開始通過一定量的迭代而達到。我們可以將稱之爲信噪比(signal-to-noise ratio/SNR)。如果 SNR 值較小,那麼有效步長∆t 將接近於 0,目標函數也將收斂到極值。這是非常令人滿意的屬性,因爲越小的 SNR 就意味着算法對方向 是否符合真實梯度方向存在着越大的不確定性。例如,SNR 值在最優解附近趨向於 0,因此也會在參數空間有更小的有效步長:即一種自動退火(automatic annealing)的形式。有效步長∆t 對於梯度縮放來說仍然是不變量,我們如果用因子 c 重縮放(rescaling)梯度 g,即相當於用因子 c 重縮放 和用因子 c^2 縮放 ,而在計算信噪比時縮放因子會得到抵消:

4. 初始化偏差修正

正如本論文第二部分算法所述,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 優化器的規則,如下:

文章來源:機器之心