Pyro 0.3.0 リリースノート

PyTorch 1.0.0 リリースノート (翻訳)

翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 12/14/2018

* 本ページは、github Pyro の releases の pyro 0.3.0 を翻訳したものです:

 

新しい特徴

並列サンプリング

poutine.broadcast 上に構築して、Pyro の SVI と HMC 推論アルゴリズムは今では並列サンプリングをサポートします。例えば SVI で並列サンプリングを使用するためには、ELBO インスタンスを作成して 2 つの particles オプションを configure します、e.g.

elbo = Trace_ELBO(num_particles=100,
                  vectorize_particles=True)

 

Dependent enumeration

TraceEnum_ELBO, HMC, NUTS そして infer_discrete は今では離散潜在変数を正確に周辺化除去 (= marginalize-out) できます。狭い木幅 (= narrow treewidth) を持つ依存性構造のために、Pyro はメッセージングパッシング・アルゴリズムを通して安っぽい (= cheap) 周辺化を遂行します、HMM, DBN そして CRF のための Baum-Welch のような古典的な学習アルゴリズムを有効にして。詳細は enumeration チュートリアル を見てください。

 

HMC/NUTS 拡張

  • mass 行列 (質量行列) はウォームアップ段階にステップサイズと連動して学習可能です。この特徴は HMC/NUTS のパフォーマンスを著しく改良します。
  • (CPU 上で) 複数の並列チェーンがサポートされます、R-hat のような様々なチェーン diagnostics と効果的なサンプルサイズとともに。
  • 離散潜在変数を持つモデルが並列に列挙されます。
  • NUTS では、trajectory から候補を選択する 2 つの方法があります: 多項サンプリングとスライスサンプリングです。デフォルトでは多項サンプリングを実装して使用しました。

 

新しい分布

  • MaskedMixture は 2 つの分布を element-wise に綴じ込みます、マルチ poutine.mask コンテキスト内でマルチ sample ステートメントへの簡潔な代替として。
  • RelaxedBernoulliStraightThrough と RelaxedOneHotCategoricalStraightThrough
    これらは離散分布で連続空間に緩和されて従って pathwise な勾配を備えます。こうしてこれらの分布は変分推論のコンテキストで有用です、そこではそれらは lower variance (but biased) 勾配推定を提供できます。これらの分散は数値的に気難しい (= finicky) ことに注意してください、因って任意の問題に遭遇したら知らせてください。
  • VonMises と VonMises3D は尤度-only 分布で 2D or 3D angle データを観測するために有用です。
  • AVFMultivariateNormal は多変量分布で、勾配分散を減じることに導ける adaptive 勾配推定器を備えることになります。
  • MixtureOfDiagNormals, MixtureOfDiagNormalsSharedCovariance と GaussianScaleMixture は pathwise な勾配推定器 (これは低い分散勾配を生成する傾向があります) を備えることになる混合分布の族です。
  • PlanarFlow と PermutationFlow は normalizing flows を構築するために有用な 2 つの変換です。
  • 明示的な inversion 演算子のような InverseAutoregressiveFlow の改良

 

GPyTorch 統合

これは実際には Pyro の特徴ではありませんが、優れた GPyTorch ライブラリ の新しい特徴を指摘しておきたいです : GPyTorch は今では変分推論のために Pyro を使用できて、GPyTorch モデルは今では Pyro モデル内で使用できます。GPyTorch モデルのために新しい TraceMeanField_ELBO 損失を勧めます。

 

Analytic KL in ELBO

TraceMeanField_ELBO は ELBO 計算において利用可能なとき、解析的 KL ダイバージェンス式を活用できます。この ELBO 実装は変数 dependency 構造上である制限を行ないます。これは特に GPyTorch モデルのために有用です。

 

IWELBO

Importance Weighted ELBO 目的 (関数) (pyro.infer.RenyiELBO) の実装が今では含まれます。この実装はまた IWELBO の alpha-divergence (or Rényi divergence of order α) ケースへの一般化も含みます。

 

自動 max_plate_nesting

Pyro の ELBO 実装は今では static plate nesting 構造を持つモデルで (以前は max_iarange_nesting として知られていた) max_plate_nestingを自動的に決定します。

 

Autoguide

幾つかの新しい autoguide が実装されました: AutoIAFNormal と AutoLaplaceApproximation です。

 

PyTorch JIT のためのサポート

PyTorch JIT は現在 Pyro プログラムで使用される ops のために部分的なサポートだけを持ちます。貴方のモデルが静的構造を持ちそしてJIT によりサポートされる ops を使用するに十分に幸運であれば、時に 1 桁のスピードアップを得られるでしょう。SVI で JIT を有効にするためには、単純に Trace_ELBO, TraceGraph_ELBO または TraceEnum_ELBO クラスをそれらの JIT ラッパー JitTrace_ELBO, JitTraceGraph_ELBO または JitTraceEnum_ELBO で置き換えてください。HMC か NUTS で JIT を有効にするためには、jit_compile kwarg を渡してください。詳細は JIT チュートリアル を見てください。

 

Stats

pyro.ops.stats は、resample, quantile, pi (percentile interval), hpdi (highest posterior density interval), autocorrelation, autocovariance, etc のような多くのポピュラーな統計関数を含みます。

 

より良いエラーメッセージ

Pyro は今ではより多くの検証チェックとより良いエラーメッセージを提供し、Trace.format_shapes() メソッドを使用した shape ロギングを含みます。これは shape エラーをデバッグするために非常に有用です。shape テーブルを読む助けとして tensor shape チュートリアル を見てください。

 

新しいチュートリアル

言語

 

そして examples ディレクトリ の追加の例。

 

互換性に影響のある変更

(訳注: 省略します。原文 参照)

Pyro 0.3 は今では PyTorch 1.0 を使用しますので、これも多くの breaking changes を行なうことに注意してください。

 

実験的な特徴

次の特徴を早期にリリースしています、実験的な使用のみを意図しています。Pyro はこれらの特徴のために後方互換性の保証は提供しません。

 

Tracking とデータ結合 (= association)

pyro.contrib.tracking はデータ結合とマルチオブジェクト追跡のための幾つかの実験的なコンポーネントを提供します。このライブラリを使用する例は object trackingKalman Filter チュートリアルを見てください。

 

Optimal experimental design

pyro.contrib.oed このパッケージは Pyro で Bayesian Optimal Experimental Design (OED) を行なうための幾つかのサポートを提供します。特にそれは Estimated Information Gain を推定するためのサポートを提供します、これは Bayesian OED のために必要な主要な数量の一つです。このパッケージは活発な開発上にあり重要な変更を受けることが想定されます。より詳細は docs を見てください。

 

自動名前付けとスコーピング

pyro.contrib.autoname は幾つかの自動名前付けユティリティを提供します、これは “x_{}”.format(t) のような subscripting の重荷を軽減できます。

 

以上