パターン認識と機械学習 下(第6章:その4)

以下の本を読みます。上巻を読むこともあります。何か問題点がありましたらご指摘いただけますと幸いです。

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

前回:その3 /次回:まだ
f:id:cookie-box:20180305232608p:plain:w60

結局等価カーネルというのは、線形基底関数モデルの重みパラメータをベイズ的に解いたときの、重みパラメータの事後分布の平均ベクトルによる、ある対象の点における予測値が、訓練データ中の各被説明変数の線形結合になっているという見方をすることができて、そのような見方をしたときに各被説明変数にかかる重みが、対象の点とその訓練データ点の「等価カーネル」なんですね。…この等価カーネルと 6.1 節のカーネル関数は異なるものですね。等価カーネル k(x, x')=\beta \phi(x)^{\top} S_N \phi(x') は特徴の内積ではなく間に重みパラメータの事後分散共分散行列 S_N を挟んでいますし。しかし  \psi(x) \equiv \beta^{1/2} S_N^{1/2} \phi(x) と新しい特徴を定義すれば等価カーネルはこの新しい特徴の内積にはなっていますね。

f:id:cookie-box:20180305231302p:plain:w60

あれ? ジュン今ドイツじゃないの?

f:id:cookie-box:20180305232608p:plain:w60

それは…これはテレビ電話です。

f:id:cookie-box:20180305231302p:plain:w60

そこまでして勉強会してる設定なの俺たち!?

f:id:cookie-box:20180305232608p:plain:w60

6.3.1 節の Nadaraya-Watson モデル(カーネル回帰)のシチュエーションは、点 x における値が t である同時分布 p(x,t) を、各データ点から x-x_n 離れた点における値が t-t_n である同時分布 f(x-x_n,t-t_n) の混合分布で表そうとしていますね。これも Parzen 推定法なんですね。Parzen 推定法は密度推定の方法であって回帰というイメージではありませんでしたが…しかし、被説明変数 t を説明変数 x 側にくっつければ回帰問題を密度推定問題ととらえることもできそうですね。

f:id:cookie-box:20180305231302p:plain:w60

f(x,t)t についての平均は零であるとする」っていうのは、ここでは x をある点に固定したとき tt_n を中心にした1次元の正規分布(例えば)みたいな分布になっているのを想定してるってことだよな。…じゃあ結局1つ1つの f(x-x_n, t-t_n) については t=t_n のところでの確率密度が一番大きくて、ある x における y(x) がどうなっているかは f(x-x_n, t-t_n) の形が x 方向にどうなっているかによるけど、x_n から離れるほど小さくなるような密度だったら、結局その x に一番近い x_n に対応する t_n の影響を一番色濃く受けることになって…それって等価カーネルと似てるな。それに (6.45) 式も (3.61) 式と同じ形だ。でも今は線形基底関数モデルをベイズ的に解いたわけじゃないのになんで答えの形が同じになるの?

f:id:cookie-box:20180305232608p:plain:w60

…6.3.1 節では最初から t 方向にも x 方向にもばらつきをもつ分布を混合しようとして自然に式 (6.45) の形が出てきたようにみえます。どちらかというと 3.3 節の結果が式 (3.61) の形になる方が直感的ではない気がしますが…。ただ式の形はともかく、やりたいこととしては、3.3 節で重みパラメータを分布として考えたのは結局 t 方向のばらつきを考慮した回帰をしたい、ということになると思います。6.3.1 節で密度推定をしているのも同じだと思います。結局知りたいのは各点での p(t|x) で、これを解くのに重みパラメータ w を主役にするか各訓練データ点が張る密度 f(x-x_n, t-t_n) を主役にするかというだけの違いな気もします。ただこちらの 6.3.1 節の枠組みでは分布の形 f を等方的なガウシアンではなく柔軟に選択できると。いきなり分布の形を顕わにもつ (6.42) 式を仮定として出発しているのでそれはそうですね。…また 6.3 節冒頭に戻ると、(3.61) 式、(6.45) 式に加えてもう一つ同様の形の (6.40) 式が登場していて、これは (6.39) 式から出発して導かれたものですね。まとめると、以下のケースではすべて結果の回帰モデルが「各訓練データ点における被説明変数の値を、各訓練データ点との距離のRBFで混合したもの」になるんですね。

  • 線形基底関数モデルを、重みパラメータの分布を事前分布から事後分布にベイズ的に更新するやり方で解いたときの、事後分布の平均値による解(3.6.1節)。
  • 入力変数側にノイズが含まれる回帰モデルを変分法で解いたときの解(6.3節冒頭)。
  • 同時分布を Parzen 推定したときの、各点における被説明変数の期待値(6.3.1節)。
RBF で混合する解になったということは「x_n に近い点での値は t_n に近い値であるべき」という結論になったということですが、上の3つのケースのそれぞれ「重みパラメータの分布」「入力変数のノイズ」「説明変数と被説明変数の同時分布への仮定」がその由来になっていると思います。逆に、訓練データとして説明変数と被説明変数の組を与えられても、それだけでRBFを混合した解にはなりませんね。線形基底関数モデルを最小2乗法で解くことができる場合なら (6.9) 式の形にはなりますが、これはそもそも t_nカーネル関数の重みで混合した形をしていませんし。

f:id:cookie-box:20180305231302p:plain:w60

ふーん…まあそれで13ページの下の方にさ、「より一般的には、同時分布 p(t,x) を混合ガウス分布で表すことも可能であり」ってあるけど、そもそも (6.42) 式って f がガウシアンなら混合ガウス分布じゃん。何言ってんのこれ? あと9章ぱらぱら見ても「9章で紹介するテクニック (Ghahramani and Jordan, 1994)」がどれのことかわかんなかった(見落としたかもだけど)…。

f:id:cookie-box:20180305232608p:plain:w60

一瞬わかりにくいですよねここ…次のページまで読むと、ここで「混合ガウス分布で表す」といっているのは各訓練データの周りに密度を張ることではなくて、訓練データをEMアルゴリズムである程度混合ガウス分布クラスタリングして、クラスタ単位で密度を張るという意味ですね。「9章で紹介するテクニック」のくだりは「9章で紹介するEMアルゴリズムを用いてクラスタリングしてからカーネル回帰する」ということだと思うんですが…Ghahramani and Jordan, 1994 自体は 9.3 節に関係していそうですが…。

f:id:cookie-box:20180305231302p:plain:w60

まあいっか。結局 6.3 節の話って、この節に紹介されているようなケースだと RBF 型の等価カーネルの重みで訓練データ中の被説明変数の値を混合する形の答えになる、ってだけだよな…。ただここにきて初めて、カーネル関数の形に理由がついたってことなのかな。6.2 節までの時点ではどのカーネル関数を選ぶといいのかの理由って「このカーネル関数なら上手く学習できるかも?」くらいしかなかった気がするし…。といっても等価カーネルって 6.1 節で最初に紹介されたカーネル関数とはなんか違う(素直な特徴の内積じゃない)からちょっと引っかかるけど…。それで 6.4 節の「ガウス過程」もこれたぶんカーネル関数への理由づけだよな。6.4.1 節は「線形回帰再訪」? なんかさっきちらって見た9章にも「混合ガウス分布再訪」ってあったし、再訪しまくってんな…。

f:id:cookie-box:20180305232608p:plain:w60

いいじゃないですか何度訪ねても。そうでなくても訪ねなければ忘れてしまいますし。

f:id:cookie-box:20180305231302p:plain:w60

いや悪くないけど、「カーネル関数はあなたがすでに知っている問題にも現れる、こんなにも正当なものなんですよ」って話より、早くカーネル関数特有のすごい話みたいなのを聞きたいんだけど…。それで 6.4.1 節の問題設定は 3.3 節と同じだな。でも  y(x_1), \cdots, y(x_N) の同時分布を考えようとしてる…え、これらを並べたベクトルってガウス分布にしたがうの?

f:id:cookie-box:20180305232608p:plain:w60

(6.51) 式ってこうですよね。それぞれ独立に多変量正規分布にしたがうベクトルを足し合わせた形をしていますから、y も多変量正規分布にしたがうんじゃないですか。

 \displaystyle y = \left( \begin{array}{c} w_1 \phi_1(x_1) + w_2 \phi_2(x_1) + \cdots + w_M \phi_M(x_1) \\ w_1 \phi_1(x_2) + w_2 \phi_2(x_2) + \cdots + w_M \phi_M(x_2)  \\ \vdots \\ w_1 \phi_1(x_N) + w_2 \phi_2(x_N) + \cdots + w_M \phi_M(x_N)  \end{array} \right)
ほら、以下などに互いに独立な多変量正規分布にしたがう確率ベクトルの和は多変量正規分布にしたがうとかいてありますよ。

f:id:cookie-box:20180305231302p:plain:w60

なるほど。それで…え、E[y]=0 になっちゃうの? 回帰モデルで「どこの点でも答えの期待値はゼロです」っておかしくない? …って、w がまだ事前分布 p(w)=N(w|0, \alpha^{-1}I) だからか。重みの平均がゼロならそりゃ回帰される値はゼロになるよな。それで、これがガウス過程? ガウス過程って確率過程の一種だよな? 確率過程ってなんか時間変化していくような確率変数のことじゃないの? ウィキペディアにもそうかいてあるし。いまどこに時間変化要素あったの??

f:id:cookie-box:20180305232608p:plain:w60

「時間変化していく」というのは確率過程の定義に含まれていません。だいたい確率過程の定義は数学の話ですし、数学の世界に時間という概念などないでしょう? 確率変数の添え字は添え字であって、時間を意味している必要はありません。もちろん実際の応用では時間変化する対象を記述しようとして、時間の経過を添え字に背負わせることが圧倒的に多いわけですが…。ともかくここでは「 x_1, \cdots, x_N をどのように選んでも  y(x_1), \cdots, y(x_N) の同時分布が多変量正規分布にしたがう」ことをガウス過程といっているにすぎません。なお、多変量正規分布の平均ベクトルと分散共分散行列は常に同じである必要はありません。ここでは平均ベクトルは常にゼロベクトルになりますが、分散共分散行列は (6.53) ですから  x_1, \cdots, x_N によって変わりますね。そしてこの分散共分散行列は、各成分が訓練データ点 x_nx_mカーネル関数になっています(正確にはそれに重みパラメータの事前分布の分散をかけたものですが)。「これらの訓練データ点上での値がどうなるか特徴で回帰したいが、まだ何も値を観測していないというとき、値はこれくらいの不確かさ(分散共分散行列)で広がっている」というのを出すと、カーネル関数が現れたということなんですね。他方、特徴は直接現れていません。

f:id:cookie-box:20180305231302p:plain:w60

ふーん…まあガウスカーネルだったら近い点どうしは大きい値に(共分散大)、遠い点どうしは小さい値に(共分散小)なるわけで、じゃあこの分散共分散行列は、「まだ全然どんな値になるかわからなくて不確かだけど、近い点どうしだったら不確かさも同じ方向に広がっているだろ」「遠い点どうしだったら全然関係ないだろ」って感じなのかな…だから何って感じだけど…。で、この図 6.4 は何? 本文には「ガウス過程からのサンプル」ってあるけど、説明足りなさすぎない? 本文でいうどの式をプロットしてるの?? グラフにはちゃんと縦軸と横軸は何かかきましょうって習わなかったの??

f:id:cookie-box:20180305232608p:plain:w60

いきなり図だけだとわかりにくいですね…あ、描けました。

f:id:cookie-box:20181205224243p:plain:w320f:id:cookie-box:20181205232147p:plain:w320

f:id:cookie-box:20180305231302p:plain:w60

うおおいどうやって描いたんだよそれ!?

f:id:cookie-box:20180305232608p:plain:w60

すみません、ぶっちゃけ以下にあったスクリプトを丸々コピーして実行しました…刊行に先立って意見を募集されているということなので、何か意見をお送りできるように善処します…。

f:id:cookie-box:20180305231302p:plain:w60

何その本!? めっちゃわかりやすそう!!

f:id:cookie-box:20180305232608p:plain:w60

ともかくこれでわかりましたが、図 6.4 を描く方法は、例えば x_1 = -1, \cdots, x_{100}=1 と-1~1の点を均等に100点でもとって、それらの点から (6.54) 式にしたがって 100×100 次元のグラム行列を生成、それを分散共分散行列とした多変量正規分布から1点をサンプリングしたもの y_1, \cdots, y_{100} をプロットしているだけです(1点といっても100変量正規分布からサンプリングした点なので100次元ですね)。100変量正規分布にしたがう乱数ベクトルを1つ生成してプロットしたものが赤色のグラフで、同じ分布からもう1回乱数ベクトルを生成してプロットしたものが青色のグラフで、…といった具合です。もし100変量正規分布の異なる成分間が独立であったらホワイトノイズのようなグラフになってしまいますが(分散の大きさが各点で同じなら実際ホワイトノイズですが)、そうではなく各成分がカーネル関数であるような分散共分散構造をもっているので、近い点どうしは近い値に=滑らかになるわけです。指数カーネルの場合はちょっとギザギザしますけど。

f:id:cookie-box:20180305231302p:plain:w60

ああこれ折れ線グラフだけど横軸方向に点がめっちゃいっぱいあって滑らかに見える感じなのか…てっきり何か関数の重ね合わせ的なのかと…。

f:id:cookie-box:20180305232608p:plain:w60

本当はいくらでも密になるんだと思うんですが…。それはさておき、14ページの 6.4 節の冒頭にあった、「関数 y(x,w) に関する事前分布」というのがこの色々な色のグラフたちの上の分布なんですね。100変量正規分布からもっとたくさんの点をサンプリングすれば「関数の分布」らしさが出るでしょうか。

f:id:cookie-box:20181205233338p:plain:w320

f:id:cookie-box:20180305231302p:plain:w60

ごちゃごちゃしすぎ!!

(次回があれば)つづく