🖊️PyroとPyMCの違い sdgとvi
Pyro と PyMC3 は、両方とも確率的プログラミングのための Python ライブラリですが、いくつかの重要な違いがあります。背景と目的:
Pyro は Uber AI Labs によって開発されました。Pyro は、深層学習と確率的プログラムの両方に対応するために設計されており、それによって複雑な確率モデルを構築し、それらを効率的に推論することができます。
PyMC3 は、統計的モデリングとベイズ推論に特化しています。PyMC3は、MCMC(Markov Chain Monte Carlo)サンプリングアルゴリズムや変分推論を使って、ベイズ統計モデルの推論を行うことができます。
インターフェースと機能:
Pyro は、PyTorch をベースにしており、PyTorch の機能(例えば、自動微分)を活用しながら、確率的プログラムを構築することができます。Pyro は、ユーザーが独自の確率的プログラムを定義し、それを最適化するためのツールを提供します。
PyMC3 は、Theano をベースにしており、Theano の機能を活用して、統計モデルの構築と推論を行います。PyMC3 は、ベイズ統計モデルを構築するための高レベルの API を提供し、MCMC サンプリングや変分推論を行うことができます。
パフォーマンス:
Pyro は、PyTorch の GPU サポートを利用して、高速な計算を行うことができます。
PyMC3 は、Theano の GPU サポートを利用して、高速な計算を行うことができますが、PyTorch の GPU サポートほど効率的ではないかもしれません。
コミュニティとサポート:
Pyro は、Uber AI Labs によって開発されており、アクティブな開発コミュニティがあります。
PyMC3 は、長い間開発されてきたライブラリで、大きなユーザーコミュニティと豊富なドキュメントがあります。
微積分が変化率について推論するための数学であるのと同様に、確率は不確実性の下で推論するための数学である。
確率プログラムは、通常の決定論的な計算と、データの生成過程を表すランダムなサンプリング値を混ぜたものである。
確率的プログラムの結果を観察することで、推論問題を記述することができる。"このランダムな選択がある観測値を持った場合、何が真でなければならないか"。PPLは、モデルの指定、答えるべき問合せ、答えを計算するアルゴリズムとの間で、確率の数学ですでに暗黙の了解となっている関心事の分離を明示的に強制する。
PyroはPythonとPyTorchをベースに作られた確率的プログラミング言語です。
Pyroのプログラムは単なるPythonのプログラムですが、主な推論技術は確率変分推論で、抽象的な確率計算をPyTorchの確率勾配降下で解く具体的な最適化問題に変換し、これまで困難だったモデルやデータセットサイズに確率的手法を適用できるようにしています。
式における潜在変数に対する分布を事前分布、潜在変数が与えられたときの観測変数に対する分布を尤度と呼ぶ。
Pyroの推論アルゴリズムは、「プログラムを逆から実行」してモデル内のすべてのpyro.sample文に数学的に一貫した値を割り当てるのが仕事です。
PyTorchの配列はPyTorch Tensor
PyTorchはTensor (torch.Tensor) というクラスを定義し、数値の均質な多次元矩形配列を保存し操作できるようにしています。PyTorchのテンソルはNumPyの配列に似ていますが、CUDA対応のNVIDIA GPUでも操作することができます。
MCMCとSDG
ベイズデータ解析(ベイズ線形回帰モデルの推定など)を行うには、通常、何らかの形の確率的プログラミング言語(PPL)が必要になります。
PPL はマルコフ連鎖モンテカルロ法(MCMC)を実装しており、観測データを条件として、パラメータの尤度と事前分布が意味する事後分布からサンプルを抽出し、推論を行うことができます。
MCMCアルゴリズムは、一般的に言って、計算コストが高く、例えば、ディープニューラルネットワークの学習に用いられる最適化アルゴリズム(例:確率的勾配降下(SDG))と比較すると、これらのアルゴリズムの実行をマシンのクラスタに分散させることは容易ではありません。
ここ数年、計算コストのかかるランダムサンプリングに大きく依存しない、ベイズモデルの推論を行う新しいアルゴリズムが開発されている。これらのアルゴリズムは変分推論(VI:Variational Interface)アルゴリズムと呼ばれ、「大規模」なデータセットに拡張できる可能性を持つ成功例として示されている
MCMC(Markov Chain Monte Carlo)とSGD(Stochastic Gradient Descent)は、両方とも最適化の問題を解決するためのアルゴリズムですが、それぞれ異なる目的と方法で使用されます。
目的:
MCMC は、確率分布からサンプリングするためのアルゴリズムです。MCMCは、特定の確率分布からランダムサンプルを生成することで、その分布の特性(例えば、平均、分散)を推定します。MCMCは、ベイズ統計学でパラメータの事後分布からサンプリングする際によく使用されます。
SGD は、最適化アルゴリズムの一種です。SGDは、関数の最小値(または最大値)を見つけるために使用されます。SGDは、特に深層学習でニューラルネットワークのパラメータを最適化する際によく使用されます。
方法:
MCMC は、マルコフ連鎖を使用して、目的の確率分布からのサンプルを生成します。MCMCのアルゴリズムの一例は、メトロポリス・ヘイスティングスアルゴリズムです。
SGD は、勾配降下法の一種です。SGDは、関数の勾配(つまり、傾斜)を計算し、勾配の逆方向にパラメータを更新することで、関数の最小値に進んでいきます。
使用される分野:
MCMC は、ベイズ統計学、統計物理学、計算生物学などの分野で広く使用されます。
SGD は、機械学習、特に深層学習で広く使用されます。
両方のアルゴリズムは、それぞれ異なる問題を解決するために使用されます。MCMCは、確率分布からのサンプリングに適しているのに対し、SGDは、関数の最適化に適しています。
お願い致します