增加深度,加速神經網路優化?這是一份反直覺的實驗結果

機器之心發表於2018-03-17

深度學習的根本理論問題之一是「深度有何作用」?雖然增加神經網路的層數可以提高其效能,但是訓練和優化的難度也隨之增加。本文卻給出了一個相反觀點,有時增加深度反而可以加速網路優化;同時提出端到端更新規則,證明深度網路過度的引數化(overparameterization)也可能是件好事。

深度學習理論中有一個根本的問題:即「網路的深度有何作用?」傳統觀點(如:Eldan & Shamir 2016; Raghu et al. 2017; Lee et al. 2017; Cohen et al. 2016; Daniely 2017)認為新增隱藏層可以提升網路表現力。但是往往這種能力的提升需要付出一定的代價——網路越深,優化越難(此即梯度消失或梯度爆炸問題)。最近有關「landscape characterization」的工作其實就隱含地採用了這種世界觀,雖然看起來不明顯(Kawaguchi 2016; Hardt & Ma 2017; Choromanska et al. 2015; Haeffele & Vidal 2017; Soudry & Carmon 2016; Safran & Shamir 2017)。他們證明了在深度網路目標中有關區域性最小值與鞍點的理論。本文作者與 Sanjeev Arora 以及 Elad Hazan 合作的新論文《On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization》給出了一個反直觀的觀點,文章認為,有時增加深度反而可以加速網路優化。

有關深度網路過度引數化(overparameterization)可能是件好事是近來剛興起的一種觀點,作者的工作可說是支撐這一觀點的又一個證據。相反,經典統計學並不推薦給模型設定更多的引數,沒有必要,因為這會導致過擬合現象。

ℓ_p 迴歸

我們從一個非常簡單的學習問題出發——ℓ_p 損失的標量線性迴歸(我們的理論和實驗應用在當 p>2 的情況下):

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

這裡 S 代表一個訓練集,它由一對(x,y)組成,其中 x 是一個表徵事件的向量,y 是一個表徵其標籤的(數值)標量;w 是我們想要學習的引數向量。現在,讓我們用向量 w_1 乘上標量 ω_2 替換向量 w,把線性模型轉換成一個非常簡單的深度為 2 的網路。顯然,這種過引數化操作並沒有改變網路的表現力,但卻生成了非凸目標函式(non-convex):

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

如論文所示,如果在 w_1 和ω_2 上應用梯度下降,學習速率很低,初始化接近零(深度學習的常見操作),那麼在整個(端到端)模型 w=w_1·ω_2 上產生的動態影響可以寫作:

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

其中ρ^(t) 和μ^(t,τ) 可被恰當地定義為(依賴時間的)係數。因此,看似一個正常的乘法標量的加法將普通的梯度下降轉換成了一個以某種方式記錄了過往的梯度(momentum 方法的關鍵特徵)以及隨時間變化學習速率有所差異的組合形式。儘管對 momentum 方法之精確好處的理論分析絕不容易,但是一項基於 UCI 機器學習庫的「Gas Sensor Array Drift at Different Concentrations」資料集的簡單實驗(p=4)為我們展示瞭如下的效果:

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

這裡我們注意到,過度引數化不僅僅加速了梯度下降,而且其加速效果還優於兩個著名的梯度下降方案——AdaGrad 和 AdaDelta,在本實驗中,前者並沒有真正起到加速作用。在其它設定中,我們也觀察到了類似的加速。

所以在這裡發生了什麼?與深度網路相對應的非凸目標函式比起凸目標函式來說是否更容易優化?這是一個普遍現象,還是隻限於上述這種簡單問題?我們首先來解決這些問題。

過引數化:表現性的解耦優化

一項有關深度對優化影響的綜合研究表明了一個固有的問題存在——由於其優秀的表現力,更深的網路似乎收斂的更快。換句之,如果深度網路的優化過程進展得比淺層網路快,那麼或許並不能顯而易見地認為,這是一種真正加速現象的結果,或者說它僅僅是以下事實的副產品,即淺層模型不能達到和深層模型一樣的損失。通過研究那些表徵能力與網路深度無關的模型——線性神經網路(這是最近很多研究的主題),我們解決了這個難題。對於線性網路來說,增加層數並不會改變網路的表現力。只有當矩陣引數被矩陣乘積所替代——即過引數化,這才會發生。因此,如果這導致了收斂過程的加速,那麼我們可以確定這並不是任何現象的結果,而是用於優化的深度的良好屬性。

深度所帶來的隱性動態過程

假設我們有興趣來學習一個線性模型,其引數化由矩陣 W 完成,通過一些訓練損失函式 L(W) 極小化來得到。我們不直接用使用矩陣 W,而是將其替代為一個深度為 N 的線性神經網路,例如我們將其過引數化成 W=W_NW_N−1⋯W_1,其中 W_j 是特定層的權重矩陣。在文中,我們指出如果人們在 W_1…W_N 上以低學習率η應用梯度下降,且有:

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

滿足系統的優化啟動(注意,這大致適用於標準的近零初始化),那麼在全域性端到端對映 W 引發的動力機制可以寫作如下形式:

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

我們在經驗上進行了驗證,發現這個由分析得出的更新規則(對經典線性模型)實際上可以用於深度網路的優化,在理論上我們可以通過一系列步驟來解釋它。我們發現,應用在 ∇L(W) 梯度上的變換(從左邊乘上 增加深度,加速神經網路優化?這是一份反直覺的實驗結果,從右邊乘上 增加深度,加速神經網路優化?這是一份反直覺的實驗結果,然後再是 j 的求和)是一種特殊的預處理方案,可促進沿優化方向的運動。更具體地說,預處理可以被認為是下述兩種元素的結合:

  • 一個適應性學習速率,它可以讓步長增大,遠離初始值;

  • 一種類似於 momentum 的操作,沿著目前採用的方位角來拉伸梯度。

重要的一點是,上述更新規則(以下稱為端到端更新規則)不是依靠線性神經網路中隱藏層的的寬度,而是深度(N)。這意味著,從優化的角度看,使用寬或窄的網路的過引數化具有同樣的效果。重要的僅僅是網路層的數量,因此用深度來加速沒有計算上的需求——我們在實驗中清楚地觀察到了這一事實(例如,前面的影像展示了通過犧牲單一的額外標量引數來實現數量級加速)。

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

超越正則化

端到端更新規則定義了一種新優化方法,其過程由梯度∇L(W) 函式與引數 W 構成。與很多加速方法(比如 momentum 或者 Adam)那種明顯要保持輔助變數相反,這種方法是 memoryless 的,並且根據定義它由對過引數化目標進行梯度下降法得來。所以自然地可以提出問題:如果我們可以將端到端更新規則表徵成對一些損失 L(W) 正則化進行的梯度下降(即一些由 W 確定的函式),那麼我們可以令人吃驚地證明,答案總是否定的——只要損失 L(W) 不在 W=0 位置有臨界點,那麼端到端更新規則(即過引數化的效力)就不能通過任何正則化來實現。

加速

到目前為止,通過給出一種等價的預處理方法並討論了其一些特性,我們分析了深度(以過引數化的方式)在優化效能上的效用。然而,我們並沒有給出任何理論證據來支援加速(更快地收斂速度)過程來自於這種方法。對這種加速過程場景的全面分析超越了我們文章的討論範圍。然而,我們在文中也的確分析了簡單的ℓ_p 迴歸問題,並且發現,無論我們是否增加網路的深度加速效果,一切都決定於對 p 的選擇:對於 p=2(平方誤差)增加網路的層數並不會導致加速(根據 Saxe et al. 2014 的發現);然而對於 p>2 來說,這是可以的,這或許是因為預處理方法可以在目標 landscape 上處理大型 plateaus。大量 p 的值為 2 和 4,深度在 1 到 8(經典線性模型)的實驗,都支援了這個結論。

非線性實驗

作為最後一項實驗,我們評估了在一個簡單深度學習設定(基於 MNIST 資料集的 TensorFlow 卷積網路教程)上過引數化對優化的效果。通過簡單地連續放置兩個矩陣,而不是每一密集層的矩陣,我們引入了過度引數化。通過新增大約 15% 的引數數量,優化的提升呈數量級增長。

增加深度,加速神經網路優化?這是一份反直覺的實驗結果

我們發現,其它卷積網路上的相似實驗同樣可以獲得提速,但是不如上述方法顯著。過度引數化加速非線性優化的條件下的實證表徵將是未來研究的一個有趣方向。

結論

本文從優化的角度藉助過度引數化展示了增加深度的好處,但依然存在很多問題。例如,嚴格地分析端到端更新規則的加速效果是否可能(比如,可與 Nesterov 1983 或 Duchi et al. 2011 相類比)?當然,對非線性深度網路以及更多其它實證評估的探討也是有益處的。

原文連結:http://www.offconvex.org/2018/03/02/acceleration-overparameterization/

相關文章