パラメータの最大数
問題の構造に大きく依存します。たとえば、スタンでのさまざまな階層線形モデルに関する私の経験では、約10 000から30 000のパラメーターで非常に遅くなった(完了までに数時間または数日)(いくつかの再現可能な数値は、スタン対INLAに関する私のブログにあります)。常微分方程式と複雑な構造を含むモデルを操作する場合、10個のパラメーターが多すぎる可能性があります。独立した法線のベクトルのみをフィッティングする場合(下記を参照)、スタンは、デフォルト設定(1000イターウォームアップ、1000イターサンプリング、4チェーン)を使用して、1e5パラメーターで完了するのに約40分かかります。したがって、1e5よりもはるかに多くのパラメータを持つことは、実際的でない可能性が非常に高くなります。
ただし、アルゴリズムのハイパーパラメータを微調整するとき、スタンランの最も長い部分はウォームアップフェーズです。自分で適切な値を提供できる場合(これは難しい)、パフォーマンスをさらに向上させることができます。
また、チェーン内並列処理とGPUへのマトリックス操作のオフロードのためのMPIのサポートをすぐにStanに追加する必要があります(たとえば、ここhttp://discourse.mc-stan.org/t/parallelization-again-mpi-to- the-rescue / 455/11、およびここhttp://discourse.mc-stan.org/t/stan-on-the-gpu/326/10)ので、さらに大きなモデルでも近い将来実用的になる可能性があります。
高次元の診断
StanのHMC実装は、多数のパラメーターn_eff
(発散遷移、効果的なサンプルサイズ)、分割Rhat
(潜在的なスケール削減)でも機能する複数の有用な診断を提供します。これらの詳細な説明については、Stanマニュアルの「Initialization and Convergence Monitoring」のセクションを参照してください。
単純なモデルのRコード-スタンにフィットする、パラメーターの数をスケールできる独立した法線のセット:
library(rstan)
model_code = "
data {
int N;
}
parameters {
vector[N] a;
}
model {
a ~ normal(0,1);
}
"
model = stan_model(model_code = model_code)
fit_large = sampling(model, data = list(N = 1e5))