確率的プログラミング(PPL)

Probabilistic Programming Language。確率変数を組み合わせて確率モデル(特にbayesian-statisticsのベイズモデル)を記述し、データからパラメータを推論する枠組み。実装例に Pyro(PyTorch backend)、Stan、webppl など。

モデリングと推論

  • 生成(forward): 確率変数を分布(ベルヌーイ、正規分布など)からサンプリングし、階層モデルを組む。例: 天気 cloudy ~ Bernoulli(0.3) → 気温 → アイスクリーム売上、とすると二峰性の分布が得られる。
  • 推論: モデルを仮定しパラメータを推定する。主な方法は変分ベイズ(変分下限の最適化、variational-autoencoder と同じ発想)と MCMC。特殊系に MAP 推定・ラプラス近似など。
  • Pyro の pyro.plate は確率変数を変数のように一括(ベクトル化)して扱える。

確率分布はモナド

確率変数間の依存はグラフィカルモデル(DAG)で表せる。「ある確率で表が出るコインを投げる」操作は R<double> -> (double -> R<bool>) -> R<bool> という型を持ち、これはモナドの bind に一致する。確率分布をモナドとして扱う視点は、関数型プログラミングと確率モデルを橋渡しする。

関連