如何優雅地從四個方面加深對深度學習的理解
在今年的 ICML 上,深度學習理論成為最大的主題之一。會議第一天,Sanjeev Arora 就展開了關於深度學習理論理解的教程,並從四個方面分析了關於該領域的研究:非凸優化、超引數和泛化、深度的意義以及生成模型。
2017 年 12 月 NIPS 的 Test-of-Time Award 頒獎典禮上,Ali Rahimi 這樣呼籲人們加深對深度學習的理解:
我希望生活在這樣的一個世界,它的系統是建立在嚴謹可靠而且可證實的知識之上,而非鍊金術。[……] 簡單的實驗和定理是幫助理解複雜大現象的基石。
Ali 的目標不是解散各個領域,而是「展開對話」。這個目標已經實現了,但對於目前的深度學習應被視為鍊金術還是工程或科學,人們仍存在分歧。
7 個月後,在斯德哥爾摩舉行的國際機器學習會議 (ICML) 上,機器學習社群又聚焦了這個問題。此次大會與會者有 5000 多名,並累計發表論文 629 篇,這是基礎機器學習研究的「年度大戲」。而深度學習理論已成為此次會議的最大主題之一。
會議第一天,最大的房間裡就擠滿了機器學習相關人員,他們準備聆聽 Sanjeev Arora 關於深度學習理論理解的教程。這位普林斯頓大學電腦科學教授在演講中總結了目前的深度學習理論研究領域,並將其分成四類:
非凸優化:如何理解與深度神經網路相關的高度非凸損失函式?為什麼隨機梯度下降法會收斂?
超引數和泛化:在經典統計理論中,為什麼泛化依賴於引數的數量而非深度學習?存在其它較好的泛化方法嗎?
深度的意義:深度如何幫助神經網路收斂?深度和泛化之間的聯絡是什麼?
生成模型:為什麼生成對抗網路(GAN)效果非常好?有什麼理論特效能使模型穩定或者避免模式崩潰?
在這一系列的文章中,我們將根據最新的論文(尤其是 ICML2018 的論文),幫助大家直觀理解這四個方面。
第一篇文章將重點討論深度網路的非凸優化問題。
非凸優化
我敢打賭,你們很多人都曾嘗試過訓練自己的「深度網路」,結果卻因為無法讓它發揮作用而陷入自我懷疑。這不是你的錯。我認為都是梯度下降的錯。
Ali Rahimi 在 NIPS 演講中曾說,隨機梯度下降 (SGD) 的確是深度學習的基石,它應該解決高度非凸優化問題。理解它何時起作用,以及為什麼起作用,是我們在深度學習的基本理論中一定會提出的最基本問題之一。具體來說,對於深度神經網路的非凸優化研究可以分為兩個問題:
損失函式是什麼樣的?
SGD 為什麼收斂?
損失函式是什麼樣的?
如果讓你想象一個全域性最小值,很可能你腦海中出現的第一幅圖是這樣的:
二維世界中的全域性最小值附近,函式是嚴格凸的(這意味著 hessian 矩陣的兩個特徵值都是正數)。但在一個有著數十億引數的世界裡,就像在深度學習中,全域性最小值附近的方向都不平坦的可能性有多大?或者 hessian 中一個為零(或近似為零)的特徵值都沒有的概率有多大?
Sanjeev Arora 在教程中寫的第一個評論是:損失函式的可能方向數量會隨著維度的增長呈指數增長。
直觀上看,全域性最小值似乎不是一個點而是一個連線管(connected manifold)。這意味著如果找到了全域性最小值,你就能夠穿過一條平坦的路徑,在這條道路上,所有的點都是最小值。海德堡大學的一個研究團隊在論文《Essentially No Barriers in Neural Network Energy Landscape》中證明了這一點。他們提出了一個更常規的說法,即任何兩個全域性最小值都可以通過一條平坦的路徑連線。
在 MNIST 上的 CNN 或在 PTB 上的 RNN 已經是這樣的情況,但是該項研究將這種認知擴充套件到了在更高階的資料集(CIFAR10 和 CIFAR100)上訓練的更大網路(一些 DenseNet 和 ResNet)上。為了找到這條路徑,他們使用了一種來自分子統計力學的啟發式方法,叫做 AutoNEB。其思想是在兩個極小值之間建立一個初始路徑(例如線性),並在該路徑上設定中心點。然後迭代地調整中心點的位置,以最小化每個中心點的損失,並確保中心點之間的距離保持不變(通過用彈簧建模中心點之間的空間)。
雖然他們沒有從理論上證明這個結果,但他們對為什麼存在這樣的路徑給出了一些直觀的解釋:
如果我們擾亂單個引數,比如新增一個小常數,然後讓其它部分去自適應這種變化,仍然可以使損失最小化。因此可以認為,通過微調,無數其它引數可以「彌補」強加在一個引數上的改變。
因此,本文的結果可以幫助我們通過超引數化和高維空間,以不同的方式看待極小值。
通俗來說,當考慮神經網路的損失函式時,你應該牢記一個給定的點周圍可能有非常多的方向。由此得出另一個結論,鞍點肯定比區域性最小值多得多:在給定的關鍵點上,在數十億個可能的方向中,很可能會找到一個向下的方向(如果不是在全域性最小值上)。這種認知在 NIPS 2014 年發表的論文《Identifying and attacking the saddle point problem in high-dimensional non-convex optimization》中被嚴格規範化,並得到了實證證明。
為什麼 SGD 收斂(或不收斂)?
深度神經網路優化的第二個重要問題與 SGD 的收斂性有關。雖然這種演算法長期以來被看做是一種快速的近似版梯度下降,但我們現在可以證明 SGD 實際上收斂於更好、更一般的最小值。但我們能否將其規範化並定量地解釋 SGD 脫離區域性極小值或鞍點的能力?
SGD 修改了損失函式
論文《An Alternative View: When Does SGD Escape Local Minima?》表明,實施 SGD 相當於在卷積(所以平滑)的損失函式上進行常規梯度下降。根據這一觀點並在某些假設下,他們證明了 SGD 將設法脫離區域性最小值,並收斂到全域性最小值附近的一個小區域。
SGD 由隨機微分方程控制
連續 SGD 徹底改變了我對這個演算法的看法。在 ICML 2018 關於非凸優化的研討會上,Yoshua Bengio 在他關於隨機梯度下降、平滑和泛化的演講中提出了這個想法。SGD 不是在損失函式上移動一個點,而是一片點雲或者說一個分佈。
幻燈片摘自 Y. Bengio 在 ICML 2018 發表的演講。他提出用分佈(或點雲)代替點來看待 SGD。
這個點雲的大小(即相關分佈的方差)與 learning_rate / batch_size 因子成正比。Pratik Chaudhari 和 Stefano Soatto 在論文《Stochastic gradient descent performs variational inference, converges to limit cycles for deep networks》中證明了這一點。這個公式非常直觀:較低的 batch size 意味著梯度非常混亂(因為要在資料集一個非常小的子集上計算),高學習率意味著步驟混亂。
將 SGD 視為隨時間變化的分佈可以得出:控制下降的方程現在是隨機偏微分方程。更準確地說,在某些假設下,論文表明控制方程實際上是一個 Fokker-Planck 方程。
幻燈片摘自 P. Chaudhari 和 S. Soatto 在 ICML 2018 發表的演講——《High-dimensional Geometry and Dynamics of Stochastic Gradient Descent for Deep Networks》。他們展示瞭如何從離散系統過渡到 Fokker-Plank 方程所描述的連續系統。
在統計物理學中,這種型別的方程描述了暴露在曳力 (使分佈推移,即改變平均值) 和隨機力 (使分佈擴散,即增加方差) 下的粒子的演化。在 SGD 中,曳力由真實梯度建模,而隨機力則對應演算法的內在噪聲。正如上面的幻燈片所示,擴散項與溫度項 T = 1 /β= learning_rate /(2 * batch_size) 成正比,這再次顯示了該比值的重要性!
Fokker-Planck 方程下分佈的演化。它向左漂移,隨時間擴散。圖源:維基百科
通過這個框架,Chaudhari 和 Soatto 證明了我們的分佈將單調地收斂於某個穩定的分佈(從 KL 散度的意義來說):
Pratik Chaudhari 和 Stefano Soatto 論文的一個主要定理,證明了分佈的單調會收斂到穩定狀態(在 KL 散度意義中)。第二個方程表明,使 F 最小化相當於最小化某個潛在的ϕ以及擴大熵的分佈(溫度 1 /β控制的權衡)。
在上面的定理中有幾個有趣的觀點:
SGD 最小化的函式可以寫成兩項之和(Eq. 11):潛在Φ和熵的分佈。溫度 1 /β控制這兩項的權衡。
潛在Φ只取決於資料和網路的架構(而非優化過程)。如果它等於損失函式,SGD 將收斂到全域性最小值。然而, 本文表明這種情況比較少見。而如果知道Φ與損失函式的距離,你將可以知道 SGD 收斂的概率。
最終分佈的熵取決於 learning_rate/batch_size(溫度)的比例。直觀上看,熵與分佈的大小有關,而高溫會導致分佈具有更大的方差,這意味著一個平坦的極小值。平坦極小值的泛化能力更好,這與高學習率和低 batch size 能得到更優最小值的經驗是一致的。
因此,將 SGD 看作是一個隨時間變化的分佈表明,在收斂性和泛化方面,learning_rate/batch_size 比每個獨立的超引數更有意義。此外,它還引入了與收斂相關的網路潛力,為架構搜尋提供了一個很好的度量。
結論
探索深度學習理論的過程可以分為兩部分:首先,通過簡單的模型和實驗,建立起關於深度學習理論如何及其為什麼起作用的認知,然後將這些理念以數學形式呈現,以幫助我們解釋當前的結論並得到新的結果。
在第一篇文章中,我們試圖傳達更多關於神經網路高維損失函式和 SGD 解說的直觀認知,同時表明新的形式主義正在建立,目的是建立一個關於深層神經網路優化的真正數學理論。
然而,雖然非凸優化是深度學習的基石並且擁有大量的層數和引數,但它取得的成功大部分源於其優秀的泛化能力。這將是下一篇文章將分享的內容。
Sanjeev Arora:印度裔美國理論電腦科學家,他以研究概率可檢驗證明,尤其是PCP定理而聞名。研究興趣包括計算複雜度理論、計算隨機性、概率可檢驗證明等。他於2018年2月被推選為美國國家科學院院士,目前是普林斯頓大學電腦科學系教授。
∑編輯 | Gemini
來源 | 數盟
演算法數學之美微信公眾號歡迎賜稿
稿件涉及數學、物理、演算法、計算機、程式設計等相關領域,經採用我們將奉上稿酬。
投稿郵箱:math_alg@163.com
相關文章
- 思維決定命運,從四個方面理解深度思維的概念
- 如何優雅地學習計算機2<-->Helloworld計算機
- 如何優雅地求和?
- 如何優雅地列印一個Java物件?Java物件
- 如何優雅絲滑地從Date過渡到LocalDateTimeLDA
- 如何優雅地使用 macOSMac
- 深度:如何從系統層面優化深度學習計算?優化深度學習
- 如何"優雅"地終止一個執行緒?執行緒
- 如何優雅地鏈式取值
- Git | 如何優♂雅地管理版本Git
- 霧霾殺機肆虐,如何優雅地對抗?
- 如何TypeScript中相對優雅地實現類的多繼承TypeScript繼承
- Kotlin如何優雅地使用Scope FunctionsKotlinFunction
- 如何優雅地向公司提加薪
- 如何優雅地取消Retrofit請求?
- 【深度思考】如何優雅的校驗引數?
- 如何優雅地從 C++ 向量中提取二維矩形區域C++
- 如何優雅地記錄操作日誌
- 如何優雅地記錄操作日誌?
- 如何優雅地停止 Spring Boot 應用?Spring Boot
- 如何優雅地生成測試資料
- 如何優雅地定位外網問題?
- 如何優雅地改善程式中for迴圈
- 在Java中如何優雅地判空Java
- 如何優雅地處理前端異常?前端
- 如何更優雅地切換 Git 分支Git
- 「完結」優秀的深度學習從業者都有哪些優秀的習慣深度學習
- 陣列更加深入的學習陣列
- 如何運用深度學習從多個維度優化數億級別商品資料深度學習優化
- HTML5開發前景如何?從這四個方面來看HTML
- 如何優雅的使用和理解執行緒池執行緒
- 從四方面深度應用CRM系統(下)
- 從四方面深度應用CRM系統(上)
- 學會優雅地使用@Valid系列註解
- 深入理解深度學習深度學習
- 如何優雅地刪除 Linux 中的垃圾檔案Linux
- 如何簡潔優雅地部署PostgreSQL和Pgweb?SQLWeb
- 如何優雅地生成仙人掌圖