03.06 是否可以通過增加神經網絡的深度來提高其性能?

噓樹開花了


深度學習的根本理論問題之一是「深度有何作用」?雖然增加神經網絡的層數可以提高其性能,但是訓練和優化的難度也隨之增加。本文卻給出了一個相反觀點,有時增加深度反而可以加速網絡優化;同時提出端到端更新規則,證明深度網絡過度的參數化(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 的情況下):



這裡代表一個訓練集,它由一對(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 相類比)?當然,對非線性深度網絡以及更多其它實證評估的探討也是有益處的。


機器之心Pro


表達效率

有一個表達效率(expressive efficiency)的概念,形式化地定義了不同神經網絡的學習性能。

給定兩個網絡A和B,其尺寸參數(一般指網絡層的寬度)分別為rA、rB,滿足以下兩個條件時,我們說網絡A的表達效率高於網絡B:

  1. 任何由尺寸為rB的B網絡實現的函數可以被A網絡實現(或逼近),且rA ∈ O(rB)。
  2. 存在由尺寸為rA的A網絡實現的函數,B網絡無法實現(或逼近),除非rB ∈ Ω(f(rA)),其中f為超線性(super-linear)函數。

很多研究都表明,表達效率往往和深度正相關,換句話說,一般而言,較深的網絡表達效率比較淺的網絡高。

是否可以通過增加神經網絡的深度來提高其性能?

是的,確實可以通過增加深度來提高性能。


增加網絡層導致的問題


為什麼不增加神經網絡的層次以提升其學習性能呢?除了計算成本和過度擬合問題之外……

其實你自己已經把答案說出來了。主要就是計算成本和過擬合這兩個問題:

  1. 計算成本:越深的網絡,一般而言,訓練的代價就越高,優化起來就越困難(比如,更容易出現梯度爆炸和梯度消失問題)。當然,這也不是絕對的。Sanjeev Arora等在今年(2018)2月剛發的論文《On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization》,就指出某些情況下,由於更深的網絡性質更優,收斂得更快,反而加快了訓練進程。
  2. 過擬合:有一句名言(據說出自馮·諾依曼):“用四個參數我可以擬合出一頭大象,而用五個參數我可以讓它的鼻子擺動。”越深的網絡,複雜度越高,相應地也就越容易過擬合。

除了計算成本和過度擬合問題之外,不同類型的神經網絡之間的根本區別是什麼?

類比一下,這個問題很像“除了算法複雜度,不同類型的算法之間的根本區別是什麼”,所以,這可能是一個“哲學問題”。。。


論智


什麼叫加速?指縮短訓練時間還是提升訓練效果?加深度很顯然不會訓練更快,但resnet 50和resnet 101現在基本成為主流圖像處理backbone 這一事實來看增加層數是有用的,但除了resnet外目前沒看到其他極端深的網絡結構。


一尾活龍


我會以計算機視覺為例進行解釋。

假設你有一張圖片,你正在試著看懂它。

如果是狗看這張圖的話,只能看到灰度信息,而且很可能有些模糊或者扭曲的灰度信息。雖然不是很清晰,但起碼能看到一些有用的特徵。以往的視覺識別和淺層神經網絡用的就是這個原理。

如果是人看這張圖的話,就能夠以高分辨率看到圖片的實線和顏色,比狗眼的識別效果好多了。把幾層卷積層和池化層連接在一起,就能得到人眼的視覺效果。目前,由此產生的巨大收益使得以神經網絡為基礎的深度學習變得非常熱門,讓很多人認為連接更多層次的神經網絡就可以獲得更好的學習效果。

有人說可以利用螳螂蝦的眼睛來增強神經網絡的處理能力,因為螳螂蝦的眼睛裡有12種不同類型的感受器,具有現今人們已知的動物中最複雜的視覺系統。我描述不出來螳螂蝦可以看到什麼,但根據科學家的說法,人眼只能分辨三基色,而螳螂蝦可以分辨八基色。從複雜性來說,螳螂蝦的眼睛正是典型的超深層神經網絡,可以看到更加堅實的線條、更加精確的細節。

但螳螂蝦的眼睛有助於提升神經網絡的性能嗎?其實並沒有,因為要理解圖片的話,還需要推斷圖片的環境、用智力分析圖片、把關於圖片上的物體的外部知識應用到理解圖片上。層次越多意味著眼睛的視覺越好,但眼睛本身是無法思考的,眼睛看到了圖片上的信息後,還需要大腦分析這些信息。

原則上說,神經網絡的層次多是有好處的,不僅僅體現在可以使現有的視覺架構更豐富上。人腦中的可交換性和冗餘只適用於人腦,而計算機所擅長的是模塊化和定義明確的功能。因此,正確的方法是以適當的方式將針對特定任務而設計的不同架構結合起來,至少對我們目前的認識水平所理解的統計學習系統而言是這樣。


小鴿子看世界


網絡純粹的加深了會出現梯度彌散的現象。那麼加深網絡是否有用,網絡模型的發展給了我們答案,像Resnet一樣網絡加深是會收到更好效果的。另外一方面,怎麼加深網絡又不出現梯度彌散,這就是INception結構的奇妙性!當然針對不同的任務可以選擇不同深度的網絡模型,要是想提高準確率,建議先拿已有的模型微調試試。


碼科智能


建議看一下國立臺灣大學李宏毅教授關於神經網絡深層結構的課程視頻。

李宏毅教授在視頻裡面用數學討論證明了神經網絡深層結構在最好的情況下:隨著參數增多,【深層結構對函數的表達能力是指數型地強於同等參數量但是單層的神經網絡結構】。

希望我的解釋能幫助到你,無論如何,李宏毅教授的視頻都是能夠幫助你的(^L^)


分享到:


相關文章: