EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

機械学習に必要な数学の基本についての勉強メモ: ガウス関数編

はじめに

前回は、指数関数と対数関数の応用編としてシグモイド関数・ソフトマックス関数編を記事にしました。

www.eureka-moments-blog.com

今回は、このシリーズの最後として、ガウス関数について勉強した事のメモになります。

参考書籍

本記事の内容は、下記の書籍を読んで要点を抽出し、メモしたものになります。

Pythonで動かして学ぶ! あたらしい機械学習の教科書

Pythonで動かして学ぶ! あたらしい機械学習の教科書

ガウス関数とは

ガウス関数は下記の数式で表され、曲線を近似する基底関数として用いられる。

\displaystyle{
y=a exp(-\frac{(x-\mu)^2}{\sigma^2})
}

グラフで描くと、下記のような形となる。

f:id:sy4310:20190304232825p:plain

中心(平均)を\mu、左右の広がりの大きさ(標準偏差)を\sigma、高さをaで表している。確率分布を表すのにガウス関数が用いられる場合は、aの部分を下記のようにする。

\displaystyle{
a = \frac{1}{(2\pi\sigma^2)^{1/2}}
}

2次元への拡張

入力を2次元ベクトルとした場合、ガウス関数の形は下記のような式になる。

\displaystyle{
y = exp\{-(x_0^2 + x_1^2)\}
}

また、グラフで描くと下記のようになる。

f:id:sy4310:20190309163521p:plain

関数の形を表すパラメータを加えた2次元ガウス関数

高さのa、平均(中心)ベクトルの\mu、共分散行列の\Sigmaをパラメータとして加えた場合、2次元ガウス関数は下記のような形となる。

\displaystyle{
y = a \cdot exp\{-\frac{1}{2}(\textbf{x}-\mu)^{\mathrm{T}}\Sigma^{-1}(\textbf{x}-\mu)\}
}

またこの時、共分散行列の\Sigmaは、下記のような2×2の行列になる。

\displaystyle{
\begin{bmatrix}
\sigma_0 & \sigma_2 \\\ 
\sigma_2 & \sigma_1
\end{bmatrix}
}

この行列要素の\sigma_0\sigma_1は、x_0方向とx_1方向の分布の広がりを表す。\sigma_2は、分布の傾きであるx_0x_1の相関に対応しており、正なら右上がり、負なら左上がりの分布を表現する。

高さaは、関数の大きさを決めるパラメータと考えられるが、ガウス関数で確率分布を表す場合はには、下記の形でセットされる。

\displaystyle{
a = \frac{1}{2\pi} \frac{1}{|\Sigma|^{1/2}}
}

こうすることで、入力空間での積分値が1となり、関数が確率分布を表現できるようになる。式中になる|\Sigma|は、\Sigmaの行列式であるので、今回のような2×2の行列の場合には、下記のように計算できる。

\displaystyle{
|\Sigma| = \sigma_0 \sigma_1 - \sigma_2^2
}

ここで、パラメータである平均(中心)ベクトル\mu、共分散行列\Sigmaを、

\displaystyle{
\mu = 
\begin{bmatrix}
1 \\\
0.5
\end{bmatrix}
}

\displaystyle{
\Sigma = 
\begin{bmatrix}
2 & 1 \\\
1 & 1
\end{bmatrix}
}

とした場合、これによる2次元ガウス関数のグラフは下記のようになる。

f:id:sy4310:20190309235758p:plain

サンプルコード

ここまで記載した各グラフを作成するPythonのサンプルコードは下記のGitHubリポジトリで公開しています。

github.com