周志華IJCAI2019演講:「深」為什麼重要,以及還有什麼深的網路
雷鋒網 AI 科技評論按:8 月 10 日至 16 日,IJCAI 2019 在中國澳門隆重召開。14 日下午,南京大學周志華教授進行特邀大會演講,演講主題是《Deep Learning: Why deep and is it only doable for neural networks?》。在演講中,周志華教授從自己的角度解讀了深度神經網路之所以獲得成功的本質因素,以及如何在兼顧這些因素的同時,找到神經網路之外的其它的深度模型。
雷鋒網 AI 科技評論把演講全文整理如下。
深度學習就等於深度神經網路嗎?
深度學習今天已經有各種各樣的應用,到處都是它,不管影像也好,影片也好,聲音自然語言處理等等。那麼我們問一個問題,什麼是深度學習?
我想大多數人的答案,就是深度學習差不多就等於深度神經網路。有一個非常著名的學會叫 SIAM,是國際工業與應用數學學會,他們有一個旗艦的報紙叫 SIAM news。在去年的 6 月份,這個報紙的頭版上就有這麼一篇文章,直接就說了這麼一句話,說 深度學習是機器學習中使用深度神經網路的的子領域 。所以如果我們要談深度學習的話,是繞不開深度神經網路的。
首先我們必須從神經網路說起。神經網路其實並不是一個新生事物,神經網路可以說在人工智慧領域已經研究了超過半個世紀。但是以往的話,一般我們用的是很淺的神經網路,就是中間只有一個隱層,或者有兩個隱層。在這樣的神經網路裡面,它的每一個連續的單元都是非常簡單、有條件的,這樣才能起作用。我們收到一些簡單的神經行為輸入,這些輸入透過一些計算得到輸出,成為後續的神經元的輸入。它就是這麼一個非常簡單的公式。所謂的神經網路,是很多這樣的公式經過巢狀迭代得到的一個系統,這叫做 M-P 模型。 如今我們使用的神經網路裡的神經元就是這樣的,即便它是半個世紀前的產物。
那麼今天當我們說用深度神經網路的時候,它和以前的神經網路的區別是什麼?簡單來說,就是我們用的層數會很深很深,網路有很多個隱層。在 2012 年深度學習、卷積神經網路剛剛開始受到大家重視的時候,那時候 ImageNet 競賽的冠軍是用了 8 層的神經網路。那麼到了 2015 年是用了 152 層,到了 2016 年是 1207 層。如今,數千層深的網路非常常見。這是個非常龐大非常巨大的系統,把這麼一個系統訓練出來,難度是非常大的。
有一點非常好的訊息,我們現在有很強大的計算設施。但是說到最基礎的層面,很幸運的是,神經網路裡面的計算單元,最重要的啟用函式是連續的、可微的。比如說我們在以往常用這樣的 sigmoid 函式,它是連續可微的,現在大家常用的 ReLu 函式或者它的變體,也是這樣。這使得我們可以容易地進行梯度計算,這樣就可以很容易用著名的 BP(backpropagation,反向傳播)演算法來訓練。透過這樣的演算法,我們的神經網路已經取得了非常多的勝利。
不過它的前提是依賴梯度。 如果一個問題是不可微分的、不可計算梯度的,我們就無法為它訓練一個神經網路。這非常重要。 而且在 2006 年之前,也沒有人知道如何訓練深度超過 5 層的神經網路,不是因為計算設施不夠強大,而是我們無法解決梯度消失的問題。Geoffery Hinton 等人做出了巨大的貢獻,他們表明透過逐層訓練(layer-by-layer precision)和預訓練(pre-training)我們可以克服梯度消失的問題。介紹這些都是為了說明神經網路需要可微的函式、需要能夠計算梯度,這是最根本最重要的。雖然如今有一些研究不可微的函式的,但還是需要轉換成某種可微的。
為什麼深的模型是有效的?
但是實際上在學術界大家一直沒有想清楚一件事情,就是我們為什麼要用這麼深的模型,或者說為什麼深的模型要比淺的模型表現好那麼多?到今天為止,學術界都還沒有統一的看法。有很多的論述。我在這裡面跟大家講一個我們前段時間給出的一個論述。這個論述其實主要是從模型的複雜度的角度來討論。
我們知道一個機器學習模型, 它的複雜度實際上和它的容量有關,而容量又跟它的學習能力有關。所以就是說學習能力和複雜度是有關的 。機器學習界早就知道,如果我們能夠增強一個學習模型的複雜度,那麼它的學習能力能夠提升。
那怎麼樣去提高複雜度,對神經網路這樣的模型來說,有兩條很明顯的途徑。一條是我們把模型變深,一條是把它變寬。如果從提升複雜度的角度,那麼變深是會更有效的。當你變寬的時候,你只不過是增加了一些計算單元,增加了函式的個數,在變深的時候不僅增加了個數,其實還增加了它的嵌入的程度。所以從這個角度來說,我們應該嘗試去把它變深。
那大家可能就會問了,既然你們早就知道要建立更深的模型了?那麼現在才開始做?這就涉及到另外一個問題,我們把機器學習的學習能力變強了,這其實未必是一件好事。因為機器學習一直在鬥爭的一個問題,就是經常會碰到過擬合(overfit)。這是一種什麼樣的現象?你給我一個資料集,我做機器學習要把資料集裡面的東西學出來,學出來之後, 我希望學到的是一般規律,能夠用來預測未來的事情。但是有時候我可能把這個資料本身的一些獨特特性學出來了,而不是一般規律。錯誤地把它當成一般規律來用的時候,會犯巨大的錯誤。 這種現象就是所謂的過擬合,就是因為模型的學習能力太強了。所以我們以往通常不太願意用太複雜的模型。
那現在我們為什麼可以用很複雜的模型?其實我們設計了許多方法來對付過擬合,比如神經網路有 dropout、early-stop 等。但有一個因素非常簡單、非常有效, 那就是用很大的資料 。比如說我手上如果只有 3000 個資料,那我學出來的特性一般不太可能是一般規律,但是如果有 3000 萬、30 億的資料,那這個資料裡面的特性可能本身就已經是一般規律。所以使用大的資料是緩解過擬合的一個關鍵的途徑。 第二,今天我們有了很多很強大的計算裝置,這使得我們能夠使用大規模資料訓練模型。第三,透過我們這個領域很多學者的努力,有了大量的訓練這樣複雜模型的技巧、演算法,這使得我們使用複雜模型成為可能。 總結一下就是:第一我們有了更大的資料;第二我們有強力的計算裝置;第三我們有很多有效的訓練技巧。這導致我們可以用高複雜度的模型,而深度神經網路恰恰就是一種很便於實現的高複雜度模型。
所以用這麼一套理論,好像是能夠解釋我們現在為什麼能夠用深度神經網路,為什麼深度神經網路能成功?就是因為複雜度大。在一年多之前,我們把這個解釋說出來的時候,其實國內外很多同行也還很贊同,覺得還蠻有道理的。但是其實我自己一直對這個解釋不是特別的滿意,因為一個潛在的問題我們一直沒有回答。
如果從複雜度這個角度去解釋的話,我們就沒法說清楚為什麼扁平的(flat),或者寬的網路做不到深度神經網路的效能?實際上我們把網路變寬,雖然它的效率不是那麼高,但是它同樣也能起到增加複雜度的能力。
實際上只要有一個隱層,加無限多的神經元進去,它的複雜度也會變得很大。但是這樣的模型在應用裡面怎麼試,我們都發現它不如深度神經網路好。所以從複雜度的角度可能很難回答這個問題,我們需要一點更深入的思考。所以我們要問這麼一個問題:深度神經網路裡面最本質的東西到底是什麼?
深度神經網路有效性的三點猜測
今天我們的回答是,本質是表徵學習的能力。這已經成為了學術界的新的共識,甚至有了專門的會議 ICLR。以往我們用機器學習解決一個問題的時候,首先我們拿到一個資料,比如說這個資料物件是個影像,然後我們就用很多特徵把它描述出來,比如說顏色、紋理等等。這些特徵都是我們人類專家透過手工來設計的,表達出來之後我們再去進行學習。而今天我們有了深度學習之後,現在不再需要手工去設計特徵了。你把資料從一端扔進去,結果從另外一端就出來了,中間所有的特徵完全可以透過學習自己來解決。所以這就是我們所謂的特徵學習,或者說表徵學習。我們都認可這和以往的機器學習技術相比可以說是一個很大的進步,這一點非常重要。我們不再需要依賴人類專家去設計特徵了。
這個過程中的關鍵點是什麼呢? 是逐層計算,layer-by-layer processing。
我引述最近非常流行的一本書——《深度學習》裡面的一個圖:當我們拿到一個影像的時候,我們如果把神經網路看作很多層,首先它在最底層,好像我們看到的是一些畫素這樣的東西。當我們一層一層往上的時候,慢慢的可能有邊緣,再網上可能有輪廓,甚至物件的部件等等。當然這實際上只是個示意圖,在真正的神經網路模型裡面不見得會有這麼清楚的分層。但是總體上當我們逐漸往上的時候,它確實是不斷在對物件進行抽象。我們現在認為這好像是深度學習為什麼成功的關鍵因素之一。因為扁平神經網路能做很多深層神經網路能做的事,但是有一點它是做不到的。當它是扁平的時候,它就沒有進行這樣的一個深度的加工。所以深度的逐層抽象這件事情,可能是很淺層神經網路和深層神經網路之間的關鍵區別。
當然了,這也是一種猜測,我們目前還無法從數學上證明。
「逐層計算」在機器學習裡面也不是新東西。比如說決策樹就是一種逐層處理,這是非常典型的。決策樹模型已經有五六十年的歷史了,但是它為什麼做不到深度神經網路這麼好呢?我想答案很簡單。首先它的複雜度不夠,決策樹的深度,如果我們只考慮離散特徵的話,它最深的深度不會超過特徵的個數,所以它的模型複雜度是有限的;而在神經網路中,當我們想要增加模型複雜度的時候,我們增加任意數目的層,沒有任何的限制。第二,也是更重要的,在整個決策樹的學習過程中,它內部沒有進行特徵的變換,從第一層到最後一層始終是在同一個原始特徵空間裡面進行的,這非常重要。我們相信這兩點對於深度神經網路是非常重要的。
而當我們考慮到這兩件事情的時候,我們就會發現,其實深度模型是一個非常自然的選擇。有了這樣的模型,我們很容易就可以做上面兩件事。但是當我們選擇用這麼一個深度模型的時候,我們就會有很多問題,它容易 overfit,所以我們要用大資料;它很難訓練,我們要有很多訓練的 trick;這個系統的計算開銷非常大,所以我們要有非常強有力的計算的裝置,比如 GPU 等等。
實際上所有這些東西是因為我們選用了深度模型之後產生的一個結果,它們不是我們用深度學習的原因。所以這和以往的思考不太一樣,以往我們認為有了這些東西,導致我們用深度模型。其實現在我們覺得這個因果關係恰恰是反過來,因為我們要用它,所以我們才會考慮上面這些東西。這曾經是使用淺網路的原因,如今也可以是使用很深的網路的原因。
另外還有一點我們要注意的,當我們有很大的訓練資料的時候,這就要求我們必須要有很複雜的模型。否則假設我們用一個線性模型的話,給你 2000 萬樣本還是 2 億的樣本,其實對它沒有太大區別。它已經學不進去了。而我們有了充分的複雜度,恰恰它又給我們使用深度模型加了一分。所以正是因為這幾個原因,我們才覺得這是深度模型裡面最關鍵的事情。
這是我們現在的一個認識: 第一,我們要有逐層的處理;第二,我們要有特徵的內部變換;第三,我們要有足夠的模型複雜度。 這三件事情是我們認為深度神經網路為什麼能夠成功的比較關鍵的原因。或者說,這是我們給出的一個猜測。
深度神經網路不是唯一選擇
那如果滿足這幾個條件,我們其實馬上就可以想到,那我不一定要用神經網路。神經網路可能只是我可以選擇的很多方案之一,我只要能夠同時做到這三件事,那我可能用別的模型做也可以,並不是一定只能是用深度神經網路。
第一,凡是用過深度神經網路的人都會知道,你要花大量的精力來調它的引數,因為這是個巨大的系統。那這會帶來很多問題。首先我們調引數的經驗其實是很難共享的。有的朋友可能說,你看我在第一個影像資料集上調引數的經驗,當我用第二個影像資料集的時候,這個經驗肯定是可以重用一部分。但是我們有沒有想過,比如說我們在影像上面做了一個很大的深度神經網路,這時候如果要去做語音的時候,其實在影像上面調引數的經驗,在語音問題上基本上不太有借鑑作用。所以當我們跨任務的時候,這些經驗可能就很難共享。
第二個問題,今天大家都非常關注我們做出來的結果的可重複性,不管是科學研究也好,技術發展也好,都希望這個結果可重複。而在整個機器學習領域,可以說深度學習的可重複性是最弱的。我們經常會碰到這樣的情況,有一組研究人員發文章說報告了一個結果,而這個結果其他的研究人員很難重複。因為哪怕你用同樣的資料,同樣的方法,只要超引數的設定不一樣,你的結果就不一樣。
還有很多問題,比如說我們在用深度神經網路的時候,模型複雜度必須是事先指定的。因為我們在訓練這個模型之前,我們這個神經網路是什麼樣就必須定了,然後我們才能用 BP 演算法等等去訓練它。其實這會帶來很大的問題,因為我們在沒有解決這個任務之前,我們怎麼知道這個複雜度應該有多大呢?所以實際上大家做的通常都是設更大的複雜度。
如果大家關注過去 3、4 年深度學習這個領域的進展,你可以看到很多最前沿的工作在做的都是在有效的縮減網路的複雜度。比如說 RestNet 這個網路透過加了 shortcuts,有效地使得複雜度變小。還有最近大家經常用的一些模型壓縮,甚至權重的二值化,其實都是在把複雜度變小。實際上它是先用了一個過大的複雜度,然後我們再把它降下來。那麼我們有沒有可能在一開始就讓這個模型的複雜度隨著資料而變化,這點對神經網路可能很困難,但是對別的模型是有可能的。還有很多別的問題,比如說理論分析很困難,需要非常大的資料,黑箱模型等等。
那麼從另外一個方面,有人可能說你是做學術研究,你們要考慮這些事,我是做應用的,什麼模型我都不管,你只要能給我解決問題就好了。其實就算從這個角度來想,我們研究神經網路之外的模型也是很需要的。
雖然在今天深度神經網路已經這麼的流行,這麼的成功,但是其實我們可以看到在很多的任務上,效能最好的不見得完全是深度神經網路。比如說 Kaggle 上面的很多競賽有各種各樣的真實問題,有買機票的,有訂旅館的,有做各種的商品推薦等等,還有一些來自企業的真實的工業問題,他們只考慮模型的表現,我們就可以看到在很多工上的勝利者並不是神經網路,它往往是像隨機森林,像 xgboost 等等這樣的模型。深度神經網路獲勝的任務,往往就是在影像、影片、聲音這幾類典型任務上,都是連續的數值建模問題。而在別的凡是涉及到混合建模、離散建模、符號建模這樣的任務上,其實深度神經網路的效能可能比其他模型還要差一些。這也就是我們說的「沒有免費的午餐定理」,已經有數學證明,一個模型不可能在所有任務中都得到最好的表現。所以我們有必要探索神經網路之外的深度模型。
需要探索深度學習之外的方法
那麼,有沒有可能做出合適的深度模型,在這些任務上得到更好的效能呢?
我們從學術的觀點來總結一下,今天我們談到的深度模型基本上都是深度神經網路。如果用術語來說的話,它是多層、可引數化的、可微分的非線性模組所組成的模型,而這個模型可以用 BP 演算法來訓練。
那麼這裡面有兩個問題。第一,我們現實世界遇到的各種各樣的問題的性質,並不是絕對都是可微的,或者用可微的模型能夠做最佳建模的。第二,過去幾十年裡面,我們的機器學習界做了很多模型出來,這些都可以作為我們構建一個系統的基石,而中間有相當一部分模組是不可微的。
現在我們遇到了這樣一個大挑戰,可不可以用不可微的模組構建深度模型?這不光是學術上的,也是技術上的一個挑戰,就是我們能不能用不可微的模組來構建深度模型?
這個問題一旦得到了回答,我們同時就可以得到很多其他問題的答案。比如說深度模型是不是就是深度神經網路?我們能不能用不可微的模型把它做深,這個時候我們不能用 BP 演算法來訓練,那麼同時我們能不能讓深度模型在更多的任務上獲勝?
一個成果:gcForest
我們小組近期做出了一些成果,提出了一種新的模型結構 gcForest。這是一個基於決策樹森林的方法,是基於整合模型的深度模型;它也可以在除了大規模影像資料之外的任務中獲得和深度神經網路相似的表現。在大規模影像資料任務中不能取勝,其中原因是我們目前沒有適當的硬體訓練足夠大的模型。
從名字可以看出,這個模型有兩個關鍵性質: 級聯樹結構,以及多粒度 。我今天主要介紹第一部分的一些要點,這也是這個方法的關鍵所在。
這是它的級聯樹結構。圖中我用紅色標出了原始的輸入特徵向量。基於輸入的特徵向量,我們可以訓練出一些森林,每個森林都是多個決策樹的整合模型。假設我們有三個分類需要預測,每個分類用一個 bit 來表示,那麼每個森林的輸出就有 3 個 bit 長。在第一個標籤訓練完成後,我們把這 3bit 輸出和原始的輸入特徵向量串聯起來,也就是說我們用更多的特徵擴增了原始的輸入向量;接著,我們用擴增後的向量,訓練模型的下一層。這個過程可以不斷地重複,直到最後一個標籤,就可以對所有預測值取平均,得到最終的預測結果。模型的最終層數可以由各種指標決定,比如當你發現增加更多的層之後模型的表現並沒有提升,這時候你就可以停下來了。這樣,你就不需要在開始訓練前就設定好模型有多少層。另外,在工業應用中,當你的資料非常大的時候,你也可以用訓練誤差(training error)來控制這個過程什麼時候停止:當訓練誤差不再繼續下降的時候,就可以停止。就這麼簡單。
在這裡,當你把輸出從第一層傳遞到第二層的時候,對整合方法比較熟悉的人能看出來這和層疊(stacking)有點像:這是一種 kaggle 比賽中常見的方法,先訓練一個模型,然後把輸入和第一個模型的預測結果一起輸入第二個模型,形成一個兩層的模型。但是,如果我們只是這樣簡單地做層疊的話,想要訓練一個超過 3 層的模型是非常困難的,原因是會發生非常嚴重的過擬合;即便是模型的第二層就會出現過擬合。
但我們做出了非常深的模型。這是不同模型表現隨層數變化的曲線,和 CNN、MLP 等其它模型做對比。隨著層數變多,模型的表現越來越好。當我們使用 cross-validation 的時候,模型的表現會停在這裡。但如果我們可以有更好的辦法決定停止時機,也許我們可以停在更靠右的位置,模型的表現可以更好。但這並不重要,我們只需要知道模型可以有非常多層就夠了。
我們要如何做出有很多層的模型? 關鍵是要有多樣性(diversity),決定整個模型表現的就是多樣性 。有更好的多樣性,我們就可以有一個更深的模型。這也是來自整合學習的一個啟發,整合學習中我們就希望不同的學習者各自既準確又多種多樣。
在 gcForest 中,我們也設計了很多機制來提高多樣性。我舉一個例子說明,在這個模型的第一層中我們使用了兩種不同的森林,用兩種顏色表示。紅色的是隨機森林,是隨機樹的整合模型。我們都知道,對於決策樹,首先給定一系列特徵,然後選擇最佳的特徵用於分叉:比如你有 100 個不同的特徵,在分叉時需要從其中選擇最好的那一個。在這個樹中,我們首先從 100 個特徵裡隨機挑選 10 個,然後從這 10 個特徵中選擇最好的那個特徵。透過這種方式,我們為模型引入了一些隨機性,可以鼓勵模型增加多樣性。藍色的就更有趣了,它是完全隨機的樹的整合,就是說完全隨機地選擇特徵並用它們分叉。可以看到,我們構建這些樹和森林的過程中甚至都不需要用到任何的標註資料,只需要隨機選擇特徵、隨機分配特徵。
為什麼我們要在模型的同一層使用這兩種不同的森林呢?如果把整個一層看作一個模型的話,這就是幾個整合模型組成的整合模型,其中的每個整合模型都有所不同,這就可以增加模型的多樣性。那麼一個很自然的後續問題是,為什麼不使用更多的模型、更多不同型別的樹?這當然是可以嘗試的,我們目前只是演示了一種輕微的改進,而它已經可以帶來一些好處。可以期待,當你使用更多種不同的模型、有了更好的多樣性,就可以得到更好的最終結果。我們還使用了其它的一些技巧,由於時間限制我就不展開介紹了。
這是模型的總體架構。給定資料以後,我們首先會做一些掃描,用視窗掃描一些樣本以後得到特徵,並得到資料的表徵。我們使用不同大小的視窗,也就是不同的粒度(grain);對於每一種粒度,都有許多整合模型。所以全域性來看,這就是一群級聯模型的級聯模型;每個級聯模型裡有多種不同的粒度,每個粒度裡含有整合模型的整合模型。模型的結構也許複雜,但是它可以做得很深。
這種模型也會涉及到一些超引數問題,比如,每個森林裡有多少樹、樹生長到什麼深度或者什麼時間、掃描資料的時候要使用多少個不同的視窗,但總的來說涉及到的超引數的數量還是比神經網路少。
我們也在許多種不同的任務上執行了實驗,除了大規模影像資料之外,在其中的大多數任務上 gcForest 都可以獲得和深度神經網路類似的表現。它的重要意義在於,這是首個不依賴梯度、不依賴反向傳播的深度模型。對於可微分的機器學習問題,我們可以把神經網路的那一系列技巧都利用起來;基於決策樹的模型雖然無法轉換成神經網路模型,但是可以解決不可微、無法計算梯度的問題。
gcForest 前途如何
Keras 作者 François Chollet 曾說,可微分的層是當前的模型的基礎弱點;gcForest 不使用任何可微分的層。深度學習之父 Geoffery Hinton 說,他 想把反向傳播扔掉、從頭再來 ;gcForest 就不使用反向傳播,連梯度都不使用。所以,從學術研究的角度講,研究 gcForest 這樣的不依賴梯度的深度模型將會是機器學習的重要分支。
有一些來自工業界的人可能會說,這當然是很好的學術新成果,但是它對實踐能起到什麼幫助嗎?那麼我來給大家彙報一個工業應用的成果,這是關於非法套現檢測的。中國的電子支付非常發達、交易量非常大,即便其中只有一小部分是非法的,也會造成很大的影響。和我們合作的這家公司有很強的技術功底,他們設計了大規模分散式的 gcForest,並且用在了他們的分散式機器學習系統中。下面我展示一個測試結果,這可能是非法套現檢測的最大規模的真實資料集,訓練資料超過 1.3 億條交易資料,測試資料也超過 5200 萬條;每條交易資料由超過 5000 個特徵描述。
他們自己也有邏輯迴歸、深度神經網路和自研的模型,可以看到不論對於學術評價指標還是工業界指標,大規模分散式的 gcForest 都得到了最好的表現。這也印證了我們的猜測:gcForest 可以在某些任務中發揮很好的作用,尤其是在帶有離散資訊、符號資訊的任務中。在這裡,使用者資訊中的很多內容就是符號化的。
雖然 gcForest 有一些成功的應用,但我還是要提醒大家,不要立刻就對 gcForest 抱有過高的期待。實際上我們已經開源了適用於小規模、中等規模資料的程式碼,但如果你希望下載程式碼以後就直接應用,希望得到不錯的結果的話,那你的期待太高了。對於每種新技術,都要經歷很長的研發之路。如果你在筆記本上直接執行的話,你的記憶體很快就會用完。想要完全發揮這種技術的優點的途徑有兩種,一種是剛才這樣的大規模分散式部署,另一種是藉助現代計算硬體。
gcForest 面臨的挑戰
相比於 CNN 已經經歷了 30 年的發展,gcForest 還在自己的幼年時期。下面我簡單介紹一些值得研究的挑戰、開放性問題。
剛才我介紹了 gcForest 代表了整合模型, 其中的多樣性非常重要,實際上 gcForest 使用到了整合模型研究領域內的各種增加多樣性的方法。 如果大家對整合模型感興趣的話,歡迎閱讀我的這本關於專著《Ensemble Methods: Foundations and Algorithms》,裡面有一整章的內容是介紹如何增加多樣性的。
我們發現 gcForest 和神經網路有一些相似性。在神經網路的訓練中,我們希望避免梯度消失,而在 gcForest 中,我們希望避免多樣性消失。如果多樣性消失了,我們最多隻能做出三層、四層的網路。如何設計更多的機制給模型增加更多的多樣性,這將是 gcForest 研究的關鍵,就像研究如何避免梯度消失是神經網路研究的關鍵一樣。
下一點是 特徵擴增 。剛才我提到,如果要預測三個類、每個類用一個 bit 表示,那麼每個森林只能在原來的特徵向量的基礎上增加 3 個 bit。這是一個非常小的數字,比如當你有 1000 維的資料特徵時,只增加 3 個 bit 太少了,很容易淹沒在原有的特徵中。所以對於高維資料,我們需要設計新的機制,提取更多的特徵來擴增原有的特徵向量。
這一點非常重要,但在動手之前,我們也需要提出這個問題:森林是否能夠提取出足夠的資訊,用來重構出有用的擴增特徵。如果森林的提取能力不強,那麼也許 3 個 bit 就夠用了。
我們也針對這個問題做了一些研究。我們發現, 一個經過訓練的森林甚至可以被用作一個自動編碼器(AutoEncoder) 。此前人們都認為「可以用作自動編碼器」是神經網路模型專屬的一種特性,如今我們也可以用森林做到這一點。在給定資料上訓練完成一個森林模型以後,再拿一些新資料做預測,你可以找到新資料可以歸屬在下面的葉子節點。那麼,對於葉子資訊,你就可以幾乎完美地回溯、重建出原始資料。這就意味著,如果你有一個資料集、基於資料集構建了森林,你甚至可以丟棄整個資料集,它的資訊都已經編碼在了森林模型裡。它的重現表現很好,比如在影像資料集上有很好的重建結果,在文字資料集上也比神經網路更好,因為神經網路處理符號資訊之前需要先透過 word2vec 之類的方法把它轉換為數值資訊,這就會帶來額外的偏倚。但樹模型就可以直接處理符號化資訊,不需要任何轉換。所以,基於森林方法設計更好的特徵增強方法其實有非常多的可能性等待我們探索。
除此之外,我們還發現一些以往人們認為神經網路獨有的能力也可以在森林中實現。比如在這篇 NerIPS2018 論文中, 我們表明了森林可以做層次化分散式表徵學習。曾經這也被認為是神經網路獨有的性質。 這都意味著,許多我們以前認為的特殊性質,其實並不需要僅僅侷限於神經網路。未來也許我們還能找到更多可以實現這些能力的模型。
另一件事, 對於提高模型的執行速度來說非常重要的,就是改進使用的硬體。 這是來自我們實驗的圖表,可以看到,如果增加粒度數目,模型的表現總體是提升的;增加森林的數量、增加每個森林中的樹的數量,模型的表現都可以提升。就是說,更大的模型總的來說可以帶來更好的表現。不幸的是,我們沒法把模型做得更深,因為我們沒有適當的計算裝置,就類似於做深度神經網路需要有 GPU。
實際上,如果我們考慮訓練時的計算開銷的話,深度森林的開銷比深度神經網路要小,然而深度神經網路可以用 GPU 加速,因為其中的計算都可以轉換為矩陣運算;在深度森林中,大多數的樹生長過程是基於切換的,很難用 GPU 加速。所以,如果考慮到 GPU 的加速效果的話,深度神經網路的效率要更高。
既然不能用 GPU 加速深度森林,那麼我們就要問了,我們能用什麼來加速深度森林呢?能不能設計適當的硬體來加速它呢?我們猜測英特爾的多核 KNL 晶片有一定的潛力,但我們還不確定它加速深度森林的效果是否能和 GPU 加速深度神經網路的效果相同。 最近英特爾也和我們(南京大學)聯合設立了一個人工智慧研究中心,目標就是共同探索是否有可能設計新的人工智慧晶片為深度森林提供加速。
另一個問題是演算法本身。我們都知道深度神經網路的研究已經進行了大約三十年了,有許多學者、研究員、從業者為深度神經網路的發展做出了貢獻。深度森林還在自己的幼兒期,還有很多的研究工作需要做。
理論研究也不能忽視。我們都知道深度學習有一個很大的不便之處就是缺少理論基礎,所以深度神經網路很難分析,尤其是從學習理論的角度;從這個角度來說,決策樹要好一些。但是對決策樹、對森林、整合模型做分析還是很難的, 最近我們提出了一個新的方法,mdDF,它是深度森林的一種變體,我們也已經得到了一些初步的理論結果,這篇論文近期就會發表。 不過,這件事仍然不簡單,還需要許多後續的深入研究。
需要克服的問題還有很多,不過所有這些付出都是值得的。 因為,「沒有免費的午餐」,沒有哪個學習模型永遠都是最好的,儘管深度神經網路很成功,我們還是要繼續探索其他型別的模型。我們猜測深度神經網路確實是適用於數值建模問題的,但是當你面對的是符號化、離散、表格資料的時候,深度森林可以做得更好。
由於目前我們不知道深度森林可以發展到什麼程度,因為我們還構建不出非常深的模型,但 即便未來我們構建出很深的模型了、而且發現它的表現沒有我們預想的那麼好,我們的研究也仍然是有價值的。 因為深度森林的構建過程為我們的這幾個猜測提供了證據:當你用一個模型就可以做到逐層訊號處理、特徵變換、足夠的模型複雜度的時候,你就可以享受到深度模型的好處。這也就是深度森林比之前的各種森林都有更好的表現的原因。它也帶給我們新的啟示:我們是否有可能設計出同時兼顧到這幾點的新的模型?
最後總結一下,曾經我們認為深度學習是一個「小黑屋」,裡面只有深度神經網路。現在我們開啟門,發現了裡面有深度森林,也許未來還能發現更多別的東西。
謝謝大家!
(完)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2654078/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 人工神經網路初學:是什麼以及為什麼?神經網路
- 你演講(分享)是為了什麼?
- 雲同步: 什麼是雲同步以及為什麼它是如此重要?
- 周線波段操作有什麼技巧,什麼是周線波段操作有什麼技巧
- 前端JS:什麼是深拷貝?什麼是淺拷貝?前端JS
- Google的社交網路為什麼還沒有成功Go
- ITAM是什麼?為什麼它很重要?
- 網際網路之父告訴你為什麼網路中立很重要
- 【CNN】很詳細的講解什麼以及為什麼是卷積(Convolution)!CNN卷積
- 網路安全中什麼是弱口令?有什麼風險?
- 什麼是客戶分析,為什麼它很重要?
- 機器學習-周志華機器學習
- 網路安全中內網、外網是什麼?有什麼區別?內網
- 為什麼凸優化這麼重要?優化
- 為什麼有了 HTTP 還要 RPCHTTPRPC
- 既然有MySQL了,為什麼還要有MongoDB?MySqlMongoDB
- KPCB周煒:為什麼Twiter入華也競爭不過微博?
- 為什麼DNS安全很重要DNS
- 為什麼redis是單執行緒的以及為什麼這麼快?Redis執行緒
- 網路安全中弱口令是什麼意思?有什麼危害?
- 網路安全中蜜罐是什麼意思?有什麼特點?
- Oracle ASM有什麼用?為什麼用?OracleASM
- 深拷貝和淺拷貝的區別是什麼?實現一個深拷貝
- 講一講Java有什麼優勢?Java
- 網站常用的狀態碼有什麼?網路安全技學習什麼網站
- 邊緣計算是什麼以及為什麼需要它
- python有什麼特性?為什麼這麼火?Python
- 為什麼資料備份那麼重要?
- 什麼叫做copy/mutableCopy?如何實現淺/深拷貝?
- 周志華 機器學習ppt機器學習
- 什麼是自愈路由?自愈路由自愈網路有什麼好處路由
- 高安全等級網路是什麼意思?有什麼特點?
- 【知識分享】網路伺服器是什麼有什麼作用伺服器
- 對JVM還有什麼不懂的?資深架構師一篇文章帶你深入淺出JVM!JVM架構
- 除了 filter 還有什麼置灰網站的方式?Filter網站
- 為什麼去中心化很重要?中心化
- 為什麼Web3如此重要?Web
- 為什麼小資料更重要?