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

機器之心發表於2019-06-27

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

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

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

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

論文圖 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

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

摘要:機率建模和推理對於很多領域都是極為重要的。機率程式語言得到更廣泛採用的關鍵挑戰在於設計靈活且效能良好的系統。本文介紹的新機率程式設計系統 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


相關文章