【轉載】無需數學就能寫AI,MIT提出AI專用編程語言Gen

互聯網新技術新應用動態2019-07-07 09:43:46

機器之心報道

機器之心編輯部

在幫助專家做研究的同時,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 的性能優於當前最佳的概率編程系統,有時超出多個數量級。


https://hk.wxwenku.com/d/201099486