-
1 # 小鴿子看世界
-
2 # 碼科智慧
網路純粹的加深了會出現梯度彌散的現象。那麼加深網路是否有用,網路模型的發展給了我們答案,像Resnet一樣網路加深是會收到更好效果的。另外一方面,怎麼加深網路又不出現梯度彌散,這就是INception結構的奇妙性!當然針對不同的任務可以選擇不同深度的網路模型,要是想提高準確率,建議先拿已有的模型微除錯試。
-
3 # 一尾活龍
什麼叫加速?指縮短訓練時間還是提升訓練效果?加深度很顯然不會訓練更快,但resnet 50和resnet 101現在基本成為主流影象處理backbone 這一事實來看增加層數是有用的,但除了resnet外目前沒看到其他極端深的網路結構。
-
4 # 論智
表達效率
有一個表達效率(expressive efficiency)的概念,形式化地定義了不同神經網路的學習效能。
給定兩個網路A和B,其尺寸引數(一般指網路層的寬度)分別為rA、rB,滿足以下兩個條件時,我們說網路A的表達效率高於網路B:
任何由尺寸為rB的B網路實現的函式可以被A網路實現(或逼近),且rA ∈ O(rB)。存在由尺寸為rA的A網路實現的函式,B網路無法實現(或逼近),除非rB ∈ Ω(f(rA)),其中f為超線性(super-linear)函式。很多研究都表明,表達效率往往和深度正相關,換句話說,一般而言,較深的網路表達效率比較淺的網路高。
是否可以透過增加神經網路的深度來提高其效能?
是的,確實可以透過增加深度來提高效能。
增加網路層導致的問題為什麼不增加神經網路的層次以提升其學習效能呢?除了計算成本和過度擬合問題之外……
其實你自己已經把答案說出來了。主要就是計算成本和過擬合這兩個問題:
計算成本:越深的網路,一般而言,訓練的代價就越高,最佳化起來就越困難(比如,更容易出現梯度爆炸和梯度消失問題)。當然,這也不是絕對的。Sanjeev Arora等在今年(2018)2月剛發的論文《On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization》,就指出某些情況下,由於更深的網路性質更優,收斂得更快,反而加快了訓練程序。過擬合:有一句名言(據說出自馮·諾依曼):“用四個引數我可以擬合出一頭大象,而用五個引數我可以讓它的鼻子擺動。”越深的網路,複雜度越高,相應地也就越容易過擬合。除了計算成本和過度擬合問題之外,不同型別的神經網路之間的根本區別是什麼?
類比一下,這個問題很像“除了演算法複雜度,不同型別的演算法之間的根本區別是什麼”,所以,這可能是一個“哲學問題”。。。
-
5 # 機器學習乾貨君
建議看一下國立臺灣大學李宏毅教授關於神經網路深層結構的課程影片。
-
6 # 機器之心Pro
深度學習的根本理論問題之一是「深度有何作用」?雖然增加神經網路的層數可以提高其效能,但是訓練和最佳化的難度也隨之增加。本文卻給出了一個相反觀點,有時增加深度反而可以加速網路最佳化;同時提出端到端更新規則,證明深度網路過度的引數化(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 相類比)?當然,對非線性深度網路以及更多其它實證評估的探討也是有益處的。
據說神經網路可以自行學習表達。既然如此,為什麼不增加神經網路的層次以提升其學習效能呢?除了計算成本和過度擬合問題之外,不同型別的神經網路之間的根本區別是什麼?
回覆列表
我會以計算機視覺為例進行解釋。
假設你有一張圖片,你正在試著看懂它。
如果是狗看這張圖的話,只能看到灰度資訊,而且很可能有些模糊或者扭曲的灰度資訊。雖然不是很清晰,但起碼能看到一些有用的特徵。以往的視覺識別和淺層神經網路用的就是這個原理。
如果是人看這張圖的話,就能夠以高解析度看到圖片的實線和顏色,比狗眼的識別效果好多了。把幾層卷積層和池化層連線在一起,就能得到人眼的視覺效果。目前,由此產生的巨大收益使得以神經網路為基礎的深度學習變得非常熱門,讓很多人認為連線更多層次的神經網路就可以獲得更好的學習效果。
有人說可以利用螳螂蝦的眼睛來增強神經網路的處理能力,因為螳螂蝦的眼睛裡有12種不同型別的感受器,具有現今人們已知的動物中最複雜的視覺系統。我描述不出來螳螂蝦可以看到什麼,但根據科學家的說法,人眼只能分辨三基色,而螳螂蝦可以分辨八基色。從複雜性來說,螳螂蝦的眼睛正是典型的超深層神經網路,可以看到更加堅實的線條、更加精確的細節。
但螳螂蝦的眼睛有助於提升神經網路的效能嗎?其實並沒有,因為要理解圖片的話,還需要推斷圖片的環境、用智力分析圖片、把關於圖片上的物體的外部知識應用到理解圖片上。層次越多意味著眼睛的視覺越好,但眼睛本身是無法思考的,眼睛看到了圖片上的資訊後,還需要大腦分析這些資訊。
原則上說,神經網路的層次多是有好處的,不僅僅體現在可以使現有的視覺架構更豐富上。人腦中的可交換性和冗餘只適用於人腦,而計算機所擅長的是模組化和定義明確的功能。因此,正確的方法是以適當的方式將針對特定任務而設計的不同架構結合起來,至少對我們目前的認識水平所理解的統計學習系統而言是這樣。