Yann LeCun:深度學習已死,可微分編程萬歲!

【新智元導讀】LeCun又發表驚人言論,繼昨天參與深度學習論戰、噴機器人Sophia后,今天他在Facebook主頁發文,稱「深度學習已死,可微分編程萬歲!」深度學習真的死了?而可微分編程又是什麼呢?

LeCun又語出驚人了,這次直指深度學習——

好,深度學習作為一個流行詞,現在時效已過。

深度學習已死,可微分編程萬歲!

事情要回溯到前天。

1月4日,AAAI前主席Thomas Dietterich連發10條Twitter,駁斥紐約大學心理學家Gary Marcus對深度學習的批評。其中,Dietterich提到,

深度學習本質上是一種新的編程方式——可微分編程——而且這個領域正試圖用這種方式來制定可重用的結構。目前我們已經有:卷積,池化,LSTM,GAN,VAE,memory單元,routing單元,等等。」

Advertisements

這個說法讓英偉達的AI架構VP Clement Farabet深表贊同,Farabet還評價說,這是對現今深度學習的最好總結。LeCun也轉推此文,表示贊同。

但是,光是轉發推文,對LeCun來說顯然不夠。

今天,他在Facebook個人主頁上寫了一篇短文,不僅支持可微分編程,還用上了「深度學習已死」的表述。不僅如此,他還推出了一個「歸化學習」。

先來看LeCun的文章。

Yann LeCun:深度學習已死,可微分編程萬歲!

好,深度學習作為一個流行詞,現在時效已過。

深度學習已死,可微分編程萬歲!

沒錯,「可微分編程」不過是把現代這套深度學習技術重新換了個叫法,這就跟「深度學習」是現代兩層以上的神經網路變體的新名字一樣

Advertisements

但重要的一點是,人們現在正在將各種參數化函數模塊的網路組裝起來,構建一種新的軟體,並且使用某種基於梯度的優化來訓練這些軟體。

越來越多的人正在以一種依賴於數據的方式(循環和條件)來程序化地定義網路,讓它們隨著輸入數據的動態變化而變化。這與是普通的程序非常類似,除了前者是參數化的、可以自動可微分,並且可以訓練和優化。動態網路變得越來越流行(尤其是對於NLP而言),這要歸功於PyTorch和Chainer等深度學習框架(注意:早在1994年,以前的深度學習框架Lush,就能處理一種稱為Graph Transformer Networks的特殊動態網路,用於文本識別)。

現在人們正在積極從事命令式可微分編程語言編譯器的工作。這是開發基於學習的AI(learning-based AI)一條非常令人興奮的途徑。

重要提示:這不足以讓我們實現「真正的」人工智慧。還需要其他的概念,比如我說過的預測性學習,我現在決定將其稱為「Imputative Learning」(歸化學習)。之後我會詳細介紹……

可微分編程:深度學習的延伸,人工智慧成功的關鍵

那麼,在等LeCun大神更詳細介紹他的歸化學習前,我們更需要關注的是可微分編程,這是深度學習的又一個新名字,還是確實有不同和新的內涵?

MIT媒體實驗室的David Dalrymple此前撰文介紹過可微分編程,Dalrymple 9歲登上TED講台,14進入MIT讀研,16歲以5.0的GPA畢業,也是一代奇才。進入MIT媒體實驗室后,Dalrymple開發了新的編程範例,如「可重構的非同步邏輯自動機(Reconfigurable asynchronous logic automata,RALA)。

Dalrymple認為,深度學習的成功有兩大關鍵,一是反向傳播,而是權重相關(weight-tying),而這兩大特性與函數編程(functional programing)中調用可重用函數十分相同。可微分編程有成為「timeless」的潛力。

過去幾年裡,人工智慧領域幾十年來一直沒有得到解決的一系列經典挑戰,突然被AI純粹主義者長期以來一直頗為鄙視的「統計方法」征服。這種方法主要從大量的數據中學習概率分佈,而不是檢查人類解決問題的技巧,並試圖以可執行的方式對這些技巧進行編碼。

這種方法最初被稱為「神經網路」,現在則叫「深度學習」,強調對過去的神經網路的定性改進。深度學習的成功很大程度上歸功於大的數據集和更強大的計算系統,大型科技公司對該領域突然興起的興趣也有一定關係。深度學習已經取得了令人難以置信的進步。許多其他方法也有所改善,但程度較低。

那麼,將深度學習與其他學習區分開來的關鍵是什麼?首先是反向傳播。這實際上是一個以非常優雅的方式應用的鏈式規則,一個簡單的微積分技巧。它是連續和離散數學的深度整合,使複雜的潛在解決方案族可以通過向量微積分自主改進。

關鍵是將潛在解決方案的模式(template)組織為有向圖(例如,從照片到生成的圖說,其間有許多節點)。反向遍歷這個圖,演算法能夠自動計算「梯度向量」,這個向量能引導演算法尋找越來越好的解決方案。

從這個意義上看,現代的深度學習技術與傳統的神經網路在結構上相似度不大,但在幕後,反向傳播演算法對於新舊架構都至關重要。

但是,即便使用了反向傳播,以前的神經網路也遠遠不及現在的深度學習技術,哪怕是在今天的硬體和數據集條件下。因此,深度學習的第二大關鍵,是一個網路的組件可以同時在多個地方使用。

隨著網路的優化,每個組件的每個副本都被迫保持一致(這個想法被稱為 「weight-tying」)。這對權重相關的組件施加了額外的要求:它們必須學會在許多地方同時有用,而不是專門針對特定的地點。Weight-tying 會使網路學習更泛化的能力,因為單詞和物體可能出現在文本塊或圖像的多個位置。

在網路的許多地方放置一個通用的組件,就類似於在一個程序中編寫一個函數,並在多個地方調用它,這是函數編程(functional programming)的基本概念。函數編程將計算機運算視為數學上的函數計算,並且避免使用程序狀態以及易變對象。與編程相比,權重相關(weight-tied)的組件,實際上與編程中可重用函數的概念相同。不僅如此,過去幾年中,許多最成功的架構,它們對組件的重用方式,與函數編程中通用的「高階函數」生成組件的方式完全相同。這表明函數編程中的一些著名運算元,可能是深度學習架構的一個很好的靈感。

能夠直接在函數程序上運行反向傳播的新語言,將最便於探索那些被訓練成深度學習網路的函數結構。事實證明,隱藏在實現/部署的細節中,函數程序實際上被編譯成類似於反向傳播所需的計算圖。圖的各個組成部分也必須是可微的,但是Grefenstette等人最近發布了幾個簡單的數據結構(棧,隊列和雙向)的可微分構造,表明進一步的可微分實現,可能只是數學上巧妙設計的問題。這方面的進一步工作可能會打開一個新的編程範式——可微分編程。

用這樣一種語言編寫程序,就好像構建函數結構時,把細節留給優化器——語言會使用反向傳播根據整個程序的目標自動學習細節,就像優化深度學習中的權重一樣。

可微分編程是一個比較新的概念,是反向傳播和weight-tying這些想法的延伸。在各種架構、技術來了又去去了又來的眼下,這些核心概念仍然是人工智慧成功的關鍵。

神經網路是「軟體2.0」:開發通用人工智慧的基礎

這些都讓人想到了深度學習和計算機視覺專家、特斯拉人工智慧部門主管Andrej Karpathy此前提出的「軟體2.0」概念。

Karpathy說,軟體1.0(Software 1.0)是用Python、C++等語言編寫的,它由程序員編寫的對計算機的明確指令組成。通過編寫每行代碼,程序員可以確定程序空間中的某個特定點。

相比之下,Software 2.0 是用神經網路權重編寫的。沒有人參與這段代碼的編寫過程。在軟體2.0的情況下,人類對一個理想程序的行為指定一些約束(例如,一個樣本的輸入輸出對數據集),並使用可用的計算資源來搜索程序空間中滿足約束條件的程序。在神經網路的例子中,我們把搜索限制在程序空間的一個連續的子集,在這個空間中,搜索過程可以利用反向傳播和隨機梯度下降奏效。

Karpathy認為,在現實世界中,大部分問題都是收集數據比明確地編寫程序更容易。未來,大部分程序員不再需要維護複雜的軟體庫,編寫複雜的程序,或者分析程序的運行時間。他們需要做的是收集、整理、操作、標記、分析和可視化提供給神經網路的數據。

從長遠來看, Software 2.0的未來是光明的,因為越來越多的人清楚,當我們開發通用人工智慧(AGI)時,肯定會寫成Software 2.0。

Software 3.0?那就需要到AGI的時代了。

編譯來源

  • https://www.facebook.com/yann.lecun/posts/10155003011462143

  • https://www.edge.org/response-detail/26794

  • https://medium.com/@karpathy/software-2-0-a64152b37c35

Advertisements

你可能會喜歡