天天看點

谷歌提出深度機率程式設計語言 Edward

edward 官網對這門新語言的描述是:edward 是一個用于機率模組化、推理和評估的 python 庫。它是一個用于快速實驗和研究機率模型的測試平台,其涵蓋的模型範圍從在小資料集上的經典層次模型到在大資料集上的複雜深度機率模型。edward 融合了以下三個領域:貝葉斯統計學和機器學習、深度學習、機率程式設計。

它支援以下方式的模組化:

定向圖模型

神經網絡(通過 keras 和 tensorflow slim 等庫)

條件特定的無向模型

貝葉斯非參數和機率程式

它支援以下方式的推理:

變分推理(variational inference)

黑箱變分推理

随機變分推理

包容 kl 散度(inclusive kl divergence):text{kl}(p|q)kl(p∥q)

最大後驗估計

蒙特卡洛(monte carlo)

哈密爾頓蒙特卡羅(hamiltonian monte carlo)

随機梯度 langevin 動态

metropolis-hastings

推理的組成

期望最大化(expectation-maximization)

僞邊界和 abc 方法(pseudo-marginal and abc methods)

消息傳遞算法(message passing algorithms)

它支援以下的模型評估和推理:

基于點的評估(point-based evaluations)

後驗預測檢查(posterior predictive checks)

edward 建構于 tensorflow 之上。它支援諸如計算圖、分布式訓練、cpu/gpu 內建、自動微分等功能,也可以用 tensorboard 可視化。

以下是介紹論文的摘要介紹:

論文标題:深度機率程式設計(deep probabilistic programming)

谷歌提出深度機率程式設計語言 Edward

摘要

我們提出了一種圖靈完備的機率程式設計語言 edward。edward 建構于兩種組合式表示的基礎上——随機變量和推理(random variables and inference)。通過将推理看作「第一類公民」,與模組化(modeling)一樣,我們表明機率程式設計可以做到和傳統深度學習一樣靈活和有計算效率。

對于靈活性,edward 讓我們可以使用從點估計(point estimation)到變分推理和 mcmc 等各種可組合的推理方法來拟合相同的模型。此外,edward 還可以将模組化表征複用作推理的一部分,這能促進豐富的變分模型和生成對抗網絡的設計。

對于效率,edward 內建到了 tensorflow 之中,在已有的機率系統基礎上提供了顯著的加速。比如,在基準 logistic 回歸任務上,edward 至少比 stan 和 pymc3 快 35 倍。

引言

深度神經網絡的本質是組合式的(compositional)。使用者可以以創造性的方式來将層連接配接起來,而無需擔憂如何去執行測試(前向傳播)或推理(基于梯度的優化,通過反向傳播和自動微分)。在這篇論文中,我們為機率變成設計組合式表示(compositional representations)。機率程式設計讓使用者可以将生成機率模型指定為程式(program),然後将這些模型「編譯(compile)」為推理過程(inference procedures)。機率模型本質上也是組合式的,而之前的大部分工作都集中在通過組合随機變量來建構豐富的機率程式上(goodman et al., 2012; ghahramani, 2015; lake et al., 2016)。

但很少有研究考慮過用于推理的類似的組合性。相反,現在大多數已有的機率程式設計語言都将推理引擎當作從模型中抽象出來的黑箱來處理。這些方法不能代表在複用模型表征的機率推理中的最新進展。比如,在變分推理(kingma & welling, 2014; rezende & mohamed, 2015; tran et al., 2016b)和生成對抗網絡(goodfellow et al., 2014)上的進展已經變得非常重要了。

我們提出了一種圖靈完備的機率程式設計語言 edward。edward 建構于兩種組合表示的基礎上——随機變量和推理(random variables and inference)。我們給出了如何将 edward 內建到已有的計算圖架構(如 tensorflow)中的方法。tensorflow 這樣的架構能夠「免費」提供分布式訓練、并行性、向量化和 gpu 支援等計算優勢。我們還表明 edward 可以如何讓我們輕松使用從點估計(point estimation)到變分推理和 mcmc 等各種可組合的推理方法來拟合相同的模型。通過将推理看作「第一類公民」,與模組化(modeling)一樣,我們表明機率程式設計可以做到和傳統深度學習一樣靈活和有計算效率。比如,我們的哈密爾頓蒙特卡羅(hamiltonian monte carlo)實作比現有的軟體快 35 倍。

谷歌提出深度機率程式設計語言 Edward

圖 1:beta-bernoulli 程式(左)與其計算圖(右)。從圖中取 x 會生成一個有 50 個元素的二值向量

谷歌提出深度機率程式設計語言 Edward

圖 2:用于一個 28×28 像素圖像的資料集的變自編碼器:(左)圖模型,其中虛線表示推理模型;(右)機率程式,帶有 2 層神經網絡

谷歌提出深度機率程式設計語言 Edward

圖 3:貝葉斯 rnn:(左)圖模型;(右)機率程式。該程式的時間步驟未指定;其為循環使用了一個符号(tf.scan)

谷歌提出深度機率程式設計語言 Edward

圖 4:(左)變分推理;(右)蒙特卡洛

谷歌提出深度機率程式設計語言 Edward

圖 5: 生成式對抗網絡:(左側)機率圖模型(右側)機率程式。加入一些假資料以及訓練其判别式模型,能不斷強化該生成模型

谷歌提出深度機率程式設計語言 Edward

圖 6:lda 文檔主題生成模型,隐含狄利克雷分布 (blei et al., 2003)

谷歌提出深度機率程式設計語言 Edward

圖 7: 高斯矩陣分解

繼續閱讀