13. ベイズ推定の新しいソフトStanについて

藤宮

はじめに

ベイズ推定を行うためには、尤度関数などを予め求めて気合を入れてプログラミングするよりもBUGS(WinBUGS, OpenBUGS, JAGS)などのソフトでモデルを記述して実行する方がとても楽に確認することができます。ただ、これらのソフトを使用していても、結構処理時間がかかる問題がありました。今回は、Stanという新しいベイズ推定のフリーソフトに関しての紹介です。

Stanの概要

Stanのホームページは下記のとおりです。

モデルを記述に関して若干方法が異なっているのですが、BUGSソフトと同様、まずはモデルを記述します。Stanは記述されたモデルをC++にいったんトランスレートし、それからコンパイルして実行するという流れです。これにより非常に高速な処理が期待されるだけでなく、いったんコンパイルされたモジュールに別なデータを投入して、実行させるということができるようになりました。これまでのBUGSでは、別なデータセットで処理する場合も、モデルをチェックからデータのセット、イニシャライズ、コンパイルして実行までをすべてやり直す必要がありましたので、それらが一気に高速化できます。

さらに、C++という言語を利用しているので、モデルの記述が厳密になり、データの型(int, real)や変数の取りうる範囲まで制限して宣言することが可能となりました。BUGSソフトでは、なぜサンプリングでエラーが発生しているのかなど、いろいろと想像しながら対策が必要でしたので、経験が物を言い、初心者では、何がなんだか全く分からずあきらめてしまうということも多かったのではないかと思います。その点、具体的に指摘されるため、デバグがかなり楽になっています。

内部的にも乱数のサンプリング方法で、ハミルトニアン・モンテカルロ法を採用しているということで、収束の安定性もかなり良くなったということです。弊社でもいろいろとためしてみると、確かに収束がかなり早くなっているモデルが多いです。ただ、モデルによっては、リジェクトされる比率が増えるような例もあるようで、何でもかんでも早くなるというわけでないようです。いずれにしましても楽しみなソフトが一つ増えました。

最後に一言、頭で考えたモデルを実際に使えるものに持って行くまでの努力は、BUGSソフトと変わりません。サンプリング方法が異なっているため、思ったような動きにならない場合もあります。多くの階層や複雑な関係を持つような統計モデルでは、釣竿の先につけた孫の手で自分の背中を掻いているような状況は変わらないといっても良いのかもしれません。