天天看點

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

目前,深度學習是一個非常成功的工具。但這個工具是我們偶然發現的,作為一個領域,還沒有統一的看法或共同的了解。事實上,這個領域還存在幾種互相競争的表述!

我認為在30年後回過頭看,我們将看到很不一樣的深度學習。

30年後的深度學習:神經科學觀點、機率統計觀點和表征觀點,誰會勝出?

如果我們認為30年後,我們可能會以一種非常不同的方式看待深度學習,那麼這就提出了一個有趣的問題:

到那時,我們将如何看待深度學習?

當然,沒有人能真正知道我們将來如何了解這個領域。但有趣的是,我們現在可以做一些推測。

目前,有三種表述正在互相競争,打算成為我們了解深度學習的關鍵。有借鑒生物學原理的神經科學的表述。有以資料轉換和自然流形假設為中心的表示(representation)的表述。最後,還有一種機率性的表述,把神經網絡解釋為隐藏變量(latent variables)。這些表述并不是互相排斥的,但是它們對深度學習的思考方式卻有着很大的不同。

而這篇文章将把表示的表述延伸到一個新的答案:深度學習研究的是優化和函數程式設計之間的聯系。

從這個角度看,深度學習中對表示的表述,對應于函數程式設計中的類型理論(type theory)。這個理論認為,深度學習處在我們已知的兩個領域的交彙處,這兩個領域都已經有了很多的研究,它們是如此美麗,如此自然,我心中的數學家幾乎可以相信,這就是對現實的根本描述。

這是一個推斷性的想法。我并不是說這就是真的,而是想提出,這是可信的,完全可以想象深度學習正朝着這個方向發展。需要指出:我主要是在進行美學上的論證,而不是事實論證。我想表明,這是一個自然而優雅的想法,它涵蓋了我們目前所說的深度學習。

優化與函數複合

深度學習的獨特之處是它研究的是深度神經網絡——多層神經網絡。在多層的程序中,模型逐漸彎曲資料,将其彎曲成易于解決給定任務的形式。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

這些層的細節每隔一段時間就會改變一次。保持不變的是有一個序列的層。

每一層都是一個函數,作用于前一層的輸出。整體而言,這個網絡是一個複合函數鍊(a chain of composed functions)。這個複合函數鍊經過優化以執行任務。

我所知道的所有深度學習模型都涉及優化複合函數。我認為這是目前的研究的核心。

表示即整數

在每一層,神經網絡都将資料轉換成另一種形式,以使任務更容易達成。我們稱這些轉換後的資料為“表示”(representation)。

表示(representations)與整數(types)是相對應的。

計算機科學中的整數(type)是一種基礎資料類型,指以n 比特嵌入某種資料的方式。類似地,深度學習中表示(representation)是指将資料流形嵌入n維的一種方式。

正如兩個函數隻有在它們的type一緻的情況下才能複合在一起一樣,兩個layer也隻有在它們的representation一緻時才能組合。在錯誤的representation中的資料對于神經網絡來說是無意義的。在訓練過程中,相鄰的層會協商它們将要傳遞的representation,網絡的性能取決于網絡所期望的representation中的資料。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

f₁層後面跟着一個f₂。f₁的輸出表示是f₂的輸入。

在神經網絡架構非常簡單的情況下,隻有線性序列的層。一層輸出的表示需要與下一層輸入的表示相比對。

但是許多神經網絡具有更複雜的結構。舉一個非常簡單的例子,讓我們來想象一個具有多種類似輸入的神經網絡,它執行多個相關的任務。它也許需要RGB圖像和灰階圖像作為輸入。也許是以人的照片作為輸入,然後試圖預測照片中人的年齡和性别。由于輸入類型和任務類型相似,是以最好在一個模型中完成所有這些任務,這樣訓練資料就可以發揮作用。其結果是多個輸入層映射到一個representation中,并且多個輸出由相同的representation映射。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

也許這個例子過于人為設計,但是将不同類型的資料映射成相同的表示可能會達成一些了不起的成果。例如,通過将來自兩種語言的單詞映射成一種表示,我們可以找到翻譯的對應單詞,而這些詞是開始時不知道的。通過将圖像和單詞映射到相同的表示中,我們可以将圖像分類為計算機從未見過的類!

表示和整數可以分别作為深度學習和函數式程式設計的基本建構塊。深度學習的主要描述,即流形(manifold)和表示(representation),其中心是神經網絡講資料彎曲成新的表示。幾何學,邏輯學,拓撲學和函數式程式設計之間已知的聯系表明,表示和整數之間的聯系可能具有根本性意義。

深度學習和函數程式設計:RNN、CNN等模型與函數的驚人對應

現代神經網絡背後的一個重要見解是,一個神經元的許多副本都可以在神經網絡中使用。

在程式設計中,函數的抽象是關鍵。我們可以寫一次代碼,然後根據需要使用它,省去了重複編碼的過程。這不僅大大減少了我們需要編寫和維護的代碼量,加快了開發過程,還降低了引入錯誤的風險,并使我們所犯的錯誤更容易被發現。

在神經網絡中,在不同地方使用同一個神經元的多個副本,實際上就相當于在程式中多次調用函數。由于需要學習的内容較少,模型學習速度更快,也能學習到更好的模型。這種技術也叫做“權重綁定”(weight tying),對我們最近從深度學習中看到的優秀表現至關重要。

當然,不能随便把神經元的副本放得到處都是。為了讓模型有用,你需要有使用的原則,利用資料中的某些結構。在實踐中,有一些被廣泛使用的模型,比如循環層和卷積層。

這些神經網絡模式隻是高階函數,也就是把函數作為參數的函數。類似的情況已經在函數程式設計中得到了廣泛的研究。實際上,很多這些網絡模型都與常見的函數相對應,比如fold函數。唯一不同的是,它們不接收正常的函數作為對象,而是接收神經網絡子產品。

編碼循環神經網絡(RNN)就是fold函數。RNN常被用來接受長度可變的清單,比如将句子作為輸入。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

fold函數 = 編碼RNN

生成循環神經網絡就是unfold函數。生成RNN常用來讓神經網絡産生一個輸出清單,比如一個句子中的單詞。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

unfold函數 = 生成RNN

生成RNN也是在做累積映射(Accumulating Map)。當我們要按順序進行預測時,常會用到它們。例如,在語音識别中,我們可能希望基于過去的上下文,預測音頻片段中每個時間步長的現象。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

累積映射 = RNN

雙向RNN是一個比較晦澀的變體,我這裡就提一下。在函數程式設計術語中,它們是像拉鍊那樣,錯位結合在一起的一左一右兩個累加映射,用來對過去和未來的情況進行序列預測。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

錯位結合左右累加映射=雙向RNN

卷積神經網絡(CNN)是映射的變體。普通的映射将函數應用于每個元素。卷積神經網絡也考慮鄰近元素,将函數應用于每個元素周圍的小視窗。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

視窗映射=卷積層

在二維卷積神經網絡中,這種情況特别顯著。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

二維卷積網絡

遞歸神經網絡(“TreeNets”)是fold函數的泛化。它們從下到上處理資料結構,主要用于自然語言處理,讓神經網絡在解析樹上進行運算。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

Catamorphism = TreeNet

上面的例子說明了神經網絡中常見的模型非常自然地對應簡單的函數程式。

一種全新的程式設計,可微分程式設計:函數程式設計和優化的自然交集

這些模式(pattern)都是可以組合在一起,建構更大網絡的子產品。就像基本的構模組化塊一樣,這些組合都是函數程式,其中包含大量的神經網絡。函數程式提供高層次的結構,而其中的建構塊就是靈活的部分,能夠學習在函數程式提供的架構内執行實際的任務。

Sutskever等人(2014)通過将編碼器RNN和生成器RNN組合到一起,執行将英語翻譯為法語的任務。在函數程式設計術語中,它們基本上就是fold英語句子,然後unfold生成法語翻譯。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

Vinyals等人(2014)用卷積網絡和生成器RNN生成圖說。本質上,這個系統用卷積網絡處理輸入的圖像,然後unfold結果向量,生成一個描述圖像的句子。

【深度學習會被可微分程式設計取代?】展望30年後的神經網絡和函數程式設計

這些模型都視為一種新的、可微分的函數程式設計。

你寫一個非常粗糙的函數程式,由靈活、可學習的子產品組成,你同時定義程式正确的行為,并給它大量的資料。然後你應用梯度下降或者其他一些優化算法。最終的結果是,你得到了一個厲害的系統,我們不知道如何直接建構這個系統,但是它能生成圖說、分類圖檔。

這就是函數程式設計和優化的自然交集,我認為它十分優美。

結語

我覺得這個想法真的很美。同時,這也是一篇很奇怪的文章,釋出出來我自己感覺有些别扭。除了自己的熱情之外,我提出了一個沒有任何支撐的推測性理念。老實說,根據我所知的一些客觀觀點,我上面提的這個想法是錯誤的,大多數未經驗證的想法都是錯誤的。但這也可能是對的,而且我認為值得一提。

此外,我也不是探索這個方向合适的人,這需要從同類類型理論(homotopy type theory)的角度來分析神經網絡,我沒有相關的背景。但是,這個想法需要更多、更廣泛的讨論。是以,我需要将這篇文章釋出出來。

最後,我希望這篇文章能夠激起更多關于深度學習的讨論和思考。

再說,如果我不能推測,寫部落格又有什麼意義呢?希望我能在自己的激動和不确定之間找到适當的平衡。

原文釋出時間為:2018-01-08

本文作者:馬文

本文來自雲栖社群合作夥伴新智元,了解相關資訊可以關注“AI_era”微信公衆号

繼續閱讀