許多特性并不是深度神經(jīng)網(wǎng)絡(luò)獨(dú)有~
作者:楊曉凡
編輯:Camel
8 月 10 日至 16 日,IJCAI 2019 在中國澳門隆重召開。14 日下午,南京大學(xué)周志華教授進(jìn)行特邀大會(huì)演講,演講主題是《Deep Learning: Why deep and is it only doable for neural networks?》。在演講中,周志華教授從自己的角度解讀了深度神經(jīng)網(wǎng)絡(luò)之所以獲得成功的本質(zhì)因素,以及如何在兼顧這些因素的同時(shí),找到神經(jīng)網(wǎng)絡(luò)之外的其它的深度模型。
AI 科技評論把演講全文整理如下。
深度學(xué)習(xí)今天已經(jīng)有各種各樣的應(yīng)用,到處都是它,不管圖像也好,視頻也好,聲音自然語言處理等等。那么我們問一個(gè)問題,什么是深度學(xué)習(xí)?
我想大多數(shù)人的答案,就是深度學(xué)習(xí)差不多就等于深度神經(jīng)網(wǎng)絡(luò)。有一個(gè)非常著名的學(xué)會(huì)叫 SIAM,是國際工業(yè)與應(yīng)用數(shù)學(xué)學(xué)會(huì),他們有一個(gè)旗艦的報(bào)紙叫 SIAM news。在去年的 6 月份,這個(gè)報(bào)紙的頭版上就有這么一篇文章,直接就說了這么一句話,說深度學(xué)習(xí)是機(jī)器學(xué)習(xí)中使用深度神經(jīng)網(wǎng)絡(luò)的的子領(lǐng)域。所以如果我們要談深度學(xué)習(xí)的話,是繞不開深度神經(jīng)網(wǎng)絡(luò)的。
首先我們必須從神經(jīng)網(wǎng)絡(luò)說起。神經(jīng)網(wǎng)絡(luò)其實(shí)并不是一個(gè)新生事物,神經(jīng)網(wǎng)絡(luò)可以說在人工智能領(lǐng)域已經(jīng)研究了超過半個(gè)世紀(jì)。但是以往的話,一般我們用的是很淺的神經(jīng)網(wǎng)絡(luò),就是中間只有一個(gè)隱層,或者有兩個(gè)隱層。在這樣的神經(jīng)網(wǎng)絡(luò)里面,它的每一個(gè)連續(xù)的單元都是非常簡單、有條件的,這樣才能起作用。我們收到一些簡單的神經(jīng)行為輸入,這些輸入通過一些計(jì)算得到輸出,成為后續(xù)的神經(jīng)元的輸入。它就是這么一個(gè)非常簡單的公式。所謂的神經(jīng)網(wǎng)絡(luò),是很多這樣的公式經(jīng)過嵌套迭代得到的一個(gè)系統(tǒng),這叫做 M-P 模型。如今我們使用的神經(jīng)網(wǎng)絡(luò)里的神經(jīng)元就是這樣的,即便它是半個(gè)世紀(jì)前的產(chǎn)物。
那么今天當(dāng)我們說用深度神經(jīng)網(wǎng)絡(luò)的時(shí)候,它和以前的神經(jīng)網(wǎng)絡(luò)的區(qū)別是什么?簡單來說,就是我們用的層數(shù)會(huì)很深很深,網(wǎng)絡(luò)有很多個(gè)隱層。在 2012 年深度學(xué)習(xí)、卷積神經(jīng)網(wǎng)絡(luò)剛剛開始受到大家重視的時(shí)候,那時(shí)候 ImageNet 競賽的冠軍是用了 8 層的神經(jīng)網(wǎng)絡(luò)。那么到了 2015 年是用了 152 層,到了 2016 年是 1207 層。如今,數(shù)千層深的網(wǎng)絡(luò)非常常見。這是個(gè)非常龐大非常巨大的系統(tǒng),把這么一個(gè)系統(tǒng)訓(xùn)練出來,難度是非常大的。
有一點(diǎn)非常好的消息,我們現(xiàn)在有很強(qiáng)大的計(jì)算設(shè)施。但是說到最基礎(chǔ)的層面,很幸運(yùn)的是,神經(jīng)網(wǎng)絡(luò)里面的計(jì)算單元,最重要的激活函數(shù)是連續(xù)的、可微的。比如說我們在以往常用這樣的 sigmoid 函數(shù),它是連續(xù)可微的,現(xiàn)在大家常用的 ReLu 函數(shù)或者它的變體,也是這樣。這使得我們可以容易地進(jìn)行梯度計(jì)算,這樣就可以很容易用著名的 BP(backpropagation,反向傳播)算法來訓(xùn)練。通過這樣的算法,我們的神經(jīng)網(wǎng)絡(luò)已經(jīng)取得了非常多的勝利。
不過它的前提是依賴梯度。如果一個(gè)問題是不可微分的、不可計(jì)算梯度的,我們就無法為它訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)。這非常重要。而且在 2006 年之前,也沒有人知道如何訓(xùn)練深度超過 5 層的神經(jīng)網(wǎng)絡(luò),不是因?yàn)橛?jì)算設(shè)施不夠強(qiáng)大,而是我們無法解決梯度消失的問題。Geoffery Hinton 等人做出了巨大的貢獻(xiàn),他們表明通過逐層訓(xùn)練(layer-by-layer precision)和預(yù)訓(xùn)練(pre-training)我們可以克服梯度消失的問題。介紹這些都是為了說明神經(jīng)網(wǎng)絡(luò)需要可微的函數(shù)、需要能夠計(jì)算梯度,這是最根本最重要的。雖然如今有一些研究不可微的函數(shù)的,但還是需要轉(zhuǎn)換成某種可微的。
但是實(shí)際上在學(xué)術(shù)界大家一直沒有想清楚一件事情,就是我們?yōu)槭裁匆眠@么深的模型,或者說為什么深的模型要比淺的模型表現(xiàn)好那么多?到今天為止,學(xué)術(shù)界都還沒有統(tǒng)一的看法。有很多的論述。我在這里面跟大家講一個(gè)我們前段時(shí)間給出的一個(gè)論述。這個(gè)論述其實(shí)主要是從模型的復(fù)雜度的角度來討論。
我們知道一個(gè)機(jī)器學(xué)習(xí)模型,它的復(fù)雜度實(shí)際上和它的容量有關(guān),而容量又跟它的學(xué)習(xí)能力有關(guān)。所以就是說學(xué)習(xí)能力和復(fù)雜度是有關(guān)的。機(jī)器學(xué)習(xí)界早就知道,如果我們能夠增強(qiáng)一個(gè)學(xué)習(xí)模型的復(fù)雜度,那么它的學(xué)習(xí)能力能夠提升。
那怎么樣去提高復(fù)雜度,對神經(jīng)網(wǎng)絡(luò)這樣的模型來說,有兩條很明顯的途徑。一條是我們把模型變深,一條是把它變寬。如果從提升復(fù)雜度的角度,那么變深是會(huì)更有效的。當(dāng)你變寬的時(shí)候,你只不過是增加了一些計(jì)算單元,增加了函數(shù)的個(gè)數(shù),在變深的時(shí)候不僅增加了個(gè)數(shù),其實(shí)還增加了它的嵌入的程度。所以從這個(gè)角度來說,我們應(yīng)該嘗試去把它變深。
那大家可能就會(huì)問了,既然你們早就知道要建立更深的模型了?那么現(xiàn)在才開始做?這就涉及到另外一個(gè)問題,我們把機(jī)器學(xué)習(xí)的學(xué)習(xí)能力變強(qiáng)了,這其實(shí)未必是一件好事。因?yàn)闄C(jī)器學(xué)習(xí)一直在斗爭的一個(gè)問題,就是經(jīng)常會(huì)碰到過擬合(overfit)。這是一種什么樣的現(xiàn)象?你給我一個(gè)數(shù)據(jù)集,我做機(jī)器學(xué)習(xí)要把數(shù)據(jù)集里面的東西學(xué)出來,學(xué)出來之后,我希望學(xué)到的是一般規(guī)律,能夠用來預(yù)測未來的事情。但是有時(shí)候我可能把這個(gè)數(shù)據(jù)本身的一些獨(dú)特特性學(xué)出來了,而不是一般規(guī)律。錯(cuò)誤地把它當(dāng)成一般規(guī)律來用的時(shí)候,會(huì)犯巨大的錯(cuò)誤。這種現(xiàn)象就是所謂的過擬合,就是因?yàn)槟P偷膶W(xué)習(xí)能力太強(qiáng)了。所以我們以往通常不太愿意用太復(fù)雜的模型。
那現(xiàn)在我們?yōu)槭裁纯梢杂煤軓?fù)雜的模型?其實(shí)我們設(shè)計(jì)了許多方法來對付過擬合,比如神經(jīng)網(wǎng)絡(luò)有 dropout、early-stop 等。但有一個(gè)因素非常簡單、非常有效,那就是用很大的數(shù)據(jù)。比如說我手上如果只有 3000 個(gè)數(shù)據(jù),那我學(xué)出來的特性一般不太可能是一般規(guī)律,但是如果有 3000 萬、30 億的數(shù)據(jù),那這個(gè)數(shù)據(jù)里面的特性可能本身就已經(jīng)是一般規(guī)律。所以使用大的數(shù)據(jù)是緩解過擬合的一個(gè)關(guān)鍵的途徑。第二,今天我們有了很多很強(qiáng)大的計(jì)算設(shè)備,這使得我們能夠使用大規(guī)模數(shù)據(jù)訓(xùn)練模型。第三,通過我們這個(gè)領(lǐng)域很多學(xué)者的努力,有了大量的訓(xùn)練這樣復(fù)雜模型的技巧、算法,這使得我們使用復(fù)雜模型成為可能。總結(jié)一下就是:第一我們有了更大的數(shù)據(jù);第二我們有強(qiáng)力的計(jì)算設(shè)備;第三我們有很多有效的訓(xùn)練技巧。這導(dǎo)致我們可以用高復(fù)雜度的模型,而深度神經(jīng)網(wǎng)絡(luò)恰恰就是一種很便于實(shí)現(xiàn)的高復(fù)雜度模型。
所以用這么一套理論,好像是能夠解釋我們現(xiàn)在為什么能夠用深度神經(jīng)網(wǎng)絡(luò),為什么深度神經(jīng)網(wǎng)絡(luò)能成功?就是因?yàn)閺?fù)雜度大。在一年多之前,我們把這個(gè)解釋說出來的時(shí)候,其實(shí)國內(nèi)外很多同行也還很贊同,覺得還蠻有道理的。但是其實(shí)我自己一直對這個(gè)解釋不是特別的滿意,因?yàn)橐粋€(gè)潛在的問題我們一直沒有回答。
如果從復(fù)雜度這個(gè)角度去解釋的話,我們就沒法說清楚為什么扁平的(flat),或者寬的網(wǎng)絡(luò)做不到深度神經(jīng)網(wǎng)絡(luò)的性能?實(shí)際上我們把網(wǎng)絡(luò)變寬,雖然它的效率不是那么高,但是它同樣也能起到增加復(fù)雜度的能力。
實(shí)際上只要有一個(gè)隱層,加無限多的神經(jīng)元進(jìn)去,它的復(fù)雜度也會(huì)變得很大。但是這樣的模型在應(yīng)用里面怎么試,我們都發(fā)現(xiàn)它不如深度神經(jīng)網(wǎng)絡(luò)好。所以從復(fù)雜度的角度可能很難回答這個(gè)問題,我們需要一點(diǎn)更深入的思考。所以我們要問這么一個(gè)問題:深度神經(jīng)網(wǎng)絡(luò)里面最本質(zhì)的東西到底是什么?
今天我們的回答是,本質(zhì)是表征學(xué)習(xí)的能力。這已經(jīng)成為了學(xué)術(shù)界的新的共識(shí),甚至有了專門的會(huì)議 ICLR。以往我們用機(jī)器學(xué)習(xí)解決一個(gè)問題的時(shí)候,首先我們拿到一個(gè)數(shù)據(jù),比如說這個(gè)數(shù)據(jù)對象是個(gè)圖像,然后我們就用很多特征把它描述出來,比如說顏色、紋理等等。這些特征都是我們?nèi)祟悓<彝ㄟ^手工來設(shè)計(jì)的,表達(dá)出來之后我們再去進(jìn)行學(xué)習(xí)。而今天我們有了深度學(xué)習(xí)之后,現(xiàn)在不再需要手工去設(shè)計(jì)特征了。你把數(shù)據(jù)從一端扔進(jìn)去,結(jié)果從另外一端就出來了,中間所有的特征完全可以通過學(xué)習(xí)自己來解決。所以這就是我們所謂的特征學(xué)習(xí),或者說表征學(xué)習(xí)。我們都認(rèn)可這和以往的機(jī)器學(xué)習(xí)技術(shù)相比可以說是一個(gè)很大的進(jìn)步,這一點(diǎn)非常重要。我們不再需要依賴人類專家去設(shè)計(jì)特征了。
這個(gè)過程中的關(guān)鍵點(diǎn)是什么呢?是逐層計(jì)算,layer-by-layer processing。
我引述最近非常流行的一本書——《深度學(xué)習(xí)》里面的一個(gè)圖:當(dāng)我們拿到一個(gè)圖像的時(shí)候,我們?nèi)绻焉窠?jīng)網(wǎng)絡(luò)看作很多層,首先它在最底層,好像我們看到的是一些像素這樣的東西。當(dāng)我們一層一層往上的時(shí)候,慢慢的可能有邊緣,再網(wǎng)上可能有輪廓,甚至對象的部件等等。當(dāng)然這實(shí)際上只是個(gè)示意圖,在真正的神經(jīng)網(wǎng)絡(luò)模型里面不見得會(huì)有這么清楚的分層。但是總體上當(dāng)我們逐漸往上的時(shí)候,它確實(shí)是不斷在對對象進(jìn)行抽象。我們現(xiàn)在認(rèn)為這好像是深度學(xué)習(xí)為什么成功的關(guān)鍵因素之一。因?yàn)楸馄缴窠?jīng)網(wǎng)絡(luò)能做很多深層神經(jīng)網(wǎng)絡(luò)能做的事,但是有一點(diǎn)它是做不到的。當(dāng)它是扁平的時(shí)候,它就沒有進(jìn)行這樣的一個(gè)深度的加工。所以深度的逐層抽象這件事情,可能是很淺層神經(jīng)網(wǎng)絡(luò)和深層神經(jīng)網(wǎng)絡(luò)之間的關(guān)鍵區(qū)別。
當(dāng)然了,這也是一種猜測,我們目前還無法從數(shù)學(xué)上證明。
「逐層計(jì)算」在機(jī)器學(xué)習(xí)里面也不是新東西。比如說決策樹就是一種逐層處理,這是非常典型的。決策樹模型已經(jīng)有五六十年的歷史了,但是它為什么做不到深度神經(jīng)網(wǎng)絡(luò)這么好呢?我想答案很簡單。首先它的復(fù)雜度不夠,決策樹的深度,如果我們只考慮離散特征的話,它最深的深度不會(huì)超過特征的個(gè)數(shù),所以它的模型復(fù)雜度是有限的;而在神經(jīng)網(wǎng)絡(luò)中,當(dāng)我們想要增加模型復(fù)雜度的時(shí)候,我們增加任意數(shù)目的層,沒有任何的限制。第二,也是更重要的,在整個(gè)決策樹的學(xué)習(xí)過程中,它內(nèi)部沒有進(jìn)行特征的變換,從第一層到最后一層始終是在同一個(gè)原始特征空間里面進(jìn)行的,這非常重要。我們相信這兩點(diǎn)對于深度神經(jīng)網(wǎng)絡(luò)是非常重要的。
而當(dāng)我們考慮到這兩件事情的時(shí)候,我們就會(huì)發(fā)現(xiàn),其實(shí)深度模型是一個(gè)非常自然的選擇。有了這樣的模型,我們很容易就可以做上面兩件事。但是當(dāng)我們選擇用這么一個(gè)深度模型的時(shí)候,我們就會(huì)有很多問題,它容易 overfit,所以我們要用大數(shù)據(jù);它很難訓(xùn)練,我們要有很多訓(xùn)練的 trick;這個(gè)系統(tǒng)的計(jì)算開銷非常大,所以我們要有非常強(qiáng)有力的計(jì)算的設(shè)備,比如 GPU 等等。
實(shí)際上所有這些東西是因?yàn)槲覀冞x用了深度模型之后產(chǎn)生的一個(gè)結(jié)果,它們不是我們用深度學(xué)習(xí)的原因。所以這和以往的思考不太一樣,以往我們認(rèn)為有了這些東西,導(dǎo)致我們用深度模型。其實(shí)現(xiàn)在我們覺得這個(gè)因果關(guān)系恰恰是反過來,因?yàn)槲覀円盟晕覀儾艜?huì)考慮上面這些東西。這曾經(jīng)是使用淺網(wǎng)絡(luò)的原因,如今也可以是使用很深的網(wǎng)絡(luò)的原因。
另外還有一點(diǎn)我們要注意的,當(dāng)我們有很大的訓(xùn)練數(shù)據(jù)的時(shí)候,這就要求我們必須要有很復(fù)雜的模型。否則假設(shè)我們用一個(gè)線性模型的話,給你 2000 萬樣本還是 2 億的樣本,其實(shí)對它沒有太大區(qū)別。它已經(jīng)學(xué)不進(jìn)去了。而我們有了充分的復(fù)雜度,恰恰它又給我們使用深度模型加了一分。所以正是因?yàn)檫@幾個(gè)原因,我們才覺得這是深度模型里面最關(guān)鍵的事情。
這是我們現(xiàn)在的一個(gè)認(rèn)識(shí):第一,我們要有逐層的處理;第二,我們要有特征的內(nèi)部變換;第三,我們要有足夠的模型復(fù)雜度。這三件事情是我們認(rèn)為深度神經(jīng)網(wǎng)絡(luò)為什么能夠成功的比較關(guān)鍵的原因。或者說,這是我們給出的一個(gè)猜測。
那如果滿足這幾個(gè)條件,我們其實(shí)馬上就可以想到,那我不一定要用神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)可能只是我可以選擇的很多方案之一,我只要能夠同時(shí)做到這三件事,那我可能用別的模型做也可以,并不是一定只能是用深度神經(jīng)網(wǎng)絡(luò)。
第一,凡是用過深度神經(jīng)網(wǎng)絡(luò)的人都會(huì)知道,你要花大量的精力來調(diào)它的參數(shù),因?yàn)檫@是個(gè)巨大的系統(tǒng)。那這會(huì)帶來很多問題。首先我們調(diào)參數(shù)的經(jīng)驗(yàn)其實(shí)是很難共享的。有的朋友可能說,你看我在第一個(gè)圖像數(shù)據(jù)集上調(diào)參數(shù)的經(jīng)驗(yàn),當(dāng)我用第二個(gè)圖像數(shù)據(jù)集的時(shí)候,這個(gè)經(jīng)驗(yàn)肯定是可以重用一部分。但是我們有沒有想過,比如說我們在圖像上面做了一個(gè)很大的深度神經(jīng)網(wǎng)絡(luò),這時(shí)候如果要去做語音的時(shí)候,其實(shí)在圖像上面調(diào)參數(shù)的經(jīng)驗(yàn),在語音問題上基本上不太有借鑒作用。所以當(dāng)我們跨任務(wù)的時(shí)候,這些經(jīng)驗(yàn)可能就很難共享。
第二個(gè)問題,今天大家都非常關(guān)注我們做出來的結(jié)果的可重復(fù)性,不管是科學(xué)研究也好,技術(shù)發(fā)展也好,都希望這個(gè)結(jié)果可重復(fù)。而在整個(gè)機(jī)器學(xué)習(xí)領(lǐng)域,可以說深度學(xué)習(xí)的可重復(fù)性是最弱的。我們經(jīng)常會(huì)碰到這樣的情況,有一組研究人員發(fā)文章說報(bào)告了一個(gè)結(jié)果,而這個(gè)結(jié)果其他的研究人員很難重復(fù)。因?yàn)槟呐履阌猛瑯拥臄?shù)據(jù),同樣的方法,只要超參數(shù)的設(shè)置不一樣,你的結(jié)果就不一樣。
還有很多問題,比如說我們在用深度神經(jīng)網(wǎng)絡(luò)的時(shí)候,模型復(fù)雜度必須是事先指定的。因?yàn)槲覀冊谟?xùn)練這個(gè)模型之前,我們這個(gè)神經(jīng)網(wǎng)絡(luò)是什么樣就必須定了,然后我們才能用 BP 算法等等去訓(xùn)練它。其實(shí)這會(huì)帶來很大的問題,因?yàn)槲覀冊跊]有解決這個(gè)任務(wù)之前,我們怎么知道這個(gè)復(fù)雜度應(yīng)該有多大呢?所以實(shí)際上大家做的通常都是設(shè)更大的復(fù)雜度。
如果大家關(guān)注過去 3、4 年深度學(xué)習(xí)這個(gè)領(lǐng)域的進(jìn)展,你可以看到很多最前沿的工作在做的都是在有效的縮減網(wǎng)絡(luò)的復(fù)雜度。比如說 RestNet 這個(gè)網(wǎng)絡(luò)通過加了 shortcuts,有效地使得復(fù)雜度變小。還有最近大家經(jīng)常用的一些模型壓縮,甚至權(quán)重的二值化,其實(shí)都是在把復(fù)雜度變小。實(shí)際上它是先用了一個(gè)過大的復(fù)雜度,然后我們再把它降下來。那么我們有沒有可能在一開始就讓這個(gè)模型的復(fù)雜度隨著數(shù)據(jù)而變化,這點(diǎn)對神經(jīng)網(wǎng)絡(luò)可能很困難,但是對別的模型是有可能的。還有很多別的問題,比如說理論分析很困難,需要非常大的數(shù)據(jù),黑箱模型等等。
那么從另外一個(gè)方面,有人可能說你是做學(xué)術(shù)研究,你們要考慮這些事,我是做應(yīng)用的,什么模型我都不管,你只要能給我解決問題就好了。其實(shí)就算從這個(gè)角度來想,我們研究神經(jīng)網(wǎng)絡(luò)之外的模型也是很需要的。
雖然在今天深度神經(jīng)網(wǎng)絡(luò)已經(jīng)這么的流行,這么的成功,但是其實(shí)我們可以看到在很多的任務(wù)上,性能最好的不見得完全是深度神經(jīng)網(wǎng)絡(luò)。比如說 Kaggle 上面的很多競賽有各種各樣的真實(shí)問題,有買機(jī)票的,有訂旅館的,有做各種的商品推薦等等,還有一些來自企業(yè)的真實(shí)的工業(yè)問題,他們只考慮模型的表現(xiàn),我們就可以看到在很多任務(wù)上的勝利者并不是神經(jīng)網(wǎng)絡(luò),它往往是像隨機(jī)森林,像 xgboost 等等這樣的模型。深度神經(jīng)網(wǎng)絡(luò)獲勝的任務(wù),往往就是在圖像、視頻、聲音這幾類典型任務(wù)上,都是連續(xù)的數(shù)值建模問題。而在別的凡是涉及到混合建模、離散建模、符號(hào)建模這樣的任務(wù)上,其實(shí)深度神經(jīng)網(wǎng)絡(luò)的性能可能比其他模型還要差一些。這也就是我們說的「沒有免費(fèi)的午餐定理」,已經(jīng)有數(shù)學(xué)證明,一個(gè)模型不可能在所有任務(wù)中都得到最好的表現(xiàn)。所以我們有必要探索神經(jīng)網(wǎng)絡(luò)之外的深度模型。
那么,有沒有可能做出合適的深度模型,在這些任務(wù)上得到更好的性能呢?
我們從學(xué)術(shù)的觀點(diǎn)來總結(jié)一下,今天我們談到的深度模型基本上都是深度神經(jīng)網(wǎng)絡(luò)。如果用術(shù)語來說的話,它是多層、可參數(shù)化的、可微分的非線性模塊所組成的模型,而這個(gè)模型可以用 BP 算法來訓(xùn)練。
那么這里面有兩個(gè)問題。第一,我們現(xiàn)實(shí)世界遇到的各種各樣的問題的性質(zhì),并不是絕對都是可微的,或者用可微的模型能夠做最佳建模的。第二,過去幾十年里面,我們的機(jī)器學(xué)習(xí)界做了很多模型出來,這些都可以作為我們構(gòu)建一個(gè)系統(tǒng)的基石,而中間有相當(dāng)一部分模塊是不可微的。
現(xiàn)在我們遇到了這樣一個(gè)大挑戰(zhàn),可不可以用不可微的模塊構(gòu)建深度模型?這不光是學(xué)術(shù)上的,也是技術(shù)上的一個(gè)挑戰(zhàn),就是我們能不能用不可微的模塊來構(gòu)建深度模型?
這個(gè)問題一旦得到了回答,我們同時(shí)就可以得到很多其他問題的答案。比如說深度模型是不是就是深度神經(jīng)網(wǎng)絡(luò)?我們能不能用不可微的模型把它做深,這個(gè)時(shí)候我們不能用 BP 算法來訓(xùn)練,那么同時(shí)我們能不能讓深度模型在更多的任務(wù)上獲勝?
我們小組近期做出了一些成果,提出了一種新的模型結(jié)構(gòu) gcForest。這是一個(gè)基于決策樹森林的方法,是基于集成模型的深度模型;它也可以在除了大規(guī)模圖像數(shù)據(jù)之外的任務(wù)中獲得和深度神經(jīng)網(wǎng)絡(luò)相似的表現(xiàn)。在大規(guī)模圖像數(shù)據(jù)任務(wù)中不能取勝,其中原因是我們目前沒有適當(dāng)?shù)挠布?xùn)練足夠大的模型。
從名字可以看出,這個(gè)模型有兩個(gè)關(guān)鍵性質(zhì):級(jí)聯(lián)樹結(jié)構(gòu),以及多粒度。我今天主要介紹第一部分的一些要點(diǎn),這也是這個(gè)方法的關(guān)鍵所在。
這是它的級(jí)聯(lián)樹結(jié)構(gòu)。圖中我用紅色標(biāo)出了原始的輸入特征向量。基于輸入的特征向量,我們可以訓(xùn)練出一些森林,每個(gè)森林都是多個(gè)決策樹的集成模型。假設(shè)我們有三個(gè)分類需要預(yù)測,每個(gè)分類用一個(gè) bit 來表示,那么每個(gè)森林的輸出就有 3 個(gè) bit 長。在第一個(gè)標(biāo)簽訓(xùn)練完成后,我們把這 3bit 輸出和原始的輸入特征向量串聯(lián)起來,也就是說我們用更多的特征擴(kuò)增了原始的輸入向量;接著,我們用擴(kuò)增后的向量,訓(xùn)練模型的下一層。這個(gè)過程可以不斷地重復(fù),直到最后一個(gè)標(biāo)簽,就可以對所有預(yù)測值取平均,得到最終的預(yù)測結(jié)果。模型的最終層數(shù)可以由各種指標(biāo)決定,比如當(dāng)你發(fā)現(xiàn)增加更多的層之后模型的表現(xiàn)并沒有提升,這時(shí)候你就可以停下來了。這樣,你就不需要在開始訓(xùn)練前就設(shè)定好模型有多少層。另外,在工業(yè)應(yīng)用中,當(dāng)你的數(shù)據(jù)非常大的時(shí)候,你也可以用訓(xùn)練誤差(training error)來控制這個(gè)過程什么時(shí)候停止:當(dāng)訓(xùn)練誤差不再繼續(xù)下降的時(shí)候,就可以停止。就這么簡單。
在這里,當(dāng)你把輸出從第一層傳遞到第二層的時(shí)候,對集成方法比較熟悉的人能看出來這和層疊(stacking)有點(diǎn)像:這是一種 kaggle 比賽中常見的方法,先訓(xùn)練一個(gè)模型,然后把輸入和第一個(gè)模型的預(yù)測結(jié)果一起輸入第二個(gè)模型,形成一個(gè)兩層的模型。但是,如果我們只是這樣簡單地做層疊的話,想要訓(xùn)練一個(gè)超過 3 層的模型是非常困難的,原因是會(huì)發(fā)生非常嚴(yán)重的過擬合;即便是模型的第二層就會(huì)出現(xiàn)過擬合。
但我們做出了非常深的模型。這是不同模型表現(xiàn)隨層數(shù)變化的曲線,和 CNN、MLP 等其它模型做對比。隨著層數(shù)變多,模型的表現(xiàn)越來越好。當(dāng)我們使用 cross-validation 的時(shí)候,模型的表現(xiàn)會(huì)停在這里。但如果我們可以有更好的辦法決定停止時(shí)機(jī),也許我們可以停在更靠右的位置,模型的表現(xiàn)可以更好。但這并不重要,我們只需要知道模型可以有非常多層就夠了。
我們要如何做出有很多層的模型?關(guān)鍵是要有多樣性(diversity),決定整個(gè)模型表現(xiàn)的就是多樣性。有更好的多樣性,我們就可以有一個(gè)更深的模型。這也是來自集成學(xué)習(xí)的一個(gè)啟發(fā),集成學(xué)習(xí)中我們就希望不同的學(xué)習(xí)者各自既準(zhǔn)確又多種多樣。
在 gcForest 中,我們也設(shè)計(jì)了很多機(jī)制來提高多樣性。我舉一個(gè)例子說明,在這個(gè)模型的第一層中我們使用了兩種不同的森林,用兩種顏色表示。紅色的是隨機(jī)森林,是隨機(jī)樹的集成模型。我們都知道,對于決策樹,首先給定一系列特征,然后選擇最佳的特征用于分叉:比如你有 100 個(gè)不同的特征,在分叉時(shí)需要從其中選擇最好的那一個(gè)。在這個(gè)樹中,我們首先從 100 個(gè)特征里隨機(jī)挑選 10 個(gè),然后從這 10 個(gè)特征中選擇最好的那個(gè)特征。通過這種方式,我們?yōu)槟P鸵肓艘恍╇S機(jī)性,可以鼓勵(lì)模型增加多樣性。藍(lán)色的就更有趣了,它是完全隨機(jī)的樹的集成,就是說完全隨機(jī)地選擇特征并用它們分叉。可以看到,我們構(gòu)建這些樹和森林的過程中甚至都不需要用到任何的標(biāo)注數(shù)據(jù),只需要隨機(jī)選擇特征、隨機(jī)分配特征。
為什么我們要在模型的同一層使用這兩種不同的森林呢?如果把整個(gè)一層看作一個(gè)模型的話,這就是幾個(gè)集成模型組成的集成模型,其中的每個(gè)集成模型都有所不同,這就可以增加模型的多樣性。那么一個(gè)很自然的后續(xù)問題是,為什么不使用更多的模型、更多不同類型的樹?這當(dāng)然是可以嘗試的,我們目前只是演示了一種輕微的改進(jìn),而它已經(jīng)可以帶來一些好處。可以期待,當(dāng)你使用更多種不同的模型、有了更好的多樣性,就可以得到更好的最終結(jié)果。我們還使用了其它的一些技巧,由于時(shí)間限制我就不展開介紹了。
這是模型的總體架構(gòu)。給定數(shù)據(jù)以后,我們首先會(huì)做一些掃描,用窗口掃描一些樣本以后得到特征,并得到數(shù)據(jù)的表征。我們使用不同大小的窗口,也就是不同的粒度(grain);對于每一種粒度,都有許多集成模型。所以全局來看,這就是一群級(jí)聯(lián)模型的級(jí)聯(lián)模型;每個(gè)級(jí)聯(lián)模型里有多種不同的粒度,每個(gè)粒度里含有集成模型的集成模型。模型的結(jié)構(gòu)也許復(fù)雜,但是它可以做得很深。
這種模型也會(huì)涉及到一些超參數(shù)問題,比如,每個(gè)森林里有多少樹、樹生長到什么深度或者什么時(shí)間、掃描數(shù)據(jù)的時(shí)候要使用多少個(gè)不同的窗口,但總的來說涉及到的超參數(shù)的數(shù)量還是比神經(jīng)網(wǎng)絡(luò)少。
我們也在許多種不同的任務(wù)上運(yùn)行了實(shí)驗(yàn),除了大規(guī)模圖像數(shù)據(jù)之外,在其中的大多數(shù)任務(wù)上 gcForest 都可以獲得和深度神經(jīng)網(wǎng)絡(luò)類似的表現(xiàn)。它的重要意義在于,這是首個(gè)不依賴梯度、不依賴反向傳播的深度模型。對于可微分的機(jī)器學(xué)習(xí)問題,我們可以把神經(jīng)網(wǎng)絡(luò)的那一系列技巧都利用起來;基于決策樹的模型雖然無法轉(zhuǎn)換成神經(jīng)網(wǎng)絡(luò)模型,但是可以解決不可微、無法計(jì)算梯度的問題。
Keras 作者 Fran?ois Chollet 曾說,可微分的層是當(dāng)前的模型的基礎(chǔ)弱點(diǎn);gcForest 不使用任何可微分的層。深度學(xué)習(xí)之父 Geoffery Hinton 說,他想把反向傳播扔掉、從頭再來;gcForest 就不使用反向傳播,連梯度都不使用。所以,從學(xué)術(shù)研究的角度講,研究 gcForest 這樣的不依賴梯度的深度模型將會(huì)是機(jī)器學(xué)習(xí)的重要分支。
有一些來自工業(yè)界的人可能會(huì)說,這當(dāng)然是很好的學(xué)術(shù)新成果,但是它對實(shí)踐能起到什么幫助嗎?那么我來給大家匯報(bào)一個(gè)工業(yè)應(yīng)用的成果,這是關(guān)于非法套現(xiàn)檢測的。中國的電子支付非常發(fā)達(dá)、交易量非常大,即便其中只有一小部分是非法的,也會(huì)造成很大的影響。和我們合作的這家公司有很強(qiáng)的技術(shù)功底,他們設(shè)計(jì)了大規(guī)模分布式的 gcForest,并且用在了他們的分布式機(jī)器學(xué)習(xí)系統(tǒng)中。下面我展示一個(gè)測試結(jié)果,這可能是非法套現(xiàn)檢測的最大規(guī)模的真實(shí)數(shù)據(jù)集,訓(xùn)練數(shù)據(jù)超過 1.3 億條交易數(shù)據(jù),測試數(shù)據(jù)也超過 5200 萬條;每條交易數(shù)據(jù)由超過 5000 個(gè)特征描述。
他們自己也有邏輯回歸、深度神經(jīng)網(wǎng)絡(luò)和自研的模型,可以看到不論對于學(xué)術(shù)評價(jià)指標(biāo)還是工業(yè)界指標(biāo),大規(guī)模分布式的 gcForest 都得到了最好的表現(xiàn)。這也印證了我們的猜測:gcForest 可以在某些任務(wù)中發(fā)揮很好的作用,尤其是在帶有離散信息、符號(hào)信息的任務(wù)中。在這里,用戶信息中的很多內(nèi)容就是符號(hào)化的。
雖然 gcForest 有一些成功的應(yīng)用,但我還是要提醒大家,不要立刻就對 gcForest 抱有過高的期待。實(shí)際上我們已經(jīng)開源了適用于小規(guī)模、中等規(guī)模數(shù)據(jù)的代碼,但如果你希望下載代碼以后就直接應(yīng)用,希望得到不錯(cuò)的結(jié)果的話,那你的期待太高了。對于每種新技術(shù),都要經(jīng)歷很長的研發(fā)之路。如果你在筆記本上直接運(yùn)行的話,你的內(nèi)存很快就會(huì)用完。想要完全發(fā)揮這種技術(shù)的優(yōu)點(diǎn)的途徑有兩種,一種是剛才這樣的大規(guī)模分布式部署,另一種是借助現(xiàn)代計(jì)算硬件。
相比于 CNN 已經(jīng)經(jīng)歷了 30 年的發(fā)展,gcForest 還在自己的幼年時(shí)期。下面我簡單介紹一些值得研究的挑戰(zhàn)、開放性問題。
剛才我介紹了 gcForest 代表了集成模型,其中的多樣性非常重要,實(shí)際上 gcForest 使用到了集成模型研究領(lǐng)域內(nèi)的各種增加多樣性的方法。如果大家對集成模型感興趣的話,歡迎閱讀我的這本關(guān)于專著《Ensemble Methods: Foundations and Algorithms》,里面有一整章的內(nèi)容是介紹如何增加多樣性的。
我們發(fā)現(xiàn) gcForest 和神經(jīng)網(wǎng)絡(luò)有一些相似性。在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,我們希望避免梯度消失,而在 gcForest 中,我們希望避免多樣性消失。如果多樣性消失了,我們最多只能做出三層、四層的網(wǎng)絡(luò)。如何設(shè)計(jì)更多的機(jī)制給模型增加更多的多樣性,這將是 gcForest 研究的關(guān)鍵,就像研究如何避免梯度消失是神經(jīng)網(wǎng)絡(luò)研究的關(guān)鍵一樣。
下一點(diǎn)是特征擴(kuò)增。剛才我提到,如果要預(yù)測三個(gè)類、每個(gè)類用一個(gè) bit 表示,那么每個(gè)森林只能在原來的特征向量的基礎(chǔ)上增加 3 個(gè) bit。這是一個(gè)非常小的數(shù)字,比如當(dāng)你有 1000 維的數(shù)據(jù)特征時(shí),只增加 3 個(gè) bit 太少了,很容易淹沒在原有的特征中。所以對于高維數(shù)據(jù),我們需要設(shè)計(jì)新的機(jī)制,提取更多的特征來擴(kuò)增原有的特征向量。
這一點(diǎn)非常重要,但在動(dòng)手之前,我們也需要提出這個(gè)問題:森林是否能夠提取出足夠的信息,用來重構(gòu)出有用的擴(kuò)增特征。如果森林的提取能力不強(qiáng),那么也許 3 個(gè) bit 就夠用了。
我們也針對這個(gè)問題做了一些研究。我們發(fā)現(xiàn),一個(gè)經(jīng)過訓(xùn)練的森林甚至可以被用作一個(gè)自動(dòng)編碼器(AutoEncoder)。此前人們都認(rèn)為「可以用作自動(dòng)編碼器」是神經(jīng)網(wǎng)絡(luò)模型專屬的一種特性,如今我們也可以用森林做到這一點(diǎn)。在給定數(shù)據(jù)上訓(xùn)練完成一個(gè)森林模型以后,再拿一些新數(shù)據(jù)做預(yù)測,你可以找到新數(shù)據(jù)可以歸屬在下面的葉子節(jié)點(diǎn)。那么,對于葉子信息,你就可以幾乎完美地回溯、重建出原始數(shù)據(jù)。這就意味著,如果你有一個(gè)數(shù)據(jù)集、基于數(shù)據(jù)集構(gòu)建了森林,你甚至可以丟棄整個(gè)數(shù)據(jù)集,它的信息都已經(jīng)編碼在了森林模型里。它的重現(xiàn)表現(xiàn)很好,比如在圖像數(shù)據(jù)集上有很好的重建結(jié)果,在文本數(shù)據(jù)集上也比神經(jīng)網(wǎng)絡(luò)更好,因?yàn)樯窠?jīng)網(wǎng)絡(luò)處理符號(hào)信息之前需要先通過 word2vec 之類的方法把它轉(zhuǎn)換為數(shù)值信息,這就會(huì)帶來額外的偏倚。但樹模型就可以直接處理符號(hào)化信息,不需要任何轉(zhuǎn)換。所以,基于森林方法設(shè)計(jì)更好的特征增強(qiáng)方法其實(shí)有非常多的可能性等待我們探索。
除此之外,我們還發(fā)現(xiàn)一些以往人們認(rèn)為神經(jīng)網(wǎng)絡(luò)獨(dú)有的能力也可以在森林中實(shí)現(xiàn)。比如在這篇 NerIPS2018 論文中,我們表明了森林可以做層次化分布式表征學(xué)習(xí)。曾經(jīng)這也被認(rèn)為是神經(jīng)網(wǎng)絡(luò)獨(dú)有的性質(zhì)。這都意味著,許多我們以前認(rèn)為的特殊性質(zhì),其實(shí)并不需要僅僅局限于神經(jīng)網(wǎng)絡(luò)。未來也許我們還能找到更多可以實(shí)現(xiàn)這些能力的模型。
另一件事,對于提高模型的運(yùn)行速度來說非常重要的,就是改進(jìn)使用的硬件。這是來自我們實(shí)驗(yàn)的圖表,可以看到,如果增加粒度數(shù)目,模型的表現(xiàn)總體是提升的;增加森林的數(shù)量、增加每個(gè)森林中的樹的數(shù)量,模型的表現(xiàn)都可以提升。就是說,更大的模型總的來說可以帶來更好的表現(xiàn)。不幸的是,我們沒法把模型做得更深,因?yàn)槲覀儧]有適當(dāng)?shù)挠?jì)算設(shè)備,就類似于做深度神經(jīng)網(wǎng)絡(luò)需要有 GPU。
實(shí)際上,如果我們考慮訓(xùn)練時(shí)的計(jì)算開銷的話,深度森林的開銷比深度神經(jīng)網(wǎng)絡(luò)要小,然而深度神經(jīng)網(wǎng)絡(luò)可以用 GPU 加速,因?yàn)槠渲械挠?jì)算都可以轉(zhuǎn)換為矩陣運(yùn)算;在深度森林中,大多數(shù)的樹生長過程是基于切換的,很難用 GPU 加速。所以,如果考慮到 GPU 的加速效果的話,深度神經(jīng)網(wǎng)絡(luò)的效率要更高。
既然不能用 GPU 加速深度森林,那么我們就要問了,我們能用什么來加速深度森林呢?能不能設(shè)計(jì)適當(dāng)?shù)挠布砑铀偎兀?/span>我們猜測英特爾的多核 KNL 芯片有一定的潛力,但我們還不確定它加速深度森林的效果是否能和 GPU 加速深度神經(jīng)網(wǎng)絡(luò)的效果相同。最近英特爾也和我們(南京大學(xué))聯(lián)合設(shè)立了一個(gè)人工智能研究中心,目標(biāo)就是共同探索是否有可能設(shè)計(jì)新的人工智能芯片為深度森林提供加速。
另一個(gè)問題是算法本身。我們都知道深度神經(jīng)網(wǎng)絡(luò)的研究已經(jīng)進(jìn)行了大約三十年了,有許多學(xué)者、研究員、從業(yè)者為深度神經(jīng)網(wǎng)絡(luò)的發(fā)展做出了貢獻(xiàn)。深度森林還在自己的幼兒期,還有很多的研究工作需要做。
理論研究也不能忽視。我們都知道深度學(xué)習(xí)有一個(gè)很大的不便之處就是缺少理論基礎(chǔ),所以深度神經(jīng)網(wǎng)絡(luò)很難分析,尤其是從學(xué)習(xí)理論的角度;從這個(gè)角度來說,決策樹要好一些。但是對決策樹、對森林、集成模型做分析還是很難的,最近我們提出了一個(gè)新的方法,mdDF,它是深度森林的一種變體,我們也已經(jīng)得到了一些初步的理論結(jié)果,這篇論文近期就會(huì)發(fā)表。不過,這件事仍然不簡單,還需要許多后續(xù)的深入研究。
需要克服的問題還有很多,不過所有這些付出都是值得的。因?yàn)?,「沒有免費(fèi)的午餐」,沒有哪個(gè)學(xué)習(xí)模型永遠(yuǎn)都是最好的,盡管深度神經(jīng)網(wǎng)絡(luò)很成功,我們還是要繼續(xù)探索其他類型的模型。我們猜測深度神經(jīng)網(wǎng)絡(luò)確實(shí)是適用于數(shù)值建模問題的,但是當(dāng)你面對的是符號(hào)化、離散、表格數(shù)據(jù)的時(shí)候,深度森林可以做得更好。
由于目前我們不知道深度森林可以發(fā)展到什么程度,因?yàn)槲覀冞€構(gòu)建不出非常深的模型,但即便未來我們構(gòu)建出很深的模型了、而且發(fā)現(xiàn)它的表現(xiàn)沒有我們預(yù)想的那么好,我們的研究也仍然是有價(jià)值的。因?yàn)樯疃壬值臉?gòu)建過程為我們的這幾個(gè)猜測提供了證據(jù):當(dāng)你用一個(gè)模型就可以做到逐層信號(hào)處理、特征變換、足夠的模型復(fù)雜度的時(shí)候,你就可以享受到深度模型的好處。這也就是深度森林比之前的各種森林都有更好的表現(xiàn)的原因。它也帶給我們新的啟示:我們是否有可能設(shè)計(jì)出同時(shí)兼顧到這幾點(diǎn)的新的模型?
最后總結(jié)一下,曾經(jīng)我們認(rèn)為深度學(xué)習(xí)是一個(gè)「小黑屋」,里面只有深度神經(jīng)網(wǎng)絡(luò)。現(xiàn)在我們打開門,發(fā)現(xiàn)了里面有深度森林,也許未來還能發(fā)現(xiàn)更多別的東西。
謝謝大家!
聯(lián)系客服