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

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

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

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

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

特徴の内積として定義されたカーネル関数でしたが、現実には特徴を意識せずにいきなりカーネル関数を構成したい。でも勝手な関数にするわけにはいかないので、前回は、「k(x,x') が有効なカーネル関数である」、つまり「任意の訓練データの組合せに対して k(x_n, x_m)k(x_n, x_m) = \phi(x_n)^{\top} \phi(x_m) の形にかけるような、入力空間から特徴空間への写像 \phi(x) が存在する」ことの必要十分条件は、「nm 列の成分が k(x_n, x_m) であるような行列(グラム行列)が半正定値である」ことを確かめました。といっても、適当な関数を選んで「カーネル関数たる資格があるかどうか」を調べるのも面倒なので、既知のカーネル関数から6ページの公式 (6.13)~(6.22) を利用して新しいカーネル関数を構成するのが便利なようです。前回はここの証明はとばしたので証明の概略を考えてみます。

  • (6.13) は、新しい特徴を \phi'(x)=\sqrt{c}\phi_1(x) とすればよいことから明らかですね。
  • (6.14) も、新しい特徴を \phi'(x)=f(x)\phi_1(x) とすればよいです。
  • (6.17) ですが、半正定値行列は「全ての固有値が非負」の他に「2次形式が非負」という定義づけをすることもできます(証明略)。ので、k_1(x_n, x_m)+k_2(x_n, x_m) を成分とする行列も半正定値です。
  • (6.18) は、新しい特徴が \phi'(x)=\phi_1(x)\phi_2(x) になるはずです。
  • (6.15) は、(6.13)、(6.17)、(6.18) を繰り返せば導出できるはずです。
  • (6.16) は、(6.15) に  \exp (x)マクローリン展開を適用すればよいと思います。
  • (6.19) は、\phi'(x)=\phi_3(\phi(x)) ですかね。
  • (6.20) は、A は半正定値なので、A固有値の非負の平方根を対角成分に並べた対角行列を \hat{\Lambda} と、適当な直交行列 P によって A=P\hat{\Lambda}(P\hat{\Lambda})^{\top} とかけるので、k(x,x')=((P\hat{\Lambda})^{\top}x)^{\top}(P\hat{\Lambda})^{\top}x' ですね。
  • (6.21) (6.22) は \phi(x_a)=x_b と考えればここまでの公式から導かれる気がします。
いずれの公式でも、新しいカーネル関数もまた特徴の内積になっていることがわかりますね。

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

最後雑だなー。それで、前回の続きには、カーネル法の利点として入力が数値ベクトルでなくてもカーネル関数が定義できればよい、というのが挙げられているな。確かに、テキスト分類なんかの場合、各単語の特徴ベクトルを考えるより、各単語間のカーネル関数を考える方がやりやすそうかも…。あと、カーネル関数を確率的生成モデルにしたり、隠れマルコフモデルにすることもできるのか。

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

(6.29) 式は xx' が同じ i 番目の分布に所属しているかどうかといった感じがしますね。重み p(i) が乗じられますが。(6.30) 式も、配列 X と配列 X' が同じ隠れ状態 Z から生成されたかどうかをみているようです。なるほどこれらのモデルは xx'(配列 X と配列 X')の類似度を直接測るよりも訓練データへの依存性が低いモデルになりそうですが、データの性質をよく表現する生成モデルや隠れマルコフモデルが用意できるかというのはまた別の問題ですよね。

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

それでさらにフィッシャーカーネルというのもある、と。…なんかこの 6.2 節って要するに「あんなカーネル関数もこんなカーネル関数もつかえるよ」って話で、確かにそんな関数をパターン認識につかえたら便利なのかもって感じはするけど、具体例が伴わないからなんかふわふわしてるんだよな…。それでフィッシャースコアとフィッシャー情報行列って何?

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

フィッシャースコアは式 (6.32) の通り対数密度のパラメータベクトルに関するナブラですよ。そしてフィッシャー情報行列はその分散共分散行列です。あるパラメータベクトルにおける。式 (6.34) ですね。

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

え、式 (6.34) ってフィッシャースコアの分散共分散行列になってる?

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

フィッシャースコアの期待値はゼロベクトルになるので。

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

ふーん…それにしても、カーネル関数って、一方の点から他方の点につくる密度みたいな感じだったけど、これだとそれぞれの点での対数密度をパラメータで偏微分してから掛け合わせてるから密度ではないよな。パラメータが1次元だと考えると、(6.33) 式ってこうなる?

 \displaystyle k(x, x';\theta) = \frac{g(\theta, x) \cdot g(\theta, x')}{E_x \left[ g(\theta, x)^2 \right]} = \frac{ \displaystyle \frac{\partial}{\partial \theta} \ln p(x|\theta) \cdot \frac{\partial}{\partial  \theta}  \ln p(x'|\theta) }{E_x \left[ \left( \displaystyle \frac{\partial}{\partial \theta} \ln p(x|\theta) \right)^2 \right] }
分母は x,\,x' によらないから差し当たり無視すると、このカーネル関数ってこういうことだよな。
  • パラメータに関する偏微分がゼロになるような点(例えば正規分布の平均をパラメータと考えているとしたら、その平均にあたる点)については、どこの点とのカーネル関数を計算してもゼロになる。
  • ある点と同じ点とのカーネル関数は、その点でのパラメータに関する偏微分の絶対値が大きいほど大きい(ゼロ以上)。ガウスカーネルのようにどの地点でも一定値ではない。
  • 例えば正規分布の平均をパラメータと考えているとしたら、このカーネル関数が最小になる地点の組み合わせは、正規分布の左側の傾きの絶対値が最大になる点と正規分布の右側の傾きの絶対値が最大になる点で、最大になる地点の組み合わせはそれらの点の同じ点どうし。
…これが「類似度」になるの? 正規分布の中心の点はどこの点とも類似度がゼロっておかしくない?

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

「生成モデルのパラメータを少し動かしたときに密度がどれだけ急に変わるか」を主役にした類似度ですね…確かに密度のパラメータに関する偏微分の絶対値が大きい点ではパラメータを少し動かすと全体の尤度への影響が大きいですが…。ある点とある点のカーネル関数が大きなプラスだったら、その点どうしは「自分たちの尤度を大きくするためにパラメータを同じ方向に動かすことに強く同意し合っている」、大きなマイナスだったら「パラメータを動かす方向について意見が全然合わない」、ゼロだったら「どちらでもない」といった感じですね。と考えればある意味「点どうし気が合うか」を測っているような気はしますが…。フィッシャーカーネルは文書や画像の認識で威力を発揮するようですが、テキストの9ページからはその心を読み取りづらいですね。そこに言及がある情報幾何を知っていればもっと理解できるのでしょうが…。

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

でもなんかフィッシャーカーネルって聞くとケンタッキーフライドフィッシュ思い出さない? そんなの一時期売ってなかった?

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

え? すいません僕ファストフードに詳しくないんで…。

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

で最後のカーネル関数の例がシグモイドカーネルか。え、必ずしも半正定値にはならないって、「カーネル関数は特徴の内積」っていう大前提ぶん投げてるじゃん…。それで、カーネル法ニューラルネットワークは実は似てるんですよって話が出てきてるな。というかここにくるまでカーネル法とは何かが定義されてないんだけど、6.1節の双対表現を解くってことでいいのか?

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

ニューラルネットワークとの関連の話は後の節でまた出てくるようなので、6.3節に進みましょうか。

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

6.3節は「RBFネットワーク」か。基底関数、カーネル法の文脈で言い換えると特徴の1つ1つの成分、としてどのような形のものをとるとよいかって話で、RBF(動径基底関数;radial basis function)っていう  \phi_j(x) = h(|| x - \mu_j || ) の形のものが多いってかいてあるな。

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

ただこの6.3節の導入部ではまずはカーネル法は意識されていませんね。単にモデルを構成するパーツとしての RBF です。なぜ RBF が導入されたのかとありますが、例えば…  x=10 において  y = 1 x=20 において  y = 2 x=30 において  y = 1 という値が観測されたときに、では x \in \mathbb{R} ではどうなっているんだろうと考えたいわけですが、x=10, \, 20, \, 30 を中心にガウス関数でも置いとけばいいだろという精神ですよね(頂点での値はちゃんとその地点での観測値になるようにして)。

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

いやいや雑すぎるだろ! そんな山3個置いただけのがあらゆる x に対するモデルになってる気がしないんだけど! いやそもそも3点しかないから全体の姿はなんかもう全然わかんないけど!

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

ええ、通常このようにはしないというような記述がありますね。

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

プロデューサーさんは大学で散々グリーン関数を扱ったはずなのに何も説明できないんですよね。

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

はい。

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

式 (6.39) は確率的なノイズがある場合の回帰モデルの最適化ってことだよな。Nadaraya-Watson モデルっていうのか。それでなんか 6.3 節導入部の最後に、カーネル密度推定を用いた回帰では各データ点に基底関数が関連付けられているから計算コストがかかるけど、基底関数(ここでは各データ点を中心にした RBF を全部特徴の成分にするつもりだったんだよな、それは計算コストがやばそうだな)の数を削減する方法もあるってかいてあるな。削減方法の例には直交最小2乗法(誤差の2乗和を最も削減する点から順に選んでいく)や K-means クラスタリングして重心を採用するとかがあるのか。…で 6.3.1 節がいきなり「3.3.3 節では(中略)等価カーネルによって与えられた」からはじまってるんだけど、俺等価カーネルって何か知らないんだけど、というか他にも 6.3 節ってちょいちょい3章を回顧してない? 上巻の3章ってどんな内容だったんだろ?

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

3章は「線形回帰モデル」というタイトルですね。3.1節ではまず特徴の線形和でかけるモデルが導入されていて…なんか図 3.1 に図 6.1 と全く同じ絵が…。そのパラメータ推定ですが、加法的な正規ノイズの場合は最尤推定と最小2乗推定が等価だと…それはそうですよね。図3.2 は面白いですね。特徴が2次元の場合の絵にみえます。\varphi_1 は全データの特徴の1つめの成分を並べたベクトルで、\varphi_2 は2つめの成分を並べたベクトルで、これらの線形和で各データに対応する被説明変数を並べたベクトル t をつくりたいわけですが、線形和は面 \mathcal{S} 内しか動けないので t\mathcal{S} への正射影を最適解とするしかないという状況ですね。あとは正則化の話もあって…3.2節にはバイアス-バリアンス分解による推定のやり方のよさの議論なんかもあるんですね。節の最後で「ここからはベイズ的にいく」って感じで決別されてる感じですけど。3.3節はベイズ線形回帰というタイトルで、パラメータ w の分布を更新しようという話になってますね。このとき事後分布の平均は (3.53) 式  m_N = \beta S_N \Phi^{\top} t となり、これによる予測は(3.61) 式  y(x, m_N) = \sum_n \beta \phi(x)^{\top} S_N \phi(x_n) t_n \equiv \sum_n k(x,x_n) t_n となってこの k(x,x') を等価カーネルとよぶと。これは、未知の点 x での値の予測において、訓練データ中の被説明変数をどれだけの割合ずつ混ぜるべきかと解釈できるんですね(\sum_n k(x,x_n)=1)。図 3.10 のように、ガウス基底関数を選んだときのカーネル関数を x' についてプロットすると、相手の点 x の周りに局在するというのは僕が前回プロットで示したのと同じですね(もっとも、前回プロットしたカーネル関数は単なるガウス基底関数の内積であって、事後分散共分散行列 S_N を挟んでいませんでしたが)。つまり、未知の点に対する値を予測したいときは、その点に近い説明変数に対する被説明変数をより多く混ぜよ、という直感的な結果になりますね。

(次回があれば)つづく