サンプリングによる近似ベイズ推論 その3(MCMC:ギブスサンプリング)
【概要】
【目次】
- はじめに
- 近似ベイズ推論
- ギブスサンプリング (Gibbs Sampling)
- ギブスサンプリング のアルゴリズム
- ギブスサンプリングによる確率分布の近似推論の実装
- 実装コード全体
- おわりに
- 参考文献
はじめに
ベイズ推論についての書籍を読んでいると、なんとなく理解はできても具体的なイメージってつきにくくないですか?
ということで、実装して理解を深めていきたいと思います。
本記事ではベイズ推論における近似推論について扱います。 ベイズ推論では「MCMC(Markov Chain Monte Carlo)法」などのサンプリングに基づくアルゴリズムと「変分推論」という代表的な近似推論手法があります。
サンプリングに基づく近似ベイズ推論(MCMC)について、過去2回と合わせて今回が3回目となります。
その1では、基本的な積分の近似計算である「モンテカルロ積分」と最も単純なサンプリングアルゴリズムである「棄却サンプリング」を実装しました。
その2では、MCMCアルゴリズムの一種である「メトロポリス法」を実装しました。
その3となる本記事では、MCMCアルゴリズムの一種であるギブスサンプリングを実装してみます。
本記事は、「ベイズ深層学習」の「4章 近似ベイズ推論」を参考にしています。
間違いなどあったら指摘していただけると助かります。
近似ベイズ推論
統計をベースとした機械学習では、観測データに基づき、確率分布を組み合わせてモデルを構築します。そして、モデルが観測データをうまく表現できるようにモデルのパラメータを推論します。
ベイズ推論においては、推定対象のパラメータを含めて全て確率変数と考えます。パラメータが従う確率分布を観測データを使って更新することが、ベイズ推論における「学習(パラメータ推論)」になります。そのようにして得られる、データを観測した後でのパラメータの確率分布は事後確率分布と呼ばれています。
事後確率分布はモデル(確率変数の同時分布)を展開することで導出できます*1。しかし、複雑なモデルであったり、モデルを構成する確率分布()が共役関係にない場合には、を解析的に求めることができません。
そこで、近似推論が必要になります。
ギブスサンプリング (Gibbs Sampling)
ギブスサンプリングは、メトロポリス法(前回記事)と同様に、性質のわからない確率分布からサンプルを得るためのアルゴリズムです(Lはサンプル数)。からサンプルを得ることができれば、そのサンプルの統計的性質を調べることでの性質がわかるのでした。
ギブスサンプリングは、以下の条件を満たす問題の場合に適用でき、メトロポリス法などと比較して高次元のモデルから効率的にサンプリングを行うことができる手法です。
- 複数の確率変数()を持ったモデルである
- はをM個の部分集合()に分解したもの
- をサンプルすることが容易な条件付き分布を構築することができる
- はを除いた確率変数の集合とする
適用できるか否かには条件がありますが、確率変数が高次元な場合などで有効な手法ということです*2。
ひとつわからないところがありまして、条件付き分布が既知の分布ではない場合にもサンプルできるものなんでしょうか??
ギブスサンプリング のアルゴリズム
- サンプルを得たい目標分布 :
- 確率変数 :
- 確率変数の部分集合の条件付き分布 : (全てのiについて)
条件付き分布が肝です。これがガウス分布などの既知の分布として構築できれば、アルゴリズムとしては単純です。
サンプルは以下の手順で取得できます。
- を適当に初期化
- for l=1 to L :
- for i=1 to M :
- for i=1 to M :
メトロポリス法と異なりサンプルした点が必ず受容されるため、ギブスサンプリングが使えればメトロポリス法などと比較すると効率良くサンプルを得ることができます。 詳しくは、「ベイズ深層学習」や「PRML(下)」などを参照ください。
ギブスサンプリングによる確率分布の近似推論の実装
ここでは、ギブスサンプリング の実装例として二つの例を取り挙げます。
実装コードの全体は、実装コード全体にnotebookを貼っていますので参照ください。
2次元ガウス分布の近似推論
2次元ガウス分布自体はよく知られた確率分布で、直接サンプルを得ることは容易です*3。ここではあくまで適用例として、ギブスサンプリングを用いて2次元ガウス分布からのサンプルを1次元ガウス分布から取得してみます。
2次元ガウス分布。
ここではi次元の平均値、はi次元とj次元の共分散を表します。
ギブスサンプリングを実行するためには、確率変数を部分集合に分けた条件付き分布を導出する必要があります。
はじめにについての条件付き分布を導出します。確率の基本性質を使って以下の様に条件付き分布を考えます。
ここで、は固定値なので、展開して地道にまとめていくと以下の式となります。計算の詳細については省略します。詳細は「PRML(上)」や「ガウス過程と機械学習」などを参照ください。
についての条件付き分布については、上式を対称にして以下の通りとなります。
これで条件付き分布を導出することができたので、あとはギブスサンプリング のアルゴリズムに従って、とをそれぞれサンプルします。
近似解
ギブスサンプリングにより2次元ガウス分布からサンプルを得るためのコードは実装コード全体のnotebookのセル番号5にあります。 なおMCMCアルゴリズムでは、定常分布に収束するまでの期間のサンプルは破棄するのが普通ですが、今回その部分は書いていません。
サンプルが2次元ガウス分布からのサンプルになっているか確認します。
numpy.randomでサンプルした点とギブスサンプルによってサンプルした点群が重なっていることがわかります。1次元ガウス分布を使って2次元ガウス分布からのサンプルを得ることに成功したようです。
また、最初の50点の動きを赤線で示しています。ギブスサンプリングでは、変数を一つずつ固定するため、カクカクした動きになっていることがわかります。
ベイズ線形回帰の近似推論
前節では2次元ガウス分布からサンプルを得ることができたわけですが、この例だけでは何も面白くないですよね*4。 ガウス分布はよく知られた分布ですし、その平均や分散のパラメータは予め与えられており、推論のプロセスは入っていません。
ギブスサンプリングを使うモチベーションは、確率モデルのパラメータをベイズ推論する際の近似解法として使いたいというものでした。 そこで本節では、線形回帰(いわゆる「ベイズ線形回帰」)のパラメータ推論にギブスサンプリング を適用してみます*5。
モデル
線形回帰モデルのグラフィカルモデルは以下の通りです。
N個のデータのペアが与えられ、変数Xと重みパラメータWに変数Yが依存する構造です。重みパラメータWが未知のため、このパラメータをデータから推論したいわけです。
このモデルの同時分布は以下の通り。
今回は、変数Xを基底関数で変換し*6、重みWと線型結合するモデルを考えます*7。
ここで簡単のために、分散は固定のパラメータとします。
重みは未知の確率変数であり、これにも何らかの確率分布を仮定する必要があります。重みは正負の実数をとりますが、極端に大きい値でないことが好ましいです*8。そこで、重みはガウス分布に従うとし、事前分布として平均0で分散を与えることにします。なお、分散は固定のパラメータとします。
サンプルデータ
今回は、2次の多項式(2次関数)を真の関数とします。重みは[0.0, -2.0, 0.5]
としました*9。
この関数から20点をランダムにサンプルします。真の関数(青の実線)とサンプルデータ(オレンジ点)は以下の通りです。
解析解
ベイズ線形回帰の解析解については、以前記事を書きました。
learning-with-machine.hatenablog.com
知りたいのは、未知の重みパラメータwの事後分布です。この事後分布を確率の基本性質に従って展開します。
計算は省略しますが、最終的には以下のガウス分布になることがわかっています。
データを当てはめ、重みパラメータwの事後分布を推論した結果は以下の通りです。
この事後分布から関数(重みパラメータ)を20本サンプルしてきた結果を以下に示します。グレーの線がサンプルしてきた関数です。
うまく設定値(真の関数)を推論できていることがわかりますね。
これらの実装例は、実装コード全体に貼ってあるnotebookの9~12セルです。
近似解
次に、重みパラメータの事後分布をギブスサンプリングによって近似推論してみます。
ギブスサンプリングによって近似推論するためには、確率変数の部分集合の条件付き分布が必要でした。ここでは、重みパラメータが未知の確率変数です。また、は0次から2次までの3次元のベクトルでした。 そこで、の各次元毎の条件付き分布を導出してみます。なお、とはi次元を除いたwのベクトルを意味します。
ここで、については、ギブスサンプリングにおける毎回のサンプリング手順ではが与えられているものとするため、未知の確率変数はだけです。そのため、この事後分布は1次元のガウス分布になります。計算過程について細かくは省略しますが、本節の最後に手書きのメモを貼っておきますので、興味のある方は参考にしてください(汚い字でごめんなさい)。
1次元のガウス分布のため、解析解の導出と比較してちょっとだけ簡単になったような気がします。
実装コードの詳細は実装コード全体に貼ってあるnotebookを参照ください。セル番号の13,14が該当します。事後分布の導出さえできてしまえば、アルゴリズムは非常に単純です。
サンプルのトレースを確認してみます。ちょっとトレンドを持っているように見えますが、定常分布からサンプルできているとしましょう。
事後分布は次のようになります。解析解の事後分布とだいたい同じようなものであることがわかります。
最後に、この近似推論した事後分布から関数をサンプルしてみます。これも、解析解と比較すると概ね同じものであることがわかります。
線形回帰問題の条件付き分布の導出過程メモ
実装コード全体
本記事で実装したコード全体は以下のnotebookの通りです。
おわりに
ということで、サンプリングをベースにした実用的な近似推論アルゴリズムの一つ、ギブスサンプリングを実装してみました。
MCMCアルゴリズムの中でも、前回実装したメトロポリス法と比較すると全てのサンプルが受容されるため、かなり効率の良いアルゴリズムであることはわかりました。実際、計算時間もだいぶ速かったです。 しかし、条件付き分布を導出するのが厳しい場面は少なくないんじゃないかなというのが素直な感想です。今回のように単純な線形回帰モデルであれば条件付き分布を求めるのも容易ですが。モデルを構築した際に、うまくパラメータが独立になるように工夫することが必要になるんじゃないかなと思います。
この辺りはまだまだ勉強中なので、ご指摘いただけると助かります。
参考文献
- 作者:C.M. ビショップ
- 出版社/メーカー: 丸善出版
- 発売日: 2012/04/05
- メディア: 単行本(ソフトカバー)
- 作者:C.M. ビショップ
- 出版社/メーカー: 丸善出版
- 発売日: 2012/02/29
- メディア: 単行本