確率的プログラミング(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 に一致する。確率分布をモナドとして扱う視点は、関数型プログラミングと確率モデルを橋渡しする。
関連
- bayesian-statistics / pytorch / variational-autoencoder
- _moc-ml-robotics(ml-robotics クラスタの atomic ノート群)