old school magic

機械学習と統計とプログラミングについてちょっとずつ勉強していきます。

ディリクレ過程混合モデルへの変分推論適用について

この記事について

ノンパラメトリックベイズは分かりやすいチュートリアルは良く見かけるのですが、そこから一歩進んだ(日本語の)資料に行きつけなかったので、色々と論文読んで簡単に(数式を出さないで)まとめてみます。
ぶっちゃけるとCollapsed Variational Dirichlet Process Mixture Modelsの簡単な要約です。

あまり自信がないのでもし間違ってたりしたらご指摘お願いします。

前の記事よりはまともな説明ができれば...と思います。


事前知識としてノンパラベイズと変分推論の知識が必要ですが、ノンパラベイズは持橋さんの分かりやすい解説があるのでご紹介します。

ディリクレ過程中華料理店過程棒折り過程交換可能性、そしてアルゴリズムについて説明しています。

変分推論についてですが、上田修功さんの解説がとても分かりやすいと思うので、読める環境がある方はぜひ。

変分推論だけでなく、周辺化変分推論ディリクレ過程への応用についても簡単に説明しています。

一応簡単に説明すると、変分推論はEMアルゴリズムの一般化(というかベイズ版)です。
「推定したい分布」が「独立な分布の積」に分解されると仮定し、各分布を「自分以外の全ての分布の期待値」で更新します。(厳密には平均場近似と言います。)

背景

ノンパラベイズの一種であるディリクレ過程(Dirichlet Process, DP)と、これを用いた混合モデル(Dirichlet Process Mixture Model, DPM)についてですが、これらは計算する際にサンプリングを用います。

サンプリングは色々な分布に適用できて便利なのですが、計算量がめちゃくちゃ多いです。

なのでDPMの計算量を減らすことが研究対象となったりするのですが、そのアプローチの一つが変分推論の適用です。
ベイズ理論に基づく方法だと、変分推論は理論的にもしっかりしていて、しかもサンプリングよりかなり速いので、計算量削減を考える時にはよく用いられるみたいです。

変分推論できる過程について

ディリクレ過程と等価な過程として、中華料理店過程(Chinese Restaurant Process, CRP)が用いられます。
が、CRPには変分推論を適用できないので、他のスキームを考える必要があり、

  • Truncated Stick Breaking Process (TSB, 切り捨て棒折り過程?)
  • Finite symmetric Dirichlet prior (FSD, 有限対象ディリクレ事前分布...?)

の二種類が提案されています。

TSBは、Stick Breaking Process(SBP, 棒折り過程)を十分な大きなクラスタ数Tで切り捨て(=truncate)したものです。
この過程は交換可能性が成り立たず、学習する順番によって確率分布が変わってしまいます。(対策あり)

FSDは、混合比の事前分布として、「十分大きなクラスタ数Kを持つ対象なディリクレ分布」を用います。
こっちは交換可能性が成り立ちます

この2つのスキームは、十分大きなTとKについてほぼ同精度になります。

この2つのスキームに対して、変分推論(Variational Bayes Inference, VB)または周辺化変分推論(Collapsed VB, CVB)を適用します。

周辺化変分推論について

CVBとは、考えている分布のパラメータが解析的に積分消去可能である時、「パラメータの分布」を「真のパラメータの事後分布」に置き換えることによって変分推論の目的関数を簡略化する手法です。
カルバックライブラー情報量(真の分布との距離)も計算量も小さくなるので、精度も効率も上がります

補足

  • TSBは交換可能性が成り立たないので適切な順序付けが必要なのですがクラスタのサイズで降順に順序付けると精度が良いみたいです(Ordered TSB)。でも証明とかはされてないです。
  • 変分近似してもクラスタ変数の計算がすごい大変みたいなので、中心極限定理とか使ってガウス分布で近似したりしてます。

ソフトウェア

先ほど紹介したCollapsed Variational Dirichlet Process Mixture Modelsの著者の一人である栗原さんによる実装が公開されてます。混合ガウス分布への適用です。
Variational Dirichlet Process Gaussian Mixture Model - Kenichi Kurihara's Site
matlabなので環境がある方はぜひ。

結果

精度的には従来のサンプリングを用いた手法とほぼ同じ精度を実現しています。

計算量は
CVB>VB>>>>>>>>>サンプリング
といった感じでしょうか。サンプリングだと終わらない実験も変分推論だと終わったりとかあるらしいです。

まとめや個人的な感想

  • 変分推論はどんなモデルにも適用できるわけではないのですが、適用できればサンプリングより遥かに少ない計算量で近似できます。ですが式の導出がすごい重いです。論文だとさらっと結果の式だけ書いてあるのですが、おそらくかなり複雑な計算があったんでしょうね...
  • 変分推論化はこの前IBIS(機械学習と学習理論のワークショップ)に参加させて頂いたのですが、Deep Learningもグラフィカルモデルとみなして変分推論やサンプリングすると知りびっくりしました。
  • 変分推論は多分一時収束だと思うんですが、今回の場合は計算量は「(クラスタ数が既知である場合の)EMアルゴリズム」で抑えらたりするのかな?とか考えました。
  • FSDって普通の変分混合分布と何が違うんだろう...まだ理解が追いつけてないです...
  • 変分推論じゃないけどサンプリングのIGMMやVB-GMMがpython機械学習ライブラリのscikit-learnで実装されててびっくりしました。(訂正:実装されてるIGMMはTSBPでした)