François Chollet 談深度學習的局限性和未來 - 下篇

雷鋒網 AI 科技評論按:本篇是 Keras 作者 François Chollet 撰寫的一篇博客,文中作者結合自己豐富的開發經驗分享一些自己對深度學習未來發展方向的洞見。另外本篇也是一個關於深度學習局限性及其未來的兩篇系列文章之二。你可以在這裡找到另一篇文章——《François Chollet 談深度學習的局限性和未來 - 上篇》。雷鋒網 AI 科技評論根據原文進行了編譯。

鑒於我們所了解到的深度神經網絡的工作機制、局限性以及當前的研究狀況,我們是否可以預見到神經網絡在中期之內將如何發展呢?這裡分享一些我的個人想法。請注意我並沒有能預測未來的水晶球,所以我所做的大部分預測可能都將失敗。這完全就是一篇預測性的帖子,我之所以分享這些推測並不是希望它們在不久的未來會被證明是正確的,而是因為這些預測在當前看來非常有趣而且具有實踐性的

總的來說,我預見的幾個主要方向是:

  • 與通用計算機程序更接近的模型,建立在比我們當前可微分層要豐富得多的基元之上——這也是我們如何令模型獲得推理和抽象的策略,而這一點也是當前模型的根本弱點。

  • 使上述成為可能的新式學習策略——它可以使得模型擺脫當前的可微分變換。

  • 需要更少的人類工程師參與的模型——無休止地調參不應該成為你工作的一部分。

  • 對以前學習的特徵和架構進行更大和更系統化的復用;基於可復用和模塊化子程序的元學習系統(Meta-learning systems)。

此外值得注意的是,我的這些思考並不是針對已經成為監督式學習主力的深度學習。恰恰相反,這些思考適用於任何形式的機器學習,包括無監督學習、自我監督學習和強化學習。你的標籤來自於哪裡以及你的訓練循環是什麼樣的,這些都不重要。這些機器學習的不同分支只是同一構造的不同方面。接下來讓我們開始深入探討。

模型即程序

正如我們在前一篇文章中所提到的,我們在機器學習領域可以預期的一個轉變發展是,從純粹模式識別並且只能實現局部泛化能力(Local generalization,見上篇)的模型,轉向能夠實現抽象和推理的模型,也就是可以達到終極的泛化能力。目前人工智能程序能夠進行的基本推理形式,都是由人類程序員硬編碼的:例如依靠搜索算法、圖形處理和形式邏輯的軟件。具體而言,比如在 DeepMind 的 AlphaGo 中,大部分的「智能」都是由專業程序員設計和硬編碼的(如蒙特卡洛樹搜索),從數據中學習只發生在專門的子模塊(價值網絡和策略網絡)。但是在將來,這樣的人工智能系統很可能會被完全學習,而不需要人工進行參與。

有什麼辦法可以做到這一點?讓我們來考慮一個眾所周知的網絡類型:遞歸循環神經網絡(RNN)。重要的一點是,遞歸循環神經網絡比前饋網絡的限制來的少。這是因為遞歸循環神經網絡不僅僅是一種幾何變換:它們是在 for 循環內重複應用的幾何變換。時序 for 循環本身是由人類開發者硬編碼的:它是網絡的內置假設。自然地,遞歸神經網絡在它們可以表徵的內容上依然非常有限,主要是因為它們執行的每一步仍然只是一個可微分的幾何變換,而它們從當前步到下一步傳送信息的方式是通過連續幾何空間(狀態向量)中的點。現在,設想一下神經網絡將以類似的方式「編程」,比如 for 循環編程基元,但不僅僅是一個帶有硬編碼的幾何內存硬編碼 for 循環,而是一大組編程基元,然後模型可以自由操縱這些基元以擴展它們的處理功能,例如 if 分支、while 循環、變量創建、長期記憶的磁盤存儲、排序操作和高級數據結構(如列表、圖和散列表等)等等。這樣的網絡可以表徵的程序空間將遠遠大於當前深度學習模型可以表徵的空間,並且其中一些程序甚至可以取得優越的泛化能力。

總而言之,我們將遠離「硬編碼算法智能」(手工軟件),以及「學習幾何智能」(深度學習)。我們將擁有提供推理和抽象能力的形式化算法模塊,以及提供非正式直覺和模式識別功能的幾何模塊。整個系統只需要很少的人工參與即可完成學習。

我認為人工智能相關的一個子領域可能即將迎來春天,那就是程序合成(Program synthesis),特別是神經程序合成(Neural program synthesis)。程序合成包括通過使用搜索算法(比如在遺傳編程中可能是遺傳搜索)來自動生成簡單的程序,用以探索可能程序的巨大空間。當找到與需求(需求通常以一組輸入-輸出對進行提供)相匹配的程序時,搜索將停止。正如你所想的,它是否讓你想起了機器學習:給出輸入-輸出對作為「訓練數據」,我們找到一個將輸入映射到輸出的「程序」,並且能將它泛化到其它輸入。不同之處在於,我們不是在硬編碼程序(神經網絡)中學習參數值,而是通過離散搜索過程生成源代碼。

我一定會非常期待在接下來的幾年內這個子領域會再次迎來第二個春天。特別是,我期待在深度學習和程序合成之間出現一個交叉子領域,在該領域我們不會採用通用語言生成程序,而是增強了一套豐富的算法原語的生成神經網絡(幾何數據處理流),例如 for 循環等等。這應該比直接生成源代碼更加容易處理和有用,它將大大擴展機器學習可以解決的問題範圍——我們可以根據適當的訓練數據自動生成程序空間。符號 AI(Symbolic AI) 和幾何 AI(Geometric AI)的融合,當代遞歸神經網絡可以看做是這種混合算法幾何模型的開山鼻祖。

依靠幾何基元(模式識別與直覺)和算法基元(推理、搜索和存儲)的學習程序

超越反向傳播和可微分層

如果機器學習模型變得更像是一段程序,那麼它們將變得不再可微——當然這些程序仍然會將連續的幾何層作為子程序進行使用,這都是可微的,但是整個模型卻不會。因此,在固定的硬編碼網絡中使用反向傳播來調整權重值無法成為將來訓練模型的首選辦法——至少它無法像現在這樣獨佔鰲頭。我們需要找出能有效訓練非微分系統的方法。目前的方法包括有遺傳算法、進化策略、某些強化學習方法和交替方向乘子法(Alternating direction method of multipliers, ADMM)。自然而然的,梯度下降法哪兒也不會去——梯度信息對於優化可微分參數函數總是有用的。但是我們的模型肯定會比單純的可微參數函數來的更加強大,因此它們的自主改善(「機器學習」中的「學習」)需要的將不僅僅是反向傳播。

此外,反向傳播是端到端的學習模式,這對於學習良好的鏈式轉換是一件好事情,但在計算效率上卻非常低效,因為它沒有充分利用深度神經網絡的模塊化特性。為了提高效率,有一個通用的策略:引入模塊化以及層次結構。所以我們可以通過引入分離的訓練模塊以及它們之間的一些同步機制,以分層的方式組織起來,從而使得反向傳播計算更加高效。DeepMind 近期的工作「合成梯度」在某種程度上反映出了這一策略。我預期不久的將來在這一塊將有更多的工作開展。

我們可以預見的一個未來就是,這些模型將變得全局不可微分(但將具有局部可微分性),然後通過有效的搜索過程而不是梯度策略進行訓練。另一方面,通過利用一些更高效版本的反向傳播以發揮梯度下降策略的最大優點,局部可微分區域將得到更快的訓練速度。

自動化機器學習

在將來,模型架構將能夠通過學習實現,而不是需要由工程師手工設置。並且自動化學習架構與使用更豐富的基元和程序式機器模型(Program-like machine learning models)將結合在一起。

目前深度學習工程師大部分工作都是使用 Python 腳本來處理數據,然後花費很多的時間來調整深度網絡的架構和超參數以獲得一個還過得去的模型——或者說甚至獲得一個性能最先進的模型,如果這個工程師是夠雄心勃勃的話。毋庸置疑,這樣的做法並非最佳的,但是此時深度學習技術依然可以發揮一定的效用。不過不幸的是,數據處理部分卻很難實現自動化,因為它通常需要領域知識以及對工程師想要的效果有非常清晰的高層次理解。然而,超參數調整是一個非常簡單的搜索過程,並且我們已經知道了工程師在這種情況下想要取得什麼效果:它由正在被微調的網絡的損失函數定義。設置基本的「AutoML」系統已經很常見了,它將負責大部分模型的調整。我甚至在幾年前設置了自己的模型並贏得了 Kaggle 競賽。

在最基本的層面上,這樣的系統可以簡單地調整棧中堆疊的層數、順序以及每一層中的單元或者說濾波器的數量。這通常是通過類似於 Hyperopt 這樣的庫來完成的,我們在《Deep Learning with Python》的第 7 章中曾討論過這點。但我們的志向可以更加遠大,並嘗試從零開始學習適當的架構,然後儘可能減少限制條件。這可以通過強化學習或者遺傳算法來實現。

另一個重要的 AutoML 方向是與模型權重一起聯合學習模型架構。由於從頭開始訓練一個全新的架構,並且還要在每次嘗試中對架構進行微調是非常耗時和低效的,所以一個真正強大的 AutoML 系統可以在通過訓練數據反向調整模型特徵的同時設法改進體系結構,從而消除所有的計算冗餘。當我正在撰寫這些內容時,這些方法已經開始出現了。

當這種情況發生時,機器學習工程師的工作不會消失,恰恰相反,工程師將在價值創造鏈上走上高地。他們將開始投入更多精力來打造真正反映業務目標的複雜損失函數,並深入理解他們的模型如何影響他們所部署的數字生態系統(例如,負責消費模型預測結果以及產生模型訓練數據的用戶),而這些問題目前只有巨頭公司才有暇顧及。

終生學習和模塊化子程序復用

如果模型變得越來越複雜並且建立在更豐富的算法基元之上,那麼這種增加的複雜度將需要在不同任務之間實現更好地復用性,而不是每當我們有了新任務或者新數據集之後還需要從頭開始訓練新模型。事實上,許多數據集都因為數據量不夠大而不足以支持從頭訓練新的複雜模型,並且需要利用來自先前數據集中的信息。就像你不需要在每次打開一本新書時都重新學習一遍英語一樣。此外,由於當前任務與以前遇到的任務之間可能存在大量的重疊,因此對每個新任務都從頭開始訓練模型的做法非常低效。 

此外,近年來反覆出現的一個顯著的觀測結果是,訓練相同的模型以同時執行幾個鬆散連接的任務,將產生一個對每個任務都更好的模型。例如,訓練相同的神經機器翻譯模型以覆蓋從英語到德語、法語到意大利語的翻譯,將得到一個比單獨訓練來得更好的模型。又比如與圖像分割模型一起訓練圖像分類模型,共享相同的卷積核,從而產生一個在兩項任務中都表現更好的模型,等等。這一點非常直觀:這些看起來似乎不相關的任務之間總是存在着信息重疊,因此聯合訓練模型比起只在某一特定任務上訓練的模型,可以獲取與每項單獨任務有關的大量信息。

我們目前沿着跨任務模型復用(Model reuse across tasks)的方向所做的工作就是,利用預訓練權重模型來處理常見任務,例如視覺特徵提取。你將在第 5 章看到這一點。在將來,我希望這種泛化能力能實現更佳的普適性:我們不僅會復用以前學過的特徵(子模型的權重值),還會復用模型架構和訓練過程。隨着模型變得越來越像程序,我們將開始重用程序子程序(Program subroutines),比如人類編程語言中的函數和類。

想想今天軟件開發的過程:一旦工程師解決了一個特定的問題(例如 Python 中的 HTTP 請求問題),他們會將其打包為一個抽象且可以重用的庫。這樣未來面臨類似問題的工程師可以通過簡單地搜索現有的庫,然後下載並在項目中使用它來解決問題。相類似地,在未來元學習(Meta-learning)系統將可以通過篩選高級可重用塊的全局庫來組裝全新的程序。當系統發現自己為幾個不同任務開發了類似的程序子程序時,如果能夠具備「抽象」的能力,即子程序的可重用版本,然後就將其存儲到全局庫種。這樣的過程將實現抽象的能力,這是實現「終極泛化」的必要組成部分:在不同任務和領域發現有用的子程序可以被認為「抽象」了一些問題解決方案的某些方面。這裡「抽象」的定義與軟件工程中的抽象概念相似。這些子程序可以是幾何的(具有預訓練表徵的深度學習模塊)也可以是算法的(更接近當代軟件工程師使用的軟件庫)。


元學習器能夠使用可復用基元(算法和幾何)快速開發針對特定任務的模型,從而實現「極端泛化」。

總結:洞見未來

總而言之,這裡是一些我對機器學習長期發展的洞見:

  • 模型將更加像程序,並且將具有遠遠超出我們目前使用的輸入數據的連續幾何變換的能力。這些程序可以說更接近人類對周圍環境和自身抽象的心理模型,並且由於其豐富的算法性質,它們將具有更強的泛化能力。

  • 特別是,模型將融合算法模塊和幾何模塊,算法模塊可以提供正式推理、搜索和抽象能力,而幾何模塊可以提供非正式的直覺和模式識別功能。AlphaGo(一個需要大量手動軟件工程和人為設計決策的系統)提供了一個早期的例子,它展示了當符號 AI 和幾何 AI 融合之後將是什麼樣子。

  • 通過使用存儲在可復用子程序全局庫(這是一個通過在數以萬計的以前的任務和數據集上學習的高性能模型演變而來的庫)中的模塊部件,它們將實現自動成長,而不是由人類工程師手工設定。由於元學習系統確定了常見的問題解決模式,它們將變成一個可復用的子程序——就像當代軟件工程中的函數和類一樣——並添加到全局庫中,從而實現了抽象能力。

  • 這個全局庫和相關聯的模型成長系統(Model-growing system)將能夠在某種形式上實現類人的「極限泛化」:給定一個新任務、新情況,系統將能夠組裝一個適用於新任務的全新工作模型,而只需要很少的數據。這要歸功於 1) 豐富的具有強泛化能力的類程序基元(Program-like primitives);2) 具有相似任務的豐富經驗。就像人類可以花費很少的時間玩好一個全新複雜的視頻遊戲一樣,因為他們有許多以前的遊戲經驗,並且因為從以前經驗得出的模型是抽象和類程序的,而不是刺激和行為之間的基本映射。

  • 因此,這種永久學習模型成長系統(Perpetually-learning model-growing system)可以被稱為通用人工智能(Artificial General Intelligence, AGI)。但是不要擔憂任何機械人啟示錄將會降臨:因為這單純只是一個幻想,它來自於人們對智能和技術的一系列深刻誤解。然而,對這方面的批評並不在本篇的討論範疇之內。

Via keras.io,雷鋒網 AI 科技評論編譯。


想在手機閱讀更多電腦與科技資訊?下載【香港矽谷】Android應用
分享到Facebook
技術平台: Nasthon Systems