はじめに
『パターン認識と機械学習』の独学時のまとめです。一連の記事は「数式の行間埋め」または「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