1. kenta1984

    Posted

    kenta1984
Changes in title
+交差エントロピー誤差をわかりやすく説明してみる
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,82 @@
+教師あり機械学習では必須の損失関数。
+教師あり機械学習の場合、学習するというのは損失関数の値を小さくする事とほぼ同義になります。
+
+損失関数について詳しく知りたい方は、[最適化から見たディープラーニングの考え方](http://www.orsj.or.jp/archive2/or60-4/or60_4_191.pdf)という論文をご覧下さい。
+損失関数に限らず、損失関数の最適化手法や活性化関数などについてもわかりやすく説明されています。
+
+そして、損失関数には幾つもの種類がありますが、交差エントロピー誤差は有名な損失関数の一つです。
+本記事では、交差エントロピー誤差をわかりやすく説明してみます。
+なお、英語では交差エントロピー誤差のことを`Cross-entropy Loss`と言います。`Cross-entropy Error`と英訳している記事もありますが、英語の文献では`Cross-entropy Loss`と呼んでいる記事の方が多いです[^1]。
+
+# 式
+交差エントロピー誤差を式で表現すると次のようになります。なお、この$log$は自然対数(底が$e$)です。
+
+``` math
+L = -\frac{1}{N}\sum_{i=1}^{N} (y_i log \hat{y}_{i} +(1−y_i) log(1−\hat{y}_{i}))
+```
+
+$y_i$には実際のラベル、$\hat{y}_{i}$には予測結果が入ります。分類問題の場合、前者は0か1、後者はソフトマックス関数[^2]の出力値が入ります。
+損失関数に交差エントロピー誤差を使う場合、予測結果にはソフトマックス関数の出力が使われることが多いです。
+ただ、式だけだといまいちイメージが付きませんよね…。
+
+# 例
+式だけだとわかりにくいので、わかりやすいように例をあげます。
+今、写真に映っている果物が、
+
+- バナナ
+- りんご
+- みかん
+
+のどれかを予測するとします。
+
+写真に映っている果物がバナナの場合、前記の式の$y$は`[1, 0, 0]`となります。
+そして、予測結果の$\hat{y}$が`[0.8, 0.1, 0.1]`だったとします。
+この場合、交差エントロピー誤差は次のようになります。
+
+``` math
+\begin{align}
+L& = -\frac{1}{3}(1*log0.8 + (1-1)*log(1-0.8) + 0*log0.1 + (1-0)*log(1-0.1) + 0*log0.1 +(1-0)*log(1-0.1) \\
+& = -\frac{1}{3}(1*log0.8 + 1*log(1-0.1) + 1*log(1-0.1) \\
+& = -\frac{1}{3}(-0.22 - 0.11 - 0.11) \\
+& = 0.14
+\end{align}
+```
+
+一方、予測結果の$\hat{y}$が`[0.3, 0.4, 0.3]`だったとします。
+この場合、交差エントロピー誤差は次のようになります。
+
+``` math
+\begin{align}
+L& = -\frac{1}{3}(1*log0.3 + (1-1)*log(1-0.3) + 0*log0.4 + (1-0)*log(1-0.4) + 0*log0.3 +(1-0)*log(1-0.3) \\
+& = -\frac{1}{3}(1*log0.3 + 1*log(1-0.4) + 1*log(1-0.3) \\
+& = -\frac{1}{3}(-1.20 - 0.51 - 0.36) \\
+& = 0.69
+\end{align}
+```
+
+実際の$y$に近いのは前者の$\hat{y}$であり、交差エントロピー誤差も後者よりも前者の方が小さくなっていることが分かります。
+これより、交差エントロピー誤差が損失関数として適していることが分かります。
+
+# 2乗和誤差との違い
+2乗和誤差を式で表現すると次のようになります。
+交差エントロピー誤差と異なり、シンプルで直感的にも分かりやすい式となります。
+
+``` math
+L = -\frac{1}{2}\sum_{i=1}^{N} (y_i - \hat{y}_{i})^2
+```
+
+計算式が異なるので両者は違う誤差関数ですが、どちらの誤差関数を使えば良いのでしょうか?
+結論としては、交差エントロピー誤差の方が使われることが多いです。
+
+理由は、交差エントロピー誤差は確率的勾配降下法との相性が良いからです。
+確率的勾配降下法という手法は、大雑把に言えば、微分から傾きを求めて損失関数が小さくなる方向に進んでいくことで最適化を図る手法です。
+その際に、
+
+- 自然対数$log(x)$を微分すると$1/x$
+- $e^x$を微分しても積分しても$e^x$
+
+という性質が計算式が複雑になるのを防ぎます。
+損失関数の最適化手法としては確率的勾配降下法が使われることが多く、そのため交差エントロピー誤差が使われる場面も多くなります。
+
+[^1]: 「"Cross-entropy loss"」のGoogleの検索結果は約187,000件に対し、「"Cross-entropy error"」のGoogleの検索結果は約28,800件(2019年12月23日時点)
+[^2]: 出力値の合計が1になる関数。ディープラーニングなどのニューラルネットワークの出力層の活性化関数として使われることが多い。