クロスエントロピー誤差【損失関数】
『TensorflowとKerasで動かしながら学ぶディープラーニングの仕組み』から引用・抜粋しました.
概要
2つの値を元に,ウイルスに感染しているか,そうでないかを判定するネットワークを作りたい.
この時,横軸に,縦軸にを取る散布図を考え,感染と非感染を線引きするための境界線,一次関数を以下のように定義する.
が0のときが最も曖昧(境界線上)で,正の方へ大きくなるにつれて非感染,負の方へ大きくなるにつれて感染のプロットが多くなる.
確率への変換
の値が境界線から離れるにつれて±∞に変化する性質を利用し,関数の値を0~1の確率に落とし込むためにシグモイド関数を利用する.
つまり,2つの値に対して,ウイルスに感染している確率は,次式で計算される.
ここで,n番目のデータに対して正しく予測する確率を考えると,
となる.
は正解データを表しており,感染データに対しては1,非感染データに対しては0がセットで与えられる.
そしてこれを一つの数式にまとめると,
となる.
が1の時は,右の大括弧部分は0乗(=1)となり,反対に0の時は左の大括弧部分が0乗(=1)になり,片方だけが残ることから,正しく一つの数式にまとめられていることがわかる.
すべてのデータについて考える
上式はn番目のデータに対する正解率であった.ここで,すべてのデータに対する正解率を考えると以下のようになる.
この確率Pが,パラメータを評価する基準となる.すなわち,この確率が高くなるようにパラメータを調節する.
このように,「与えられたデータを正しく予測する確率を最大化する」方針でパラメータを調節する手法を,最尤推定法と呼ぶ.
大量の掛け算による懸念
上式では,シグモイド関数によって0~1に落とし込まれた大量の数値による掛け算が計算されるが,ここで一つ問題が発生する.それは小さな値同士の掛け算によってアンダーフロー(一つの値を表すための決められたデータ長を超えてしまい,値を正しく表現できなくなること)が起き,精度の低下を招いてしまう.
この問題を解決するため,次式の誤差関数を定義し,これを最小化する問題へと変換する.
※マイナスがついている点に注意(上記グラフを反転した形となっている)
上記グラフのようには単調増加の関数であるから,を最大にすることと,を最小にすることは同値である.
そして,対数法則
より以下が成り立つ.
こうして,よく目にするクロスエントロピーの式が導かれる.