無需數學就能寫AI,MIT提出AI專用程式語言Gen

2020-12-13 機器之心Pro

機器之心報導

機器之心編輯部

在幫助專家做研究的同時,MIT 的研究員也要讓新手做人工智慧更簡單。繼 Julia 語言之後,近日 MIT 又發布了一種全新的通用概率編程系統 Gen,它是一種針對人工智慧領域的專用語言,且除了深度學習外,各種機器學習與概率建模方法都囊括在內。

近日,在提交程式語言設計與實現大會(PLDI)的一篇論文中,MIT 研究人員介紹了一種全新的概率編程系統 Gen。從計算機視覺到機器人和統計,用戶可以通過 Gen 為應用 AI 技術的多個領域編寫模型和算法,且無需處理方程式或手動編寫高性能代碼。此外,Gen 還允許研究人員編寫用於預測任務的複雜模型和推理算法,這在之前是不可能做到的。

例如,3-D 人體姿態是一項困難的計算機視覺推理任務,在自動系統、人機互動和增強現實(AR)中均有應用。在論文中,研究人員展示了簡短的 Gen 程序如何推理 3-D 人體姿態。

看起來十分簡單,但在後臺,該程序包括執行圖形渲染、深度學習和概率模擬類型的組件。與一些研究人員所開發的早期系統相比,這些不同技術的結合可以提高這項任務的準確性和速度。

論文圖 6:人體姿態推理任務的建模、推理代碼以及評估結果。模型使用靜態 DSL 編寫,調用圖形引擎從姿態參數中渲染深度圖像。自定義提議結合靜態 DSL 和 TensorFlow DSL,通過深度神經網絡來傳遞觀察到的深度圖像,並提出姿態參數。

研究人員表示,由於其簡單性,從新手到專家,Gen 可以被任何人輕鬆使用。「這項工作的一個動機是讓計算機科學或數學專業知識較少的人更容易做自動化人工智慧,」論文第一作者、電氣工程和計算機科學系博士生 Marco Cusumano-Towner 說。「我們還希望它能提高生產力,這意味著專家可以更輕鬆地快速迭代 AI 系統,做出原型。」

研究人員還展示了 Gen 通過使用其他 Gen 程序簡化數據分析的能力,該程序可自動生成通常由專家用於分析、解釋和預測數據中基礎模式的複雜統計模型。這種能力建立在研究人員先前工作的基礎上,也就是讓用戶可以編寫幾行代碼來發現對金融趨勢、航空旅行、投票模式以及疾病傳播的洞見。但不同的是,早期系統需要大量的手動編碼才能進行準確的預測。

「Gen 是第一個足以涵蓋計算機視覺和數據科學中不同案例的靈活、自動化、高效的系統,且性能非常好。」MIT 腦與認知科學系(Department of Brain and Cognitive Sciences)的研究員 Vikash K. Mansinghka 說,他負責運行概率計算項目。

集自動化、靈活性和速度優勢於一身

2015 年,谷歌開源 TensorFlow 以來,它已經成為了最為流行的深度學習框架。然而,即使 TensorFlow 足夠自動化和高效,但它只側重於深度學習模型,對範圍更廣的人工智慧而言,這些模型既昂貴又有限。

如今,業內已經有大量的 AI 技術,例如統計和概率模型、模擬引擎等。一些概率編程系統雖然足夠靈活,可以覆蓋到多種 AI 技術,但運行不夠高效。

研究人員尋求的是集其所長於一身:自動、靈活、快速。Mansinghka 說,「如果我們能做到這一點,或許就能向 TensorFlow 對深度學習那樣,有助於民主化更廣泛的模型和推理算法。」

在概率性 AI 中,推理算法會對數據執行操作,並基於新數據連續地調整概率,從而最終做出預測。

借鑑了早期概率編程系統 Church 中的概念,研究人員將幾種自定義建模語言結合到 Julia 中,每種建模語言都對不同類型的 AI 建模方法進行優化,使其更加通用。利用優化、變分推理、某些概率方法以及深度學習等各種方法,Gen 還為推理任務提供了高級基礎結構。

外部機構就 Gen 與 MIT 展開合作

外部用戶已經在尋找利用 Gen 進行 AI 研究的方法。例如,英特爾與 MIT 合作,將 Gen 用於機器人和 AR 系統,尤其內部基於深度感知攝像頭的 3D 姿態估計。MIT 林肯實驗室(Lincoln Laboratory)也在合作開發 Gen 在人道主義救援和災害應對空中機器人中的應用。

在 MIT 追求人工智慧的環境下,Gen 開始被用於野心勃勃的 AI 項目中。例如,Gen 對 MIT-IBM 沃森人工智慧實驗室以及美國國防部先進研究項目局(Department of Defense』s Defense Advanced Research Projects Agency)正在進行的「機器常識」項目極為重要,該項目旨在建模 18 個月大嬰兒水平的人類常識知識庫。Mansinghka 是該項目的主要研究者之一。

Mansinghka 表示:「藉助於 Gen,研究人員首次得以很容易地集成大量不同的 AI 技術。」

優步首席科學家和 AI 副總裁、劍橋大學教授 Zoubin Ghahramani 表示:「自深度學習出現以來,概率編程是最有潛力的前沿人工智慧領域之一。Gen 代表了這一領域的重大進展,並將有助於概率推理 AI 系統的可擴展和實際實現。」

谷歌研究主管 Peter Norvig 也非常讚賞這項工作,他說:「Gen 允許用戶使用概率編程解決問題,因此對各種問題有更具原則性的方法,且不受限於概率編程系統設計上的一些缺陷。通用程式語言之所以能成功,是因為它們能令程式設計師更容易完成任務,Gen 對於概率編程的意義同樣在此。」

舉個慄子

研究人員編寫了一個簡短的 Gen 程序來做貝葉斯線性回歸:給定(x, y)平面上的一組數據點,他們想找出一條能很好擬合這些數據點的線。

典型的 Gen 程序通常包含三個主要組件。

首先,定義一個生成模型:利用額外語句擴展的 Julia 函數,即從概念上模擬一個假數據集。下面的模型對 slope 和 intercept 參數進行採樣,然後 x 軸上的參數可以作為輸入,且對相應 y 軸進行採樣。他們將所做的隨機選擇命名為 @trace,這樣就可以在推理程序中引用這些選擇。

using Gen@gen function my_model(xs::Vector{Float64}) slope = @trace(normal(0, 2), :slope) intercept = @trace(normal(0, 10), :intercept) for (i, x) in enumerate(xs) @trace(normal(slope * x + intercept, 1), "y-$i") endend

其次,研究人員編寫了一個推理程序,用於操縱模型的 Execution Traces。推理程序是常規的 Julia 代碼,並利用 Gen 的標準推理庫。

下面的推理程序會輸入數據集,并迭代地運行 MCMC 算法,以擬合 slope 和 intercept 參數:

function my_inference_program(xs::Vector{Float64}, ys::Vector{Float64}, num_iters::Int) # Create a set of constraints fixing the # y coordinates to the observed y values constraints = choicemap() for (i, y) in enumerate(ys) constraints["y-$i"] = y end # Run the model, constrained by `constraints`, # to get an initial execution trace (trace, _) = generate(my_model, (xs,), constraints) # Iteratively update the slope then the intercept, # using Gen's metropolis_hastings operator. for iter=1:num_iters (trace, _) = metropolis_hastings(trace, select(:slope)) (trace, _) = metropolis_hastings(trace, select(:intercept)) end # From the final trace, read out the slope and # the intercept. choices = get_choices(trace) return (choices[:slope], choices[:intercept])end

最後,研究人員在一些數據上運行推理,得到下面的結果:

xs = [1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]ys = [8.23, 5.87, 3.99, 2.59, 0.23, -0.66, -3.53, -6.91, -7.24, -9.90](slope, intercept) = my_inference_program(xs, ys, 1000)println("slope: $slope, intercept: $intercept")

論文:Gen: A General-Purpose Probabilistic Programming System with Programmable Inference

摘要:概率建模和推理對於很多領域都是極為重要的。概率程式語言得到更廣泛採用的關鍵挑戰在於設計靈活且性能良好的系統。本文介紹的新概率編程系統 Gen 具有可用於建模以及終端用戶自定義和推理優化的全新語言結構。Gen 使得能夠解決多領域問題的概率程序編寫變得切實可行。Gen 程序能夠結合 Julia 編寫的生成模型、TensorFlow 中的神經網絡以及基於 Monte Carlo 可擴展庫的推理算法和數值優化方法。

本文還介紹了一些能夠結合 Gen 靈活性和性能的方法:

生成函數接口,一種封裝概率和/或可微計算的抽象具有自定義編譯器的特定領域語言,對不同的靈活性/性能進行權衡能夠編碼條件獨立性和重複計算常見模式的連結符,支持緩存加速標準推理庫,支持在 Gen 中編寫作為程序的自定義建議分布本文研究表明,在處理非線性狀態空間建模、現實世界時序數據結構學習、魯棒回歸以及基於深度圖像的 3D 人體姿態估計等問題上,Gen 的性能優於當前最佳的概率編程系統,有時超出多個數量級。

參考連結:

http://news.mit.edu/2019/ai-programming-gen-0626

https://probcomp.github.io/Gen/

https://github.com/probcomp/Gen

https://dspace.mit.edu/bitstream/handle/1721.1/119255/MIT-CSAIL-TR-2018-020.pdf

相關焦點

  • 最佳 AI 程式語言Top5
    數智君 | 翻譯任何類型AI系統的開發,都需要用到計算機編程。對特定的AI或機器學習任務來說,適用的程式語言不止一種。我們一起來分析一下,對於你特定的應用場景,哪種程式語言可稱最佳? 我們挑選了5種程式語言,如果你想在人工智慧領域獲得成功,那麼它們就是你的最佳選擇。當然,對給定的項目來說,每種語言都有其優勢和缺點,所以要先考慮你的最終目標,再決定具體採用哪種語言。
  • MIT發布針對K12學生的AI學習資源網站,免費上課,幼兒園就能學
    為了讓K-12的孩子們擁有更多的「學習機會」,由MIT媒體實驗室副教授 Cynthia Breazeal領導的一個團隊啟動了一個叫「aieducation.mit.edu」的人工智慧項目,為K-12學生(相當於從幼兒園到高三的所有學生)分享各種人工智慧方面的資料和學習活動,重點是如何開發和更好的使用人工智慧技術。
  • 多數語言ai方向不需要數學基礎
    謝邀我就是搞人工智慧的我們現在都是用deeplearning4j實現了slam機器學習、深度學習、離散數學、圖形圖像處理、計算機視覺、自然語言處理、資料庫、人工智慧算法基礎學科。只要是計算機相關的,如數學,如工科轉專業的,都要求要學習一下數學。因為這些都會有用,目的就是為了以後的學習做準備。人工智慧對基礎學科要求低於算法工程師。編程基礎謝邀,不同行業不同專業。
  • ai本身涉及到的東西有哪些?核心是什麼
    也有相應的專用語言支持ai,主要是一些工具語言(比如python的pypcgl,perl的scip)。部分ai庫內置了機器學習的算法,這些算法實際上大多都是在離散數學中的概率論中的數學模型。ai本身涉及到的東西很多,比如語言,算法,機器學習,深度學習,神經網絡等等。只要做出簡單實現的簡單程序,最初也可以編譯到c或者c++或者其他語言。通過簡單實現能帶來的進步,其實也就是vb的代碼量有可能增加那麼一點點。ai本身都是離散的,都是低級工具而已。主要是結構化的數據怎麼輸入到機器裡面,算法能做什麼。最主要的程式語言肯定是python/java等等。
  • 幼兒編程啟蒙怎麼做?智能家居+ai 玩空間是最佳教具
    以前不識字的人被叫「文盲」,而出生在人工智慧時代的孩子,如果不懂點編程,可能就要成為「code盲」了。學編程並非為了成為專業的程式設計師,而是通過學習掌握一定的編程思維和程式語言常識,為成為人工智慧時代所需的人才打下牢固根基。幼兒編程啟蒙怎麼做?
  • 2020七大AI 程式語言大匯總
    隨著近年來的發展,人工智慧促進企業的發展,這該歸功於底層程式語言核心的改進。隨著人工智慧的蓬勃發展和程式語言的持續改進,對高效、熟練的程式設計師和工程師的需求激增。雖然有很多程式語言可以讓你在人工智慧開發領域上輕鬆起步,但是沒有一種程式語言可以成為人工智慧編程的「一站式」解決方案,因為每種程式語言都有自己的獨特之處。目的不同,對語言的要求也會不同。
  • 我們拿到了全球最贊深度學習課程fast.ai授權,中文版免費放出!
    由大數據文摘發起的「fast.ai課程翻譯項目「,集合眾多志願者,耗時4個月,終於上線啦!我們與fast.ai的創始人兼研究員Jeremy Howard通過郵件多番輾轉,終於得到了官方授權!同時,大數據文摘漢化版中文課程也同步給了Jeremy,會在fast.ai官網作為多語言課程內容補充發布!
  • 2020 年最值得學習的 5 大 AI 程式語言
    人工智慧是當今世界最具需求的一個領域,人工智慧通過程式語言將智能技術帶入了各個不同的行業。很多人都想參與、學習或者了解人工智慧,但要參與人工智慧就需要掌握程式語言的知識。一種程式語言並不能解決所有問題,所有的程式語言相互協作才能解決問題。以下是 2020 年最值得學習的 5 大 AI 程式語言,希望對想學習人工智慧的同學有幫助。
  • 2020 年七大 AI 程式語言大盤點
    隨著近年來的發展,人工智慧促進企業的發展,這該歸功於底層程式語言核心的改進。隨著人工智慧的蓬勃發展和程式語言的持續改進,對高效、熟練的程式設計師和工程師的需求激增。雖然有很多程式語言可以讓你在人工智慧開發領域上輕鬆起步,但是沒有一種程式語言可以成為人工智慧編程的「一站式」解決方案,因為每種程式語言都有自己的獨特之處。目的不同,對語言的要求也會不同。
  • 這裡有一份最新的AI學習資源匯總,你收藏了嗎
    另外,在Coursera和DeepLearning.ai等網站上還有一些付費的深度學習課程,也可以作為參考。三./~cs164/sp19/)伯克利CS162 作業系統與系統編程 (https://cs162.eecs.berkeley.edu/)伯克利CS162 作業系統與系統編程課程視頻 (https://www.youtube.com/playlist?
  • MIT 推出程式語言 Gen,從方程式和手寫代碼上解放工程師
    軟體科學家 Jesus Rodriguez 寫了一篇文章,文章介紹了 Gen 以及其他一些類似的工具,雷鋒網 AI 科技評論將他的文章編譯整理如下。概率程式語言(PPL)領域正經歷著機器學習技術快速發展帶來的奇蹟般的復興。在短短的幾年裡,PPL 已經從一個模糊的統計研究領域發展出十幾個活躍的開源方案。最近,麻省理工學院(MIT)的研究人員推出了一種新的概率程式語言 Gen。這
  • AI 程式語言圖鑑
    其實,「人工智慧」的火熱並非一蹴而就,早在 1956 年「人工智慧」概念就已經被提出了。那年,在美國東部的達特茅斯學院舉辦了歷史上第一次人工智慧研討會,會上John McCarthy首次提出了「人工智慧」術語,它指的是像人類那樣思考的機器,這被認為是「人工智慧」誕生的標誌。 經過 60 多年的發展和探索,「人工智慧」已經迎來了第三次革命——機器學習。
  • 七夕節脫單「神助攻」,AI教你寫情話
    但是,禮物的小賀卡上準備好要寫什麼了嗎?打電話或者見面後準備說啥?還在說「XX,我愛你」,「XX,我們白頭到老」麼?還是一直撓頭不知道怎麼表達?沒關係,AI來拯救你!AI情話、AI藏頭詩、AI情詩大禮包開源上線啦!
  • 以ai為基礎的其他知識和技能有可能被ai取代嗎
    人工智慧時代的到來,讓各大公司在招聘時要求掌握相關知識和技能,利用人工智慧技術提高招聘效率,一旦ai在日常工作中運用該技術,那麼我們的工作會面臨被取代的危險。那麼,要如何做才能讓自己的職業發展不被取代呢?以ai為基礎的其他知識和技能有可能被ai取代嗎?ai為基礎的其他知識和技能人類在識字母的過程中獲得聲、形兩種形態的可能的表示方法,也就是字母的組合。
  • python,語法簡單,容易上手,基本上教程看一遍就能用
    ai的核心問題是基於符號的資料庫處理。回想下matlab,他們的資料庫都是matlab自帶的,之後學習的時候coding語法也有點熟悉。那麼ai呢?他的基本不是語法上的,是mlinference的經驗,你們寫好的ide能幫助你打到自然語言編程。
  • AI教育從幼兒園開始:MIT推出全球K12人工智慧學習資源網站
    網站地址:https://aieducation.mit.edu/這一項目由 MIT 媒體實驗室副教授 Cynthia Breazeal 帶頭搭建,其提供的學習資源可以滿足全球數百萬兒童、父母和教育工作者的需求,並為停課在家的學生們提供一個好的免費教育機會。
  • 華裔MIT博士開發新系統,快速解密「死語言」
    之後,一個叫商博良的「語言天才」歷時約20年,終於破譯了上面的其他文字。原來,這三種語言寫的是同一件事。 如果商博良出生在現代,也許他20年的鑽研NLP很快就能解決。 MIT新研究:無需「裙帶關係」,就能破譯語言 時至今日,世界上至少有12種語言仍未被破譯。破譯失傳語言,很多時候要靠它和其他語言的關係。 商博良能破譯象形文字,也是靠著他會多門語言的天賦。
  • Facebook AI 用深度學習實現程式語言轉換,代碼庫遷移不再困難!
    Facebook AI的方法能夠將代碼從一種程式語言轉換為另一種程式語言,而無需數據進行訓練的AI系統。 Facebook AI已經證明TransCoder可以成功地在C ++,Java和Python之間完成語言轉換。TransCoder的性能優於開放原始碼的且基於商業規則的翻譯程序。
  • 詳解:少兒編程學什麼?它和成人編程教育有何不同?
    2018年高考數學卷2019年全國卷理科數學讓孩子學習編程已然不是興趣所需,而是逐漸成為與語數外同等重要,必須掌握的一門學科知識了。少兒編程是把原來複雜的英文代碼程式語言轉換成圖形化的積木構件,以指令化、模塊化方式,以遊戲、情景動畫等形式呈現。少兒編程不是為了寫複雜代碼,而是通過「編」玩邊學著重培養孩子的九大能力:觀察力、想像力、創造力、邏輯思維力、問題解決能力、空間思維能力、判斷性思維、序列與條件、調試操作能力。
  • 腦神經活動顯示:程式語言不是語言,也不是數學
    取而代之的是,代碼激活了被稱為多需求網絡的分布式神經網絡——該網絡也被用於解決複雜的認知任務,如解決數學問題或填字遊戲。 但閱讀代碼用到的多需求網絡的系統資源,和思考數學時也有顯著差異,這表明代碼也不是數學語言。 「閱讀計算機代碼似乎是特異的能力。程式語言與語言不同,和數學與邏輯也不相同。」