nykergoto’s blog

機械学習とpythonをメインに、雑多な内容をとりとめなく扱うブログです。

PRML 第3章のEvidence近似

PRML第3章では、線形回帰モデルを扱っています。
その後半で、これまで固定だとしていた、重みwの分布{N(w|0,\alpha^{-1} I)}の精度パラメータ{\alpha}と、実際に観測される値tのモデルである{N(t|w^{T}\phi(x),\beta^{-1})}に現れるノイズの精度を表す{\beta}の値もいい感じの数値にしちゃいましょうという話が出てきます。

これを真面目にやろうとすると、α,βに関する事前分布を定義してやって、事後分布である
{p(\alpha,\beta|t) \propto p(t|\alpha,\beta)p(\alpha,\beta)}
を最大化する{\alpha,\beta}を探すことになります。

じゃあαとβの分布はどうするの?ということになります。
ここで、仮定を追加して、われわれは、αやβについて何も情報を持っていない、とします。

これはどういうことかというと、どのαやβに対しても、だいたい同じぐらいの確率があるよね、という風に考えるということです。
なので、(α,β)=(0.2,0.1)だと思っているモデルM1も、(3.0,5.0)だと思っているモデルM2も、同じぐらいの確率で選ばれるよね、とするわけです。

こうなると、p(α,β)はどのαやβに対しても同じ値となるので、先ほどの最大化すべき関数が
{p(t|\alpha,\beta)}
となり、これは単にwを積分消去すれば計算できて、
{p(t|\alpha,\beta)=\int{p(t|w,\beta)p(w|\alpha)dw}}
となり、特に{p(t|w,\beta),p(w|\alpha)}ガウス分布に従うと仮定しているので、これは解析的に解くことが出来て、とても嬉しいねという流れになります。これをEvidence近似とか経験ベイズとか第二種最尤推定とか言ったりします。第二種最尤推定と呼ばれるのは、普通の最尤推定がwの分布が存在していることまで仮定しているのに対して、今度はαやβも固定されているのではなくて、(平らという条件はついていますが)確率的な分布があると考えているからです。(これをもっと発展させて、αやβも分布をもたせることも可能で、それはPRML下巻の変分推論のあたりに書いてあります。)

さてでは今度は実際に解析的に解けたものを最大化していこうと思いますが、実はこれにも二つのアプローチがあります。一つは、今回とる解析的に解いて微分をする方法。もう一つがEMアルゴリズムを用いる方法です。EMアルゴリズムは、最大化したい関数が隠れ変数の積分で表されている時に使えるので、今回だとwは積分によって消えているので、EMアルゴリズムを適用することが出来ます。
でも今回は、せっかく解析的に解くことができるので、前者のアプローチを取ることにします。(計算すると、EMアルゴリズムと解析的に解く方法は一致することも確認できます。PRML下巻を参照)

どうやって解くのかを式変形を書いても良いのですが、それは何処にでも載っているので、ここではその気持について書きたいと思います。(自分が後で見て復習(あの時の考え方ってどうだったんだろうとか)に使える為)
まず大事なのが有効パラメータ数(well-determined parameter)の事です。有効パラメータとは、ざっくり言ってしまうと、特徴量ベクトル{phi(x)}によって計算できる{\beta*\sum_i{\phi(x)\phi(x)^T}}固有値{\lambda_i}のわりと大きい次元です。

この固有値が小さい方向というのは、実際のxから射影された先の特徴量空間において、あまり動きのない方向であると言えます。
だから、その方向のデータはあまり意味を成さないというか、{phi(x)}の動きがそちら方向に乏しいので、あてにできないのです。なので、大きな固有値を持つ固有ベクトルの方向に大きく動いて、それ以外はあまり動かない(確証がないから)という作戦を取りたくなります。

その度合を表すのが、有効パラメータ数{\gamma = \sum_i{\frac{\lambda_i}{\alpha+\lambda_i}}}になります。
これはwの事前分布の精度αと、先ほどのデータの固有値(重要度)λとの比になっていて、αに比べて大きければ各∑の中身は1になり、小さければ0になります。なので、すべての和を取ると、今あるデータ点は、αとくらべて重要度が高いものが何個ぐらいあるか、という指標になります。

今回は、ガウス基底と多項式基底を用いた時に、

・普通にMAP推定をやった時の予測平均値
・Evidence近似によって尤度を最大化した時に得られる予測平均値
・その時の有効パラメータγの変化

をプロットするやーつを作ってみました。

まずはガウス基底から。基底関数には、ガウス基底を50次元用意しています。
訓練データは、y=sin(x/2)+ノイズ(精度パラメータ5.)で生成していて、グラフ上には青い点として表示しました。青の実線はノイズの無い目的の値y=sin(x/2)です。
f:id:dette:20150922144805p:plain

・データ点が多くなると、有効パラメータγも大きくなること
・MAP推定だけだと、選んだαとβに依存するので、今回初期の値としてα=0.1としているために、データ点にめちゃくちゃ引っ張られていること
・データ点が多くなると、両者は一致してくること
とかがわかると思います。

データ点が多くなればML推定に全部近づいていくので問題ないのですが、次元に比べてデータ点が少ない時(今回は基底に50個のガウス基底を用いていますから、10,20,30の時とかが顕著だと思います)に、Evidence近似では、データにひっぱられることなくうまく平滑化ができています。

つぎは多項式基底。10次式まで用意しました。こちらはy=sin(x)がターゲットです。
f:id:dette:20150922150110p:plain

データ点が少ない時は繰り返し回数が足りてませんね。雰囲気サンプル数が20以下の時は、γは最終的に0になりそうです。
(データが足りないからこれからは何も言えないので全部零にしちゃえということでしょうか)