手帳と試行

学んだことをアウトプットしていきます。 日々、ノートあるのみ。

事後予測分布とカーネルトリック

事後予測分布の式を、もう少し簡単にする。

事後予測分布

尤度関数として正規分布

p(yX,w)=Nd(yXw,σ2Id)\begin{aligned} p(\bm y | \bm X, \bm w) = \mathcal N_d(\bm y | \bm X \bm w, \sigma^2 \bm I_d) \end{aligned}

を設定し、事前分布として多変量正規分布

p(w)=Nn(wm0,V0)exp(12(wm0)TV01(wm0))\begin{aligned} p(\bm w) &= \mathcal N_n(\bm w | \bm m_0, \bm V_0) \\ &\propto \exp \left( -\frac{1}{2} (\bm w - \bm m_0)^\mathsf{T} \bm V_0^{-1} (\bm w - \bm m_0) \right) \end{aligned}

を設定したとき、事後予測分布は次のようなものに帰着した。

p(yX,X,y)=Nd(ymy,Vy)p(\bm y_\ast | \bm X_\ast, \bm X, \bm y) = \mathcal N_{d^\ast} (\bm y_\ast | \bm m_y, \bm V_y)
myy=KT(K+σ2Id)1yVyy=K+σ2IdKT(K+σ2Id)1K\begin{aligned} \bm m_{y_\ast | y} ={}& \bm K_\ast^\mathsf{T} (\bm K + \sigma^2 \bm I_d)^{-1} \bm y \\ \bm V_{y_\ast | y} ={}& \bm K_{\ast\ast} + \sigma^2 \bm I_{d^\ast} - \bm K_\ast^\mathsf{T} (\bm K + \sigma^2 \bm I_d)^{-1} \bm K_\ast \\ \end{aligned}
{K=XV0XTK=XV0XTK=XV0XT\left\{\begin{aligned} \bm K ={}& \bm X \bm V_0 \bm X^\mathsf{T} \\ \bm K_{\ast} ={}& \bm X \bm V_0 \bm X_\ast^\mathsf{T} \\ \bm K_{\ast\ast} ={}& \bm X_\ast \bm V_0 \bm X_\ast^\mathsf{T} \\ \end{aligned}\right.

カーネルトリック

ここで、行列 K,K,K\bm K, \bm K_\ast, \bm K_{\ast\ast} の成分を展開して見てみよう。

K=[x1TV0x1x1TV0x2x1TV0xdx2TV0x1x2TV0x2x2TV0xdxdTV0x1xdTV0x2xdTV0xd]K=[x1TV0x1x1TV0x2x1TV0xdx2TV0x1x2TV0x2x2TV0xdxdTV0x1xdTV0x2xdTV0xd]K=[x1TV0x1x1TV0x2x1TV0xdx2TV0x1x2TV0x2x2TV0xdxdTV0x1xdTV0x2xdTV0xd]\begin{aligned} \bm K ={}& \left[\begin{darray}{llcl} \bm x_1^\mathsf{T} \bm V_0 \bm x_1 & \bm x_1^\mathsf{T} \bm V_0 \bm x_2 & \cdots & \bm x_1^\mathsf{T} \bm V_0 \bm x_d \\ \bm x_2^\mathsf{T} \bm V_0 \bm x_1 & \bm x_2^\mathsf{T} \bm V_0 \bm x_2 & \cdots & \bm x_2^\mathsf{T} \bm V_0 \bm x_d \\ \vdots & \vdots & \ddots & \vdots \\ \bm x_d^\mathsf{T} \bm V_0 \bm x_1 & \bm x_d^\mathsf{T} \bm V_0 \bm x_2 & \cdots & \bm x_d^\mathsf{T} \bm V_0 \bm x_d \\ \end{darray}\right] \\ \\ \bm K_\ast ={}& \left[\begin{darray}{llcl} \bm x_1^\mathsf{T} \bm V_0 \bm x_{1^\ast} & \bm x_1^\mathsf{T} \bm V_0 \bm x_{2^\ast} & \cdots & \bm x_1^\mathsf{T} \bm V_0 \bm x_{d^\ast} \\ \bm x_2^\mathsf{T} \bm V_0 \bm x_{1^\ast} & \bm x_2^\mathsf{T} \bm V_0 \bm x_{2^\ast} & \cdots & \bm x_2^\mathsf{T} \bm V_0 \bm x_{d^\ast} \\ \vdots & \vdots & \ddots & \vdots \\ \bm x_d^\mathsf{T} \bm V_0 \bm x_{1^\ast} & \bm x_d^\mathsf{T} \bm V_0 \bm x_{2^\ast} & \cdots & \bm x_d^\mathsf{T} \bm V_0 \bm x_{d^\ast} \\ \end{darray}\right] \\ \\ \bm K_{\ast \ast} ={}& \left[\begin{darray}{llcl} \bm x_{1^\ast}^\mathsf{T} \bm V_0 \bm x_{1^\ast} & \bm x_{1^\ast}^\mathsf{T} \bm V_0 \bm x_{2^\ast} & \cdots & \bm x_{1^\ast}^\mathsf{T} \bm V_0 \bm x_{d^\ast} \\ \bm x_{2^\ast}^\mathsf{T} \bm V_0 \bm x_{1^\ast} & \bm x_{2^\ast}^\mathsf{T} \bm V_0 \bm x_{2^\ast} & \cdots & \bm x_{2^\ast}^\mathsf{T} \bm V_0 \bm x_{d^\ast} \\ \vdots & \vdots & \ddots & \vdots \\ \bm x_{d^\ast}^\mathsf{T} \bm V_0 \bm x_{1^\ast} & \bm x_{d^\ast}^\mathsf{T} \bm V_0 \bm x_{2^\ast} & \cdots & \bm x_{d^\ast}^\mathsf{T} \bm V_0 \bm x_{d^\ast} \end{darray}\right] \end{aligned}

実際には紙面の都合でこんなに丁寧に書けないため、次のように省略して書くのが通例だろう。

K=[xiTV0xj]ijRd×dK=[xiTV0xj]ijRd×dK=[xiTV0xj]ijRd×d\begin{aligned} \bm K ={}& \left[\begin{darray}{c} \bm x_i^\mathsf{T} \bm V_0 \bm x_j \end{darray}\right]_{ij} && \in \R^{d \times d} \\ \bm K_{\ast} ={}& \left[\begin{darray}{c} \bm x_{i}^\mathsf{T} \bm V_0 \bm x_{j^\ast} \end{darray}\right]_{ij^\ast} && \in \R^{d \times d^\ast} \\ \bm K_{\ast\ast} ={}& \left[\begin{darray}{c} \bm x_{i^\ast}^\mathsf{T} \bm V_0 \bm x_{j^\ast} \end{darray}\right]_{i^\ast j^\ast} && \in \R^{d^{\ast} \times d^{\ast}} \end{aligned}

これを纏めて次のように表すことにしよう。

[KKKTK]=[xiTV0xj]ijR(d+d)×(d+d)\begin{aligned} \left[\begin{darray}{c} \bm K & \bm K_\ast \\ \bm K_\ast^\mathsf{T} & \bm K_{\ast\ast} \end{darray}\right] ={}& \left[\begin{darray}{c} \bm x_i^\mathsf{T} \bm V_0 \bm x_j \end{darray}\right]_{ij} \in{} \R^{(d + d^\ast) \times (d + d^\ast)} \\ \end{aligned}
カーネル関数

どうやら、同じ形の項 xiTV0xj\bm x_i^\mathsf{T} \bm V_0 \bm x_j が何度も繰り返し出現するらしい。そこで、これを

kij=k(xi,xj)=xiTV0xjk_{ij} = k(\bm x_i, \bm x_j) = \bm x_i^\mathsf{T} \bm V_0 \bm x_j

と書き直してしまおう。すると次のようになる。

[KKKTK]=[kij]ijR(d+d)×(d+d)\begin{aligned} \left[\begin{darray}{c} \bm K & \bm K_\ast \\ \bm K_\ast^\mathsf{T} & \bm K_{\ast\ast} \end{darray}\right] ={}& \left[\begin{darray}{c} k_{ij} \end{darray}\right]_{ij} \in{} \R^{(d + d^\ast) \times (d + d^\ast)} \\ \end{aligned}

さて、もとの定義どおりであれば

kij=xiTV0xj=k,lV0klxikxjlk_{ij} = \bm x_i^\mathsf{T} \bm V_0 \bm x_j = \sum_{k, l} {V_0}_{kl} x_{ik}x_{jl}

となるが、ここでちょっと変なことをする。 📄 線形回帰とカーネル法 で取り扱っているように、関数 k:Rd×RdRk: \mathbb R^d \times \mathbb R^d \to \mathbb R として、もっと一般に xi\bm x_ixj\bm x_j を入力とする関数を許す。

kij=k(xi,xj)k_{ij} = k(\bm x_i, \bm x_j)

これにより、カーネル法と似たような理屈で、非常に表現力の高い回帰モデルを作成できる。

カーネル法の命名を借りて、この関数 kkカーネル関数 (kernel function) という。そしてカーネル関数を並べた行列 K\bm Kカーネル行列 (kernel matrix) という。

カーネル関数として要求される条件はカーネル法の場合と同じで、

  • KT=K\bm K^\mathsf{T} = \bm K
  • uTKu0uR\bm u^\mathsf{T} \bm K \bm u \ge 0 \quad {}^\forall \bm u \in \mathbb R

すなわちカーネル行列が半正定値行列となる必要がある。

カーネル関数には、データを滑らかにつなぐもの、周期的な曲線を描くもの、近似直線を描くものなど、色々ある。例えば次のガウスカーネルは、データを滑らかにつなぐものとして知られており、内挿によく使用される。

k(xi,xj)=exp(12σ2xixj22)\begin{aligned} k(\bm x_i, \bm x_j) ={}& \exp \left( -\frac{1}{2\sigma^2} \|\bm x_i - \bm x_j\|_2^2 \right) \end{aligned}

解釈のまとめ