からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

4.4.0:ラプラス近似の導出【PRMLのノート】

はじめに

 『パターン認識と機械学習』の独学時のまとめです。一連の記事は「数式の行間埋め」または「R・Pythonでのスクラッチ実装」からアルゴリズムの理解を補助することを目的としています。本とあわせて読んでください。

 この記事は、4.4節の内容です。ラプラス近似を導出します。

【実装編】

www.anarchive-beta.com

www.anarchive-beta.com

【前節の内容】

www.anarchive-beta.com

【他の節一覧】

www.anarchive-beta.com

【この節の内容】

4.4.0 ラプラス近似

 確率密度関数をガウス分布で近似するラプラス近似を導出します。

・定義式の確認

 この項で利用するあれこれの定義式を簡単に確認しておきます。(表記や記号って検索しにくくて調べきれなかったので、正確ではないかもしれません。間違っていたら教えて下さい。)

・ガウス分布

 平均$\mu$・分散$\sigma^2$の1変量ガウス分布は、次の式で定義されます。

$$ \begin{align} \mathcal{N}(x | \mu, \sigma^2) &= \frac{1}{(2 \pi \sigma^2)^{\frac{1}{2}}} \exp \left\{ - \frac{1}{2 \sigma^2} (x - \mu)^2 \right\} \tag{2.42}\\ &= \left( \frac{\lambda}{2 \pi} \right)^{\frac{1}{2}} \exp \left\{ - \frac{\lambda}{2} (x - \mu)^2 \right\} = \mathcal{N}(x | \mu, \lambda^{-1}) \end{align} $$

 ここで、$\lambda$は精度です。精度は分散の逆数であり、$\lambda = \frac{1}{\sigma^2}$、$\sigma^2 = \lambda^{-1}$です。

 平均$\boldsymbol{\mu}$・分散共分散行列$\boldsymbol{\Sigma}$の多変量($D$次元)ガウス分布は、次の式で定義されます。

$$ \begin{align} \mathcal{N}(\mathbf{x} | \boldsymbol{\mu}, \boldsymbol{\Sigma}) &= \frac{1}{(2 \pi)^{\frac{D}{2}}} \frac{1}{|\boldsymbol{\Sigma}|^{\frac{1}{2}}} \exp \left\{ - \frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^{\top} \boldsymbol{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu}) \right\} \tag{2.43}\\ &= \frac{ |\boldsymbol{\Lambda}|^{\frac{1}{2}} }{ (2 \pi)^{\frac{D}{2}} } \exp \left\{ - \frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^{\top} \boldsymbol{\Lambda} (\mathbf{x} - \boldsymbol{\mu}) \right\} = \mathcal{N}(\mathbf{x} | \boldsymbol{\mu}, \boldsymbol{\Lambda}^{-1}) \end{align} $$

 ここで、$\boldsymbol{\Lambda}$は精度行列です。精度行列は分散共分散行列の逆行列であり、$\boldsymbol{\Lambda} = \boldsymbol{\Sigma}^{-1}$です。

・テイラー展開

 1変量関数$f(x)$を$a$の周りでテイラー展開すると、次の式になります。

$$ \begin{aligned} f(x) &= \sum_{i=0}^{\infty} \frac{1}{i!} \frac{d^i f(x)}{d x^{i}} (x - a)^i \\ &= f(a) + \frac{d f(a)}{d x} (x - a) + \frac{1}{2} \frac{d^2 f(a)}{d x^2} (x - a)^2 + \cdots \end{aligned} $$

 多変量関数($\mathbf{x} = (x_1, \cdots, x_D)^{\top}$の関数)$f(\mathbf{x})$を$\mathbf{a} = (a_1, \cdots, a_D)^{\top}$の周りでテイラー展開すると、次の式になります。

$$ \begin{aligned} f(\mathbf{x}) &= \sum_{i=0}^{\infty} \frac{1}{i!} \left\{ (x_1 - a_1) \frac{\partial f(\mathbf{a})}{\partial x_1} + \cdots + (x_D - a_D) \frac{\partial f(\mathbf{a})}{\partial x_D} \right\}^i \\ &= f(\mathbf{a}) + \left\{ \sum_{d=1}^D (x_d - a_d) \frac{\partial f(\mathbf{a})}{\partial x_d} \right\} + \frac{1}{2} \left\{ \sum_{d=1}^D (x_d - a_d) \frac{\partial f(\mathbf{a})}{\partial x_d} \right\}^2 + \cdots \end{aligned} $$

 波括弧の中は、$(\mathbf{x} - \mathbf{a})$と勾配$\nabla f(\mathbf{a})$の内積で表せます。

 この項では、2次の項($i = 2$)まで使うことで左辺の関数を近似します。テイラー展開については「ステップ27:sin関数のテイラー展開【ゼロつく3のノート(数学)】 - からっぽのしょこ」も参考にしてください。

・勾配

 $f(\mathbf{x})$の勾配(1階微分)は、偏微分を要素とするベクトルです。

$$ \nabla f(\mathbf{x}) = \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} = \begin{pmatrix} \frac{\partial f(\mathbf{x})}{\partial x_1} \\ \vdots \\ \frac{\partial f(\mathbf{x})}{\partial x_D} \end{pmatrix} $$

 $f(\mathbf{x})$のヘッセ行列(2階微分)は、偏微分を要素とする行列です。

$$ \mathbf{H} = \nabla \nabla f(\mathbf{x}) = \frac{\partial^2 f(\mathbf{x})}{\partial \mathbf{x} \partial \mathbf{x}^{\top}} = \begin{pmatrix} \frac{\partial^2 f(\mathbf{x})}{\partial x_1^2} & \cdots & \frac{\partial^2 f(\mathbf{x})}{\partial x_1 \partial x_D} \\ \vdots & \ddots & \vdots \\ \frac{\partial^2 f(\mathbf{x})}{\partial x_D \partial x_1} & \cdots & \frac{\partial^2 f(\mathbf{x})}{\partial x_D^2} \end{pmatrix} $$

 $f(\mathbf{x})$の$\mathbf{a}$における勾配を次のように表記します。

$$ \nabla f(\mathbf{x}) |_{\mathbf{z}=\mathbf{a}} = \begin{pmatrix} \left.\frac{\partial f(\mathbf{x})}{\partial x_1} \right|_{\mathbf{x}=\mathbf{a}} \\ \vdots \\ \left.\frac{\partial f(\mathbf{x})}{\partial x_D} \right|_{\mathbf{x}=\mathbf{a}} \end{pmatrix} = \begin{pmatrix} \frac{\partial f(\mathbf{a})}{\partial x_1} \\ \vdots \\ \frac{\partial f(\mathbf{a})}{\partial x_D} \end{pmatrix} = \nabla f(\mathbf{a}) $$

 (この表記が合っているのかがよく分からないのですが、本の表記だと式がゴチャゴチャするので、基本的にこの右側の表記を使います。)

・1次元の場合

 まずは、1変数の場合を考えます。

 連続値をとる変数$z$の関数を$f(z)$とします。
 関数$f(x)$の積分を

$$ Z = \int f(z) dz $$

とおき、$z$の分布$p(z)$を次の式で表します。

$$ p(z) = \frac{f(z)}{\int f(z) dz} = \frac{1}{Z} f(z) \tag{4.125} $$

 $Z$は、分布$p(x)$を積分した時に1になるようにする正規化係数です。

 $f(z)$を微分して0となる$z$の値を$z_0$とします。これを次の式でも表せます。

$$ \frac{d f(z_0)}{d z} = \left. \frac{d f(z)}{d z} \right|_{z=z_0} = 0 \tag{4.126} $$

 対数をとった関数$\ln f(z)$を$z_0$の周りで2次までテイラー展開します。

$$ \begin{aligned} \ln f(z) &\simeq \ln f(z_0) + \frac{d \ln f(z_0)}{d z} (z - z_0) + \frac{1}{2} \frac{d^2 \ln f(z_0)}{d z^2} (z - z_0)^2 \end{aligned} $$

 定義(4.126)より

$$ \frac{d \ln f(z_0)}{d z} = \frac{1}{f(z_0)} \frac{d f(z_0)}{d z} = 0 $$

になるので、2番目の項は0となります。対数関数の微分$\frac{d \ln x}{d x} = \frac{1}{x}$と合成関数の微分$\frac{d g(f(x))}{d x} = \frac{d g(f(x))}{d f(x)} \frac{d f(x)}{d x}$を行いました。
 また、3番目の項に関して

$$ A = - \frac{d^2 \ln f(z_0)}{d z^2} = - \left. \frac{d^2 \ln f(z)}{d z^2} \right|_{z=z_0} \tag{4.128} $$

とおくと、$\ln f(z)$は

$$ \ln f(z) \simeq \ln f(z_0) - \frac{A}{2} (z - z_0)^2 \tag{4.127} $$

で近似できます。

 近似式(4.127)の両辺の指数をとり、$\ln$を外します。

$$ f(z) \simeq f(z_0) \exp \left\{ - \frac{A}{2} (z - z_0)^2 \right\} \equiv \tilde{f}(z) \tag{4.129} $$

 この式は、平均$z_0$・精度$A$の正規化項のない1変量ガウス分布と言えます。よって、1変量ガウス分布(2.42)と対応させて$\tilde{f}(z)$を積分すると

$$ \int \tilde{f}(z) dz = f(z_0) \int \exp \left\{ - \frac{A}{2} (z - z_0)^2 \right\} dz = f(z_0) \left( \frac{2 \pi}{A} \right)^{\frac{1}{2}} $$

となる(たぶん)のが分かります。詳しくは「ガウス積分」などで調べればいいんだと思います…。
 したがって、$\tilde{f}(z)$を正規化する(正規化項を与える)と

$$ \frac{\tilde{f}(z)}{\int \tilde{f}(z) dz} = \left( \frac{A}{2 \pi} \right)^{\frac{1}{2}} \exp \left\{ - \frac{A}{2} (z - z_0)^2 \right\} = \mathcal{N}(z | z_0, A^{-1}) \equiv q(z) \tag{4.130} $$

となります。
 $p(z)$に対する$z = z_0$付近での近似分布$q(z)$が得られました。分散は0以上なので、その逆数である精度は$A > 0$である必要があります。これは式(4.128)より、$\frac{d^2 f(x)}{d x^2} < 0$である必要があるとも言えます。

・多次元の場合

 次は、多変数の場合を考えます。

 連続値をとる$M$次元の変数$\mathbf{z} = (z_1, \cdots, z_M)^{\top}$の関数を$f(\mathbf{z})$とします。
 1変数のときと同様に、積分を$Z$とおき、$\mathbf{z}$の分布を次の式で表します。

$$ p(\mathbf{z}) = \frac{f(\mathbf{z})}{\int f(\mathbf{z}) d\mathbf{z}} = \frac{1}{Z} f(\mathbf{z}) $$

 $f(\mathbf{z})$を微分して$\mathbf{0}$となる$\mathbf{z}$の値を$\mathbf{z}_0 = (z_1^{(0)}, \cdots, z_M^{(0)})^{\top}$とします。$\mathbf{0}$は$M$次元の0ベクトルです。これを次の式でも表せます。

$$ \nabla f(\mathbf{z}) = \frac{\partial f(\mathbf{z}_0)}{\partial \mathbf{z}} = \left. \frac{\partial f(\mathbf{z})}{\partial \mathbf{z}} \right|_{\mathbf{z}=\mathbf{z}_0} = \mathbf{0} $$

 対数をとった関数$f(\mathbf{z})$を$\mathbf{z}_0$の周りで2次までテイラー展開します。

$$ \begin{aligned} \ln f(\mathbf{z}) &\simeq \sum_{i=0}^2 \frac{1}{i!} \left( (z_1 - z_1^{(0)}) \frac{\partial \ln f(\mathbf{z}_0)}{\partial z_1} + \cdots + (z_M - z_M^{(0)}) \frac{\partial \ln f(\mathbf{z}_0)}{\partial z_M} \right)^i \\ &\simeq \ln f(\mathbf{z}_0) + \left\{ \sum_{j=1}^M (z_j - z_j^{(0)}) \frac{\partial \ln f(\mathbf{z}_0)}{\partial z_j} \right\} + \frac{1}{2} \left\{ \sum_{j=1}^M (z_j - z_j^{(0)}) \frac{\partial \ln f(\mathbf{z}_0)}{\partial z_j} \right\}^2 \end{aligned} $$

 定義より

$$ \frac{\partial \ln f(\mathbf{z}_0)}{\partial \mathbf{z}} = \frac{1}{f(\mathbf{z}_0)} \frac{\partial f(\mathbf{z}_0)}{\partial \mathbf{z}} = \mathbf{0} $$

になるので、2番目の項は消えます。
 波括弧の中は、$(\mathbf{z} - \mathbf{z}_0)^{\top}$と$\nabla \ln f(\mathbf{z}_0)$の内積です。

$$ \begin{aligned} \sum_{j=1}^M (z_j - z_j^{(0)}) \frac{\partial \ln f(\mathbf{z}_0)}{\partial z_j} &= \begin{pmatrix} z_1 - z_1^{(0)} & \cdots & z_M - z_M^{(0)} \end{pmatrix}^{\top} \begin{pmatrix} \frac{\partial \ln f(\mathbf{z}_0)}{\partial z_1} \\ \vdots \\ \frac{\partial \ln f(\mathbf{z}_0)}{\partial z_M} \end{pmatrix} \\ &= (\mathbf{z} - \mathbf{z}_0)^{\top} \nabla \ln f(\mathbf{z}_0) \end{aligned} $$

 また、波括弧の中はスカラなので、$(\mathbf{z} - \mathbf{z}_0)^{\top} \nabla \ln f(\mathbf{z}_0) = {(\mathbf{z} - \mathbf{z}_0)^{\top} \nabla \ln f(\mathbf{z}_0)}^{\top}$と転置できます。よって、波括弧の2乗は

$$ \begin{aligned} \left\{ \sum_{j=1}^M (z_j - z_j^{(0)}) \frac{\partial \ln f(\mathbf{z})}{\partial z_j} \right\}^2 &= \Bigl\{ (\mathbf{z} - \mathbf{z}_0)^{\top} \nabla \ln f(\mathbf{z}_0) \Bigr\} \Bigl\{ (\mathbf{z} - \mathbf{z}_0)^{\top} \nabla \ln f(\mathbf{z}_0) \Bigr\}^{\top} \\ &= (\mathbf{z} - \mathbf{z}_0)^{\top} \nabla \ln f(\mathbf{z}_0) \nabla \ln f(\mathbf{z}_0)^{\top} (\mathbf{z} - \mathbf{z}_0) \\ &= (\mathbf{z} - \mathbf{z}_0)^{\top} \nabla \nabla \ln f(\mathbf{z}_0) (\mathbf{z} - \mathbf{z}_0) \end{aligned} $$

となります(たぶん)。($\frac{\partial f(\mathbf{x})}{\partial x_i} \frac{\partial f(\mathbf{x})}{\partial x_j} = \frac{\partial^2 f(\mathbf{x})}{\partial x_i \partial x_j}$ってしていいんですか?)
 3番目の項に関して

$$ \mathbf{A} = - \nabla \nabla \ln f(\mathbf{z}_0) = - \nabla \nabla \ln f(\mathbf{z}) |_{\mathbf{z}=\mathbf{z}_0} \tag{4.132} $$

とおくと、$\ln f(\mathbf{z})$は

$$ \ln f(\mathbf{z}) \simeq \ln f(\mathbf{z}_0) - \frac{1}{2} (\mathbf{z} - \mathbf{z}_0)^{\top} \mathbf{A} (\mathbf{z} - \mathbf{z}_0) \tag{4.131} $$

で近似できます。

 近似式の両辺の指数をとり、$\ln$を外します。

$$ f(\mathbf{z}) \simeq f(\mathbf{z}_0) \exp \left\{ \frac{1}{2} (\mathbf{z} - \mathbf{z}_0)^{\top} \mathbf{A} (\mathbf{z} - \mathbf{z}_0) \right\} \equiv \tilde{f}(\mathbf{z}) \tag{4.133} $$

 この式は、平均$\mathbf{z}_0$・精度行列$\mathbf{A}$の$M$次元ガウス分布と言えます。よって、多変量ガウス分布(2.43)と対応させて$\tilde{f}(\mathbf{z})$を積分すると

$$ \int \tilde{f}(\mathbf{z}) d\mathbf{z} = f(\mathbf{z}_0) \int \exp \left\{ \frac{1}{2} (\mathbf{z} - \mathbf{z}_0)^{\top} \mathbf{A} (\mathbf{z} - \mathbf{z}_0) \right\} d\mathbf{z} = f(\mathbf{z}_0) \frac{ (2 \pi)^{\frac{M}{2}} }{ |\mathbf{A}|^{\frac{1}{2}} } $$

となる(たぶん)のが分かります。
 したがって、$\tilde{f}(\mathbf{z})$を正規化する(正規化項を与える)と

$$ \frac{\tilde{f}(\mathbf{z})}{\int \tilde{f}(\mathbf{z}) d\mathbf{z}} = \frac{ |\mathbf{A}|^{\frac{1}{2}} }{ (2 \pi)^{\frac{M}{2}} } \exp \left\{ - \frac{1}{2} (\mathbf{z} - \mathbf{z}_0)^{\top} \mathbf{A} (\mathbf{z} - \mathbf{z}_0) \right\} = \mathcal{N}(\mathbf{z} | \mathbf{z}_0, \mathbf{A}^{-1}) \equiv q(\mathbf{z}) \tag{4.134} $$

となります。
 $p(\mathbf{z})$に対する$\mathbf{z} = \mathbf{z}_0$付近での近似分布$q(\mathbf{z})$が得られました。

参考文献

  • C.M.ビショップ著,元田 浩・他訳『パターン認識と機械学習 上下』,丸善出版,2012年.

おわりに

 さて次はベイズロジスティック回帰だ。

【次節の内容】

www.anarchive-beta.com