周志華教授:關(guān)于深度學習的一點思考

??視學算法報道??
??視學算法報道??
來源:專知
【新智元導讀】什么是深度學習?深度神經(jīng)網(wǎng)絡為什么要「深」?它成功背后的關(guān)鍵因素是什么?深度學習只能是深度神經(jīng)網(wǎng)絡嗎?南京大學人工智能學院院長、計算機系主任周志華教授對這些問題進行了獨到思考,值得關(guān)注。

引言?
深度學習已被廣泛應用到涉及圖像、視頻、語音等的諸多任務中并取得巨大成功。如果我們問「深度學習是什么」?很可能會得到這樣的回答:深度學習就是深度神經(jīng)網(wǎng)絡。
至少在目前,當深度學習作為一個術(shù)語時幾乎就是「深度神經(jīng)網(wǎng)絡」的同義詞, 而當它指向一個技術(shù)領(lǐng)域時則如 SIAM News 頭版文章所稱[1],是「機器學習中使用深度神經(jīng)網(wǎng)絡的子領(lǐng)域」。關(guān)于深度學習有很多問題還不清楚。例如深度神經(jīng)網(wǎng)絡為什么要「深」?它成功背后的關(guān)鍵因素是什么?深度學習只能是深度神經(jīng)網(wǎng)絡嗎?本文將分享一些我們關(guān)于深度學習的粗淺思考。
深度神經(jīng)網(wǎng)絡?
神經(jīng)網(wǎng)絡并不是新生事物,它已經(jīng)被研究了半個多世紀[2]。傳統(tǒng)神經(jīng)網(wǎng)絡通常包含一個或兩個隱層,其中每個「神經(jīng)元」是非常簡單的計算單元。如圖 1 所示,神經(jīng)元接收來自其他神經(jīng)元的輸入信號,這些信號通過連接權(quán)放大,到達神經(jīng)元之后如果其總量超過某個閾值,則當前神經(jīng)元就被「激活」并向外傳遞其輸出信號。實際上每個神經(jīng)元就是圖1中非常簡單的計算式,而所謂神經(jīng)網(wǎng)絡就是很多這樣的計算式通過嵌套迭代得到的一個數(shù)學系統(tǒng)。

今天的深度神經(jīng)網(wǎng)絡是指什么?簡單來說,就是有很多隱層的神經(jīng)網(wǎng)絡。例如 2012 年在計算機視覺領(lǐng)域著名的 ImageNet 競賽奪冠的網(wǎng)絡用了 8 層、2015 年是 152 層、 2016 年是 1207 層……這樣的網(wǎng)絡明顯是非常龐大的計算系統(tǒng),包含了大量參數(shù)需要通過訓練來確定。
但有一個好消息:神經(jīng)網(wǎng)絡的基本計算單元是連續(xù)可微的。例如以往常用圖 2 左邊的 Sigmoid 函數(shù)作為神經(jīng)元模型的激活函數(shù),它是連續(xù)可微的;現(xiàn)在深度神經(jīng)網(wǎng)絡里常用圖 2 右邊這樣的 ReLU 激活函數(shù),它也是連續(xù)可微的。于是,在整個系統(tǒng)中可以相對容易地計算出「梯度」,進而就能使用著名的 BP 算法通過梯度下降優(yōu)化來對神經(jīng)網(wǎng)絡進行訓練。

有人以為深度神經(jīng)網(wǎng)絡的成功主要是因為算力有了巨大發(fā)展,因為神經(jīng)網(wǎng)絡早 就有了,現(xiàn)在只不過是由于算力強了導致能算得更好了。這是一個誤解。沒有強大的算力當然難以訓練出很深的網(wǎng)絡,但更重要的是,現(xiàn)在人們懂得如何訓練這樣的模型。
事實上,在 Hinton 等的工作[3]之前,人們一直不知道如何訓練出超過五層的神經(jīng)網(wǎng)絡;這并不是由于算力不足,而是由于神經(jīng)網(wǎng)絡在訓練中會遭遇「梯度消失」現(xiàn)象:在 BP 算法將神經(jīng)網(wǎng)絡輸出層誤差通過鏈式反傳到遠離輸出層的部分時,可能會導出「零」調(diào)整量,導致網(wǎng)絡遠離輸出層的部分無法根據(jù)輸出誤差進行調(diào)整,從而使得訓練失敗。這是從傳統(tǒng)神經(jīng)網(wǎng)絡發(fā)展到深層神經(jīng)網(wǎng)絡所遇到的巨大技術(shù)障礙。Hinton 等通過「逐層訓練后聯(lián)合微調(diào)」來緩解梯度消失,使人們看到訓練深層神經(jīng)網(wǎng)絡是可能的,由此激發(fā)了后來的研究,使得深度神經(jīng)網(wǎng)絡得以蓬勃發(fā)展。
事實上,深度神經(jīng)網(wǎng)絡研究的主要內(nèi)容之一就是設(shè)計有效措施來避免/減緩梯度消失。例如該領(lǐng)域一個重要技術(shù)進步就是用圖 2 右邊的 ReLU 函數(shù)來代替以往常用的 Sigmoid 函數(shù),由于前者在零值附近的導數(shù)比后者更「平緩」,使得梯度不會因下降得太快而導致梯度消失。?
顯然,基本計算單元的「可微性」(differentiability)對深度神經(jīng)網(wǎng)絡模型至關(guān)重要,因為它是梯度計算的基礎(chǔ),而梯度計算是使用 BP 算法訓練神經(jīng)網(wǎng)絡的基礎(chǔ)。最近有一些研究嘗試在深度神經(jīng)網(wǎng)絡中使用不可微激活函數(shù),但其求解過程是在松弛變換后通過可微函數(shù)逼近,實質(zhì)上仍依賴于基本計算單元的可微性。
深度神經(jīng)網(wǎng)絡為何要「深」?
雖然深度神經(jīng)網(wǎng)絡取得了巨大成功,但是「為什么必須使用很深的網(wǎng)絡」一直沒有清楚的答案。關(guān)于這個問題,幾年前我們曾經(jīng)嘗試從模型復雜度的角度進行解釋。?
一般來說,機器學習模型復雜度與其「容量」(capacity)有關(guān),而容量對模型的學習能力有重大影響,因此,模型的學習能力與其復雜度有關(guān)。機器學習界早就知道,如果能增強一個學習模型的復雜度,那它的學習能力往往能得到提升。怎樣提高復雜度呢?對神經(jīng)網(wǎng)絡模型來說,很明顯有兩個辦法:把模型加「深」,或把模型加「寬」。
從提升模型復雜度的角度看,「加深」會更有效,因為簡單來說,「加寬」僅是增加了計算單元,從而增加了基函數(shù)的數(shù)目;而在「加深」時不僅增加了基函數(shù)的數(shù)目,還增加了函數(shù)嵌套的層數(shù),于是泛函表達能力會更強。所以,為提升復雜度,應該把網(wǎng)絡「加深」。?
有人可能會問,既然機器學習界早就知道能通過把神經(jīng)網(wǎng)絡模型加深來提升學習能力,為什么以往不這樣做呢?除了前面提到的「梯度消失」這個技術(shù)障礙,這還涉及另外一個問題:因為存在「過擬合」(overfitting),在機器學習中把模型的學習能力變強未必一定是件好事。過擬合是機器學習的大敵。
簡單來說,給定一個數(shù)據(jù)集,機器學習希望把數(shù)據(jù)集里所包含的「一般規(guī)律」學出來用于今后的數(shù)據(jù)對象,但有時候可能會把當前數(shù)據(jù)集本身的一些特性學出來,卻錯誤地當作一般規(guī)律去使用了,這就會犯錯誤,這就是過擬合。產(chǎn)生過擬合的重要因素之一,就是模型的學習能力太強了,把不該學的東西也學到了。所以,以往在機器學習中都是盡量避免使用太復雜的模型。?
現(xiàn)在為什么能使用深度神經(jīng)網(wǎng)絡這樣的復雜模型了呢?有好幾個重要因素:首先,現(xiàn)在有大數(shù)據(jù)了。機器學習中有很多緩解過擬合的策略,例如決策樹剪枝、支持向量機正則化、神經(jīng)網(wǎng)絡提早終止訓練等,但最簡單有效的就是使用更多的數(shù)據(jù)。
比方說,數(shù)據(jù)集中只有三千個樣本,從它里面學出來的「特性」不太可能是一般規(guī)律,但如果有三千萬,甚至三千萬萬個樣本,那從它里面學出來的「特性」或許就已經(jīng)是一般規(guī)律了。所以,現(xiàn)在有了大數(shù)據(jù),我們不必再像以往那樣對復雜模型「敬而遠之」。第二,今天有 GPU、CPU 集群等強力計算設(shè)備,使我們有足夠的算力來訓練復雜模型。第三,經(jīng)過機器學習界的努力,現(xiàn)在已經(jīng)有很多有效訓練深度神經(jīng)網(wǎng)絡這種復雜模型的技巧(trick),例如很多緩解神經(jīng)網(wǎng)絡梯度消失的辦法。
小結(jié)一下,這套對「為什么深」的「復雜度解釋」主要強調(diào)三點:第一,今天有大數(shù)據(jù);第二,有強力的計算設(shè)備;第三,有很多有效的訓練技巧。
這三點導致現(xiàn)在能夠使用高復雜度模型,而深度神經(jīng)網(wǎng)絡恰是一種便于實現(xiàn)的高復雜度模型。上面這套解釋有一定意義,例如它啟發(fā)我們從復雜度的角度來研究深度學習中的一些機制如 dropout 等[4]。但這套解釋有個重要問題沒解決:為什么扁平的(寬的)網(wǎng)絡不如深度神經(jīng)網(wǎng)絡?因為把網(wǎng)絡「加寬」也能增加復雜度,雖然效率不如「加深」高。
想象一下,如果增加無限個隱層神經(jīng)元,那么即便僅使用一個隱層,網(wǎng)絡的復雜度也可以提升非常高,甚至超過很多深度神經(jīng)網(wǎng)絡。然而在實踐中人們發(fā)現(xiàn),「寬」的淺層網(wǎng)絡性能比不上相對「窄」的深層網(wǎng)絡,這用復雜度難以解釋。因此,我們需要更深入一點的思考。?
我們問一個問題:深度神經(jīng)網(wǎng)絡最重要的功用是什么?對此,機器學習界目前有一個基本共識,那就是「表示學習」(representation learning)。簡單來說,如圖 3 所示,以往我們拿到一個數(shù)據(jù)對象,比方說一幅圖像,先要用很多特征比如說顏色、紋理等把它描述出來,這個步驟稱為「特征工程」(feature engineering),然后我們再進行分類器學習。
設(shè)計特征是許多應用研究領(lǐng)域的重要內(nèi)容,例如計算機視覺與模式識別領(lǐng)域的研究中有相當一部分內(nèi)容是關(guān)于設(shè)計視覺特征如 SIFT、HOG 等,而這個部分是機器學習研究所不關(guān)心的,后者主要關(guān)注相對通用、不依賴于具體應用域的技術(shù),以往主要是針對表示為「特征向量」的數(shù)據(jù)去做分析建?!,F(xiàn)在有了深度學習,只需把數(shù)據(jù)從一端扔進去,從另外一端就能得到模型,中間用到的特征描述可以通過深度學習自己來解決,這就是所謂的「特征學習」或者表示學習。
從某種角度看,這是機器學習研究的疆域擴展到了一些應用研究領(lǐng)域的傳統(tǒng)范圍。與以往的機器學習技術(shù)相比,在應用上來說這是一個很大的進步,因為不再需要完全依賴人類專家設(shè)計特征了,特征本身也可以跟學習器一起進行聯(lián)合優(yōu)化。

進一步我們再問:對表示學習來說最關(guān)鍵的是什么??
我們的答案是:逐層加工處理。如圖4所示,比方說在輸入一幅圖像時,在神經(jīng)網(wǎng)絡最底層看到是一些像素,而一層層往上會逐步出現(xiàn)邊緣、輪廓等抽象級別越來越高的描述。雖然在真實的神經(jīng)網(wǎng)絡中未必有這么清晰的分層,但總體上確有自底向上不斷抽象的趨勢。?
事實上淺層神經(jīng)網(wǎng)絡幾乎能做到深層神經(jīng)網(wǎng)絡所做的別的任何事(例如提升復雜 度),唯有深度的逐層抽象這件事,它由于層數(shù)淺而做不了。我們認為,「逐層加工處理」正是表示學習的關(guān)鍵,也是深度學習成功的關(guān)鍵因素之一。?
但是在機器學習領(lǐng)域,逐層加工處理并不新鮮,以前已經(jīng)有很多技術(shù)是在進行逐層加工處理。例如決策樹、Boosting 都是「逐層加工處理」模型,但是與深度神經(jīng)網(wǎng)絡相比,它們有兩個弱點:一是模型復雜度不夠。例如決策樹,對給定數(shù)據(jù)集來說其模型深度是受限的,假設(shè)僅考慮離散特征,則樹的深度不會超過特征的個數(shù),不像深度神經(jīng)網(wǎng)絡那樣可以任意提升復雜度;二是在學習過程中缺乏特征變換,學習過程始終在同一個特征空間中進行。
我們認為這兩個因素對深度神經(jīng)網(wǎng)絡的成功也至關(guān)重要。當我們同時考慮「逐層加工處理」和「內(nèi)置特征變換」時就會發(fā)現(xiàn),深度模型是非常自然的選擇,因為基于深度模型可以容易地同時做到上面這兩點。在選用深度模型后,由于模型復雜度高、容易過擬合,所以我們要用大數(shù)據(jù);它很難訓練,所以我們要有訓練技巧;計算開銷大,所以我們要使用強力計算設(shè)備……?
我們發(fā)現(xiàn),這些是我們選擇深度模型之后的結(jié)果,而不是選用深度模型的原因!
這跟以前的認識不太一樣。以前認為因為具備了這些條件而導致我們能使用深度模型,現(xiàn)在看來因果關(guān)系恰是反過來的。事實上,大訓練數(shù)據(jù)、訓練技巧,乃至強力計算設(shè)備都不僅限服務于深度模型,同樣可以服務于淺層模型,因此,具備了這些條件并不必然導致深度模型優(yōu)于淺層模型。

還有一點值得一提:擁有很大的訓練數(shù)據(jù)時,需要使用復雜度高的模型,因為低復雜度模型無法對大數(shù)據(jù)進行充分利用。
比方說僅使用一個簡單的線性模型,那么有兩千萬樣本還是兩億樣本恐怕沒有多少區(qū)別,因為模型已經(jīng)「學不進去」了。而要模型有足夠的復雜度,這又給使用深度模型加了一分,因為深度模型可以容易地通過加深層數(shù)來提升復雜度。
小結(jié)一下,我們的討論分析導出的結(jié)論是,有三個關(guān)鍵因素:?
逐層加工處理?
內(nèi)置特征變換?
模型復雜度夠?
這是我們認為深度神經(jīng)網(wǎng)絡能夠成功的關(guān)鍵原因,或者說是我們關(guān)于深度神經(jīng)網(wǎng)絡成功原因的猜想。有意思的是,這三個因素并沒有「要求」我們必須使用神經(jīng)網(wǎng)絡模型。只要能同時做到這三點,別的模型應該也能做深度學習。
為何有必要探討 DNN 之外的深度模型?
沒有任何模型是完美的,深度神經(jīng)網(wǎng)絡模型也不例外。
首先,凡是用過深度神經(jīng)網(wǎng)絡的人都知道,需花費大量的精力來調(diào)參。這會帶來很多問題。第一,調(diào)參經(jīng)驗很難共享,例如在圖像任務上調(diào)參的經(jīng)驗很難在做語音任務時借鑒。第二,今天無論是科學界還是工程技術(shù)界都非常關(guān)注研究結(jié)果的可重復性,而深度學習恐怕是整個機器學習領(lǐng)域中可重復性問題最嚴重的子領(lǐng)域。常有這樣的情況:一組研究人員發(fā)文章報告的結(jié)果,很難被其他研究人員重現(xiàn),因為即便使用相同的數(shù)據(jù)、 相同的方法,超參數(shù)設(shè)置稍有不同就可能使結(jié)果有巨大差別。?
其次,神經(jīng)網(wǎng)絡的模型結(jié)構(gòu)需要在訓練前預設(shè)。但是在任務完成前,怎么能知道模型復雜度應該是多大呢?事實上,我們通常是在使用超過必需復雜度的網(wǎng)絡。深度神經(jīng)網(wǎng)絡的一些最新研究進展,例如網(wǎng)絡剪枝、權(quán)重二值化、模型壓縮等,實質(zhì)上都是試圖在訓練過程中適當減小網(wǎng)絡復雜度。
顯然,使用過高復雜度的模型必然導致不必要地消耗了更多計算開銷、導致對訓練樣本量不必要的高需求。有沒有可能先用一個簡單模型,然后在學習過程中自適應地增加模型復雜度呢?遺憾的是這對神經(jīng)網(wǎng)絡很困難,因為若網(wǎng)絡結(jié)構(gòu)未定,梯度求導對象在變化,那 BP 算法可就麻煩了。深度神經(jīng)網(wǎng)絡的其他缺陷例如小數(shù)據(jù)上難以使用、黑箱模型、理論分析困難等就不贅述了。?
或許有人會說,學術(shù)創(chuàng)新研究可能要考慮上述問題,而對應用實踐來說只要性能好就行,有深度神經(jīng)網(wǎng)絡就足夠了……其實即便從應用角度來看,探討神經(jīng)網(wǎng)絡之外的深度學習模型也很有必要,因為雖然深度神經(jīng)網(wǎng)絡現(xiàn)在很流行,但在許多任務上(例如 Kaggle 的很多數(shù)據(jù)分析競賽中)獲勝的并非深度神經(jīng)網(wǎng)絡,而是隨機森林、XGBoost 這些相對比較傳統(tǒng)的機器學習模型。事實上,目前深度神經(jīng)網(wǎng)絡做得好的幾乎都是涉及圖像、視頻、語音等的任務,都是典型的數(shù)值建模任務,而在其他涉及符號建模、離散建模、混合建模的任務上,深度神經(jīng)網(wǎng)絡的性能并沒有那么好。
機器學習領(lǐng)域有一個著名的「沒有免費的午餐」定理[2],它告訴我們,沒有任何一個模型在所有任務上都優(yōu)于其他模型。實際上,不同模型各有自己的適用任務范疇,深度神經(jīng)網(wǎng)絡也不例外。因此,有充分的理由去探討深度神經(jīng)網(wǎng)絡之外的深度學習模型,因為這樣的模型或許能讓我們在圖像、視頻、語音之外的更多任務上獲得深度學習的性能紅利。
小結(jié)一下,今天我們談到的深度模型都是深度神經(jīng)網(wǎng)絡,用技術(shù)術(shù)語來說,它是多層可參數(shù)化可微分的非線性構(gòu)件組成的模型,可以用 BP 算法來訓練。這里有兩個問題:一是現(xiàn)實世界中的問題多種多樣,其所涉性質(zhì)并不都是可微的,或能用可微構(gòu)件最優(yōu)建模的;二是機器學習領(lǐng)域幾十年的積累,有許多構(gòu)件能作為復雜模型的基礎(chǔ),其中相當一部分是不可微的。
能否基于不可微構(gòu)件來構(gòu)建新型深度學習模型?這是一個基礎(chǔ)性挑戰(zhàn)問題。一旦得到答案,就同時回答了其他一些問題,例如深度模型是否只能是深度神經(jīng)網(wǎng)絡?是否能不用 BP 算法訓練?有沒有可能讓深度學習在圖像、視頻、語音之外的更多數(shù)據(jù)分析任務上發(fā)揮作用?……?
我們最近在這方面進行了一些初步探索,提出了「深度森林」這種非神經(jīng)網(wǎng)絡的新型深度學習模型[5,6]。深度森林的基礎(chǔ)構(gòu)件是不可微的決策樹,其訓練過程不基于 BP 算法,甚至不依賴于梯度計算。它初步驗證了上一節(jié)中關(guān)于深度學習奏效原因的猜想,即只要能做到逐層加工處理、內(nèi)置特征變換、模型復雜度夠,就能構(gòu)建出有效的深度學習模型,并非必須使用神經(jīng)網(wǎng)絡。這種技術(shù)已經(jīng)在大規(guī)模圖像任務(我們認為此類任務的首選技術(shù)是深度神經(jīng)網(wǎng)絡)之外的許多任務中顯示出優(yōu)秀性能,包括互聯(lián)網(wǎng)支付非法套現(xiàn)檢測等大規(guī)模數(shù)據(jù)分析任務。在一定程度上驗證了,在數(shù)值建模之外的任務上,有可能研制出新型深度學習模型來獲得更好的性能。
需要注意的是,任何一種新技術(shù)要取得廣泛成功都需經(jīng)過長期探索。以深度神經(jīng)網(wǎng)絡中最著名的卷積神經(jīng)網(wǎng)絡為例,經(jīng)過了三十來年、成千上萬研究者和工程師探索和改 進,才取得今天的成功。深度森林還在「嬰兒期」,雖然在某些問題上已得以應用,但是不能期待它在廣泛任務上都能夠立即發(fā)揮作用。?
實際上,我們以為深度森林探索的主要價值并不在于立即產(chǎn)生一種應用性能優(yōu)越的新算法,而是為深度學習的探索提供一個新思路。以往我們以為深度學習就是深度神經(jīng)網(wǎng)絡,只能基于可微構(gòu)件搭建,現(xiàn)在我們知道了這里有更多的可能性。好比說深度學習是一間黑屋子,里面有什么呢?以前我們都知道有深度神經(jīng)網(wǎng)絡,并以為僅有深度神經(jīng)網(wǎng)絡?,F(xiàn)在深度森林把這個屋子打開了一扇門,今后可能會涌現(xiàn)更多的東西。這或許是這個探索在學科領(lǐng)域發(fā)展上更重要的意義。
參考文獻:

點個在看 paper不斷!
