R and Stan:貝式運算的新星
眾所皆知貝式統計 (Bayesian Statistics) 相較與古典統計而言,在運算上需耗費較多的資源且容易受到硬體限制。隨著電腦運算在近年來的提升,許多複雜的後驗分布 (posterior distribution)的計算從不可能變成可能後,貝式統計也逐漸拾回人們的注目。現代貝氏統計的運算,極度仰賴MCMC (Markov Chain Monte Carlo)來取得後驗分布,其中Metropolis-Hasting或Gibbs Sampler是MCMC最受歡迎的採樣方法。一個好的貝式運算軟體,能夠支援這兩種採樣方法幾乎是必備條件。
講到貝式運算軟體,多數人可能會直接聯想到WinBUGS (Bayesian Inference Using Gibbs Sampler)。約在十多年前,WinBUGS是貝式運算軟體中的主流,但BUGS家族 (WinBUGS、OpenBUGS…)為Component Pascal所寫的特性,一個少許人熟悉的語言,讓BUGS在後續開發與維護上相當不易。爾後,隨著JAGS (Just Another Gibbs Sampler)的出現,貝式軟體使用的情勢也出現變化。JAGS雖然寫法和WinBUGS相似,但JAGS是基於C++所建立的語言。C++廣大的社群以及良好的平台獨立性,再加上MCMC運算速度上的改善,讓JAGS順理成章地取代WinBUGS,成為貝式運算的王者。
不過即便是WinBUGS或是JAGS都是以Gibbs Sampler或Metropolis-Hasting採樣為主的軟體,即便在程式上有了優化,本質上還是會被MCMC的一些缺點所受限。本文欲介紹的主角Stan,是一款以MCMC改善版─Hamiltonian Monte Carlo (HMC)為基礎建立的軟體。

Stan的起源
Stan是在2012年開始,由哥倫比亞大學 (University of Columbia)應用統計系的學者為首所開發的貝式運算軟體。Stan的開發者之一Andrew Gelman,是貝式統計的大師,在他的經典教科書《Bayesian Data Analysis》最新版中,也已經全更新由Stan作為程式基礎。Stan的命名,是取自並紀念Monte Carlo方法的先驅─Stanislaw Ulam (他也是著名的曼哈頓計畫參與者之一)。Stan問世至今約5、6年,雖然是一個相對年輕的軟體,但已在學界與產業界逐漸累積人氣。甚至許多使用BUGS或JAGS的舊用戶,也紛紛詢問並已轉換至Stan來建立貝式模型。
一個新工具的開發,不外乎是為了解決現有工具的限制。Stan開發的目的主要是為了解決BUGS與JAGS無法對付的複雜模型,並且加速Monte Carlo模擬的運算速度。為此,Stan相對他的老前輩,有幾個特點與優勢:
- Stan預設的採樣法是No-U-Turn Sampler (NUTS) ,是一種Hamiltonian Monte Carlo (HMC)的變型。HMC最大的改善是減少傳統MCMC因autocorrelation所帶來的影響。雖然在單次採樣的cost較多,但整體上達到收斂所需的iteration與時間相較MCMC仍可減少許多。
- Stan支援automatic differentiation variational inference (ADVI),一種自動化variational Bayes inference的演算法。Variational inference相較MCMC在大規模的資料集應用上有明顯優勢,在機器學習與人工智慧的社群也有很廣泛的應用。但一般要針對不同的model部署variational algorithm,並非易事。Stan能夠支援自動化部署, 讓使用者僅須提供模型就能達到viariational inference,是一項很強大的功能。
安裝與支援
Stan是由C++所建立的軟體,可安裝於Windows、Linux、Mac平台。Stan提供多個程式語言的接口,包含R、Python、Matlab、Julia、Scala等。不過雖然Stan理論上提供多個選項,但大多數的Stan使用者與資源還是來自於R的社群。而就如同本文標題所示,筆者也是RStan的愛好者,日後有關於Stan的操作展示,也會基本以RStan為主。本文僅初步介紹Stan的特色,安裝過程會在之後的文章詳細介紹。另外,Stan的官方網站也提供相當詳細的Stan的安裝方式,本文也提供連結予讀者參照:
總結
Stan的官方網站文件齊全,社群論壇也很活躍,雖然發展時間不長卻能夠逐漸成為學業界焦點,歸因其背後有著非常出色的開發者與社群在支持。幾乎可肯定的是,Stan會成為接下來幾年的貝式統計焦點。
