PRML 読書会 #13 10章 近似推論法(変分ベイズ)

参考:[http
//d.hatena.ne.jp/n_shuyo/20110722/prml:title=「機械学習パターン認識」(PRML)のアンチョコ by herumi]:PRML 9章や10章の数式の解説ノート。10章の大変な計算も丁寧に展開してある。


4/10 の C.M.ビショップ「パターン認識と機械学習(PRML)」読書会 #13@サイボウズ・ラボ に参加しました。各位お疲れ様でした。
今回のテーマは10章の変分推論(変分ベイズ)。しましまさんからも「PRML本で最も恐ろしいところ」とお墨付きをもらっているほどの鬼計算の章。
10.2.1 の混合ガウス分布を変分ベイズで推論する例のところを担当した。

発表資料

他の方のも公開されたらリンク先追加する、かも。

変分ベイズ

今回の範囲は、10.1 でやった「変分ベイズの一般形」を、混合ガウス分布、線形回帰、ロジスティック回帰それぞれにあてはめてみる、というのが中心軸。


どの節をとっても、とにかく計算が大変。
自分自身も含めて「計算したらこうなる」でほとんど全ての時間と体力が費やされてしまった感じで、内容や応用についての議論があまり盛り上がらなかったのが、ちょっと残念。
なんでかなー。PRML の他の章はだいたい「いろいろな応用や研究を紹介しているだけの文字ばっかりの節」があって、それらをおかずに結構あれこれ話すんだけど、10章はめずらしく無い。そのせい?


上の 10.2.1 の資料では、PRML で はしょられている計算の全てを追跡可能な形で書き下してあるし、id:niam さんの 10.6 の資料も、かなりえげつない積分計算をちゃんと展開してくれているので(そしてオチが「EMアルゴリズムで出てくる更新式と一緒」。ヒドすぎるw)、10章の計算で悩んだら見てもらうといいと思う。
この手の計算は一度しっかりやっとくと、次から自信をもって使えるからね。


ロジスティック回帰と言えば、PRML 4章でラプラス近似によって解く方法が紹介されていた。
この手法は「事後分布を、MAP 値の周りのヘシアンが一致するガウス分布で近似する」というもの。PRML の図4.14 ぱっと見の第一印象は、あまりにも乱暴すぎる「近似」に呆然とした、というのが正直なところ(苦笑
が、実際にその後の計算を追っていくと、もっとも重要な周辺化のための積分計算では、MAP 近傍のヘシアンだけが効いてくることがわかる。さらに、データ点が十分多ければ、尖った分布になる(=MAP値の周り以外は0になる)し、中心極限定理によりガウス分布に近づいていくことも保証されているのだから、状況証拠的にはこの「近似」にも妥当性があるんだな、と納得できた。


一方の変分ロジスティック回帰。
こちらの「近似」は PRML 図10.12 に示されている。x=ξ より左側では、よい近似をしている印象がある。2点で接していて、しかも常に下から抑えられている、とても筋がいいでしょ、と言われたら納得する。
しかし、x=ξ より右側では、真値が1なのに「近似値」が0というかなりヒドいことが起きている。
これでは、周辺化するときに x=ξ より右側の値が多かったら(データ点ごとにξはとれるので、原点から遠い x が多かったら、という方が正しいかも)、見当外れの積分値が出てくるってことにならない?
つまりデータ点の分布や事前分布のパラメータによって、近似性能が全然変わってきてしまうんじゃあないだろうか。


そこら辺が気になって、PRML からも参照されている Jaakkola & Jordan の "Bayesian parameter estimation via variational methods" を少し読んでみた(予習では読む余裕がなかったので、読書会の合間にw)。


この論文ではロジスティック回帰+ラプラス近似と変分ロジスティック回帰の誤差関数を比較したグラフを掲載しており、それを見ると、事前分布の与え方によって、お互いの手法が勝ったり負けたりしていた。特に事前分布が端に寄っていると、変分ロジスティック回帰はかなり悪くなることがあるっぽい。
あまりにも上で書いた直感通りの結果で、逆に気持ち悪い。


真の分布との KL をプロットしたグラフも載っていて、こちらは変分ロジスティック回帰がラプラス近似を僅差ではあるが いたるところで上回っていた。
でも、変分ベイズが KL を最適化する手法であることを考えると、むしろラプラス近似の優秀さを示しているんじゃあないの……? というのは、ひねくれすぎ?(苦笑


そこらへん niam さんに投げてみたら、高次元の場合にどうなるか(多分、良い結果!??)が気になる、というのと、オンラインアルゴリズムに拡張できそうなので、NEWikipedia( niam さんがやってはるソーシャルな読解支援システム http://en.newikipedia.org/解説はこちら)での IRT のロジスティック回帰を解くのに使えるんじゃあないかな、とのこと(今は勾配法)。


自分の iVoca 単語難易度 API でも、同じくロジスティック回帰を逐次勾配法で解いているが、ハズレ値に振り回される傾向があるのは感じているので、うまくいくなら試してみたい……かもしれない。
というわけで niam さんの活躍に期待w

縮退する! 縮退するぞ!


変分混合ガウス分布を実装してみたけど、PRML に書いてあるみたいに縮退しないよ! という記事を書き、今回の読書会でも話した。
が、自信があったわけではないので、ソースを公開しておいた。


そうしたら、id:tsubosaka さんが「その結論は間違っている! ってことは、ソースが間違っている!」という信念でバグを見つけてくれた!(余計なところに exp が付いてた……)
そこを直すと、ちゃんと縮退するではないですか!(初期値の取り方にもよるが、10回の内6回くらいは混合要素2個まで縮退)
縮退しすぎて1個になることもあったり。


ただ縮退しすぎて W_k がつぶれて逆行列がとれなくなってエラーで止まる、というのがうまくさばけなくて、まだきちんとした結果をお見せできずにいる。
近々フォロー記事を書くので、もうしばらくお待ちを。→書きました。フォロー記事へ。


いやー、結構何度も見直してたんだけどね。
だからこそ間違いが見つからなくなってしまっていたという人間工学上の問題、ということで。ソース公開万歳。
10.2.2 の変分下限*2の式が膨大すぎて実装するのがめんどくさいのを、「 10.2.1 の途中式をこんなに使いまくってたら、確認にならないよ〜」とか言い訳して実装をさぼっていたバチが当たったのか……。


で、でも、「過学習を防ぎつつ関連度自動決定する」というのが EM アルゴリズムではなく変分ベイズを採用する場合のポイントであるはずのに、縮退しないんじゃあ変分ベイズあかんやん! と思わされてたけど、間違いだったのかー良かった良かった、と大変喜ばれたので、きっといいことだったのだろう。うんうん。

次回

次回 #14 は 5/8 に EC ナビさんにて開催予定。
10章の残り(10.7 EP 法)から11章サンプリング法の途中まで。いよいよ下巻も後半突入。


11章は計算追いかけるより実装してみたいので、担当自粛した。
多分なんか作る。

*1:「下界」だけどね!

*2:「下界」だけどね!