來自周志華老師關於《關於深度學習的思考》,值得關注!
1 引言
深度學習已被廣泛應用到涉及圖像、視頻、語音等的諸多任務中並取得巨大成功。如 果我們問「深度學習是什麼?」很可能會得到這樣的回答:「深度學習就是深度神經網 絡」。至少在目前,當「深度學習」作為一個術語時幾乎就是「深度神經網絡」的同義詞, 而當它指向一個技術領域時則如 SIAM News 頭版文章所稱[1],是「機器學習中使用深度 神經網絡的子領域」。關於深度學習有很多問題還不清楚。例如深度神經網絡為什麼要「深」?它成功背 後的關鍵因素是什麼?深度學習只能是深度神經網絡嗎?本文將分享一些我們關於深度 學習的粗淺思考。
2 深度神經網絡
神經網絡並不是「新生事物」,它已經被研究了半個多世紀[2]。傳統神經網絡通常包 含一個或兩個隱層,其中每個「神經元」是非常簡單的計算單元。如圖 1 所示,神經元 接收來自其他神經元的輸入信號,這些信號通過連接權放大,到達神經元之後如果其總 量超過某個閾值,則當前神經元就被「激活」並向外傳遞其輸出信號。實際上每個神經 元就是圖 1 中非常簡單的計算式,而所謂神經網絡就是很多這樣的計算式通過嵌套迭代 得到的一個數學系統。
今天的「深度神經網絡」是指什麼?簡單來說,就是有很多隱層的神經網絡。例如 2012 年在計算機視覺領域著名的 ImageNet 競賽奪冠的網絡用了 8 層、2015 年是 152 層、 2016 年是 1207 層……這樣的網絡明顯是非常龐大的計算系統,包含了大量參數需要通 過訓練來確定。但有一個好消息:神經網絡的基本計算單元是連續可微的。例如以往常 用圖 2 左邊的 Sigmoid 函數作為神經元模型的激活函數,它是連續可微的;現在深度神 經網絡里常用圖 2 右邊這樣的 ReLU 激活函數,它也是連續可微的。於是,在整個系統 中可以相對容易地計算出「梯度」,進而就能使用著名的 BP 算法通過梯度下降優化來對 神經網絡進行訓練。
有人以為深度神經網絡的成功主要是因為「算力」有了巨大發展,因為神經網絡早 就有了,現在只不過是由於算力強了導致能算得更好了。這是一個誤解。沒有強大的算 力當然難以訓練出很深的網絡,但更重要的是,現在人們懂得如何訓練這樣的模型。事 實上,在 Hinton 等的工作[3]之前,人們一直不知道如何訓練出超過五層的神經網絡;這並不是由於算力不足,而是由於神經網絡在訓練中會遭遇「梯度消失」現象:在 BP算法將神經網絡輸出層誤差通過鏈式反傳到遠離輸出層的部分時,可能會導出「零」調 整量,導致網絡遠離輸出層的部分無法根據輸出誤差進行調整,從而使得訓練失敗。這 是從傳統神經網絡發展到深層神經網絡所遇到的巨大技術障礙。Hinton 等通過「逐層訓 練後聯合微調」來緩解梯度消失,使人們看到訓練深層神經網絡是可能的,由此激發了 後來的研究,使得深度神經網絡得以蓬勃發展。事實上,深度神經網絡研究的主要內容 之一就是設計有效措施來避免/減緩梯度消失。例如該領域一個重要技術進步就是用圖 2 右邊的 ReLU 函數來代替以往常用的 Sigmoid 函數,由於前者在零值附近的導數比後者 更「平緩」,使得梯度不會因下降得太快而導致梯度消失。
顯然,基本計算單元的「可微性」(differentiability)對深度神經網絡模型至關重要, 因為它是梯度計算的基礎,而梯度計算是使用 BP 算法訓練神經網絡的基礎。最近有一 些研究嘗試在深度神經網絡中使用不可微激活函數,但其求解過程是在鬆弛變換後通過 可微函數逼近,實質上仍依賴於基本計算單元的可微性。
3 為何「深」
雖然深度神經網絡取得了巨大成功,但是「為什麼必須使用很深的網絡」一直沒有 清楚的答案。關於這個問題,幾年前我們曾經嘗試從模型複雜度的角度進行解釋。
一般來說,機器學習模型複雜度與其「容量」(capacity)有關,而容量對模型的學 習能力有重大影響,因此,模型的學習能力與其複雜度有關。機器學習界早就知道,如 果能增強一個學習模型的複雜度,那它的學習能力往往能得到提升。怎樣提高複雜度呢?對神經網絡模型來說,很明顯有兩個辦法:把模型加「深」,或把模型加「寬」。從提升 模型複雜度的角度看,「加深」會更有效,因為簡單來說,「加寬」僅是增加了計算單元, 從而增加了基函數的數目;而在「加深」時不僅增加了基函數的數目,還增加了函數嵌 套的層數,於是泛函表達能力會更強。所以,為提升複雜度,應該把網絡「加深」。
有人可能會問,既然機器學習界早就知道能通過把神經網絡模型加深來提升學習能 力,為什麼以往不這樣做呢?除了前面提到的「梯度消失」這個技術障礙,這還涉及另外一個問題:因為存在「過 擬合」(overfitting),在機器學習中把模型的學習能力變強未必一定是件好事。過擬合是 機器學習的大敵。簡單來說,給定一個數據集,機器學習希望把數據集裡所包含的「一 般規律」學出來用於今後的數據對象,但有時候可能會把當前數據集本身的一些「特性」 學出來卻錯誤地當作一般規律去使用了,這就會犯錯誤,這就是過擬合。產生過擬合的重要因素之一,就是模型的學習能力太強了,把不該學的東西也學到了。所以,以往在 機器學習中都是儘量避免使用太複雜的模型。
現在為什麼能使用深度神經網絡這樣的複雜模型了呢?有好幾個重要因素:首先, 現在有大數據了。機器學習中有很多緩解過擬合的策略,例如決策樹剪枝、支持向量機 正則化、神經網絡提早終止訓練等,但最簡單有效的就是使用更多的數據。比方說,數 據集中只有三千個樣本,從它裡面學出來的「特性」不太可能是一般規律,但如果有三 千萬,甚至三千萬萬個樣本,那從它裡面學出來的「特性」或許就已經是一般規律了。所以,現在有了大數據,我們不必再像以往那樣對複雜模型「敬而遠之」。第二,今天 有 GPU、CPU 集群等強力計算設備,使我們有足夠的算力來訓練複雜模型。第三,經過 機器學習界的努力,現在已經有很多有效訓練深度神經網絡這種複雜模型的技巧(trick), 例如很多緩解神經網絡梯度消失的辦法。
小結一下,這套對「為什麼深」的「複雜度解釋」主要強調三點:第一,今天有大 數據;第二,有強力的計算設備;第三,有很多有效的訓練技巧。這三點導致現在能夠 使用高複雜度模型,而深度神經網絡恰是一種便於實現的高複雜度模型。上面這套解釋有一定意義,例如它啟發我們從複雜度的角度來研究深度學習中的一 些機制如 dropout 等[4]。但這套解釋有個重要問題沒解決:為什麼扁平的(寬的)網絡不 如深度神經網絡?因為把網絡「加寬」也能增加複雜度,雖然效率不如「加深」高。想 象一下,如果增加無限個隱層神經元,那麼即便僅使用一個隱層,網絡的複雜度也可以 提升非常高,甚至超過很多深度神經網絡。然而在實踐中人們發現,「寬」的淺層網絡性 能比不上相對「窄」的深層網絡,這用複雜度難以解釋。因此,我們需要更深入一點的 思考。
我們問一個問題:深度神經網絡最重要的功用是什麼?對此,機器學習界目前有一個基本共識,那就是「表示學習」(representation learning)。簡單來說,如圖 3 所示,以往我們拿到一個數據對象,比方說一幅圖像,先 要用很多特徵比如說顏色、紋理等把它描述出來,這個步驟稱為「特徵工程」(feature engineering),然後我們再進行分類器學習。設計特徵是許多應用研究領域的重要內容, 例如計算機視覺與模式識別領域的研究中有相當一部分內容是關於設計視覺特徵如 SIFT、HOG 等,而這個部分是機器學習研究所不關心的,後者主要關注相對通用、不依 賴於具體應用域的技術,以往主要是針對表示為「特徵向量」的數據去做分析建模。現 在有了深度學習,只需把數據從一端扔進去,從另外一端就能得到模型,中間用到的特 征描述可以通過深度學習自己來解決,這就是所謂的「特徵學習」或者表示學習。從某 種角度看,這是機器學習研究的疆域擴展到了一些應用研究領域的傳統範圍。與以往的機器學習技術相比,在應用上來說這是一個很大的進步,因為不再需要完全依賴人類專 家設計特徵了,特徵本身也可以跟學習器一起進行聯合優化。
進一步我們再問:對表示學習來說最關鍵的是什麼?
我們的答案是:逐層加工處理。如圖 4 所示,比方說在輸入一幅圖像時,在神經網 絡最底層看到是一些像素,而一層層往上會逐步出現邊緣、輪廓等抽象級別越來越高的 描述。雖然在真實的神經網絡中未必有這麼清晰的分層,但總體上確有自底向上不斷抽 象的趨勢。
事實上淺層神經網絡幾乎能做到深層神經網絡所做的別的任何事(例如提升複雜 度),唯有深度的逐層抽象這件事,它由於層數淺而做不了。我們認為,「逐層加工處理」 正是表示學習的關鍵,也是深度學習成功的關鍵因素之一。
但是在機器學習領域,逐層加工處理並不新鮮,以前已經有很多技術是在進行逐層 加工處理。例如決策樹、Boosting 都是「逐層加工處理」模型,但是與深度神經網絡相 比,它們有兩個弱點:一是模型複雜度不夠。例如決策樹,對給定數據集來說其模型深 度是受限的,假設僅考慮離散特徵,則樹的深度不會超過特徵的個數,不像深度神經網 絡那樣可以任意提升複雜度;二是在學習過程中缺乏特徵變換,學習過程始終在同一個 特徵空間中進行。我們認為這兩個因素對深度神經網絡的成功也至關重要。當我們同時考慮「逐層加工處理」和「內置特徵變換」時就會發現,深度模型是非 常自然的選擇,因為基於深度模型可以容易地同時做到上面這兩點。在選用深度模型後,由於模型複雜度高、容易過擬合,所以我們要用大數據;它很 難訓練,所以我們要有訓練技巧;計算開銷大,所以我們要使用強力計算設備 …… 我們發現,這些是我們選擇深度模型之後的結果,而不是選用深度模型的原因!這跟以前 的認識不太一樣。以前認為因為具備了這些條件而導致我們能使用深度模型,現在看來 因果關係恰是反過來的。事實上,大訓練數據、訓練技巧,乃至強力計算設備都不僅限 服務於深度模型,同樣可以服務於淺層模型,因此,具備了這些條件並不必然導致深度 模型優於淺層模型。
還有一點值得一提:擁有很大的訓練數據時,需要使用複雜度高的模型,因為低復 雜度模型無法對大數據進行充分利用。比方說僅使用一個簡單的線性模型,那麼有兩千 萬樣本還是兩億樣本恐怕沒有多少區別,因為模型已經「學不進去」了。而要模型有足 夠的複雜度,這又給使用深度模型加了一分,因為深度模型可以容易地通過加深層數來 提升複雜度。
小結一下,我們的討論分析導出的結論是,有三個關鍵因素:
逐層加工處理
內置特徵變換
模型複雜度夠
這是我們認為深度神經網絡能夠成功的關鍵原因,或者說是我們關於深度神經網絡 成功原因的猜想。有意思的是,這三個因素並沒有「要求」我們必須使用神經網絡模型。只要能同時做到這三點,別的模型應該也能做深度學習。
4 為何有必要探討 DNN 之外的深度模型
沒有任何模型是完美的,深度神經網絡模型也不例外。
首先,凡是用過深度神經網絡的人都知道,需花費大量的精力來調參。這會帶來很 多問題。第一,調參經驗很難共享,例如在圖像任務上調參的經驗很難在做語音任務時 借鑑。第二,今天無論是科學界還是工程技術界都非常關注研究結果的可重複性,而深 度學習恐怕是整個機器學習領域中可重複性問題最嚴重的子領域。常有這樣的情況:一 組研究人員發文章報告的結果,很難被其他研究人員重現,因為即便使用相同的數據、 相同的方法,超參數設置稍有不同就可能使結果有巨大差別。
其次,神經網絡的模型結構需要在訓練前預設。但是在任務完成前,怎麼能知道模 型複雜度應該是多大呢?事實上,我們通常是在使用超過必需複雜度的網絡。深度神經 網絡的一些最新研究進展,例如網絡剪枝、權重二值化、模型壓縮等,實質上都是試圖 在訓練過程中適當減小網絡複雜度。顯然,使用過高複雜度的模型必然導致不必要地消 耗了更多計算開銷、導致對訓練樣本量不必要的高需求。有沒有可能先用一個簡單模型, 然後在學習過程中自適應地增加模型複雜度呢?遺憾的是這對神經網絡很困難,因為若 網絡結構未定,梯度求導對象在變化,那 BP 算法可就麻煩了。深度神經網絡的其他缺陷例如小數據上難以使用、黑箱模型、理論分析困難等就不 贅述了。
或許有人會說,學術創新研究可能要考慮上述問題,而對應用實踐來說只要性能好 就行,有深度神經網絡就足夠了……其實即便從應用角度來看,探討神經網絡之外的深 度學習模型也很有必要,因為雖然深度神經網絡現在很流行,但在許多任務上(例如 Kaggle 的很多數據分析競賽中)獲勝的並非深度神經網絡,而是隨機森林、XGBoost 這 些相對比較傳統的機器學習模型。事實上,目前深度神經網絡做得好的幾乎都是涉及圖 像、視頻、語音等的任務,都是典型的數值建模任務,而在其他涉及符號建模、離散建 模、混合建模的任務上,深度神經網絡的性能並沒有那麼好。機器學習領域有一個著名的「沒有免費的午餐」定理[2],它告訴我們,沒有任何一 個模型在所有任務上都優於其他模型。實際上,不同模型各有自己的適用任務範疇,深 度神經網絡也不例外。因此,有充分的理由去探討深度神經網絡之外的深度學習模型,因 為這樣的模型或許能讓我們在圖像、視頻、語音之外的更多任務上獲得深度學習的性能 紅利。
小結一下,今天我們談到的深度模型都是深度神經網絡,用技術術語來說,它是多 層可參數化可微分的非線性構件組成的模型,可以用 BP 算法來訓練。這裡有兩個問題:一是現實世界中的問題多種多樣,其所涉性質並不都是可微的,或能用可微構件最優建 模的;二是機器學習領域幾十年的積累,有許多構件能作為複雜模型的基礎,其中相當 一部分是不可微的。
能否基於不可微構件來構建新型深度學習模型?這是一個基礎性挑戰問題。一旦得 到答案,就同時回答了其他一些問題,例如深度模型是否只能是深度神經網絡?是否能 不用 BP 算法訓練?有沒有可能讓深度學習在圖像、視頻、語音之外的更多數據分析任 務上發揮作用?……
我們最近在這方面進行了一些初步探索,提出了「深度森林」這種非神經網絡的新型深度學習模型[5,6]。深度森林的基礎構件是不可微的決策樹,其訓練過程不基於 BP 算 法,甚至不依賴於梯度計算。它初步驗證了上一節中關於深度學習奏效原因的猜想,即只要能做到逐層加工處理、內置特徵變換、模型複雜度夠,就能構建出有效的深度學習模型,並非必須使用神經網絡。這種技術已經在大規模圖像任務(我們認為此類任務的首選技術是深度神經網絡)之外的許多任務中顯示出優秀性能,包括互聯網支付非法套現檢測等大規模數據分析任務。在一定程度上驗證了,在數值建模之外的任務上,有可能研製出新型深度學習模型來獲得更好的性能。需要注意的是,任何一種新技術要取得廣泛成功都需經過長期探索。以深度神經網 絡中最著名的卷積神經網絡為例,經過了三十來年、成千上萬研究者和工程師探索和改 進,才取得今天的成功。深度森林還在「嬰兒期」,雖然在某些問題上已得以應用,但是 不能期待它在廣泛任務上都能夠立即發揮作用。
實際上,我們以為深度森林探索的主要價值並不在於立即產生一種應用性能優越的 新算法,而是為深度學習的探索提供一個新思路。以往我們以為深度學習就是深度神經 網絡,只能基於可微構件搭建,現在我們知道了這裡有更多的可能性。好比說深度學習 是一間黑屋子,裡面有什麼呢?以前我們都知道有深度神經網絡,並以為僅有深度神經 網絡。現在深度森林把這個屋子打開了一扇門,今後可能會湧現更多的東西。這或許是 這個探索在學科領域發展上更重要的意義。
參考文獻
[1] J. Sirignano. Deep learning models in finance. SIAM News, 2017, 50(5): 1.
[2] 周志華. 機器學習. 北京: 清華大學出版社, 2016.
[3] G. E. Hinton, S. Osindero, and Y.-W. Simon. A fast learning algorithm for deep belief nets. Neural Computation, 2006, 18(7): 1527-1554.
[4] W. Gao and Z.-H. Zhou. Dropout Rademacher complexity of deep neural networks. Science China Information Sciences, 2016, 59(7): 072104: 1-072104: 12.
[5] Z.-H. Zhou and J. Feng. Deep forest: Towards an alternative to deep neural networks. In: IJCAI, 2017: 3553-3559.
[6] Z.-H. Zhou and J. Feng. Deep forest. National Science Review, 2019.
推薦閱讀
(點擊標題可跳轉閱讀)
乾貨 | 公眾號歷史文章精選
我的深度學習入門路線
我的機器學習入門路線圖
重磅!
AI有道年度技術文章電子版PDF來啦!
掃描下方二維碼,添加AI有道小助手微信,可申請入群,並獲得2020完整技術文章合集PDF(一定要備註:入群+ 地點 + 學校/公司。例如:入群+上海+復旦。
長按掃碼,申請入群
(添加人數較多,請耐心等待)
感謝你的分享,點讚,在看三連