LeCun又語出驚人了,這次直指深度學習——
好,深度學習作為一個流行詞,現在時效已過。
深度學習已死,可微分程式設計萬歲!
事情要回溯到前天。
“深度學習本質上是一種新的程式設計方式——可微分程式設計——而且這個領域正試圖用這種方式來制定可重用的結構。目前我們已經有:卷積,池化,LSTM,GAN,VAE,memory單元,routing單元,等等。”
這個說法讓英偉達的AI架構VP Clement Farabet深表贊同,Farabet還評價說,這是對現今深度學習的最好總結。LeCun也轉推此文,表示贊同。

但是,光是轉發推文,對LeCun來說顯然不夠。
今天,他在Facebook個人首頁上寫了一篇短文,不僅支援可微分程式設計,還用上了“深度學習已死”的表述。不僅如此,他還推出了一個“歸化學習”。
先來看LeCun的文章。
Yann LeCun:深度學習已死,可微分程式設計萬歲!
沒錯,“可微分程式設計”不過是把現代這套深度學習技術重新換了個叫法,這就跟“深度學習”是現代兩層以上的神經網絡變體的新名字一樣。
但重要的一點是,人們現在正在将各種參數化函數子產品的網絡組裝起來,建構一種新的軟體,并且使用某種基于梯度的優化來訓練這些軟體。
越來越多的人正在以一種依賴于資料的方式(循環和條件)來程式化地定義網絡,讓它們随着輸入資料的動态變化而變化。這與是普通的程式非常類似,除了前者是參數化的、可以自動可微分,并且可以訓練和優化。動态網絡變得越來越流行(尤其是對于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的時代了。
原文釋出時間為:2018-01-06
本文作者:文強
本文來自雲栖社群合作夥伴新智元,了解相關資訊可以關注“AI_era”微信公衆号