0
本文作者: 楊曉凡 | 2020-02-15 12:03 |
雷鋒網(wǎng) AI 科技評(píng)論按:2020 年 2 月 9 日,AAAI 2020 的主會(huì)議廳講臺(tái)上迎來(lái)了三位重量級(jí)嘉賓,這三位也是我們熟悉、擁戴的深度學(xué)習(xí)時(shí)代的開(kāi)拓者:Geoffrey Hinton,Yann LeCun,Yoshua Bengio。
其實(shí)僅僅在幾年以前,我們都很少在計(jì)算機(jī)科學(xué)界的學(xué)術(shù)會(huì)議上看到他們的身影,Hinton 甚至表示自己都很久不參與 AAAI 會(huì)議了 —— 畢竟十年前的時(shí)候神經(jīng)網(wǎng)絡(luò)還被主流的計(jì)算機(jī)科學(xué)研究人員們集體抗拒,即便有進(jìn)展,論文也不會(huì)被各個(gè)學(xué)術(shù)會(huì)議接收。如今,隨著深度學(xué)習(xí)成為機(jī)器學(xué)習(xí)科研的絕對(duì)主流和面向大眾的人工智能技術(shù)中的核心技術(shù),2018 年的圖靈獎(jiǎng)終于授予這三人,也就是對(duì)他們的貢獻(xiàn)的(遲來(lái)的)認(rèn)可。
在這天的兩小時(shí)的特別活動(dòng)中,三位各自進(jìn)行三十分鐘演講,最后還有三十分鐘的圓桌討論,圓桌討論中也會(huì)回答在座觀眾提出的問(wèn)題。
Hinton 第一個(gè)進(jìn)行演講,按慣例,在演講嘉賓登臺(tái)之前要做簡(jiǎn)單的介紹。AAAI 2020 兩位程序主席之一的 Vincent Conitzer 說(shuō)道:「我們都知道,發(fā)生在這三位身上的是一個(gè)飽含天賦和堅(jiān)持的故事。如今我們也許很難想象,但當(dāng)時(shí)神經(jīng)網(wǎng)絡(luò)這個(gè)研究方向簡(jiǎn)直不能更冷門了,Jeff、Yann、Yoshua 三個(gè)人就是在這種時(shí)候做出了許多關(guān)鍵的成果。他們的故事鼓勵(lì)我們要追尋自己認(rèn)定的學(xué)術(shù)方向,而不是一股腦擁到最熱的話題上去」。
Vincent 還講了一則 Hinton 的趣事,這還是 Hinton 自己講給別人的。我們都知道 Hinton 一直在琢磨人腦是怎么運(yùn)轉(zhuǎn)的,有一天 Hinton 告訴自己的女兒「我知道大腦是怎么運(yùn)轉(zhuǎn)的了」,她的反應(yīng)卻是:「爸爸你怎么又說(shuō)這個(gè)」;而且這種事甚至每隔幾年就會(huì)發(fā)生一次。
觀眾發(fā)出笑聲,接著 Geoffrey Hinton 在掌聲中走上演講臺(tái)。雷鋒網(wǎng) AI 科技評(píng)論把他的演講全文整理如下。
今天我要講的是近期和 Adam、Sara、Yee-Whye 一起完成的一些研究。今天我不打算講哲學(xué)話題,也不會(huì)解釋我為什么很久都不參加 AAAI 會(huì)議之類的(觀眾笑),我就給大家講講這項(xiàng)研究。
對(duì)象識(shí)別這個(gè)任務(wù)主要有兩大類方法,一類是老式的基于部件的模型,它們會(huì)使用模塊化、可感知的表征,但通常也需要很多的人工特征工程,所以它們通常也不具備學(xué)習(xí)得到的部件的層次結(jié)構(gòu)。另一類方法就是卷積神經(jīng)網(wǎng)絡(luò),它們完全是通過(guò)端到端學(xué)習(xí)得到的。對(duì)象識(shí)別中有一個(gè)基礎(chǔ)規(guī)律,如果一個(gè)特征檢測(cè)器在圖像中的這個(gè)位置有效,那么在另一個(gè)位置也是有效的(譯注:平移不變性),CNN 就具備這個(gè)性質(zhì),所以可以組合不同的信號(hào)、很好地泛化到不同的位置,有不錯(cuò)的表現(xiàn)。
但 CNN 和人類的感知有很大的區(qū)別。我今天演講的第一部分可以算是都在針對(duì) Yann LeCun 了,我要指出 CNN 的問(wèn)題,告訴你們?yōu)槭裁?nbsp;CNN 是垃圾。(觀眾笑)
CNN 的設(shè)計(jì)可以處理平移,但是對(duì)其他類型的視角變換處理得很不好,比如對(duì)于旋轉(zhuǎn)和縮放 —— 不過(guò)比我們一般認(rèn)為的還是要好一點(diǎn)。一種處理方式是把二維特征 map 換成四維或者六維的,但是計(jì)算成本增加得太多了。所以,訓(xùn)練 CNN 的時(shí)候要使用各種不同的視角,來(lái)讓模型學(xué)習(xí)如何泛化到不同的視角上;這種做法很低效。理想的神經(jīng)網(wǎng)絡(luò)應(yīng)當(dāng)不需要花什么額外的功夫,可以自然而然地泛化到新的視角上 —— 學(xué)會(huì)識(shí)別某種物體以后,可以把它放大十倍,再旋轉(zhuǎn) 60 度,仍然能夠識(shí)別,這樣才是合適的。我們知道計(jì)算機(jī)圖形學(xué)就是這樣的,我們也希望能設(shè)計(jì)出更接近這樣的神經(jīng)網(wǎng)絡(luò)。
下面我先解釋一下 equivalence(等價(jià))和 invariance(不變)。典型的 CNN,尤其是帶有池化的網(wǎng)絡(luò),它得到的表征是不隨著視角的變化而變化的,是「invariance 不變」,和得到「equivalence 等價(jià)」的表征是兩碼事。「equivalence 等價(jià)」的意思是說(shuō),隨著視角變化,表征也跟著變化。我相信的是,在人類的感知系統(tǒng)中,當(dāng)你的視角變化的時(shí)候,神經(jīng)活動(dòng)的模式也會(huì)跟著變化;我不是說(shuō)識(shí)別得到的標(biāo)簽要變化,顯然標(biāo)簽是需要保持不變的,但你的感知活動(dòng)的表征可能會(huì)發(fā)生很大的變化。不隨著視角變化而變化的,是連接權(quán)重,而權(quán)重編碼了不同的東西之間的關(guān)系。這個(gè)我待會(huì)兒還會(huì)說(shuō)到。
CNN 也不能解析圖像。當(dāng)你讓 CNN 識(shí)別一張圖像的時(shí)候,它不會(huì)做任何的顯式解析,不會(huì)嘗試分辨什么是什么的一部分、什么不是什么的一部分。我們可以這么理解 CNN,它關(guān)注的是各種各樣的像素位置,根據(jù)越來(lái)越多的環(huán)境信息對(duì)每個(gè)像素位置上存在的東西建立越來(lái)越豐富的描述;最后,當(dāng)你的描述非常豐富了,你就知道圖像中有什么東西了。但 CNN 并不會(huì)顯式地解析圖像。
CNN 識(shí)別物體的方式也顯然和人類很不一樣,在一張圖像里增加一點(diǎn)點(diǎn)噪聲,CNN 就會(huì)把它識(shí)別成完全不同的東西;但我們?nèi)祟悗缀蹩床怀鰣D像有什么變化。這種現(xiàn)象是非常奇怪的。在我看來(lái)這是一個(gè)證據(jù),證明了 CNN 識(shí)別圖像的時(shí)候使用的信息和我們?nèi)祟愅耆煌_@不代表 CNN 就做錯(cuò)了,只不過(guò)是確實(shí)和人類的做法有很大區(qū)別。
我對(duì) CNN 還有一點(diǎn)不滿是,它會(huì)計(jì)算下方的層的點(diǎn)積、再乘上權(quán)重,用來(lái)決定是否激活。這是一個(gè)找到線索的過(guò)程,然后把線索疊加起來(lái);疊加的線索足夠多了,就激活了。這是一種尋找巧合的激活方式,它比較特殊。巧合其實(shí)是非常重要的,就像物理學(xué)很大程度上研究的就是兩個(gè)不同的物理量之間的巧合;巧合可以構(gòu)成一個(gè)等式的兩端,可以構(gòu)成理論和實(shí)驗(yàn)。在高維空間里如果發(fā)生巧合了,這是非常顯著的,比如你在收音機(jī)里聽(tīng)到了「2 月 9 日,紐約」,然后在別的信息里又看到了幾次「2 月 9 日,紐約」,全都是 2 月 9 日和紐約的話,你會(huì)覺(jué)得很震驚,這就是高維空間里的巧合,非常顯著。
那么,目前我們使用的這種神經(jīng)元是不會(huì)尋找巧合的;不過(guò)情況也在變化,我們也開(kāi)始使用 Transformer 模型,而 Transformer 是會(huì)尋找巧合的;等一下我也會(huì)解釋這個(gè)。計(jì)算兩個(gè)活動(dòng)向量的點(diǎn)積,這要比原來(lái)的做法強(qiáng)多了;這就是計(jì)算這兩個(gè)活動(dòng)向量是否匹配,如果是,那就激活。Transformer 就是這么工作的,這帶來(lái)了更好的過(guò)濾器。這也帶來(lái)了對(duì)協(xié)方差結(jié)構(gòu)和圖像有更好響應(yīng)的模型。這里真正重要的就是協(xié)方差結(jié)構(gòu),像素的協(xié)方差結(jié)構(gòu)。
最后一點(diǎn),也是 CNN 最嚴(yán)重的問(wèn)題是,CNN 不使用坐標(biāo)系。當(dāng)我們?nèi)祟愑^察東西的時(shí)候,只要看到一個(gè)形狀,我們就會(huì)給它假定一個(gè)坐標(biāo)系。這是人類感知的一個(gè)基本特點(diǎn)。我會(huì)舉例子嘗試說(shuō)服你接受這件事;不過(guò)我的時(shí)間不是很多,我會(huì)試著很快地舉例子說(shuō)服你。
因?yàn)闆](méi)有時(shí)間看那些很漂亮的 demo,我們就看看這兩個(gè)形狀。左邊這個(gè)像是某個(gè)國(guó)家的地圖,有點(diǎn)像澳大利亞;但是如果我告訴你這個(gè)形狀不是正的,是斜的,它看起來(lái)就像非洲。一旦你看出來(lái)它像非洲了,它就和一開(kāi)始感覺(jué)的那個(gè)仿佛鏡像過(guò)的澳大利亞完全不一樣。但我們不是第一眼就能看出來(lái)它像非洲的,如果告訴你它是某個(gè)國(guó)家,那你就只會(huì)把它看作某個(gè)國(guó)家。
再看右邊這個(gè)形狀,它要么是個(gè)很正的菱形,要么是個(gè)正方形轉(zhuǎn)了 45 度;基于你覺(jué)得它像什么,你對(duì)它的感知也會(huì)完全不同。如果你把它看作菱形,那么只要左側(cè)和右側(cè)的兩個(gè)角的高低有一點(diǎn)點(diǎn)區(qū)別你都能注意到,但你就注意不到這四個(gè)角是不是直角,你的觀察根本不會(huì)在意這里。也就是說(shuō),如果如果我把它上下拉長(zhǎng)一點(diǎn),讓里面的四個(gè)角不是直角了,它在你看來(lái)仍然是一個(gè)很正的菱形。
但反過(guò)來(lái),如果你把它看作一個(gè)正方形轉(zhuǎn)了 45 度,你就會(huì)注意到這四個(gè)角都是直角;即便只是從 90 度變成 88 度,你都能看得出來(lái)不再是直角了;但同時(shí),你也就不再會(huì)在意左側(cè)右側(cè)的兩個(gè)角的高低是否一樣。
所以,根據(jù)你選取的坐標(biāo)系不同,你內(nèi)心的感知會(huì)完全不同。CNN 的設(shè)計(jì)就沒(méi)法解釋這個(gè)現(xiàn)象,對(duì)于每個(gè)輸入只有一種感知,而且這個(gè)感知也不取決于坐標(biāo)系的選取。我覺(jué)得這和對(duì)抗性樣本有一些聯(lián)系,也就是 CNN 和人類的感知方式有很大不同。
我覺(jué)得做計(jì)算機(jī)視覺(jué)的一個(gè)很好的方法是把它看作計(jì)算機(jī)圖形學(xué)的反向,這種想法可以回溯到很久很久以前。計(jì)算機(jī)圖形程序中會(huì)使用層次化的模型,它們對(duì)空間結(jié)構(gòu)建模,用矩陣來(lái)表示內(nèi)嵌在整體內(nèi)的坐標(biāo)系和每個(gè)部分自己的坐標(biāo)系之間的轉(zhuǎn)換關(guān)系。
對(duì)于整個(gè)物體,它有一個(gè)自己的、內(nèi)嵌的坐標(biāo)系,我們也可以指定一個(gè);然后整體的每個(gè)部件也有各自的坐標(biāo)系。在坐標(biāo)系全都選定了之后,就可以確定部件和整體之間的關(guān)系,這就是一個(gè)簡(jiǎn)單的矩陣運(yùn)算;對(duì)于剛體,這就是一個(gè)線性關(guān)系。
所以這是一個(gè)很簡(jiǎn)單的線性結(jié)構(gòu),計(jì)算機(jī)圖形學(xué)中用的就是這樣的思路。對(duì)于做計(jì)算機(jī)圖形學(xué)的人,你要是請(qǐng)他把東西換個(gè)角度展示給你看,他們就不會(huì)說(shuō)「我其實(shí)是很樂(lè)意的,但我們沒(méi)從別的角度訓(xùn)練過(guò),所以最多只能轉(zhuǎn) 15 度」這樣的話,他們可以直接轉(zhuǎn)到你要的隨便什么角度,因?yàn)樗麄冇姓嬲娜S模型,他們會(huì)對(duì)空間結(jié)構(gòu)建模、對(duì)部件和整體之間的關(guān)系建模。這些關(guān)系也完全不受視角的影響。
我覺(jué)得,如果處理三維物體的圖像的時(shí)候不使用這種美妙的結(jié)構(gòu)才是真的有問(wèn)題。一個(gè)原因是,如果要做長(zhǎng)距離的外推,線性模型是可以很方便地做外推的;次數(shù)更高的模型很難外推。而且我們也一直在尋找線性的隱含流形,在計(jì)算機(jī)視覺(jué)里我們知道它們是什么;視角變換對(duì)圖像有很大的影響,這其中其實(shí)就有一個(gè)隱含的線性結(jié)構(gòu),而我們并沒(méi)能利用這個(gè)結(jié)構(gòu)。
現(xiàn)在我要具體介紹一個(gè)系統(tǒng),它的名字叫做 Stacked Capsule Auto-Encoders。有的人可能已經(jīng)讀過(guò)一些膠囊網(wǎng)絡(luò)相關(guān)的東西,這里我得說(shuō)明,這是另外一種版本的膠囊。每一年我都會(huì)設(shè)計(jì)出一種完全不同的膠囊網(wǎng)絡(luò),NeurIPS 2017 的那篇是關(guān)于路由的,ICLR 2018 的那篇使用了 EM 算法,然后在 NeurIPS 2019 還有一篇新的,就是我現(xiàn)在要介紹的這個(gè)。
所以,首先要把之前的那些版本的膠囊網(wǎng)絡(luò)的一切都忘了,它們都是錯(cuò)的,只有現(xiàn)在這個(gè)是對(duì)的(觀眾笑)。之前的那些版本用了判別式學(xué)習(xí),我當(dāng)時(shí)就知道這個(gè)做法不好,我一直就覺(jué)得無(wú)監(jiān)督學(xué)習(xí)才是對(duì)的,所以之前的那些版本都走錯(cuò)了方向;而且它們都使用了「部件-整體」關(guān)系,效果也不好。用「整體-部件」關(guān)系要好很多。用「部件-整體」關(guān)系的時(shí)候,如果部件的自由度比整體的自由度要少,好比部件是點(diǎn),然后你要用點(diǎn)組成星座,那你很難從一個(gè)點(diǎn)的位置預(yù)測(cè)整個(gè)星座的位置,你需要用到很多點(diǎn)的位置;所以不能從單個(gè)部件出發(fā)對(duì)整體做預(yù)測(cè)。
在這個(gè)新的版本中,我們用的是無(wú)監(jiān)督學(xué)習(xí),以及用「整體-部件」關(guān)系。
「膠囊」的出發(fā)點(diǎn)是,在神經(jīng)網(wǎng)絡(luò)中建立更多的結(jié)構(gòu),然后希望這些新增的結(jié)構(gòu)可以幫助模型更好的泛化。它也受到了 CNN 的啟發(fā),在 CNN 里 Yann 只設(shè)計(jì)了很少、很簡(jiǎn)單的一些結(jié)構(gòu),就是讓特征檢測(cè)器可以在不同的平移變換之間復(fù)制,這個(gè)改進(jìn)產(chǎn)生了巨大的好處。那么我的下一個(gè)問(wèn)題就是,我們能不能沿著這個(gè)方向繼續(xù)往前走,能不能設(shè)計(jì)一些更加模塊化的結(jié)構(gòu),這樣就可以做解析樹(shù)之類的。
那么,膠囊會(huì)表征某個(gè)東西是否存在,它會(huì)學(xué)習(xí)它應(yīng)該表征什么實(shí)體,也會(huì)有一些這個(gè)實(shí)體的參數(shù)。在 2019 年的膠囊,也就是這個(gè)最終的、正確的膠囊里,它會(huì)有一個(gè)邏輯單元,就是最左側(cè)的淺藍(lán)色的東西,它用來(lái)表示當(dāng)前的圖像中是否存在這個(gè)實(shí)體,不管實(shí)體是在這個(gè)膠囊覆蓋的圖像范圍的任何地方。也就是說(shuō)膠囊自己可以是卷積的。
膠囊里會(huì)有一個(gè)矩陣,右邊紅色的,用來(lái)表示這個(gè)膠囊表示的實(shí)體和觀察者之間的空間關(guān)系,或者是這個(gè)實(shí)體內(nèi)嵌的固有坐標(biāo)系和觀察者之間的空間關(guān)系;這樣就知道了它朝什么方向、多大、在哪里,等等。還有一個(gè)包含了其它屬性的向量,里面會(huì)包含變形之類的東西;如果要處理視頻,也會(huì)包含速度、顏色等等信息。
我再重復(fù)一下重點(diǎn):膠囊是用來(lái)捕捉固有幾何特性的。所以,一個(gè)表示了某個(gè)物體的膠囊可以根據(jù)自己的姿態(tài)預(yù)測(cè)出它的部件的姿態(tài),而且,物體自己和物體的部件之間的關(guān)系不會(huì)隨著視角的變化而變化。這才是我們要以權(quán)重的方式存儲(chǔ)在神經(jīng)網(wǎng)絡(luò)里的,這才是值得存儲(chǔ)的知識(shí),然后也就可以用這些不依賴視角的知識(shí)做對(duì)象識(shí)別。
集中注意力,理解了這頁(yè) PPT,你就理解了這個(gè)新的膠囊。這里的思路是,我們有某種自動(dòng)編碼器,一開(kāi)始先用貪婪的方法訓(xùn)練它 —— 從像素得到部件,從部件得到更大的部件,從更大的部件得到再大的部件。這個(gè)訓(xùn)練過(guò)程是貪婪的,就是一旦從像素得到部件了,就不會(huì)逆過(guò)來(lái)重新選取像素和部件,而是就直接使用已經(jīng)得到的結(jié)果,然后往更高的一層進(jìn)發(fā),嘗試把這些部件拼成更熟悉的整體。
這張 PPT 里展示的就是一個(gè)兩層的自動(dòng)編碼器中的解碼器,但其中的單元已經(jīng)不是傳統(tǒng)的那種神經(jīng)元了,是更復(fù)雜的膠囊。下面這一層中是一些我們已經(jīng)從圖像中收集信息得到的膠囊 —— 這算是一種歸納法的解釋 —— 我們已經(jīng)得到了一些低層次的膠囊,已經(jīng)知道了它們是否存在、它們的向量屬性是什么、姿態(tài)是什么、和觀察者之間的關(guān)系,現(xiàn)在要在它們的基礎(chǔ)上學(xué)習(xí)更高一層的膠囊。我們希望每個(gè)更高層次的膠囊可以解釋好幾個(gè)低層的膠囊,也就是一個(gè)整體膠囊對(duì)應(yīng)多個(gè)部件膠囊,就有了一個(gè)學(xué)習(xí)過(guò)程。
在這樣的生成式模型中,我們不直接生成低層次的數(shù)據(jù),我們根據(jù)高層次的膠囊生成「低級(jí)別的數(shù)據(jù)可能是什么」的預(yù)測(cè)。首先我們要做的是找到頰囊中的參數(shù)向量,然后這里的綠色虛線表示,通過(guò)這個(gè)實(shí)體中提取到的這些參數(shù),分別為每個(gè)部件預(yù)測(cè)整體和部件之間的空間關(guān)系。
如果是一個(gè)剛體,那就不需要這些綠色虛線,對(duì)應(yīng)的矩陣就是常數(shù);如果是可變的物體,就需要這些綠色虛線。對(duì)于每一個(gè)高層次的膠囊 —— 等會(huì)兒我會(huì)解釋它們是怎么實(shí)例化的 —— 每一個(gè)已經(jīng)實(shí)例化的高層次膠囊都會(huì)為每個(gè)已經(jīng)從圖像中提取到的低層次的膠囊預(yù)測(cè)姿態(tài)。這里被橢圓圈出來(lái)的三個(gè)紅色方塊就是三個(gè)高層次的膠囊分別對(duì)某個(gè)低層次的膠囊的姿態(tài)作出的預(yù)測(cè)。
這里我們感興趣的是,高層次的膠囊中應(yīng)該應(yīng)該有一個(gè)是有解釋能力的。所以這里會(huì)使用一個(gè)混合模型。使用混合模型有一個(gè)隱含的假設(shè)是,其中有一個(gè)是正確的解釋,但一般來(lái)說(shuō)你不知道哪一個(gè)是正確的。
我們選擇的目標(biāo)函數(shù)是,讓高層次膠囊通過(guò)混合模型產(chǎn)生的、已經(jīng)在低層次膠囊上觀察到的姿態(tài)的對(duì)數(shù)似然最大化。在這個(gè)混合模型下,對(duì)數(shù)似然是可以計(jì)算的。這些結(jié)構(gòu)的訓(xùn)練方式是反向傳播,學(xué)習(xí)如何讓高層次的膠囊實(shí)例化。
當(dāng)通過(guò)混合模型做反向傳播的時(shí)候,其中并不能很好地解釋數(shù)據(jù)的元素的后驗(yàn)概率幾乎為 0。那么當(dāng)計(jì)算反向傳播的時(shí)候,反向傳播并不會(huì)改動(dòng)它們,因?yàn)樗鼈儧](méi)有什么作用;那些提供了最好的解釋的元素得到最大的導(dǎo)數(shù),就可以學(xué)習(xí)、優(yōu)化。
這就是這個(gè)生成式模型的設(shè)計(jì)。需要說(shuō)明的是,生成式模型里有兩種思想。首先,每個(gè)低層次的膠囊只會(huì)被一個(gè)高層次膠囊解釋 —— 這就形成了一個(gè)解析樹(shù),在解析樹(shù)里每個(gè)元素只有一個(gè)父項(xiàng)。其次,低層次的膠囊的姿態(tài)可以從高層次膠囊推導(dǎo)得到,就是通過(guò)高層次膠囊相對(duì)于觀察者的位姿和整體相對(duì)于部件的位姿做矩陣相乘,就得到了低層次膠囊相對(duì)于觀察者的位姿。視覺(jué)里非常重要的兩件事,處理視角變化,以及建立解析樹(shù),就這樣設(shè)計(jì)到了模型里面。
現(xiàn)在我還沒(méi)展示如何做編碼器,也就是感知的部分。這是一個(gè)很難的推理問(wèn)題,在之前版本的膠囊里,我們對(duì)編碼器做了一些人工工程,要對(duì)高層次的膠囊投票、看投票的結(jié)果是否一致,這種方式特別難搞,很難做對(duì)。Sarah 花了很多時(shí)間精力研究這里,她雖然讓它運(yùn)行起來(lái)了,但還是非常困難。
很幸運(yùn)的是,當(dāng)我們做這些嘗試的時(shí)候,Transformer 出現(xiàn)了。Transformer 本來(lái)是用來(lái)處理語(yǔ)言的,但它的設(shè)計(jì)非常巧妙。那么我們面對(duì)的狀況是,我們有一些部件,想從部件推理出整體,這是一個(gè)很難處理的推理問(wèn)題。但有了 Transformer,我們就可以試試直接把所有部件都輸入到 Transformer 里,讓它們自己去碰吧。
我們就使用了一個(gè)多層 Transformer 模型,最終把一個(gè)簡(jiǎn)單的生成模型和一個(gè)復(fù)雜的編碼模型配合使用。這個(gè)多層 Transformer 模型會(huì)決定如何處理一致性、如何組織不同的部件,我們只需要想辦法訓(xùn)練它就行。
要訓(xùn)練 Transformer,一般來(lái)說(shuō)我們需要有正確答案。但這兒實(shí)際上可以不需要正確答案,只需要訓(xùn)練它的導(dǎo)數(shù),就是看它給出的答案,然后讓它給出一個(gè)比現(xiàn)在更好的答案。這是從生成模型得到的。
做法是,把所有已經(jīng)提取到的膠囊都找出來(lái),把它們輸入到多層 Transformer 套模型(Set Transformer)里,這個(gè)套模型會(huì)給每個(gè)低層次膠囊取向量描述,然后隨著在模型里逐層上升,把其他膠囊的信息作為背景環(huán)境不斷更新這個(gè)向量描述。當(dāng)這些部件的描述更新得足夠好了以后,就在最后一層里把它們轉(zhuǎn)換成預(yù)測(cè),預(yù)測(cè)整體物體應(yīng)該在哪里。
這個(gè)多層 Transformer 套模型很好訓(xùn)練,因?yàn)槲覀冇幸粋€(gè)對(duì)應(yīng)的生成式模型,生成式模型可以把導(dǎo)數(shù)提供給 Transformer。訓(xùn)練 Transformer 模型的目標(biāo)也和訓(xùn)練生成式模型一樣,都是在給定高層次膠囊預(yù)測(cè)的位姿的條件下讓實(shí)際觀察到的部件位姿的對(duì)數(shù)似然最大化。我們也在里面設(shè)計(jì)了一個(gè)稀疏的樹(shù)結(jié)構(gòu),鼓勵(lì)它每次只激活少數(shù)幾個(gè)高層次膠囊。
對(duì)于這個(gè)多層 Transformer 套模型,感興趣的人可以去讀這篇論文,我就不介紹更多細(xì)節(jié)了。
我相信你們中有很多人都知道 Transformer 是怎么運(yùn)行的,而且我的時(shí)間也不多了,我會(huì)很快很快地講一下 Transformer 是怎么運(yùn)行的。
這是處理句子的情況對(duì)吧,它處理句子的方式是先得到一批詞向量,然后在上面運(yùn)行卷積網(wǎng)絡(luò),讓每個(gè)詞向量都可以依據(jù)它附近的向量進(jìn)行更新。這整個(gè)設(shè)計(jì)都可以用無(wú)監(jiān)督學(xué)習(xí)的方式訓(xùn)練,訓(xùn)練目標(biāo)是重建其中被拿走的詞向量。
這相當(dāng)于是用卷積的的方式來(lái)設(shè)計(jì)自動(dòng)編碼器,并且 Transformer 中還有一些更精細(xì)的人工設(shè)計(jì):除了讓詞向量直接影響同一層和更高層的詞向量之外,每個(gè)詞向量還會(huì)生成一個(gè) key、一個(gè) query 和一個(gè) value。根據(jù)我這頁(yè) PPT 展示的 Transformer 的狀態(tài),詞向量會(huì)查看自己的 query,這是一個(gè)學(xué)習(xí)得到的向量,然后把它和臨近的詞向量的 key 做對(duì)比。如果匹配了,它就會(huì)把臨近的詞向量的一部分 value 作為自己的新的 value。這個(gè)過(guò)程就是不斷地尋找相似的東西,然后把它們組合起來(lái)得到新的表征。Transformer 的運(yùn)行方式基本就是這樣。
下面我給大家看看用一個(gè) Transformer 組合模型和一個(gè)帶有坐標(biāo)系、解析樹(shù)的簡(jiǎn)單生成式模型配合起來(lái),在簡(jiǎn)單的數(shù)據(jù)集上的運(yùn)行結(jié)果。
大家不要笑,這些是 MNIST 數(shù)字樣本,是 1980 年代的東西了。我取了一些有難度的樣本,模棱兩可的那種。我要用設(shè)計(jì)的模型處理這些,驗(yàn)證想法對(duì)不對(duì)。對(duì)這些 MNIST 數(shù)據(jù)的建模方式是,先有一層部件層,可能是一部分筆畫;然后有一個(gè)整體層,高層次的膠囊,可能是整個(gè)數(shù)字,不過(guò)不是完全和數(shù)字對(duì)應(yīng)的。
每個(gè)部件是學(xué)習(xí)得到的小的 11x11 大小的模版,這里我不會(huì)詳細(xì)解釋部件是怎么學(xué)習(xí)到的,因?yàn)楹驼麄€(gè)數(shù)字的學(xué)習(xí)方式基本一樣,所以我主要講講整個(gè)數(shù)字是怎么學(xué)的。這里的核心是,用來(lái)自各種不同部件的預(yù)測(cè)形成的套模型對(duì)像素密度建模,其中的每個(gè)部件可以是帶有仿形變換的,也就是說(shuō)它的姿態(tài)矩陣允許它有不同的實(shí)例化結(jié)果。
這兒有幾個(gè)數(shù)字,比如我們看那個(gè)「4」。其中紅色的部分是從圖像中提取部件,然后重新構(gòu)建出像素得到的;綠色的部分是從圖像中提取部件、激活更高級(jí)別的膠囊,然后再重構(gòu)低級(jí)別的膠囊、重構(gòu)像素得到的,也就是從高級(jí)別一步步生成的。紅色和綠色重疊的部分是黃色。可以看到,大部分都是黃色的,紅色、綠色都只有一小部分邊緣,也就是說(shuō)兩種方法重構(gòu)出的結(jié)果區(qū)別很小。
右邊顯示的是 24 個(gè)高級(jí)別膠囊的激活情況。這些高級(jí)別膠囊學(xué)習(xí)的是整個(gè)數(shù)字之類的內(nèi)容,也可以是更大的,并不和數(shù)字完全對(duì)應(yīng)。
現(xiàn)在我們看看部件是如何組成整個(gè)數(shù)字的。數(shù)字 4 的第四、五個(gè)格子,也就是 4、5 部分,是同一個(gè)部分,但是進(jìn)行了不同的仿射變換。那么,隨著仿射變換的不同,它實(shí)例化的結(jié)果也會(huì)非常不同;這樣,同一個(gè)部件就可以起到不同的用途。
接下來(lái)我要展示的是,在學(xué)會(huì)了如何提取部件之后,要學(xué)習(xí)整體,來(lái)解釋這些部件的組合。然后把那 24 個(gè)高層次膠囊的激活模式組成的向量拿出來(lái),用 t-SNE 作圖,也就是把這些高維向量嵌入到二維空間,兩個(gè)向量越相似,他們的距離就越小。在看圖之前我要說(shuō)明,這些膠囊從來(lái)沒(méi)有學(xué)習(xí)過(guò)標(biāo)簽,完全是無(wú)監(jiān)督學(xué)習(xí)得到的,然后得到的結(jié)果是:
它分出了 10 類,這 10 個(gè)類之間有明顯的區(qū)分,而且也有一些誤分類的?,F(xiàn)在我要是給它們加上標(biāo)簽,就從每一類里面取一個(gè)樣本,把它的標(biāo)簽作為它所在的類的標(biāo)簽,就可以直接得到 98.7% 的 MNIST 準(zhǔn)確率 —— 你可以說(shuō)這是沒(méi)有使用任何標(biāo)簽的學(xué)習(xí)結(jié)果,也可以說(shuō)使用了 10 個(gè)標(biāo)簽。
總的來(lái)說(shuō),用這個(gè)允許部件帶有坐標(biāo)系的生成式模型學(xué)習(xí) MNIST,然后 MNIST 中的自然分類也就自然而然地出現(xiàn)了。實(shí)際上 MNIST 中的數(shù)字是有變形的,整個(gè)數(shù)字和它的部件之間的關(guān)系不是固定的,是取決于具體的每個(gè)數(shù)字的。這種做法是有效的。
不過(guò)這種做法也有兩個(gè)問(wèn)題。第一個(gè)問(wèn)題是,我們?nèi)祟惖囊曈X(jué)并不是直接拿到一整張圖像然后處理它,而是有一個(gè)很小的中央凹,然后要選擇用它來(lái)看什么。 所以我們看東西其實(shí)是一個(gè)采樣的過(guò)程,我們看到的東西并不都是高分辨率的。
另一方面,人類的視覺(jué)也依賴于觀察點(diǎn)。我一直堅(jiān)信我們看到的形狀的同時(shí)也看到了一些背景環(huán)境。所以會(huì)有各種的視覺(jué)錯(cuò)覺(jué),可能是一個(gè)花瓶,也可能是兩張臉。所以如果從心理學(xué)角度看,視覺(jué)是在某個(gè)背景下觀察某個(gè)圖形的話,這個(gè)膠囊模型也就是對(duì)圖形的感知的建模,而不是對(duì)背景的感知的建模;想要對(duì)背景建模的話,就需要材質(zhì)建模之類的東西,而且也不需要把整個(gè)物體解析成不同的部件。一個(gè)變分自編碼器就可以很好地完成任務(wù)。
所以,如果要解釋有紋理的背景下的 MNIST 的數(shù)字的話,Sarah 訓(xùn)練了層疊膠囊自編碼器+變分自編碼器的組合,效果要比只使用變分自編碼器對(duì)背景建模好多了。雖然它的表現(xiàn)還是比不上完全沒(méi)有背景的情況,但我覺(jué)得如果想要解決有背景的問(wèn)題,這就是正確的理論。就像人一樣,在有背景的時(shí)候,我們就把背景只看作背景,不用高層次的、基于部件的模型對(duì)背景建模,因?yàn)檫@些模型是留給形狀建模用的。
另一個(gè)問(wèn)題是,剛才討論這些都是二維的情況,而我們真正需要處理的是三維的圖像。Sarah 之前設(shè)計(jì)的一個(gè)版本的膠囊網(wǎng)絡(luò)在 Yann 設(shè)計(jì)的三維圖像數(shù)據(jù)上做了嘗試,試試看是否能夠不借助等高線,直接處理真正的三維圖形。
想要按這個(gè)思路做出來(lái)的話,我們需要讓前端的、也就是最基礎(chǔ)的膠囊表示物體的可感知的部件。把視覺(jué)看作計(jì)算機(jī)圖形的反向工程的話,圖形里先建立整個(gè)物體,然后部件、部件的部件、部件的部件,一直到三角形,最終進(jìn)行渲染。所以用反向工程的思路處理,就只讓最底層的膠囊處理光線的屬性、反射率之類的東西,而高層次的膠囊負(fù)責(zé)的就是幾何形狀。我在這里談到的也主要關(guān)注的是處理幾何形狀的層次。
現(xiàn)在我們?cè)谘芯康木褪欠聪蜾秩?,從像素提取到可感知的部件。我們?cè)O(shè)計(jì)了很多不同的方法,可以用表面 mesh,也可以參考已知的幾何形狀,或者用半空間截面,等等,有很多方法。
最后的結(jié)論:
對(duì)于坐標(biāo)系變換和解析樹(shù)的先驗(yàn)知識(shí)可以很容易地集成到一個(gè)簡(jiǎn)單的生成式模型中。把知識(shí)放在一個(gè)生成式模型中有個(gè)有趣的好處,就是你的認(rèn)知模型、你的編碼器的復(fù)雜度不會(huì)干擾到生成式模型的復(fù)雜度。你可以把編碼器做得特別特別復(fù)雜,但描述長(zhǎng)度最短可以有多短,是由你的生成式模型的復(fù)雜度決定的。
所以,設(shè)計(jì)一個(gè)帶有一定結(jié)構(gòu)的生成式模型,然后把反向(識(shí)別)的流程丟給那個(gè)很大的套 Transformer。如果你的套 Transformer 模型足夠大、有足夠多的層、在足夠多的數(shù)據(jù)上訓(xùn)練,得到好的表現(xiàn)可以說(shuō)是十拿九穩(wěn)了。
(演講結(jié)束)
Hinton 苦思冥想、反復(fù)念叨這么多年的膠囊網(wǎng)絡(luò)終于有了一個(gè)不錯(cuò)的答案,演講結(jié)束時(shí)老爺子臉上也露出了欣慰的笑容。
接下來(lái)雷鋒網(wǎng) AI 科技評(píng)論還會(huì)整理三駕馬車的圓桌討論內(nèi)容,敬請(qǐng)期待。更多 AAAI 2020 的會(huì)議內(nèi)容報(bào)告歡迎繼續(xù)關(guān)注我們。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。