深度學(xué)習(xí)的局限性和未來
按:本文來自 Keras 作者 François Chollet,同時(shí)也是根據(jù)他撰寫的《Deeping Learning with Python》一書第 9 章第 2 節(jié)改編的
作者注:這篇文章的受眾是已經(jīng)有深度學(xué)習(xí)經(jīng)驗(yàn)的人(例如讀過本書第 1 章至第 8 章的人)。 我們假設(shè)讀者已經(jīng)具有一定知識(shí)儲(chǔ)備。
深度學(xué)習(xí)的幾何學(xué)視角
深度學(xué)習(xí)最令人驚訝之處就在于它十分簡單。十年前,沒有人指望由梯度下降方法訓(xùn)練的簡單參數(shù)模型就可以在機(jī)器感知問題上獲得驚人的結(jié)果?,F(xiàn)在,事實(shí)證明,你只需要一個(gè)有足夠多參數(shù)的模型,并且在足夠大的數(shù)據(jù)集上使用梯度下降進(jìn)行訓(xùn)練。正如 Feynman 曾經(jīng)描述宇宙那樣,「它并不復(fù)雜,只是很多而已」。
在深度學(xué)習(xí)中,一切都是一個(gè)向量,即一切都是幾何空間中的一個(gè)點(diǎn)。模型輸入(可以是文本,圖像等)和目標(biāo)首先被「矢量化」,即變成一些初始輸入矢量空間和目標(biāo)矢量空間。深度學(xué)習(xí)模型中的每一層對(duì)通過它的數(shù)據(jù)進(jìn)行簡單的幾何變換。同時(shí),模型的層次鏈形成一個(gè)非常復(fù)雜的幾何變換,分解成一系列簡單的幾何變換。這種復(fù)雜的轉(zhuǎn)換嘗試將輸入空間一次一個(gè)點(diǎn)得映射到目標(biāo)空間。這種轉(zhuǎn)換是通過層的權(quán)重進(jìn)行參數(shù)化的,權(quán)重根據(jù)模型當(dāng)前執(zhí)行的情況進(jìn)行迭代更新。這種幾何變換的一個(gè)關(guān)鍵特征是它必須是可微分的,這是為了使我們能夠通過梯度下降學(xué)習(xí)它的參數(shù)。直觀地說,這意味著從輸入到輸出的幾何變形必須平滑且連續(xù)——這是一個(gè)重要的約束條件。
這種復(fù)雜的幾何變換應(yīng)用到輸入數(shù)據(jù)的整個(gè)過程可以用三維的形式進(jìn)行可視化,將其想象成一個(gè)人試圖將揉成團(tuán)的紙球恢復(fù)平整:皺巴巴的紙球是模型開始時(shí)的輸入數(shù)據(jù)的復(fù)本。人對(duì)紙球的每個(gè)操作相當(dāng)于一層簡單幾何轉(zhuǎn)換的操作。完整的撫平(紙球)動(dòng)作順序是整個(gè)模型的復(fù)雜轉(zhuǎn)換。深度學(xué)習(xí)模型是用于解開高維數(shù)據(jù)復(fù)雜流形的數(shù)學(xué)機(jī)器。
深度學(xué)習(xí)的神奇之處在于:將語義轉(zhuǎn)化為矢量,轉(zhuǎn)化為幾何空間,然后逐漸學(xué)習(xí)將一個(gè)空間映射到另一個(gè)空間的復(fù)雜幾何轉(zhuǎn)換。你需要的只是足夠高維數(shù)的空間,以便捕捉原始數(shù)據(jù)中全部的關(guān)系范圍。
深度學(xué)習(xí)的局限性
用這個(gè)簡單策略實(shí)現(xiàn)的應(yīng)用程序空間幾乎是無限的。然而,現(xiàn)有的深度學(xué)習(xí)技術(shù)對(duì)于更多的應(yīng)用程序完全無能為力——即使提供了大量的人工注釋數(shù)據(jù)。例如,你可以嘗試收集成千上萬甚至百萬的關(guān)于軟件產(chǎn)品特征的英文描述的數(shù)據(jù)集,由產(chǎn)品經(jīng)理編寫,以及由工程師團(tuán)隊(duì)開發(fā)的相應(yīng)的源代碼來滿足這些要求。即使有了這些數(shù)據(jù),你也無法訓(xùn)練深入的學(xué)習(xí)模式去簡單地閱讀產(chǎn)品說明并生成適當(dāng)?shù)拇a庫。這只是其中的一個(gè)例子。一般來說,無論你投入多少數(shù)據(jù),深度學(xué)習(xí)模型都無法實(shí)現(xiàn)任何需要推理的東西,如編程或科學(xué)方法的應(yīng)用——長期規(guī)劃和類似算法的數(shù)據(jù)操作。即使使用深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)排序算法也是非常困難的。
這是因?yàn)樯疃葘W(xué)習(xí)模型僅僅是將一個(gè)向量空間映射到另一個(gè)向量空間的簡單連續(xù)幾何變換鏈。它可以做的全部就是將一個(gè)數(shù)據(jù)流形 X 映射到另一個(gè)流形 Y,假設(shè)存在從 X到 Y 的可學(xué)習(xí)連續(xù)變換的話,并且可以使用密集的 X:Y 采樣作為訓(xùn)練數(shù)據(jù)。因此,盡管深度學(xué)習(xí)模型可以被解釋為一種程序,反過來說的話,大多數(shù)程序不能被表達(dá)為深度學(xué)習(xí)模型——對(duì)于大多數(shù)任務(wù)來說,要么沒有相應(yīng)的實(shí)際大小的深度神經(jīng)網(wǎng)絡(luò)來解決任務(wù),或者存在這樣的神經(jīng)網(wǎng)絡(luò),但它可能無法學(xué)習(xí),即相應(yīng)的幾何變換可能太復(fù)雜,或者可能沒有合適的數(shù)據(jù)可用來學(xué)習(xí)它。
通過堆疊更多層并使用更多訓(xùn)練數(shù)據(jù)來擴(kuò)展當(dāng)前的深度學(xué)習(xí)技術(shù),只能在表面上緩解一些問題。它不能解決深度學(xué)習(xí)模型在他們可以表示的內(nèi)容種類非常有限的基本問題,并且大多數(shù)被期望可學(xué)習(xí)的程序不能被表示為數(shù)據(jù)流形的連續(xù)幾何變形。
擬人化機(jī)器學(xué)習(xí)模型的風(fēng)險(xiǎn)
當(dāng)代人工智能的一個(gè)非常現(xiàn)實(shí)的風(fēng)險(xiǎn)是人們誤解了深度學(xué)習(xí)模型的作用,并高估了他們的能力。人類思維的一個(gè)基本特征是我們的「心智理論」,我們傾向于將意向,信仰和知識(shí)投射到我們身邊的事物上。在我們的意識(shí)中,在巖石上畫一個(gè)笑臉石頭就突然變「快樂」了。應(yīng)用于深度學(xué)習(xí),這意味著當(dāng)我們能夠「基本成功」的訓(xùn)練模型以生成用于描述圖片的標(biāo)題時(shí),我們就會(huì)相信該模型能夠「理解」圖片的內(nèi)容以及「理解」它所生成的字幕。然后,當(dāng)訓(xùn)練數(shù)據(jù)中出現(xiàn)的圖像類別輕微偏離時(shí),我們會(huì)非常驚訝地發(fā)現(xiàn)模型開始生成完全荒謬的標(biāo)題。
尤其是「對(duì)抗性樣本」值得強(qiáng)調(diào),這些例子是一個(gè)深度學(xué)習(xí)網(wǎng)絡(luò)的輸入樣本,旨在誘騙模型對(duì)它們進(jìn)行錯(cuò)誤分類。你已經(jīng)意識(shí)到,可以在輸入空間中進(jìn)行梯度上升以生成最大化某個(gè)閉環(huán)過濾器激活的輸入,這是我們?cè)诘? 5 章中介紹的過濾器可視化技術(shù)的基礎(chǔ),以及第 8 章的 Deep Dream 算法。同樣,通過梯度上升,人們可以稍微修改圖像以最大化給定類的類別預(yù)測。通過拍攝一張熊貓的圖片并添加一個(gè)「長臂猿」梯度,我們可以得到一個(gè)神經(jīng)網(wǎng)絡(luò),將這只熊貓歸類為長臂猿。這證明了這些模型的脆弱性,以及它們的輸入——輸出映射與我們?nèi)祟愖陨碚J(rèn)知之間的深刻差異。
總之,深度學(xué)習(xí)模型并不理解他們的輸入,至少?zèng)]有人類意識(shí)上的理解。我們?nèi)祟悓?duì)圖像,聲音和語言的理解是基于我們作為人類的感覺運(yùn)動(dòng)體驗(yàn)——正如地球上的生物所表現(xiàn)的一樣。機(jī)器學(xué)習(xí)模型無法獲得這些經(jīng)驗(yàn),因此無法以與人類一致的視角來「理解」他們的輸入。 通過注釋大量的訓(xùn)練樣例來訓(xùn)練我們的模型,我們讓他們學(xué)習(xí)在特定數(shù)據(jù)集上,將數(shù)據(jù)映射到人類概念的幾何變換,但這個(gè)映射只是我們頭腦中原始模型的簡單概要,這是我們作為人類實(shí)體的體驗(yàn)得來的——它就像鏡子里的一個(gè)模糊的形象。
作為一名機(jī)器學(xué)習(xí)實(shí)踐者,請(qǐng)始終注意這一點(diǎn),永遠(yuǎn)不要陷入這樣一個(gè)陷阱,即相信神經(jīng)網(wǎng)絡(luò)理解他們所執(zhí)行的任務(wù)——他們不會(huì)的,至少不會(huì)以對(duì)我們有意義的方式理解。不同于我們想教他們的任務(wù),他們被訓(xùn)練來執(zhí)行更為狹窄的任務(wù):僅僅將訓(xùn)練集輸入逐點(diǎn)映射到訓(xùn)練目標(biāo)中。向他們展示任何偏離訓(xùn)練數(shù)據(jù)的東西,他們將給出最荒謬的結(jié)果。
局部泛化與極限泛化
深度學(xué)習(xí)模型中從輸入到輸出的直接幾何變形,與人類思考和學(xué)習(xí)的方式之間幾乎是完全不同的。這不僅僅是人類從自身的經(jīng)驗(yàn)中學(xué)習(xí)而不是通過明確的訓(xùn)練實(shí)例來學(xué)習(xí)的問題。除了學(xué)習(xí)過程不同之外,基本表征的性質(zhì)也存在根本差異。
人類能做的遠(yuǎn)遠(yuǎn)不只是像深度神經(jīng)網(wǎng)絡(luò)或昆蟲那樣把即時(shí)刺激映射成即時(shí)反應(yīng)。人們維持著關(guān)于目前處境、關(guān)于他們自己和其他人的復(fù)雜抽象模型,并且可以使用這些模型來預(yù)測不同的可能發(fā)生的未來并執(zhí)行長期規(guī)劃。他們能夠?qū)⒁阎母拍詈喜⒃谝黄穑瑏肀硎舅麄円郧皬奈唇?jīng)歷過的事物,例如描繪穿著牛仔褲的馬,或想象如果他們中了彩票就會(huì)做什么。這種處理假設(shè)的能力,擴(kuò)展了我們的心智模型空間,使其遠(yuǎn)遠(yuǎn)超出我們可以直接體驗(yàn)到的事物空間,總而言之,進(jìn)行抽象和推理,可以說是人類認(rèn)知的決定性特征。我稱之為「極限泛化」:這是一種在面對(duì)未經(jīng)歷的情況時(shí),使用很少的數(shù)據(jù)甚至根本沒有新的數(shù)據(jù)就能適應(yīng)新情況的能力。
這與深度網(wǎng)絡(luò)所做的形成鮮明對(duì)比,我稱之為「局部泛化」:如果新輸入與訓(xùn)練時(shí)看到的略有不同,則由深度網(wǎng)絡(luò)執(zhí)行的從輸入到輸出的映射立馬失去意義。例如,來思考這樣一問題,想要學(xué)習(xí)使火箭在月球上著陸的合適的發(fā)射參數(shù)。如果你要使用深層網(wǎng)絡(luò)來完成這項(xiàng)任務(wù),無論是使用監(jiān)督學(xué)習(xí)還是增強(qiáng)學(xué)習(xí)進(jìn)行訓(xùn)練,你都需要用數(shù)千乃至數(shù)百萬次的發(fā)射試驗(yàn)進(jìn)行訓(xùn)練,也就是說,你需要將模型置于密集的輸入采樣點(diǎn)空間,以便學(xué)習(xí)從輸入空間到輸出空間的可靠映射。
相比之下,人類可以利用他們的抽象能力來提出物理模型——火箭科學(xué)——并得出一個(gè)確切的解決方案,只需一次或幾次試驗(yàn)即可獲得月球上的火箭的發(fā)射參數(shù)。同樣,如果你開發(fā)了一個(gè)控制人體的深度網(wǎng)絡(luò),要它能夠在城市中安全地駕駛汽車并不被其他汽車撞,那么這個(gè)網(wǎng)絡(luò)將不得不「死亡」數(shù)千次在各種場景中,直到它可以推斷出汽車和危險(xiǎn)并制定適當(dāng)?shù)幕乇艽胧7诺揭粋€(gè)新的城市,網(wǎng)絡(luò)將不得不重新學(xué)習(xí)已知的大部分知識(shí)。另一方面,人類就不必通過死亡來學(xué)習(xí)安全的行為,這要?dú)w功于他們對(duì)假設(shè)情境的抽象建模的能力。
局部泛化:模式識(shí)別級(jí)別的泛化能力; 極限泛化:由抽象和推理得到的泛化能力
總之,盡管我們?cè)跈C(jī)器感知方面取得了進(jìn)展,但我們離人類級(jí)別的 AI 還很遠(yuǎn):我們的模型只能執(zhí)行局部泛化,要適應(yīng)一種新場景必須與原始數(shù)據(jù)聯(lián)系的很緊密,而人類認(rèn)知能夠極限泛化,快速適應(yīng)全新的情況,或?yàn)殚L期的未來情況做出規(guī)劃。
引申
以下是您應(yīng)該記住的內(nèi)容:到目前為止,深度學(xué)習(xí)的唯一真正成功之處就是在給定大量人工注釋數(shù)據(jù)的情況下,使用連續(xù)幾何變換將空間 X 映射到空間 Y 的能力。做好這件事對(duì)于每個(gè)行業(yè)來說都是一件改變行業(yè)游戲規(guī)則的事兒,但它離人類級(jí)別的 AI 還有很長的路要走。
為了解除這些局限性并開始與人類大腦進(jìn)行競爭,我們需要從簡單的輸入到輸出映射轉(zhuǎn)向推理和抽象。計(jì)算機(jī)程序可能是對(duì)各種情況和概念進(jìn)行抽象建模的一個(gè)合適的基礎(chǔ)。我們之前書中已經(jīng)說過,機(jī)器學(xué)習(xí)模型可以被定義為「可學(xué)習(xí)程序」;目前我們能學(xué)習(xí)的程序?qū)儆谒锌赡艹绦蛑蟹浅*M窄和特定子集。但是如果我們能夠以模塊化和可重用的方式學(xué)習(xí)任何程序呢?
鑒于我們所了解到的深度神經(jīng)網(wǎng)絡(luò)的工作機(jī)制、局限性以及當(dāng)前的研究狀況,我們是否可以預(yù)見到神經(jīng)網(wǎng)絡(luò)在中期之內(nèi)將如何發(fā)展呢?這里分享一些我的個(gè)人想法。請(qǐng)注意我并沒有能預(yù)測未來的水晶球,所以我所做的大部分預(yù)測可能都將失敗。這完全就是一篇預(yù)測性的帖子,我之所以分享這些推測并不是希望它們?cè)诓痪玫奈磥頃?huì)被證明是正確的,而是因?yàn)檫@些預(yù)測在當(dāng)前看來非常有趣而且具有實(shí)踐性的。
總的來說,我預(yù)見的幾個(gè)主要方向是:
- 與通用計(jì)算機(jī)程序更接近的模型,建立在比我們當(dāng)前可微分層要豐富得多的基元之上——這也是我們?nèi)绾瘟钅P瞳@得推理和抽象的策略,而這一點(diǎn)也是當(dāng)前模型的根本弱點(diǎn)。
- 使上述成為可能的新式學(xué)習(xí)策略——它可以使得模型擺脫當(dāng)前的可微分變換。
- 需要更少的人類工程師參與的模型——無休止地調(diào)參不應(yīng)該成為你工作的一部分。
- 對(duì)以前學(xué)習(xí)的特征和架構(gòu)進(jìn)行更大和更系統(tǒng)化的復(fù)用;基于可復(fù)用和模塊化子程序的元學(xué)習(xí)系統(tǒng)(Meta-learning systems)。
此外值得注意的是,我的這些思考并不是針對(duì)已經(jīng)成為監(jiān)督式學(xué)習(xí)主力的深度學(xué)習(xí)。恰恰相反,這些思考適用于任何形式的機(jī)器學(xué)習(xí),包括無監(jiān)督學(xué)習(xí)、自我監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)。你的標(biāo)簽來自于哪里以及你的訓(xùn)練循環(huán)是什么樣的,這些都不重要。這些機(jī)器學(xué)習(xí)的不同分支只是同一構(gòu)造的不同方面。接下來讓我們開始深入探討。
模型即程序
正如我們?cè)谇耙黄恼轮兴岬降模覀冊(cè)跈C(jī)器學(xué)習(xí)領(lǐng)域可以預(yù)期的一個(gè)轉(zhuǎn)變發(fā)展是,從純粹模式識(shí)別并且只能實(shí)現(xiàn)局部泛化能力(Local generalization,見上篇)的模型,轉(zhuǎn)向能夠?qū)崿F(xiàn)抽象和推理的模型,也就是可以達(dá)到終極的泛化能力。目前人工智能程序能夠進(jìn)行的基本推理形式,都是由人類程序員硬編碼的:例如依靠搜索算法、圖形處理和形式邏輯的軟件。具體而言,比如在 DeepMind 的 AlphaGo 中,大部分的「智能」都是由專業(yè)程序員設(shè)計(jì)和硬編碼的(如蒙特卡洛樹搜索),從數(shù)據(jù)中學(xué)習(xí)只發(fā)生在專門的子模塊(價(jià)值網(wǎng)絡(luò)和策略網(wǎng)絡(luò))。但是在將來,這樣的人工智能系統(tǒng)很可能會(huì)被完全學(xué)習(xí),而不需要人工進(jìn)行參與。
有什么辦法可以做到這一點(diǎn)?讓我們來考慮一個(gè)眾所周知的網(wǎng)絡(luò)類型:遞歸循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。重要的一點(diǎn)是,遞歸循環(huán)神經(jīng)網(wǎng)絡(luò)比前饋網(wǎng)絡(luò)的限制來的少。這是因?yàn)檫f歸循環(huán)神經(jīng)網(wǎng)絡(luò)不僅僅是一種幾何變換:它們是在 for 循環(huán)內(nèi)重復(fù)應(yīng)用的幾何變換。時(shí)序 for 循環(huán)本身是由人類開發(fā)者硬編碼的:它是網(wǎng)絡(luò)的內(nèi)置假設(shè)。自然地,遞歸神經(jīng)網(wǎng)絡(luò)在它們可以表征的內(nèi)容上依然非常有限,主要是因?yàn)樗鼈儓?zhí)行的每一步仍然只是一個(gè)可微分的幾何變換,而它們從當(dāng)前步到下一步傳送信息的方式是通過連續(xù)幾何空間(狀態(tài)向量)中的點(diǎn)。
現(xiàn)在,設(shè)想一下神經(jīng)網(wǎng)絡(luò)將以類似的方式「編程」,比如 for 循環(huán)編程基元,但不僅僅是一個(gè)帶有硬編碼的幾何內(nèi)存硬編碼 for 循環(huán),而是一大組編程基元,然后模型可以自由操縱這些基元以擴(kuò)展它們的處理功能,例如 if 分支、while 循環(huán)、變量創(chuàng)建、長期記憶的磁盤存儲(chǔ)、排序操作和高級(jí)數(shù)據(jù)結(jié)構(gòu)(如列表、圖和散列表等)等等。這樣的網(wǎng)絡(luò)可以表征的程序空間將遠(yuǎn)遠(yuǎn)大于當(dāng)前深度學(xué)習(xí)模型可以表征的空間,并且其中一些程序甚至可以取得優(yōu)越的泛化能力。
總而言之,我們將遠(yuǎn)離「硬編碼算法智能」(手工軟件),以及「學(xué)習(xí)幾何智能」(深度學(xué)習(xí))。我們將擁有提供推理和抽象能力的形式化算法模塊,以及提供非正式直覺和模式識(shí)別功能的幾何模塊。整個(gè)系統(tǒng)只需要很少的人工參與即可完成學(xué)習(xí)。
我認(rèn)為人工智能相關(guān)的一個(gè)子領(lǐng)域可能即將迎來春天,那就是程序合成(Program synthesis),特別是神經(jīng)程序合成(Neural program synthesis)。程序合成包括通過使用搜索算法(比如在遺傳編程中可能是遺傳搜索)來自動(dòng)生成簡單的程序,用以探索可能程序的巨大空間。當(dāng)找到與需求(需求通常以一組輸入-輸出對(duì)進(jìn)行提供)相匹配的程序時(shí),搜索將停止。正如你所想的,它是否讓你想起了機(jī)器學(xué)習(xí):給出輸入-輸出對(duì)作為「訓(xùn)練數(shù)據(jù)」,我們找到一個(gè)將輸入映射到輸出的「程序」,并且能將它泛化到其它輸入。不同之處在于,我們不是在硬編碼程序(神經(jīng)網(wǎng)絡(luò))中學(xué)習(xí)參數(shù)值,而是通過離散搜索過程生成源代碼。
我一定會(huì)非常期待在接下來的幾年內(nèi)這個(gè)子領(lǐng)域會(huì)再次迎來第二個(gè)春天。特別是,我期待在深度學(xué)習(xí)和程序合成之間出現(xiàn)一個(gè)交叉子領(lǐng)域,在該領(lǐng)域我們不會(huì)采用通用語言生成程序,而是增強(qiáng)了一套豐富的算法原語的生成神經(jīng)網(wǎng)絡(luò)(幾何數(shù)據(jù)處理流),例如 for 循環(huán)等等。這應(yīng)該比直接生成源代碼更加容易處理和有用,它將大大擴(kuò)展機(jī)器學(xué)習(xí)可以解決的問題范圍——我們可以根據(jù)適當(dāng)?shù)挠?xùn)練數(shù)據(jù)自動(dòng)生成程序空間。符號(hào) AI(Symbolic AI) 和幾何 AI(Geometric AI)的融合,當(dāng)代遞歸神經(jīng)網(wǎng)絡(luò)可以看做是這種混合算法幾何模型的開山鼻祖。
超越反向傳播和可微分層
如果機(jī)器學(xué)習(xí)模型變得更像是一段程序,那么它們將變得不再可微——當(dāng)然這些程序仍然會(huì)將連續(xù)的幾何層作為子程序進(jìn)行使用,這都是可微的,但是整個(gè)模型卻不會(huì)。因此,在固定的硬編碼網(wǎng)絡(luò)中使用反向傳播來調(diào)整權(quán)重值無法成為將來訓(xùn)練模型的首選辦法——至少它無法像現(xiàn)在這樣獨(dú)占鰲頭。我們需要找出能有效訓(xùn)練非微分系統(tǒng)的方法。目前的方法包括有遺傳算法、進(jìn)化策略、某些強(qiáng)化學(xué)習(xí)方法和交替方向乘子法(Alternating direction method of multipliers, ADMM)。自然而然的,梯度下降法哪兒也不會(huì)去——梯度信息對(duì)于優(yōu)化可微分參數(shù)函數(shù)總是有用的。但是我們的模型肯定會(huì)比單純的可微參數(shù)函數(shù)來的更加強(qiáng)大,因此它們的自主改善(「機(jī)器學(xué)習(xí)」中的「學(xué)習(xí)」)需要的將不僅僅是反向傳播。
此外,反向傳播是端到端的學(xué)習(xí)模式,這對(duì)于學(xué)習(xí)良好的鏈?zhǔn)睫D(zhuǎn)換是一件好事情,但在計(jì)算效率上卻非常低效,因?yàn)樗鼪]有充分利用深度神經(jīng)網(wǎng)絡(luò)的模塊化特性。為了提高效率,有一個(gè)通用的策略:引入模塊化以及層次結(jié)構(gòu)。所以我們可以通過引入分離的訓(xùn)練模塊以及它們之間的一些同步機(jī)制,以分層的方式組織起來,從而使得反向傳播計(jì)算更加高效。DeepMind 近期的工作「合成梯度」在某種程度上反映出了這一策略。我預(yù)期不久的將來在這一塊將有更多的工作開展。
我們可以預(yù)見的一個(gè)未來就是,這些模型將變得全局不可微分(但將具有局部可微分性),然后通過有效的搜索過程而不是梯度策略進(jìn)行訓(xùn)練。另一方面,通過利用一些更高效版本的反向傳播以發(fā)揮梯度下降策略的最大優(yōu)點(diǎn),局部可微分區(qū)域?qū)⒌玫礁斓挠?xùn)練速度。
自動(dòng)化機(jī)器學(xué)習(xí)
在將來,模型架構(gòu)將能夠通過學(xué)習(xí)實(shí)現(xiàn),而不是需要由工程師手工設(shè)置。并且自動(dòng)化學(xué)習(xí)架構(gòu)與使用更豐富的基元和程序式機(jī)器模型(Program-like machine learning models)將結(jié)合在一起。
目前深度學(xué)習(xí)工程師大部分工作都是使用 Python 腳本來處理數(shù)據(jù),然后花費(fèi)很多的時(shí)間來調(diào)整深度網(wǎng)絡(luò)的架構(gòu)和超參數(shù)以獲得一個(gè)還過得去的模型——或者說甚至獲得一個(gè)性能最先進(jìn)的模型,如果這個(gè)工程師是夠雄心勃勃的話。毋庸置疑,這樣的做法并非最佳的,但是此時(shí)深度學(xué)習(xí)技術(shù)依然可以發(fā)揮一定的效用。不過不幸的是,數(shù)據(jù)處理部分卻很難實(shí)現(xiàn)自動(dòng)化,因?yàn)樗ǔP枰I(lǐng)域知識(shí)以及對(duì)工程師想要的效果有非常清晰的高層次理解。然而,超參數(shù)調(diào)整是一個(gè)非常簡單的搜索過程,并且我們已經(jīng)知道了工程師在這種情況下想要取得什么效果:它由正在被微調(diào)的網(wǎng)絡(luò)的損失函數(shù)定義。設(shè)置基本的「AutoML」系統(tǒng)已經(jīng)很常見了,它將負(fù)責(zé)大部分模型的調(diào)整。我甚至在幾年前設(shè)置了自己的模型并贏得了 Kaggle 競賽。
在最基本的層面上,這樣的系統(tǒng)可以簡單地調(diào)整棧中堆疊的層數(shù)、順序以及每一層中的單元或者說濾波器的數(shù)量。這通常是通過類似于 Hyperopt 這樣的庫來完成的,我們?cè)凇禗eep Learning with Python》的第 7 章中曾討論過這點(diǎn)。但我們的志向可以更加遠(yuǎn)大,并嘗試從零開始學(xué)習(xí)適當(dāng)?shù)募軜?gòu),然后盡可能減少限制條件。這可以通過強(qiáng)化學(xué)習(xí)或者遺傳算法來實(shí)現(xiàn)。
另一個(gè)重要的 AutoML 方向是與模型權(quán)重一起聯(lián)合學(xué)習(xí)模型架構(gòu)。由于從頭開始訓(xùn)練一個(gè)全新的架構(gòu),并且還要在每次嘗試中對(duì)架構(gòu)進(jìn)行微調(diào)是非常耗時(shí)和低效的,所以一個(gè)真正強(qiáng)大的 AutoML 系統(tǒng)可以在通過訓(xùn)練數(shù)據(jù)反向調(diào)整模型特征的同時(shí)設(shè)法改進(jìn)體系結(jié)構(gòu),從而消除所有的計(jì)算冗余。當(dāng)我正在撰寫這些內(nèi)容時(shí),這些方法已經(jīng)開始出現(xiàn)了。
當(dāng)這種情況發(fā)生時(shí),機(jī)器學(xué)習(xí)工程師的工作不會(huì)消失,恰恰相反,工程師將在價(jià)值創(chuàng)造鏈上走上高地。他們將開始投入更多精力來打造真正反映業(yè)務(wù)目標(biāo)的復(fù)雜損失函數(shù),并深入理解他們的模型如何影響他們所部署的數(shù)字生態(tài)系統(tǒng)(例如,負(fù)責(zé)消費(fèi)模型預(yù)測結(jié)果以及產(chǎn)生模型訓(xùn)練數(shù)據(jù)的用戶),而這些問題目前只有巨頭公司才有暇顧及。
終生學(xué)習(xí)和模塊化子程序復(fù)用
如果模型變得越來越復(fù)雜并且建立在更豐富的算法基元之上,那么這種增加的復(fù)雜度將需要在不同任務(wù)之間實(shí)現(xiàn)更好地復(fù)用性,而不是每當(dāng)我們有了新任務(wù)或者新數(shù)據(jù)集之后還需要從頭開始訓(xùn)練新模型。事實(shí)上,許多數(shù)據(jù)集都因?yàn)閿?shù)據(jù)量不夠大而不足以支持從頭訓(xùn)練新的復(fù)雜模型,并且需要利用來自先前數(shù)據(jù)集中的信息。就像你不需要在每次打開一本新書時(shí)都重新學(xué)習(xí)一遍英語一樣。此外,由于當(dāng)前任務(wù)與以前遇到的任務(wù)之間可能存在大量的重疊,因此對(duì)每個(gè)新任務(wù)都從頭開始訓(xùn)練模型的做法非常低效。
此外,近年來反復(fù)出現(xiàn)的一個(gè)顯著的觀測結(jié)果是,訓(xùn)練相同的模型以同時(shí)執(zhí)行幾個(gè)松散連接的任務(wù),將產(chǎn)生一個(gè)對(duì)每個(gè)任務(wù)都更好的模型。例如,訓(xùn)練相同的神經(jīng)機(jī)器翻譯模型以覆蓋從英語到德語、法語到意大利語的翻譯,將得到一個(gè)比單獨(dú)訓(xùn)練來得更好的模型。又比如與圖像分割模型一起訓(xùn)練圖像分類模型,共享相同的卷積核,從而產(chǎn)生一個(gè)在兩項(xiàng)任務(wù)中都表現(xiàn)更好的模型,等等。這一點(diǎn)非常直觀:這些看起來似乎不相關(guān)的任務(wù)之間總是存在著信息重疊,因此聯(lián)合訓(xùn)練模型比起只在某一特定任務(wù)上訓(xùn)練的模型,可以獲取與每項(xiàng)單獨(dú)任務(wù)有關(guān)的大量信息。
我們目前沿著跨任務(wù)模型復(fù)用(Model reuse across tasks)的方向所做的工作就是,利用預(yù)訓(xùn)練權(quán)重模型來處理常見任務(wù),例如視覺特征提取。你將在第 5 章看到這一點(diǎn)。在將來,我希望這種泛化能力能實(shí)現(xiàn)更佳的普適性:我們不僅會(huì)復(fù)用以前學(xué)過的特征(子模型的權(quán)重值),還會(huì)復(fù)用模型架構(gòu)和訓(xùn)練過程。隨著模型變得越來越像程序,我們將開始重用程序子程序(Program subroutines),比如人類編程語言中的函數(shù)和類。
想想今天軟件開發(fā)的過程:一旦工程師解決了一個(gè)特定的問題(例如 Python 中的 HTTP 請(qǐng)求問題),他們會(huì)將其打包為一個(gè)抽象且可以重用的庫。這樣未來面臨類似問題的工程師可以通過簡單地搜索現(xiàn)有的庫,然后下載并在項(xiàng)目中使用它來解決問題。相類似地,在未來元學(xué)習(xí)(Meta-learning)系統(tǒng)將可以通過篩選高級(jí)可重用塊的全局庫來組裝全新的程序。
當(dāng)系統(tǒng)發(fā)現(xiàn)自己為幾個(gè)不同任務(wù)開發(fā)了類似的程序子程序時(shí),如果能夠具備「抽象」的能力,即子程序的可重用版本,然后就將其存儲(chǔ)到全局庫種。這樣的過程將實(shí)現(xiàn)抽象的能力,這是實(shí)現(xiàn)「終極泛化」的必要組成部分:在不同任務(wù)和領(lǐng)域發(fā)現(xiàn)有用的子程序可以被認(rèn)為「抽象」了一些問題解決方案的某些方面。這里「抽象」的定義與軟件工程中的抽象概念相似。這些子程序可以是幾何的(具有預(yù)訓(xùn)練表征的深度學(xué)習(xí)模塊)也可以是算法的(更接近當(dāng)代軟件工程師使用的軟件庫)。
元學(xué)習(xí)器能夠使用可復(fù)用基元(算法和幾何)快速開發(fā)針對(duì)特定任務(wù)的模型,從而實(shí)現(xiàn)“極端泛化”。
總結(jié):洞見未來
總而言之,這里是一些我對(duì)機(jī)器學(xué)習(xí)長期發(fā)展的洞見:
- 模型將更加像程序,并且將具有遠(yuǎn)遠(yuǎn)超出我們目前使用的輸入數(shù)據(jù)的連續(xù)幾何變換的能力。這些程序可以說更接近人類對(duì)周圍環(huán)境和自身抽象的心理模型,并且由于其豐富的算法性質(zhì),它們將具有更強(qiáng)的泛化能力。
- 特別是,模型將融合算法模塊和幾何模塊,算法模塊可以提供正式推理、搜索和抽象能力,而幾何模塊可以提供非正式的直覺和模式識(shí)別功能。AlphaGo(一個(gè)需要大量手動(dòng)軟件工程和人為設(shè)計(jì)決策的系統(tǒng))提供了一個(gè)早期的例子,它展示了當(dāng)符號(hào) AI 和幾何 AI 融合之后將是什么樣子。
- 通過使用存儲(chǔ)在可復(fù)用子程序全局庫(這是一個(gè)通過在數(shù)以萬計(jì)的以前的任務(wù)和數(shù)據(jù)集上學(xué)習(xí)的高性能模型演變而來的庫)中的模塊部件,它們將實(shí)現(xiàn)自動(dòng)成長,而不是由人類工程師手工設(shè)定。由于元學(xué)習(xí)系統(tǒng)確定了常見的問題解決模式,它們將變成一個(gè)可復(fù)用的子程序——就像當(dāng)代軟件工程中的函數(shù)和類一樣——并添加到全局庫中,從而實(shí)現(xiàn)了抽象能力。
- 這個(gè)全局庫和相關(guān)聯(lián)的模型成長系統(tǒng)(Model-growing system)將能夠在某種形式上實(shí)現(xiàn)類人的「極限泛化」:給定一個(gè)新任務(wù)、新情況,系統(tǒng)將能夠組裝一個(gè)適用于新任務(wù)的全新工作模型,而只需要很少的數(shù)據(jù)。這要?dú)w功于 1) 豐富的具有強(qiáng)泛化能力的類程序基元(Program-like primitives);2) 具有相似任務(wù)的豐富經(jīng)驗(yàn)。就像人類可以花費(fèi)很少的時(shí)間玩好一個(gè)全新復(fù)雜的視頻游戲一樣,因?yàn)樗麄冇性S多以前的游戲經(jīng)驗(yàn),并且因?yàn)閺囊郧敖?jīng)驗(yàn)得出的模型是抽象和類程序的,而不是刺激和行為之間的基本映射。
- 因此,這種永久學(xué)習(xí)模型成長系統(tǒng)(Perpetually-learning model-growing system)可以被稱為通用人工智能(Artificial General Intelligence, AGI)。但是不要擔(dān)憂任何機(jī)器人啟示錄將會(huì)降臨:因?yàn)檫@單純只是一個(gè)幻想,它來自于人們對(duì)智能和技術(shù)的一系列深刻誤解。然而,對(duì)這方面的批評(píng)并不在本篇的討論范疇之內(nèi)。