はじめに
最近、線形回帰モデルについて勉強したので忘れないうちにまとめてみました。
本記事では、カーネル関数を用いて線形回帰モデルの Dual を求め、そこからカーネルの世界へ拡張しました。
線形回帰モデル
線形回帰モデルは基底関数による特徴ベクトルφ ( x ) \varphi(x) φ ( x ) を用いることで複雑な関数を表現します。
f ( x ) = w 1 φ 2 ( x ) + w 2 φ 2 ( x ) + ⋯ + w m φ m ( x ) = ∑ i = 1 m w i φ i ( x ) f(x)=w_1\varphi_2(x)+w_2\varphi_2(x)+\dots+w_m\varphi_m(x)=\sum_{i=1}^{m}w_{i}\varphi_{i}(x) f ( x ) = w 1 φ 2 ( x ) + w 2 φ 2 ( x ) + ⋯ + w m φ m ( x ) = i = 1 ∑ m w i φ i ( x )
基底関数φ ( x ) \varphi(x) φ ( x ) と重みw w w について行列で表すと次のように変形できます。
w = ( w 1 w 2 ⋮ w m ) φ ( x ) = ( φ 1 ( x ) φ 2 ( x ) ⋮ φ m ( x ) ) \mathbf{w}=\left(\begin{array}{c} w_{1} \\ w_{2} \\ \vdots \\ w_{m}\end{array}\right)\,\,\,\,\,\,\,\,\,\, \boldsymbol \varphi(x)=\left(\begin{array}{c} \varphi_{1}(x) \\ \varphi_{2}(x) \\ \vdots \\ \varphi_{m}(x) \end{array} \right) w = w 1 w 2 ⋮ w m φ ( x ) = φ 1 ( x ) φ 2 ( x ) ⋮ φ m ( x )
f ( x ) = w T φ ( x ) f(x)=\mathbf{w}^T \boldsymbol \varphi(x) f ( x ) = w T φ ( x )
この式では、x x x をm m m 次元の特徴ベクトルに変換していると考えることができます。(線形問題)
例えば、基底関数をφ i ( x ) = x i \varphi_i(x) = x^i φ i ( x ) = x i とすると多項式の形になります。
問題設定
学習データセットD = ( x 1 , y 1 ) , … , ( x n , y n ) D=(x_1,y_1),\dots,(x_n,y_n) D = ( x 1 , y 1 ) , … , ( x n , y n ) が与えられるとき、線形回帰モデルでは次のように表現できます。
y = ( y 1 y 2 ⋮ y m ) \mathbf{y}=\left(\begin{array}{c} y_{1} \\ y_{2} \\ \vdots \\ y_{m}\end{array}\right) y = y 1 y 2 ⋮ y m
Φ = ( φ T ( x 1 ) φ T ( x 2 ) ⋮ φ T ( x m ) ) = ( φ 1 T ( x 1 ) ⋯ φ M T ( x 1 ) ⋮ ⋱ ⋮ φ 1 T ( x n ) ⋯ φ M T ( x n ) ) \Phi=\left(\begin{array}{c} \boldsymbol \varphi^T(x_1) \\ \boldsymbol \varphi^T(x_2) \\ \vdots \\ \boldsymbol \varphi^T(x_m)\end{array}\right)=\left( \begin{array}{ccc} \varphi^T_1(x_1) & \cdots & \varphi^T_M(x_1) \\ \vdots & \ddots & \vdots \\ \varphi^T_1(x_n) & \cdots & \varphi^T_M(x_n)\end{array}\right) Φ = φ T ( x 1 ) φ T ( x 2 ) ⋮ φ T ( x m ) = φ 1 T ( x 1 ) ⋮ φ 1 T ( x n ) ⋯ ⋱ ⋯ φ M T ( x 1 ) ⋮ φ M T ( x n )
y ≈ Φ w \mathbf{y}\approx\Phi\mathbf{w} y ≈ Φ w となるようなw \mathbf{w} w を求めたいのが線形回帰モデルです。
線形回帰モデルを解く
w \mathbf{w} w を求めるためには、下記の目的関数が最小になるようにします。
E = 1 2 ∑ i = 1 n ( w T φ ( x i ) − y i ) 2 + λ 2 ∣ ∣ w ∣ ∣ 2 E = \frac{1}{2}\sum_{i=1}^n(\mathbf{w}^T\boldsymbol \varphi(x_i)-y_i)^2+\frac{\lambda}{2}||\mathbf{w}||^2 E = 2 1 i = 1 ∑ n ( w T φ ( x i ) − y i ) 2 + 2 λ ∣∣ w ∣ ∣ 2
この目的関数には正則化項を付けています。これにより、過学習を防ぐことができます。
w \mathbf{w} w で目的関数を偏微分していきます。
∂ E ( w ) ∂ w = Φ T ( Φ w − y ) + λ w = 0 \frac{\partial E(\mathbf{w})}{\partial \mathbf{w}}=\boldsymbol\Phi^T(\boldsymbol\Phi\mathbf{w}-\mathbf{y})+\lambda\mathbf{w}=0 ∂ w ∂ E ( w ) = Φ T ( Φ w − y ) + λ w = 0
Φ T Φ w + λ w = Φ T y \boldsymbol \Phi^T\boldsymbol\Phi \mathbf{w}+\lambda \mathbf{w} = \boldsymbol \Phi^T \mathbf{y} Φ T Φ w + λ w = Φ T y
( Φ T Φ + λ I ) w = Φ T y (\boldsymbol \Phi^T \boldsymbol \Phi+ \lambda I)\mathbf{w}= \boldsymbol\Phi^T\mathbf{y} ( Φ T Φ + λ I ) w = Φ T y
よって
w = ( Φ T Φ + λ I ) − 1 Φ T y \mathbf{w}=(\boldsymbol \Phi^T \boldsymbol \Phi+ \lambda I)^{-1}\boldsymbol\Phi^T\mathbf{y} w = ( Φ T Φ + λ I ) − 1 Φ T y
w = ( Φ T Φ + λ I ) − 1 Φ T y \mathbf{w}=(\boldsymbol \Phi^T \boldsymbol \Phi+ \lambda I)^{-1}\boldsymbol\Phi^T\mathbf{y} w = ( Φ T Φ + λ I ) − 1 Φ T y の双対を導く
いま、A = ( Φ T Φ + λ I ) Φ T A=(\boldsymbol \Phi^T \boldsymbol \Phi+ \lambda I)\boldsymbol \Phi^T A = ( Φ T Φ + λ I ) Φ T とするとき次のように変形できます。
A = ( Φ T Φ + λ I ) Φ T = ( Φ T Φ Φ T + λ Φ T ) = Φ T ( Φ Φ T + λ I ) A=(\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)\boldsymbol \Phi^T=(\boldsymbol \Phi^T \boldsymbol \Phi \boldsymbol \Phi^T + \lambda \boldsymbol \Phi^T )=\boldsymbol \Phi^T(\boldsymbol \Phi \boldsymbol \Phi^T + \lambda I) A = ( Φ T Φ + λ I ) Φ T = ( Φ T Φ Φ T + λ Φ T ) = Φ T ( Φ Φ T + λ I )
Φ T \boldsymbol \Phi^T Φ T を右からかけて、左からくくり出しています。
A A A に左から( Φ T Φ + λ I ) − 1 (\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)^{-1} ( Φ T Φ + λ I ) − 1 、右から( Φ Φ T + λ I ) − 1 (\boldsymbol \Phi \boldsymbol \Phi^T + \lambda I)^{-1} ( Φ Φ T + λ I ) − 1 をかけます。
( Φ T Φ + λ I ) − 1 A ( Φ Φ T + λ I ) − 1 = Φ T ( P h i Φ T + λ I ) − 1 = ( Φ T Φ + λ I ) − 1 Φ T (\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)^{-1}A(\boldsymbol \Phi \boldsymbol \Phi^T+ \lambda I)^{-1} =\boldsymbol \Phi^T(\boldsymbol \ Phi \boldsymbol \Phi^T + \lambda I)^{-1} =(\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)^{-1}\boldsymbol \Phi^T ( Φ T Φ + λ I ) − 1 A ( Φ Φ T + λ I ) − 1 = Φ T ( P hi Φ T + λ I ) − 1 = ( Φ T Φ + λ I ) − 1 Φ T
したがって、Φ T ( Φ Φ T + λ I ) − 1 = ( Φ T Φ + λ I ) − 1 Φ T \boldsymbol \Phi^T(\boldsymbol \Phi \boldsymbol \Phi^T + \lambda I)^{-1}=(\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)^{-1}\boldsymbol \Phi^T Φ T ( Φ Φ T + λ I ) − 1 = ( Φ T Φ + λ I ) − 1 Φ T なので
w = Φ T ( Φ T Φ + λ I ) − 1 y \mathbf{w}=\boldsymbol \Phi^T(\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)^{-1}\mathbf{y} w = Φ T ( Φ T Φ + λ I ) − 1 y
ここでΦ T Φ \boldsymbol \Phi^T\boldsymbol \Phi Φ T Φ はグラム行列です。
グラム行列とは?
グラム行列は次のような形をしています。
K = X X T = ( x 1 T x 1 ⋯ x 1 T x N ⋮ ⋱ ⋮ x N T x 1 ⋯ x N T x N ) K=\mathbf{X}\mathbf{X}^T=\left( \begin{array}{ccc} \mathbf{x_1}^T\mathbf{x_1} & \cdots & \mathbf{x_1}^T\mathbf{x_N} \\ \vdots & \ddots & \vdots \\ \mathbf{x_N}^T\mathbf{x_1} & \cdots & \mathbf{x_N}^T\mathbf{x_N} \end{array} \right) K = X X T = x 1 T x 1 ⋮ x N T x 1 ⋯ ⋱ ⋯ x 1 T x N ⋮ x N T x N
K K K のi j ij ij 成分はi i i 番目のベクトルとj j j 番目のベクトルの内積を表しています。
つまり、i i i 番目のデータとj j j 番目のデータはどれくらい似ているのかを行列にしたのがグラム行列(データ同士の類似度行列)です。
ノンパラメトリック回帰
w = Φ T ( Φ T Φ + λ I ) − 1 y \mathbf{w}=\boldsymbol \Phi^T(\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)^{-1}\mathbf{y} w = Φ T ( Φ T Φ + λ I ) − 1 y において、新規のデータx ∗ x^{\ast} x ∗ が与えられたとき、
f ( x ∗ ) = Φ T ( Φ T Φ + λ I ) − 1 y φ ( x ∗ ) f(x^{\ast})=\boldsymbol \Phi^T(\boldsymbol \Phi^T\boldsymbol \Phi +\lambda I)^{-1}\mathbf{y}\boldsymbol\varphi(x^{\ast}) f ( x ∗ ) = Φ T ( Φ T Φ + λ I ) − 1 y φ ( x ∗ )
( A B ) T = B T A T , ( A − 1 ) T = ( A T ) − 1 (AB)^T=B^TA^T\,\,\,\,,(A^{-1})^{T}=(A^T)^{-1} ( A B ) T = B T A T , ( A − 1 ) T = ( A T ) − 1 なので
f ( x ∗ ) = y T ( P h i T Φ + λ I ) − 1 Φ T φ ( x ∗ ) f(x^{\ast})=y^T(\boldsymbol \ Phi^T \boldsymbol \Phi+ \lambda I)^{-1}\boldsymbol\Phi^T \boldsymbol \varphi(x^{\ast}) f ( x ∗ ) = y T ( P h i T Φ + λ I ) − 1 Φ T φ ( x ∗ )
k ( x , x ′ ) = φ ( x ) T φ ( x ′ ) k(x,x^{\prime})=\boldsymbol \varphi(x)^T\boldsymbol \varphi(x^{\prime}) k ( x , x ′ ) = φ ( x ) T φ ( x ′ ) とするとき、 P h i T P h i \boldsymbol \ Phi^T \boldsymbol \ Phi P h i T P hi ,Φ T φ ( x ∗ ) \boldsymbol\Phi^T \boldsymbol \varphi(x^{\ast}) Φ T φ ( x ∗ ) はそれぞれ次のように変形できます。
K = P h i T P h i = ( φ ( x 1 ) T φ ( x 1 ′ ) ⋯ φ ( x 1 ) T φ ( x n ′ ) ⋮ ⋱ ⋮ φ ( x n ) T φ ( x 1 ′ ) ⋯ φ ( x n ) T φ ( x n ′ ) ) = ( k ( x 1 , x 1 ′ ) ⋯ k ( x 1 , x n ′ ) ⋮ ⋱ ⋮ k ( x n , x 1 ′ ) ⋯ k ( x n , x n ′ ) ) K=\boldsymbol \ Phi^T \boldsymbol \ Phi=\left( \begin{array}{ccc}
\boldsymbol \varphi(x_1)^T \boldsymbol \varphi(x_1^{\prime}) & \cdots & \boldsymbol\varphi(x_1)^T\boldsymbol \varphi(x_n^{\prime}) \\
\vdots & \ddots & \vdots\\
\boldsymbol \varphi(x_n)^T\boldsymbol \varphi(x_1^{\prime}) & \cdots & \boldsymbol \varphi(x_n)^T\boldsymbol \varphi(x_n^{\prime}) \end{array} \right)=\left( \begin{array}{ccc} k(x_1,x_1^{\prime}) & \cdots & k(x_1,x_n^{\prime}) \\ \vdots & \ddots & \vdots \\ k(x_n,x_1^{\prime}) & \cdots & k(x_n,x_n^{\prime})\end{array} \right) K = P h i T P hi = φ ( x 1 ) T φ ( x 1 ′ ) ⋮ φ ( x n ) T φ ( x 1 ′ ) ⋯ ⋱ ⋯ φ ( x 1 ) T φ ( x n ′ ) ⋮ φ ( x n ) T φ ( x n ′ ) = k ( x 1 , x 1 ′ ) ⋮ k ( x n , x 1 ′ ) ⋯ ⋱ ⋯ k ( x 1 , x n ′ ) ⋮ k ( x n , x n ′ )
k(x^{\ast})=\boldsymbol\Phi^T \boldsymbol \varphi(x^{\ast})=\left[ \begin{array}{c} \boldsymbol \varphi(x_1)^T\boldsymbol \varphi(x)^{\ast} \\ \vdots \\ \boldsymbol \varphi(x_n)^T\boldsymbol \varphi(x)^{\ast} \end{array} \right]=\left[ \begin{array}{c} k(x_1,x^{\ast}) \\ \vdots \\ k(x_n,x^{\ast}) \ \end{array} \ right]
よって、
f ( x ∗ ) = y T ( K + λ I ) − 1 k ( x ∗ ) f(x^{\ast})=\mathbf{y}^T(K+\lambda I )^{-1}k(x^{\ast}) f ( x ∗ ) = y T ( K + λ I ) − 1 k ( x ∗ )
したがって、線形回帰モデルでは次の2つの Dual な表現ができます。
f ( x ∗ ) = w T φ ( x ) , w = ( P h i T P h i + λ I ) − 1 y f(x^{\ast})=\mathbf{w}^T\boldsymbol \varphi(x)\,\,\,\,\,,\mathbf{w}=(\boldsymbol \ Phi^T \boldsymbol \ Phi+ \lambda I)^{-1}\mathbf{y} f ( x ∗ ) = w T φ ( x ) , w = ( P h i T P hi + λ I ) − 1 y
入力x ∗ x^{\ast} x ∗ に対しての出力f f f を特徴ベクトルを使って表した表現です。
f ( x ∗ ) = a T k ( x ∗ ) , a = ( K + λ I ) − 1 y f(x^{\ast})=\mathbf{a}^T\mathbf{k}(x^{\ast})\,\,\,\,\,,\mathbf{a}=(K+\lambda I )^{-1}\mathbf{y} f ( x ∗ ) = a T k ( x ∗ ) , a = ( K + λ I ) − 1 y
類似度ベクトルを使った表現です。
こちらの方は、パラメータw \mathbf{w} w や基底関数が消えてなくなっています。(パラメトリック回帰がノンパラメトリック回帰に変わっている)
従って、基底関数は不要でありk ( x , x ∗ ) k(x,x^{\ast}) k ( x , x ∗ ) がわかればいいという式になっています。
以前の式では出力y y y も必要でしたが、こちらの式では入力x x x さえわかればいいということになっています。
カーネル関数
このk ( x , x ∗ ) k(x,x^{\ast}) k ( x , x ∗ ) はカーネル関数といいます。
k ( x , x ′ ) = φ ( x ) T φ ( x ′ ) k(x,x^{\prime})=\boldsymbol \varphi(x)^T\boldsymbol \varphi(x^{\prime}) k ( x , x ′ ) = φ ( x ) T φ ( x ′ )
これは内積の一般化とみることができます
カーネル関数には下記のような性質をもっています。
カーネル関数は 2 つの入力がどれくらい似ているかを表す
カーネル関数は半正定値対称関数である
被らない任意の個数x x x があるときカーネル関数はx × x x\times x x × x の正定値対称行列になる。ここで被ってもいいとすれば半正定値称行列になる
φ ( x ) \boldsymbol \varphi(x) φ ( x ) は知らなくても問題ない性質。これは、φ ( x ) \boldsymbol \varphi(x) φ ( x ) がわかればk ( x , x ′ ) k(x,x^{\prime}) k ( x , x ′ ) がわかるというものでした。もしk ( x , x ′ ) k(x,x^{\prime}) k ( x , x ′ ) が半正定値対称関数であれば、それに対応する基底関数は存在するので、機械学習では基底関数は使いません。したがって、もはやφ ( x ) \boldsymbol \varphi(x) φ ( x ) は知らなくてもいいですよという性質があります。これはデータ数だけで決まるので基底関数が無限個でも No problem です。
ここまでのカーネルことをまとめると
データ成分で記述されるような線形手法の問題があったときに、それを Dual な表現で表すと、内積に置き換えることができます。そして、それをカーネルに置き換えることで非線形の表現で表すことができるということです。
つまり、どんな線形手法でも Dual な表現に置き換えることで、カーネル法が適応できて非線形手法に拡張することができます。
また、このとき数値ではないデータ(文字列、グラフ、テキスト)にも内積(類似度)を定義することができるという特徴があります。
線形回帰モデルから非線形手法であるカーネルの世界という新たな世界へと繋がりました。
最後に
ここまで読んでくださってありがとうございます。