NE(Normalized Entropy)という言葉に仕事で出会い、今まで「クロスエントロピー」などで使っていた「エントロピー」ってそもそも何?と思い調べました。
Wikipedia「情報量」には以下の記載があります。ちょっとわかりにくいですね。個人的には「情報の価値の総和」と覚えました。
情報量(じょうほうりょう)やエントロピー(英: entropy)は、情報理論の概念で、あるできごと(事象)が起きた際、それがどれほど起こりにくいかを表す尺度である。
※もともとは熱力学や統計力学の言葉っぽいですが、今回は情報理論的な側面の焦点を当てています。
選択情報量(自己エントロピー)と平均情報量(エントロピー)
エントロピーに以下の2種類あるらしいです。単純に「エントロピー」と言うと「平均情報量(エントロピー)」を指すようです(あまり深く確認していません)。平均情報量(エントロピー)」が少しわかりにくいですが、コイン裏表が同確率の場合に、どちらが起こるかという情報の価値が高い、と理解しています。
種類 | 内容 | 計算式 |
---|---|---|
選択情報量 (自己エントロピー) |
事象単体の情報量 確率が低い事象ほど高い |
$- \log P(E)$ |
平均情報量 (エントロピー) |
事象の情報量の平均値 同確率ほど高い |
$- \sum_{A \in \Omega} P(A) \log P(A) $ |
logの底は計算しやすい2を使う場合が多いようですが、相対的な数値が重要なので何でもいいらしいです。いつもすぐに出てこないlog(対数関数)は以下を参照。
log(対数関数)のグラフ
画像はWikipediaから拝借。x=1は必ず0を通り、log(底の値)=1です。
各色の曲線の底
- 緑: 10
- 赤: ネイピア数 e
- 紫: 1.7
以下は例です。
例 | 選択情報量 | 平均情報量 |
---|---|---|
太陽は東から昇る | 低(ゼロ): 必ず起こる事象だから | 低(ゼロ): 必ず起こる事象だから |
次に出るサイコロの目は1 | 高: 1/6の確率を言い当てているから | 中: 1/6と5/6確率の平均だから |
先程の例で計算式にします(底は2で端数は雑に表現)。
例 | Entropy | 計算式 |
---|---|---|
選択情報量 100% 太陽は東から昇る |
0 | $- \log P(E) $ $= -\log 1$ |
平均情報量 100% 太陽は東から昇る |
0 | $-p(0)\log p(0)-p(1)\log p(1)$ $=0 \times \infty - 1 \times 0$ |
選択情報量 17% 次のサイコロの目は1 |
2.58 | $- \log P(E) $ $= -\log \frac{1}{6}$ |
平均情報量 17% 次のサイコロの目は1 |
0.65 | $-p(0)\log p(0)-p(1)\log p(1)$ $=- \frac{5}{6} \log \frac{5}{6} - \frac{1}{6} \log \frac{1}{6}$ $ = -\frac{5}{6} \times -0.3 - \frac{1}{6} \times -2.6$ $= 0.21+ 0.43 $ |
二値分類時平均情報量(エントロピー)の一覧
Excelで二値分類のときのエントロピーを一覧化しました。五分五分のときにエントロピーが最も高くなります。
「確率からどちらが起こるかわからない場合に、それがわかると価値が高い」と理解しています。コインの裏か表か、わからない場合にそれがわかることが情報価値が高い、ということです。
クロスエントロピー(交差エントロピー)
馴染み深い「交差エントロピー」です。機械学習の分類問題で「クロスエントロピー誤差」としてよく出ます。真と予測の2つの確率分布を交差させてエントロピーを計算。はじパタのロジスティック回帰やCourseraの機械学習入門コースでやっていますね。log loss やロジスティック損失とも呼ばれます。
離散確率変数でも連続確率変数でも計算できますが、機械学習では離散確率変数目的で使うことも多いと思うので、離散確率変数だけを説明。
2つの離散確率変数p(x)とq(x)でのクロスエントロピーは以下の式。
H(p, q) = -\sum_{x} p(x) \log(q(x))
2値分類だと以下の式にできます。
H(p, q) = -y \log \hat{y} - (1-y) \log(1-\hat{y}) \\
p \in \{y, 1-y\}, q \in \{ \hat{y}, 1-\hat{y}\}
2値分類でのクロスエントロピー誤差の場合、真の確率は1/0なので、計算がわかりやすいです。
例えば有名なKaggleのタイタニックのように生死予測(生=1)だとして、以下の計算例です。
※対数関数の底は2で計算
正解(y) | 予測($\hat(y)$) | 誤差 | 計算式 $-y \log \hat{y} - (1-y) \log(1-\hat{y})$ |
---|---|---|---|
0 | 0 | 0 | $-0 \log 0 - (1-0) log (1-0)$ |
0 | 1 | $\infty$ | $-0 \log 1 - (1-0) log (1-1)$ |
1 | 0 | $\infty$ | $-1 \log 0 - (1-1) log (1-0)$ |
1 | 0.25 | 2 | $-1 \log 0.25 - (1-1) log (1-0.25)$ |
1 | 0.5 | 1 | $-1 \log 0.5 - (1-1) log (1-0.5)$ |
1 | 0.75 | 0.42 | $-1 \log 0.75 - (1-1) log (1-0.75)$ |
1 | 1 | 0 | $-1 \log 1 - (1-1) log (1-1)$ |
正規化クロスエントロピー
先程のクロスエントロピー誤差を正規化したものを正規化エントロピーと呼びます。Normalized Cross-Entropy, Normalized Log Loss, Normalized Entropy(NE) などとも呼ばれます。CTR予測をしているときにPractical Lessons from Predicting Clicks on Ads at Facebookで学びました。
除算の線形変換をする点では、通常の正規化と変わりません。分母はエントロピー(平均情報量)です。すべての予測値を平均値にした場合に値が1です。
以下が計算式です。
\frac{LogLoss}{- (p * log (p) + (1-p) * log (1-p) )}
= \frac{- \frac{1}{N} \sum_{i=1}^{N} y_i log (p_i) + (1 - y_i) log (1 - p_i)}{- (p * log (p) + (1-p) * log (1-p) )}
参考リンク