Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TFUG_PPL_compare_HELLOCYBER.pdf

hellocyber
September 08, 2020
12k

 TFUG_PPL_compare_HELLOCYBER.pdf

This article was a slide used at TFUG bayes branch in Japan which was created by HELLOCYBERNETICS.

hellocyber

September 08, 2020
Tweet

Transcript

  1. 自己紹介 • 学生時代: Brain Computer Interface の分野 – 制御や最適化に興味があった(応用対象は問わず) –

    流れの中で機械学習を学ぶことを決意(ブログ) • 今:ロボティクスの分野 – 制御や認識を扱っている興味の分野に戻ってきた – 逆に機械学習・確率モデリング楽しい
  2. 目次 • PPL の役割と意義 • PPL 速度比較 • モデリング、推論 API

    を簡単に比較 • Pyro で Gaussian Mixture Model の MCMC, ADVI
  3. なぜ PPL を利用するのか ▪ データ分析の大まかな流れ – 仮説を構築 – データ収集 –

    データと現象のモデリング – 推論実行 – 説明、予測実施
  4. なぜ PPL を利用するのか ▪ データ分析の大まかな流れ – 仮説を構築 – データ収集 –

    データと現象のモデリング – 推論実行 – 説明、予測実施 ここを助けてもらうため 近年データは複雑化・巨大化 計算機が重要に
  5. モデリングと推論実行の概要 X Y W X Y W μ ∑ σ

    p( X ,Y ,W )=p(X) p(W ) p(Y|X ,W ) p(Y ,W|X)=p(W ) p(Y|X ,W ) p(W )=N (W|μ ,Σ) p(Y ,W|X)= p( X ,Y ,W ) p(X) =p(W ) p(Y|X ,W ) p(Y|X ,W )=N (Y|f (W , X),σ) X Y W μ ∑ σ N p(W|( X ,Y )N )= p(W ,(X ,Y )N ) p(( X ,Y)N ) 1.予測したい変数を取り巻く確率変数の関係性を整理 2.各変数、パラメータに確率分布を設定(具体的な同時分布が形成) 3.観測データによるパラメータの事後分布を計算(紙とペン or MCMC or 変分推論) = ∏ i=1 N p(W , X i ,Y i ) ∫ W ∏ i=1 N p(W , X i ,Y i )dW = p(W )∏ i=1 N p(Y i |X i ,W ) ∫ W p(W )∏ i=1 N p(Y i |X i ,W )dW
  6. モデリングと推論実行の概要 X Y W X Y W μ ∑ σ

    p( X ,Y ,W )=p(X) p(W ) p(Y|X ,W ) p(Y ,W|X)=p(W ) p(Y|X ,W ) p(W )=N (W|μ ,Σ) p(Y ,W|X)= p( X ,Y ,W ) p(X) =p(W ) p(Y|X ,W ) p(Y|X ,W )=N (Y|f (W , X),σ) X Y W μ ∑ σ N p(W|( X ,Y )N )= p(W ,(X ,Y )N ) p(( X ,Y)N ) 1.予測したい変数を取り巻く確率変数の関係性を整理 2.各変数、パラメータに確率分布を設定(具体的な同時分布が形成) 3.観測データによるパラメータの事後分布を計算(紙とペン or MCMC or 変分推論) = ∏ i=1 N p(W , X i ,Y i ) ∫ W ∏ i=1 N p(W , X i ,Y i )dW = p(W )∏ i=1 N p(Y i |X i ,W ) ∫ W p(W )∏ i=1 N p(Y i |X i ,W )dW この領域を PPL が対応
  7. 様々な PPL • Wikipedia   https://en.wikipedia.org/wiki/Probabilistic_programming 参照 , 一部抜粋 近年は深層学習ライブラリベースの GPU

    対応 PPL が出てきている • TensorFlow Probability (TensorFlow) • Pyro (PyTorch) • NumPyro (Jax) • PyMC4 (TensorFlow Probability) • Stan (TensorFlow Probability 予定? ) 等
  8. 可視化ライブラリ ArviZ • 共通のデータ構造である InferenceData を提供 • Python, Julia から利用可能

    • TFP, PyMC, Pyro, PyStan 対応 pip install arviz https://arviz-devs.github.io/arviz/
  9. 実行時間ベンチマーク 1 (by Turing.jl team) Slowest Fastest Dirichlet Process Gaussian

    mixture model の推論速度を検証 4 Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz 引用: https://luiarthur.github.io/TuringBnpBenchmarks/
  10. 実行時間ベンチマーク 2 (by Turing.jl team) Slowest Fastest Gaussian Process regression

    model の推論速度を検証( c5.xlarge AWS instance. ) 引用: https://luiarthur.github.io/TuringBnpBenchmarks/
  11. 実行時間ベンチマーク 3 (by Turing.jl team) Slowest Fastest Gaussian Process classifier

    model の推論速度を検証( c5.xlarge AWS instance. ) 引用: https://luiarthur.github.io/TuringBnpBenchmarks/
  12. 新しい PPL も十分に実用的速度 • 基本的に Stan は速い • Compile 時間を含めると

    New PPLs は速い モデル自体を何度も弄るなら PPLs は十分な選択肢
  13. モデリングと推論実行の概要 X Y W X Y W μ ∑ σ

    p( X ,Y ,W )=p(X) p(W ) p(Y|X ,W ) p(Y ,W|X)=p(W ) p(Y|X ,W ) p(W )=N (W|μ ,Σ) p(Y ,W|X)= p( X ,Y ,W ) p(X) =p(W ) p(Y|X ,W ) p(Y|X ,W )=N (Y|f (W , X),σ) X Y W μ ∑ σ N p(W|( X ,Y )N )= p(W ,(X ,Y )N ) p(( X ,Y)N ) 1.予測したい変数を取り巻く確率変数の関係性を整理 2.各変数、パラメータに確率分布を設定(具体的な同時分布が形成) 3.観測データによるパラメータの事後分布を計算(紙とペン or MCMC or 変分推論) = ∏ i=1 N p(W , X i ,Y i ) ∫ W ∏ i=1 N p(W , X i ,Y i )dW = p(W )∏ i=1 N p(Y i |X i ,W ) ∫ W p(W )∏ i=1 N p(Y i |X i ,W )dW
  14. Stan で単回帰 1. モデル作成  ( Stan ファイルフォーマットに従う) 2. MCMC サンプル取得

    Stan (C++) を Python や R から叩く Stan にやらせたいことは Stan ファイルに書ききる
  15. TFP で MCMC :単回帰モデル分散既知 1. モデル作成(同時分布の定義) 2. 同時確率関数作成 3. 確率遷移核の作成

    4. MCMC サンプラ関数呼び出し サンプラ周りのコードが少し重い 推論対象のパラメタもユーザが管理
  16. TFP で MCMC :単回帰モデル分散未知 1. モデル作成(同時分布の定義) 2. 同時確率関数作成 3. 確率遷移核の作成

    4. MCMC サンプラ関数呼び出し サンプラ周りのコードがだいぶ重い 推論対象のパラメタもユーザが管理
  17. PyMC4 で MCMC : 単回帰 ( 分散未知 ) PyMC4 モデルを推論関数に渡すだけ(パラメタ管理等を任せられる)

    別途モデルを解釈できる関数で予測モデルなどを構築可能 1.モデルを書く 2 . sample 関数に渡す
  18. 書きやすさに関する所感 • TensorFlow Probability は一段低いとこから書く 細かいことを書ける / 書かなければいけない • 個人的には

    Pyro のインターフェースが気に入っている • PyMC4 は完成すれば第一候補 ( PyMC4 で弄れない時に仕方なく TFP を使う感じ)
  19. 現在の状況 ・ TFP  基本的には研究用 + バックエンドの立ち回り ?   (Stan3, PyMC4,

    Edward2 等 TFP を基礎に置く PPL, TFP for Jax, for numpy 開発中 )   tf.Variable を tf.Module で管理 , tf.keras.Model で管理が両方いる   tfp.layers, tfp.sts, tfp.glm, tfp.vi 等の高レベルモジュールあり ・ Pyro / NumPyro  本体は必要最小限の機能を提供( MiniPyro でコアが分かる)     contrib に特定用途用の高レベルモジュールが点在   Pyro は特に変分推論と NN の組み合わせが非常に柔軟 ・ PyMC4   Mixture や TimeSeries 等の整備はこれから、本格利用はまだ早い
  20. 推論済のパラメタで生成モデル p μ ∑ X Z K N 1. 事後分布(

    mcmc サンプル)から 各パラメタの平均を計算 2. 元のモデルから条件付き確率モデル作成 3. 条件付き確率モデルからサンプル生成
  21. 最後に • Deep Learning がライブラリの整備で隆盛した • Julia Lang でも Turing.jl

    や Gen.jl 等が開発中 • 今後 PPL の整備で確率モデリングの人口増加、有用性認知 • TFP と PyMC4 は確率モデリングをブーストするはず • 今は個人的に Pyro が使いやすいが、今後の整備に注目
  22. 参考 DynamicPPL: Stan-like Speed for Dynamic Probabilistic Model https://arxiv.org/abs/2002.02702 Turing.jl

    チームメンバによる PPL の比較 https://luiarthur.github.io/TuringBnpBenchmarks/dpsbgmm ArviZ https://arviz-devs.github.io/arviz/ TensorFlow Probability https://www.tensorflow.org/probability?hl=ja