MIT 推出編程語言 ,從方程式和手寫代碼上解放工程師

本文轉自雷鋒網,如需轉載請至雷鋒網官網申請授權。

麻省理工學院的研究人員最近推出了一種新的概率編程語言 Gen,這種語言讓研究人員在不需要處理方程式和手動編寫高性能代碼的情況下,編寫應用人工智能技術的多個領域的模型和算法。軟件科學家 Jesus Rodriguez 寫了一篇文章,文章介紹了 Gen 以及其他一些類似的工具,雷鋒網 AI 科技評論將他的文章編譯整理如下。

概率編程語言(PPL)領域正經歷着機器學習技術快速發展帶來的奇蹟般的復興。在短短的幾年裏,PPL 已經從一個模糊的統計研究領域發展出十幾個活躍的開源方案。最近,麻省理工學院(MIT)的研究人員推出了一種新的概率編程語言 Gen。這種新語言讓研究人員在不需要處理方程式和手動編寫高性能代碼的情況下,編寫應用人工智能技術的多個領域的模型和算法。

PPL 是機器學習 pipeline 的常規組件,但其實現仍然具有挑戰性。雖然市場上的 PPL 顯著增加,但大多數 PPL 仍侷限於研究工作,不適用於實際的應用。在 2015 年穀歌開源 TensorFlow 之前,深度學習領域也經歷了類似的挑戰。使用 TensorFlow,開發人員能夠使用一致的框架構建複雜但高效的深度學習模型。從某種意義來說,Gen 正在尋找概率規劃的方法,正如 TensorFlow 爲深度學習所做的那樣。然而,爲了做到這一點,Gen 需要在 PPL 的兩個關鍵特徵上進行精細平衡。

表達性與效率

現代 PPL 最大的挑戰是在建模表達性和推理效率之間取得平衡。雖然許多 PPL 在語法上都很豐富,可以用來表示幾乎任何模型,但它們往往支持有限的推理算法,這些算法的收斂速度非常慢。其他 PPL 有豐富的推理算法,但仍然侷限於特定的領域,使其不適用於一般的應用。

通用 PPL 應能實現兩個基本效率向量:

1)推理算法效率:一個通用的 PPL 應該允許開發人員在不犧牲底層組件性能的情況下創建定製的、高度複雜的模型。PPL 語法的表達性越強,優化過程就越具有挑戰性。

2)實現效率:通用 PPL 要求系統運行超越算法本身的推理算法。實現效率由存儲算法狀態的數據結構、系統是否利用緩存和增量計算等因素決定。

Gen

Gen 通過利用一種新的體系結構來解決前面提到的一些挑戰,該體系結構改進了一些傳統的 PPL 技術。基於 Julia 編程語言,Gen 引入了一種體系結構,該體系結構將模型表示爲圖靈完整建模語言中的程序代碼,而不是黑盒,它公開了通過公共接口進行推理的功能。這些黑盒稱爲生成函數,包括具有以下功能的接口:

1.構建模型的工具:Gen 提供多種可交互操作的建模語言,每種語言的靈活性/效率權衡都不一樣。單個模型可以組合來自多個建模語言的代碼。生成函數利用了非常適合模型和增量計算的數據結構。

2.裁剪推理的工具:Gen 爲推理編程提供了一個高級庫,僅通過生成函數與模型交互,它實現了推理算法模塊的構建。

3.評估:Gen 提供了一個經驗模型,用以評估其在已知推理問題中對備選方案的性能。

下圖說明了 Gen 的體系結構。可以看到,框架支持差異推理算法,以及基於生成函數概念的抽象層。

使用 Gen

開始使用 Gen 是很簡單的事情。可以使用 Julia 軟件包管理器安裝該語言工具。

pkg> add https://github.com/probcomp/Gen 

在 Gen 中編寫生成函數和編寫帶有幾個擴展名的 julian 函數一樣簡單。

@gen function foo(prob::Float64)  z1 = @trace(bernoulli(prob), :a)  z2 = @trace(bernoulli(prob), :b)  return z1 || z2 end 

Gen 還包含一個可視化框架,可以用來繪製推理模型並評估其效率。

# Start a visualization server on port 8000  server = VizServer(8000)  # Initialize a visualization with some parameters  viz = Viz(server, joinpath(@__DIR__, "vue/dist"),  Dict("xs" => xs, "ys" => ys, "num" => length(xs), "xlim" => [minimum(xs), maximum(xs)], "ylim" => [minimum(ys), maximum(ys)])) # Open the visualization in a browser  openInBrowser(viz) 

類似工具推薦

Gen 並不是唯一一種試圖解決可編程推理挑戰的語言。近年來,PPL 有了許多強大的替代方案:

  • Edward 

Edward 是一種用 Python 編寫的圖靈完全概率編程語言(PPL)。Edward 最初是由 Google Brain 團隊支持的,但現在有了很多的貢獻者。Edward 的原始研究論文發表於 2017 年 3 月,自那時起,Stack 在機器學習社區內得到了廣泛的採用。Edward 融合了三個領域:貝葉斯統計和機器學習、深度學習、概率編程。該庫與 Keras 和 TensorFlow 等深入學習框架無縫集成。

  • Pyro 

Pyro 是 Uber 人工智能實驗室發佈的一種深層概率編程語言(PPL)。Pyro 建立在 PyTorch 之上,基於四個基本原則:

  1. 通用:Pyro 是一個通用的 PPL,它可以表示任何可計算的概率分佈。怎樣表示?從具有迭代和遞歸(任意 Python 代碼)的通用語言開始,然後添加隨機抽樣、觀察和推理。
  2. 可擴展:Pyro 可以擴展到大型數據集,手寫代碼的開銷很小。如何做到?通過建立現代黑盒優化技術,利用小批量的數據進行近似推理。
  3. 最小:Pyro 靈活且可維護。如何做到?Pyro 是用一個強大的、可組合的抽象內核實現的。在可能的情況下,可以使用 PyTorch 和其他庫。
  4. 靈活:Pyro 的目標是在你需要的時候實現自動化和控制。如何做到?Pyro 使用高級抽象來表示生成和推理模型,同時允許研究人員輕鬆自定義推理。
  • Infer.Net

微軟最近開放了一個爲.NET 開發者簡化概率編程的框架。微軟研究院從 2004 年開始致力於 Infer.net,但直到最近,隨着深度學習的出現,該框架才真正流行起來。Infer.net 的強大優勢,使得它成爲開發人員冒險進入深度 PPL 領域的有力選擇。

Gen 是 PPL 中最新但也是最有趣的一個添加項。統計與深度學習相結合是人工智能未來發展的關鍵要素。像 Gen 這樣的嘗試正努力試圖使 PPL 通用化,就像 TensorFlow 對深度學習所做的那樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章