チラ裏備忘録

情報整理

クロスエントロピー誤差【損失関数】

『TensorflowとKerasで動かしながら学ぶディープラーニングの仕組み』から引用・抜粋しました.

概要

2つの値を元に,ウイルスに感染しているか,そうでないかを判定するネットワークを作りたい.
この時,横軸に{x_1},縦軸に{x_2}を取る散布図を考え,感染と非感染を線引きするための境界線,一次関数{f(x)}を以下のように定義する.

{
f(x_1, x_2) = w_1x_1+w_2x_2+b = 0
}

{f(x_1, x_2}が0のときが最も曖昧(境界線上)で,正の方へ大きくなるにつれて非感染,負の方へ大きくなるにつれて感染のプロットが多くなる.

確率への変換

{f(x_1, x_2)}の値が境界線から離れるにつれて±∞に変化する性質を利用し,関数の値を0~1の確率に落とし込むためにシグモイド関数を利用する.

{
\sigma(x) = \frac{1}{1+exp(-x)}
}

f:id:spookyboogie:20200513025737p:plain:w300
sigmoid_function

つまり,2つの値に対して,ウイルスに感染している確率は,次式で計算される.
{
P(x_1,x_2) = \sigma(f(x_1,x_2)) = \sigma(w_1x_1+w_2x_2+b)
}

ここで,n番目のデータに対して正しく予測する確率を考えると,

{
P_n = 
\begin{cases}
P(x_{1n},x_{2n})&&t_n = 1の時\\
1-P(x_{1n},x_{2n})&&t_n = 0の時
\end{cases}
}

となる.
{t_n}は正解データを表しており,感染データに対しては1,非感染データに対しては0がセットで与えられる.

そしてこれを一つの数式にまとめると,

{
P_n = \left\{P(x_{1n},x_{2n})\right\}^{t_n}\left\{1-P(x_{1n},x_{2n})\right\}^{1-t_n}
}

となる.
{t_n}が1の時は,右の大括弧部分は0乗(=1)となり,反対に0の時は左の大括弧部分が0乗(=1)になり,片方だけが残ることから,正しく一つの数式にまとめられていることがわかる.

すべてのデータについて考える

上式はn番目のデータに対する正解率であった.ここで,すべてのデータに対する正解率を考えると以下のようになる.

{
\begin{eqnarray}
P &=& P_1 \times P_2 \times \dots \times P_N\\
&=& \prod_{n=1}^N P_n\\
&=&  \prod_{n=1}^N \left\{P(x_{1n},x_{2n})\right\}^{t_n}\left\{1-P(x_{1n},x_{2n})\right\}^{1-t_n}
\end{eqnarray}
}

この確率Pが,パラメータ{w_1,w_2,b}を評価する基準となる.すなわち,この確率が高くなるようにパラメータを調節する.

このように,「与えられたデータを正しく予測する確率を最大化する」方針でパラメータを調節する手法を,最尤推定と呼ぶ.

大量の掛け算による懸念

上式では,シグモイド関数によって0~1に落とし込まれた大量の数値による掛け算が計算されるが,ここで一つ問題が発生する.それは小さな値同士の掛け算によってアンダーフロー(一つの値を表すための決められたデータ長を超えてしまい,値を正しく表現できなくなること)が起き,精度の低下を招いてしまう.

この問題を解決するため,次式の誤差関数を定義し,これを最小化する問題へと変換する.

{
E = -\log{P}
}

f:id:spookyboogie:20200513033901p:plain
graph of log(x)

※マイナスがついている点に注意(上記グラフを反転した形となっている)

上記グラフのように{y = \log{x}}は単調増加の関数であるから,{P}を最大にすることと,{E}を最小にすることは同値である.

そして,対数法則
{
\log{ab} = \log{a} + \log{b}\\
\log{a^n} = n\log{a}
}
より以下が成り立つ.
{
\begin{eqnarray}
E &=& -\log \prod_{n=1}^N \left\{P(x_{1n},x_{2n})\right\}^{t_n}\left\{1-P(x_{1n},x_{2n})\right\}^{1-t_n}\\
&=& -\sum_{n=1}^N\left[t_n\log{P}(x_{1n},x_{2n})+(1-t_n)\log{\left\{1-P(x_{1n},x_{2n})\right\}}\right]
\end{eqnarray}
}

こうして,よく目にするクロスエントロピーの式が導かれる.

余談

他の書籍におけるクロスエントロピーの解説では主に『上式{E}を最小化する』とだけ書かれている場合が多いが,本書籍では丁寧に解説されていたのでメモしておいた.
最尤推定法という統計的手法が式の導出途中で用いられていたとは驚き.