交差エントロピーの計算

ディープラーニングの分類問題における損失関数として一般的に使用されている交差エントロピーに関していろいろな解説記事を読んでいると諸説あり、Chainerで実装されているのはどちらかを確認します。

\(\displaystyle \mathcal{L} = - \dfrac{1}{N}\sum_{n} \sum_{k} t_{nk} \log y_{nk}\)

もしくは

\(\displaystyle \mathcal{L} = - \dfrac{1}{N} \dfrac{1}{K} \sum_{n} \sum_{k} \left\{ t_{nk} \log y_{nk} + (1 - t_{nk}) \log (1 - y_{nk}) \right\}\)

となっている2パターンがありました。この違いは、教師データとして与えられた正解ラベル以外の要素を考慮するかしないかになります。

Chainerで損失関数の計算

[57]:
import numpy as np
import chainer.functions as F
[58]:
t = np.array([0], 'i')
[59]:
y = np.array([[0.7, 0.2, 0.1]], 'f')
[60]:
loss = F.softmax_cross_entropy(y, t)
loss
[60]:
variable(0.76794964)

検証

[73]:
y_softmax = F.softmax(y)
y_softmax
[73]:
variable([[0.46396342, 0.28140804, 0.25462854]])
[74]:
- np.log(0.46396342)
[74]:
0.7679495660705155
[75]:
- np.log(1 - 0.28140804)
[75]:
0.3304615927872412
[76]:
-np.log(1 - 0.25462854)
[76]:
0.2938725808374165
[77]:
- np.log(0.46396342) - np.log(1 - 0.28140804) -np.log(1 - 0.25462854)
[77]:
1.3922837396951733

検証結果

Chainerでのクロスエントロピーは、

\(\displaystyle \mathcal{L} = - \dfrac{1}{N}\sum_{n} \sum_{k} t_{nk} \log y_{nk}\)

で計算されており、正解ラベルのみ損失関数として考慮していました。

[ ]: