微軟RobustFill:無需程式語言,讓神經網絡自動生成程序

2020-12-05 機器之心Pro

選自Microsoft Research blog作者:Rishabh Singh等參與:李澤南

長久以來,擺脫程式語言的束縛,讓計算機自我生成程序一直是開發者們的夢想,最近微軟研究者推出的RobustFill讓夢想更近了一步,他們的研究成果即將在 ICLR 2017 大會上出現。

在過去幾十年中,計算機科學有了長足的發展,但人們編寫計算機軟體的過程卻沒有發生根本的改變——程式設計師必須使用特定的程序語言一步步手工編寫程序的精確算法邏輯。儘管程式語言近年來正在變得越來越友好,但這項工作仍然是絕大多數計算機用戶未曾接觸的事物。

在最近的一項研究中,微軟發布了自己的深度學習程序生成研究。在該研究中,深度神經網絡學會了遵從用戶的意圖來生成電腦程式。用戶只需要提供一些簡單的輸入/輸出(I/O)範例以表示自己希望獲得的程序是什麼形式的。系統就可以使用這些信息生成相應的程序。

例如:假設用戶有一個名單,他/她希望將這個名單整理成特定格式,如下圖所示。這名用戶僅需要向系統提供一些輸入-輸出的例子,隨後系統就會自動填充剩下的輸出(在圖中以灰色顯示)。在一些數據量很大的工作中,這種方法可以為用戶節約大量時間。

該系統通過域特定語言(domain specific language,DSL)生成用於執行任務的程序,用戶不需要理解 DSL 的所有細節。事實上,在使用過程中,用戶完全不會看到編程的過程。在微軟的 DSL 中,對應於上個例子的正確程序是:

自動生成程序面臨著兩個重大挑戰。第一、DSL 表達程序有數以億計的可能性,而用戶真正需要的程序可能完全未曾在系統中出現過;第二、因為 I/O 例子是由人類手動輸入的,這意味著其中可能經常會出現噪音(例如錯字)。如上例所示,第二個輸出例子中的 Uesato 被錯寫為 Useato 了。

在此之前解決這些問題的方法——最為人所知的就是 Excel 中的快速填充(FlashFill)功能——是依靠程式設計師手動編寫的規則和啟發方式來引導和搜索用戶所需的程序。這種方式顯然不能滿足 DSL——這意味著數年的手動規則編寫,而且最終的結果仍然對 I/O 例子的噪音非常敏感。

微軟提出的新系統 RobustFill 採用了最近發展迅猛的深度學習方式,通過數據驅動方法進行程序生成,不需要任何手工編寫的規則。與快速填充相反,它使用曾被用於機器翻譯的「attentional sequence-to-sequence 神經網絡」來通過 I/O 範例生成所需的程序。下圖展示了微軟的神經網絡架構:

這個系統經過了數百萬隨機生成的 I/O 程序配對的訓練,學會了 DSL 中的語義學規則,目前已經可以在真實情況下的數據中展示良好的性能。總體而言,該系統在一個真實世界任務基準測試中達到了 92% 的準確率。其中最令人興奮的是,在測試中,I/O 範例包含了一些明顯的噪音,而系統仍然保持了高精度。

編程新啟示

訓練神經網絡架構來學習一種帶有豐富功能的程序語言(FlashFill DSL)不僅是神經語言生成的重大突破,也是走向通用人工智慧的堅實一步。它解決了可解釋性的關鍵挑戰,也將我們引向了分布式連結形式的知識符號表示問題。

微軟正致力於擴展這些 DSL 程序學習架構,試圖加入狀態變量和控制流程以生成更多種類的程序。研究人員相信他們正走在正確的道路上,未來的研究將指向有關程序生成和歸納的一系列基礎技術問題。

論文:RobustFill: Neural Program Learning under Noisy I/O

摘要

在人工智慧發展的初期,有關自動生成電腦程式用於一些特定任務的嘗試就已開始了。最近有兩個自動學習程序的方式受到了人們的關注:1)神經程序生成,其中神經網絡基於輸入/輸出(I/O)範例進行學習,並生成程序;2)神經程序歸納,其中神經網絡通過隱藏的程序表示直接生成輸出。

在本文中,我們第一次在大體量真實世界學習任務中比較了兩種方式,同時也將這些方法與基於給定規則的程序生成方法進行了對比。我們的神經網絡模型使用特定的 attention RNN 來處理不同大小的 I/O 配對集。我們的生成模型在真實世界數據的測試中達到了 92% 的準確率,而此前最好的神經網絡生成方法只有 34% 準確率。生成模型的性能在這一測試中也優於歸納模型,但更重要的是我們證明了每種方法的性能高度依賴於評價標準和客戶端形式。最後,我們的研究證明了人們可以訓練神經網絡模型在充滿噪音的真實世界數據(如包含錯字)中具有魯棒性,而手動編寫規則的系統完全無法與之相比。

擴展閱讀

論文《RobustFill: Neural Program Learning under Noisy I/O》,作者 Jacob Devlin,Jonathan Uesato,Surya Bhupatiraju,Rishabh Singh,Abdelrahman Mohamed 和 Pushmeet Kohli:https://www.microsoft.com/en-us/research/publication/robustfill-neural-program-learning-noisy-io/論文《Neuro-Symbolic Program Synthesis》,作者 Emilio Parisotto,Abdelrahman Mohamed,Rishabh Singh,Lihong Li,Denny Zhou 和 Pushmeet Kohli。該論文將出現在 ICLR 2017 上:https://www.microsoft.com/en-us/research/publication/neuro-symbolic-program-synthesis-2/

原文連結:https://www.microsoft.com/en-us/research/blog/deep-learning-program-synthesis/?wt.mc_id=MCR_378116_FB1

相關焦點

  • 若你不知道微軟的量子編程Q,那得知道新出的Silq量子程式語言
    比如,程式語言領域就迎來了一個重要的突破:第一種高級程式語言 Silq問世。之所以說它是第一種高級程式語言,就是因為這個程式語言是量子計算機領域的,不是目前的在很低的抽象級別工作的程式語言,也不是我們普通認識學習的程式語言。量子計算機領域的頭號程式語言Silq,誕生於蘇黎世聯邦理工學院的計算機科學界人士之手。
  • 最適合人工智慧開發的程式語言優缺點對比
    迄今為止,人工智慧已經實現了生物識別智能、自動駕駛汽車和人臉識別等等項目。就像大多數軟體應用程式的開發一樣,開發人員也在使用多種語言來編寫人工智慧項目,但是現在還沒有任何一種完美的程式語言是可以完全速配人工智慧項目的。程式語言的選擇往往取決於對人工智慧應用程式的期望功能。關於最佳人工智慧程式語言的爭論從未停止,所以本文就來比較5種人工智慧項目最常用的程式語言,並列出它們的優缺點。
  • 自動給神經網絡找bug,Google發布TensorFuzz
    給神經網絡捉蟲,更是比普通程序難得多:絕大部分bug都不會導致神經網絡崩潰、報錯,只能讓它訓練了沒效果,默默地不收斂。能不能把煉丹師們從無休止無希望的debug工作中拯救出來?兩位谷歌大腦研究員Augustus Odena和Ian Goodfellow說,好像能。他們推出了一種自動為神經網絡做軟體測試的方法:TensorFuzz。
  • 如何用Paddle Fluid API搭建簡單的神經網絡?這裡有一份編程指南
    本文將展示如何用 Paddle Fluid API 編程並搭建一個簡單的神經網絡。輸入輸出 Tensor整個神經網絡的輸入數據也是一個特殊的 Tensor,在這個 Tensor 中,一些維度的大小在定義模型時無法確定(通常包括:batch size,如果 mini-batch 之間數據可變,也會包括圖片的寬度和高度等),在定義模型時需要佔位。
  • 微軟語音 AI 技術與微軟聽聽文檔小程序實踐|AI ProCon 2019
    目前跟人類接近的文字翻譯系統已上線,神經網絡模型已更新,翻譯質量大幅度提升。文字轉語音我們提供神經網絡 TTS、4種語言、5個聲音。這些服務都可以用Rest和WebSocket SDK調用。目前通過商務合作模式進行神經網絡TTS定製,保證技術不被濫用。自主服務界面接口裡,可上傳所有數據,我們自動進行處理,比如對讀音進行檢測,如果發音不標準的話訓練出來的聲音也不標準。數據較好的話可提交訓練,後臺會起一個訓練流程在GPU去訓練,訓練之後試聽效果,部署後可通過代碼調用或者在網頁上輸文字實時測試。
  • 「深度學習被可微分編程取代?」展望30年後的神經網絡和函數編程
    例如,通過將來自兩種語言的單詞映射成一種表示,我們可以找到翻譯的對應單詞,而這些詞是開始時不知道的。通過將圖像和單詞映射到相同的表示中,我們可以將圖像分類為計算機從未見過的類!表示和整數可以分別作為深度學習和函數式編程的基本構建塊。深度學習的主要描述,即流形(manifold)和表示(representation),其中心是神經網絡講數據彎曲成新的表示。
  • 北大、微軟亞洲研究院:高效的大規模圖神經網絡計算
    新智元報導 來源:arXiv編輯:肖琴【新智元導讀】第一個支持圖神經網絡的並行處理框架出現了!北京大學、微軟亞洲研究院的研究人員近日發表論文,提出NGra,這是第一個支持大規模GNN的系統。GNN(圖神經網絡)代表了一種新興的計算模型,這自然地產生了對在大型graph上應用神經網絡模型的需求。但是,由於GNN固有的複雜性,這些模型超出了現有深度學習框架的設計範圍。此外,這些模型不容易在並行硬體(如GPU)上有效地加速。
  • 微軟神經網絡翻譯已支持21種語言 質量提升40%
    微軟神經網絡翻譯已支持21種語言 質量提升40% 時間:2017-11-17 20:41:53
  • 基於IEC61131標準程式語言的Phoenix Contact自動控制系統
    是採用自己標準的控制程式語言,還是採用具有國際標準的IEC61131的語言?為了完成自動控制的任務,我們不僅需要有一套PLC的編程控制程序,而且也需要現場總線的組態管理軟體和HMI監控軟體。 Program-WorX      Program-WorX是根據 IEC61131 國際編程標準的軟PLC控制語言。 它具有5種標準的PLC程式語言: 梯形圖,語句表,功能塊圖,結構文本和順序語句。 PROGRAM-WORX 採用國際標準的語言提供了一個強大的根據IEC61131-3的功能塊和子程序。
  • 微軟未來將使用 Rust 作為 C、C++ 以及其他程式語言的替代方案
    微軟近日提出,未來將使用 Rust 作為 C、C++ 以及其他程式語言的替代方案,以改善應用程式的安全性的計劃。 近日,微軟安全響應中心(MSRC)團隊在官網更新文章,就近日提出的最新計劃,即未來將使用 Rust 作為 C、C++ 以及其他程式語言的替代方案以改善應用程式的安全性的計劃,從空間內存安全、時間內存安全、數據競爭等方面進行了進一步的深入補充。
  • 沈斌:微軟將翻譯馴鹿的語言?
    微軟的硬體產品結合人工智慧的技術,正在跨語言辦公上給我們提供越來越實用的支持。今後,微軟將能夠翻譯馴鹿的語言,讓我們和馴鹿實時對話?在12月3日Surface Laptop 3上市發布會上,微軟消費及設備事業部大中華區副總裁沈斌給了我們答案。 微軟將翻譯馴鹿的語言?
  • 深度| 機器的自我進化:走向自主編程的人工智慧(附提交ICLR 2017的...
    這個方法就是通過訓練一個神經網絡來預測一個通過輸入值生成輸出值的程序的屬性。我們使用神經網絡的預測功能來增強那些來自程式語言社區,包括枚舉搜索(enumerative search)和基於 SMT 的解算器(SMT-based solver)的搜索技術。
  • 計算機程式語言的發展簡史,人工智慧與雲計算程式語言!
    引言在如今信息發達的時代,科技日新月異,計算機和Internet網絡的發展也成為人們日常生活的重要部分。Language,或者Programming Language,指的是人與計算機進行交互的一種語言,就如我們學習外語一樣的,只是一種形式工具,主要與計算機交流的是我們的思想,將我們自己的思想以計算機能識別的語言賦予他,就形成了程序。
  • 開發者眼中的程式語言……
    ,同為支持面向對象編程架構的Python相比於其它高階的面向對象語言,無疑更為小巧且方便的多得多。」 網友cstaley的看法: 「我之所以喜愛JAVA,在於其豐富的生態系統架構,學習JAVA一段時間後,很輕鬆就能拓展到線程、圖形用戶界面、網絡編程等高階領域。」
  • 自然語言生成的演變史
    儘管我們距離可以自己思考的機器人還有幾年的時間,但在過去幾年中,機器學習和自然語言理解領域已經取得了重大進展。 個人助理(Siri / Alexa),聊天機器人和問答機器人a等應用程式真正徹底改變了我們與機器和開展日常生活的方式。自然語言理解(NLU)和自然語言生成(NLG)是人工智慧發展最快的應用之一,因為人們越來越需要理解和從語言中獲得意義,其中含有大量含糊不清的結構。
  • 微軟不再發展Visual Basic程式語言,它曾經的輝煌你可知?
    據了解,VB 的前身是 Quick BASIC ,由微軟公司在 1987 年推出。若再往前追溯,Quick BASIC 還是 BASIC 的繼承者。BASIC 語言誕生於 1971 年,設計目的就是面向初學者,其時的 Fortran 和 Algol 60 語言很難被非理工科生掌握。
  • Python能否超越Java成為「邁入未來」的程式語言
    儘管Python是一種解釋型語言,與傳統的編譯型語言相比降低了機器執行效率,但是處理器的處理速率與環境速率(比如網絡環境)的差異在大多數場景中完全抵消了上述代價;犧牲部分運行效率帶來的好處則是提升了開發效率,在跨平臺的時候無需移植和重新編譯。 所以Python的顯著優點在於速成,對於時間短、變化快的需求而言尤為勝任。
  • 可微分式編程:深度學習發展的新趨勢?
    從此你無需把問題編碼成可運行的格式,更不依賴人自身解決問題的技巧——從目標分類和語音識別到圖片標註和合成特定藝術家風格的圖像,甚至指導機器人執行尚未被編程的任務,都被一一解決。這個佔主導地位的新進展最初被冠以「神經網絡」之名,如今被稱作「深度學習」——用來定性地強調相比以前的長足進展。
  • 世界程式語言排行榜
    計算機語言的種類非常的多,總的來說可以分成機器語言,彙編語言,高級語言三大類。 如果按語種分,可以分為英文符號語言和漢語符號語言兩類。(典型的如:易語言、易語言.飛揚) 電腦每做的一次動作,一個步驟,都是按照已經用計算機語言編好的程序來執行的,程序是計算機要執行的指令的集合,而程序全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機一定要通過計算機語言向計算機發出命令。
  • 超火的程式語言,Julia中文社區夏季會議開放報名
    本次大會將會有 Julia 程式語言的核心創作者之一亮相,給為 Julia 中文文檔翻譯做出過傑出貢獻的用戶頒獎噢(猜猜會是誰?)!本次大會的議程如下(最終的時間表請以論壇上的為準 https://discourse.juliacn.com/t/topic/2111):演講內容DifferentialEquations.jl: 當微分方程遇見 GPU 和神經網絡演講者:Chris RackauckasThis talk will