「深度學習被可微分編程取代?」展望30年後的神經網絡和函數編程

2020-12-17 新智元

【新智元導讀】Yann LeCun「深度學習已死」的驚人發言下,可微分編程的概念引發了廣泛關注。機器學習著名博主colah(Christopher Olah)在2015年展望30年後的深度學習,提到了可微分編程。他從深度學習三大觀點之一的表示(representation)角度出發,認為深度學習研究的是優化和函數編程之間的聯繫,而可微分編程則是函數編程和優化的自然交集,十分優雅而簡潔,值得進一步研究。

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

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

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

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

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

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

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

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

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

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

優化與函數複合

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

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

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

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

表示即整數

在每一層,神經網絡都將數據轉換成另一種形式,以使任務更容易達成。我們稱這些轉換後的數據為「表示」(representation)。

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

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

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

f層後面跟著一個f。f的輸出表示是f的輸入。

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

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

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

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

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

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

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

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

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

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

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

fold函數 = 編碼RNN

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

unfold函數 = 生成RNN

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

累積映射 = RNN

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

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

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

窗口映射=卷積層

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

二維卷積網絡

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

Catamorphism = TreeNet

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

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

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

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

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

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

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

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

結語

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

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

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

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

原文地址:http://colah.github.io/posts/2015-09-NN-Types-FP/

相關焦點

  • 【深度學習會被可微分編程取代?】展望30年後的神經網絡和函數編程
    機器學習著名博主colah(Christopher Olah)在2015年展望30年後的深度學習,提到了可微分編程。他從深度學習三大觀點之一的表示(representation)角度出發,認為深度學習研究的是優化和函數編程之間的聯繫,而可微分編程則是函數編程和優化的自然交集,十分優雅而簡潔,值得進一步研究。目前,深度學習是一個非常成功的工具。
  • Yann LeCun:深度學習已死,可微分編程萬歲!
    【新智元導讀】LeCun又發表驚人言論,繼昨天參與深度學習論戰、噴機器人Sophia後,今天他在Facebook主頁發文,稱「深度學習已死,可微分編程萬歲!」深度學習真的死了?而可微分編程又是什麼呢?LeCun又語出驚人了,這次直指深度學習——好,深度學習作為一個流行詞,現在時效已過。
  • 用NumPy寫深度模型,用Julia可微分編程寫函數,這是WAIC開發者日
    機器之心報導機器之心編輯部「DeepNumPy 可以寫深度模型,且與經典 NumPy 100% 兼容」,AWS 副總裁 Smola 說,「深度圖學習本領強大,Transformer 也可以分解為圖」。「Julia 內建可微分編程,定義任何函數,他就會自動算出值以及梯度!」
  • 可微分式編程:深度學習發展的新趨勢?
    從此你無需把問題編碼成可運行的格式,更不依賴人自身解決問題的技巧——從目標分類和語音識別到圖片標註和合成特定藝術家風格的圖像,甚至指導機器人執行尚未被編程的任務,都被一一解決。這個佔主導地位的新進展最初被冠以「神經網絡」之名,如今被稱作「深度學習」——用來定性地強調相比以前的長足進展。
  • Lecun說的可微分編程是什麼?
    其背後的主要理念:可微分編程可以說是目前深度學習時代的象徵。本文將簡單介紹什麼是可微分編程,並列舉幾個可微分編程的工作。作者 | AutoML前沿可微分編程這一名詞由2018年圖靈獎獲得者Yann Lecun提出,可微分編程歷史悠久,可以追述到自動微分這一技術概念,與今日提到的可微分編程稍有不同。
  • 微分萬物:深度學習的啟示
    這就是微分編程的思想。深度學習技術的快速發展為微分編程提供了趁手的工具,也為計算物理開闢了一番新天地。文章介紹微分編程的基本概念,並舉例說明它在建模、優化、控制、反向設計等物理問題中的應用。關鍵詞  微分編程,自動微分,計算物理深度學習在做什麼?對於這個問題,人們的第一反應往往是「訓練人工神經網絡」。
  • 華為深度學習框架MindSpore正式開源:自動微分不止計算圖
    作為一款「全場景 AI 框架」,MindSpore 是華為人工智慧解決方案的重要組成部分,與 TensorFlow、PyTorch、PaddlePaddle 等流行深度學習框架對標,旨在大幅度降低 AI 應用開發門檻,讓人工智慧無處不在。MindSpore 是一款支持端、邊、雲獨立/協同的統一訓練和推理框架。
  • NumPy、AI基礎設施可微分編程、技術實踐,這是一場開發者的盛會
    但是在 DL 時代,搭建模型已經很少用純 NumPy 完成,除非是為了演示神經網絡的正向和反向傳播。雖然 NumPy 的功能很多都被深度學習工具所替代,但還有一樣東西留了下來,即 NumPy 的 API。如果讀者熟悉 NumPy,那麼你會發現 DL 框架的張量差不多就是 NumPy 的數組,它們的定義、索引和各種方法都非常相似。
  • LeCun最新演講:深度學習大革命來了,可微分編程潛力巨大
    他強調了可微分編程的潛力,稱未來還會出現更多的有關深度學習的變革,比如說更複雜的架構,同時也會出現更多的新理論。Yann LeCun(楊立昆)首先介紹了今天的基於監督學習的AI系統。今天所有的應用,不管是影像、聲音或者是圖像的識別,或者一種語言翻譯到另外一種語言,以及測試等等,都可以利用AI。
  • 天生一對,硬核微分方程與深度學習的「聯姻」之路
    微分方程真的能結合深度神經網絡?真的能用來理解深度神經網絡、推導神經網絡架構、構建深度生成模型?我們將從鄂維南、董彬和陳天琦等研究者的工作中,窺探微分方程與深度學習聯袂前行的路徑。而這些數理基礎,正好是構建可計算、可泛化、可解釋和穩健 ML 系統所必需的。在眾多演講中,我們發現董彬老師介紹的微分方程非常有吸引力,它對於探索新的深度學習架構、構建更高性能的深度學習模型非常有幫助。因此在這篇文章中,我們重點關注微分方程在深度學習中的應用,看起來,它們確實是天生一對的組合。
  • DeepMind提出可微分邏輯編程,結合深度學習與符號程序優點
    這種區別對我們來說很有意思,因為這兩類思維對應著兩種不同的機器學習方法:深度學習和符號程序合成(symbolic program synthesis)。   深度學習專注於直觀的感性思維,而符號程序合成專注於概念性的、基於規則的思考。
  • 編程進階之路:用簡單的面向對象編程提升深度學習原型
    將面向對象編程中那些簡單的概念(如函數化和類繼承),應用到深度學習原型代碼中,可以獲得巨大的收益。簡介本文的目標讀者是像我這樣沒有軟體工程師背景的數據科學家和機器學習(ML)從業者,而非經驗豐富的軟體工程師。
  • 原來意在可微分編程
    ,有望成長為深度學習領域一門新的主要語言。但在深入 Swift 以及「可微分編程」的真正含義之前,我們應該先回顧一下當前的狀況。Python,你怎麼了?!到目前為止,Python 都依然是機器學習領域最常被使用的語言,谷歌也有大量用 Python 編寫的機器學習軟體庫和工具。
  • 神經網絡和深度學習簡史(全)
    在聽了數節機器學習課堂,甚至在本科研究中使用它以後,我不禁好奇:這個新的「深度學習」會不會是一個幻想,抑或上世紀80年代已經研發出來的「人工智慧神經網絡」擴大版?讓我告訴你,說來話長——這不僅僅是一個有關神經網絡的故事,也不僅僅是一個有關一系列研究突破的故事,這些突破讓深度學習變得比「大型神經網絡」更加有趣,而是一個有關幾位不放棄的研究員如何熬過黑暗數十年,直至拯救神經網絡,實現深度學習夢想的故事。
  • 神經圖靈機深度講解:從圖靈機基本概念到可微分神經計算機
    這裡的關鍵思想是神經圖靈機基本上就是可微分的圖靈機,這是很重要的,因為我們每天在計算機上做的算法和事情對計算機來說是非常困難的,原因是計算機的計算是絕對的。要麼是 0 要麼是 1。計算機在「非此即彼」的邏輯或者整數中運作。然而大多數的神經網絡和機器學習實際上不是這樣的。它們使用實數。
  • AAAI 2017|北航:神經網絡示例編程
    在本文中,我們提出了一種基於深度神經網絡DNN(Deep Neural Networks)的神經網絡示例編程(NPBE),該模型可以從輸入輸出的字符串中學習,並能誘導解決字符串處理問題的程序。我們的NPBE模型有四個基於神經網絡的組件:一個字符串編碼器、一個輸入輸出分析器、一個程序生成器和一個符號選擇器。
  • (圖解)類神經網絡的復興:深度學習簡史
    這使得類神經網絡在剛出現時雖大為火紅、卻在不久後又沒落了下去。經歷了單層感知機、和多層感知機的兩次失敗,當時的學界只要看到出現「神經網絡」字眼的論文或研究計劃,便會立刻貶斥,認為:多層的神經網絡是不可能的。然而若採用僅有兩層的神經網絡,不如使用其他理論更完備也更好實踐、同樣只有兩層的「淺層」機器學習模型。
  • 神經網絡和深度學習簡史(第一部分):從感知機到BP算法
    這一部分,我們會介紹1958年感知機神經網絡的誕生,70年代人工智慧寒冬以及1986年BP算法讓神經網絡再度流行起來。深度學習掀起海嘯如今,深度學習浪潮拍打計算機語言的海岸已有好幾年,但是,2015年似乎才是這場海嘯全力衝擊自然語言處理(NLP)會議的一年。——Dr. Christopher D.
  • 神經網絡可解釋性、深度學習新方法,2020 年 AI 有哪些勢不可擋的...
    作為 2019 年最後一場重量級的人工智慧國際學術頂會,NeurIPS 2019 所反映出的一些人工智慧研究趨勢,例如神經網絡可解釋性、深度學習新方法、神經科學等等,想必對於大家在新的一年開展研究工作,具有一定的借鑑和參考價值
  • 《神經網絡和深度學習》系列文章三:sigmoid神經元
    使用神經網絡識別手寫數字感知機sigmoid神經元神經網絡的結構用簡單的網絡結構解決手寫數字識別通過梯度下降法學習參數實現我們的網絡來分類數字關於深度學習反向傳播算法是如何工作的改進神經網絡的學習方法神經網絡能夠計算任意函數的視覺證明