<緣起> -------------------------------------------------------------------------------- Thomas G.Dietterich: DL is essentially a new style of programming -- differentiable programming -- and the field is trying to work out the reusable constructs in this style. We have some: Convolution, Pooling, LSTM, GAN, VAE, memory units, routing units etc. “深度學習本質(zhì)上是一種新的編程方式——可微分編程——而且這個領域正試圖用這種方式來制定可重用的結(jié)構。目前我們已經(jīng)有:卷積,池化,LSTM,GAN,,VAE,memory單元,routing單元,,等等?!?br> <解釋> -------------------------------------------------------------------------------- Yann LeCun:深度學習已死,,可微分編程萬歲! 好,,深度學習作為一個流行詞,,現(xiàn)在時效已過。 深度學習已死,,可微分編程萬歲,! 沒錯,“可微分編程”不過是把現(xiàn)代這套深度學習技術重新?lián)Q了個叫法,,這就跟“深度學習”是現(xiàn)代兩層以上的神經(jīng)網(wǎng)絡變體的新名字一樣. 但重要的一點是,,人們現(xiàn)在正在將各種參數(shù)化函數(shù)模塊的網(wǎng)絡組裝起來,構建一種新的軟件,,并且使用某種基于梯度的優(yōu)化來訓練這些軟件. 越來越多的人正在以一種依賴于數(shù)據(jù)的方式(循環(huán)和條件)來程序化地定義網(wǎng)絡,,讓它們隨著輸入數(shù)據(jù)的動態(tài)變化而變化。 這與是普通的程序非常類似,,除了前者是參數(shù)化的,、可以自動可微分,并且可以訓練和優(yōu)化,。 動態(tài)網(wǎng)絡變得越來越流行(尤其是對于NLP而言), 這要歸功于PyTorch和Chainer等深度學習框架(注意:早在1994年,,以前的深度學習框架Lush,, 就能處理一種稱為Graph Transformer Networks的特殊動態(tài)網(wǎng)絡,用于文本識別). 現(xiàn)在人們正在積極從事命令式可微分編程語言編譯器的工作,。這是開發(fā)基于學習的AI(learning-based AI)一條非常令人興奮的途徑,。 重要提示: 這不足以讓我們實現(xiàn)“真正的”人工智能。還需要其他的概念,,比如我說過的預測性學習,,我現(xiàn)在決定將其稱為“Imputative Learning”(歸化學習). 之后我會詳細介紹…… <引申> -------------------------------------------------------------------------------- 可微分編程:深度學習的延伸,人工智能成功的關鍵 那么,,在等LeCun大神更詳細介紹他的歸化學習前,,我們更需要關注的是可微分編程,這是深度學習的又一個新名字,,還是確實有不同和新的內(nèi)涵,? MIT媒體實驗室的David Dalrymple此前撰文介紹過可微分編程,Dalrymple 9歲登上TED講臺,,14進入MIT讀研,,16歲以5.0的GPA畢業(yè),也是一代奇才,。 進入MIT媒體實驗室后,,Dalrymple開發(fā)了新的編程范例,如“可重構的異步邏輯自動機(Reconfigurable asynchronous logic automata,,RALA),。 Dalrymple認為,,深度學習的成功有兩大關鍵,,一是反向傳播,而是權重相關(weight-tying),,而這兩大特性與函數(shù)編程(functional programing)中調(diào)用可重用函數(shù)十分相同,。可微分編程有成為“timeless”的潛力,。 過去幾年里,,人工智能領域幾十年來一直沒有得到解決的一系列經(jīng)典挑戰(zhàn),突然被AI純粹主義者長期以來一直頗為鄙視的“統(tǒng)計方法”征服,。 這種方法主要從大量的數(shù)據(jù)中學習概率分布,,而不是檢查人類解決問題的技巧并試圖以可執(zhí)行的方式對這些技巧進行編碼。 這種方法最初被稱為“神經(jīng)網(wǎng)絡”,,現(xiàn)在則叫“深度學習”,,強調(diào)對過去的神經(jīng)網(wǎng)絡的定性改進。 深度學習的成功很大程度上歸功于大的數(shù)據(jù)集和更強大的計算系統(tǒng),,大型科技公司對該領域突然興起的興趣也有一定關系,。 深度學習已經(jīng)取得了令人難以置信的進步, 許多其他方法也有所改善,,但程度較低。 那么,,將深度學習與其他學習區(qū)分開來的關鍵是什么,?首先是反向傳播。 這實際上是一個以非常優(yōu)雅的方式應用的鏈式規(guī)則,,一個簡單的微積分技巧,。 它是連續(xù)和離散數(shù)學的深度整合,使復雜的潛在解決方案族可以通過向量微積分自主改進,。 關鍵是將潛在解決方案的模式(template)組織為有向圖(例如,,從照片到生成的圖說,其間有許多節(jié)點),。 反向遍歷這個圖,,算法能夠自動計算“梯度向量”,這個向量能引導算法尋找越來越好的解決方案,。 從這個意義上看,,現(xiàn)代的深度學習技術與傳統(tǒng)的神經(jīng)網(wǎng)絡在結(jié)構上相似度不大,但在幕后,,反向傳播算法對于新舊架構都至關重要,。 但是,即便使用了反向傳播,,以前的神經(jīng)網(wǎng)絡也遠遠不及現(xiàn)在的深度學習技術,,哪怕是在今天的硬件和數(shù)據(jù)集條件下。 因此,,深度學習的第二大關鍵,,是一個網(wǎng)絡的組件可以同時在多個地方使用。 隨著網(wǎng)絡的優(yōu)化,,每個組件的每個副本都被迫保持一致(這個想法被稱為 “weight-tying”),。 這對權重相關的組件施加了額外的要求:它們必須學會在許多地方同時有用,而不是專門針對特定的地點,。 Weight-tying會使網(wǎng)絡學習更泛化的能力,,因為單詞和物體可能出現(xiàn)在文本塊或圖像的多個位置。 在網(wǎng)絡的許多地方放置一個通用的組件,,就類似于在一個程序中編寫一個函數(shù),,并在多個地方調(diào)用它,這是函數(shù)編程(functional programming)的基本概念,。 函數(shù)編程將計算機運算視為數(shù)學上的函數(shù)計算,,并且避免使用程序狀態(tài)以及易變對象。與編程相比,權重相關(weight-tied)的組件,,實際上與編程中可重用函數(shù)的概念相同,。 不僅如此,過去幾年中,,許多最成功的架構,,它們對組件的重用方式,與函數(shù)編程中通用的“高階函數(shù)”生成組件的方式完全相同,。 這表明函數(shù)編程中的一些著名算子,,可能是深度學習架構的一個很好的靈感。 能夠直接在函數(shù)程序上運行反向傳播的新語言,,將最便于探索那些被訓練成深度學習網(wǎng)絡的函數(shù)結(jié)構,。 事實證明,隱藏在實現(xiàn)/部署的細節(jié)中,,函數(shù)程序?qū)嶋H上被編譯成類似于反向傳播所需的計算圖,。 圖的各個組成部分也必須是可微的,但是Grefenstette等人最近發(fā)布了幾個簡單的數(shù)據(jù)結(jié)構(棧,,隊列和雙向)的可微分構造,,表明進一步的可微分實現(xiàn),可能只是數(shù)學上巧妙設計的問題,。 這方面的進一步工作可能會打開一個新的編程范式——可微分編程,。 用這樣一種語言編寫程序,就好像構建函數(shù)結(jié)構時,,把細節(jié)留給優(yōu)化器——語言會使用反向傳播根據(jù)整個程序的目標自動學習細節(jié),,就像優(yōu)化深度學習中的權重一樣。 可微分編程是一個比較新的概念,,是反向傳播和weight-tying這些想法的延伸,。在各種架構、技術來了又去去了又來的眼下,,這些核心概念仍然是人工智能成功的關鍵,。 -------------------------------------------------------------------------------- 神經(jīng)網(wǎng)絡是“軟件2.0”:開發(fā)通用人工智能的基礎 這些都讓人想到了深度學習和計算機視覺專家,、特斯拉人工智能部門主管Andrej Karpathy此前提出的“軟件2.0”概念,。 Karpathy說,軟件1.0(Software 1.0)是用Python,、C++等語言編寫的,,它由程序員編寫的對計算機的明確指令組成。 通過編寫每行代碼,,程序員可以確定程序空間中的某個特定點,。 相比之下,Software 2.0 是用神經(jīng)網(wǎng)絡權重編寫的。沒有人參與這段代碼的編寫過程,。 在軟件2.0的情況下,,人類對一個理想程序的行為指定一些約束(例如,一個樣本的輸入輸出對數(shù)據(jù)集),,并使用可用的計算資源來搜索程序空間中滿足約束條件的程序,。 在神經(jīng)網(wǎng)絡的例子中,我們把搜索限制在程序空間的一個連續(xù)的子集,,在這個空間中,,搜索過程可以利用反向傳播和隨機梯度下降奏效。 Karpathy認為,,在現(xiàn)實世界中,,大部分問題都是收集數(shù)據(jù)比明確地編寫程序更容易。 未來,,大部分程序員不再需要維護復雜的軟件庫,,編寫復雜的程序,或者分析程序的運行時間,。 他們需要做的是收集,、整理、操作,、標記,、分析和可視化提供給神經(jīng)網(wǎng)絡的數(shù)據(jù)。 從長遠來看,, Software 2.0的未來是光明的,,因為越來越多的人清楚,當我們開發(fā)通用人工智能(AGI)時,,肯定會寫成Software 2.0,。 Software 3.0?那就需要到AGI的時代了,。 |
|