情報量とエントロピー:「驚き」を数える
めずらしいことほど、知ったときの「驚き」が大きい
「明日の朝、太陽が東から昇る」と聞いても、何の驚きもありません。必ず起こることだからです。一方、「明日、この町に雪が降る」と真夏に聞いたら、とても驚きます。めったに起こらないことだからです。
起こる確率が低いことほど、それを知ったときに得られる 情報 は大きい、と考えます。確率 p のことが起こったと知ったときの情報の大きさを、次の式で表し、自己情報量 と呼びます。
−log2p
例:8人の中から1人を当てる
8人の中から、先生が心の中で選んだ1人を当てるとします。「はい・いいえ」で答えられる質問(「前半の4人の中にいますか?」など)を使うと、候補を毎回半分に絞れるので、3回の質問で必ず当てられます(8→4→2→1)。
「選ばれたのはAさん」と教えてもらうことは、確率 81 のことを知ることで、その自己情報量は −log281=3 です。3回の「はい・いいえ」の質問と同じ量の情報 を得たことになります。この単位を ビット と呼びます。硬貨の表・裏(確率 21)を知ることは、1ビットの情報です。
エントロピー:驚きの期待値
硬貨を投げる前に、「結果を知ったときの驚き(自己情報量)は、平均してどれくらいか」を考えます。これはレッスン1の期待値で、「自己情報量 × その確率」の合計です。
H=−x∑P(x)log2P(x)
これを エントロピー と呼びます。「結果が、どれくらい予想しにくいか」を表す数です。
硬貨の表の確率(横軸)と、エントロピー(縦軸、ビット)。山の形で、表の確率が0.5のときに一番高い1ビット。0.7で0.881、0.9で0.469(○の3点)。表の確率が0か1に近づくと、エントロピーは0に近づく
表と裏が半々の硬貨が、一番予想しにくく、エントロピーが最大の1ビットです。表ばかり出る硬貨ほど予想しやすく、必ず表が出る硬貨(確率1.0)では、結果を知っても驚きがないので0です。サイコロ(6通りが同じ確率)は log26≈2.585 ビットで、硬貨より予想しにくいことが分かります。
機械学習では、2の代わりに自然対数 log を使うことがほとんどです(単位は ナット と呼びます)。どちらを使っても、比べたときの大小は変わりません。
交差エントロピーとKLダイバージェンス:予想のずれを測る
本当の分布と、予想した分布
ある町の天気は、本当は「晴れ70%・くもり20%・雨10%」の確率で決まっているとします。これを 本当の分布 P=(0.7,0.2,0.1) と呼びます。天気予報のモデルは、この本当の分布を知らないので、予想した分布 Q を出します。
モデルが予想した分布 Q で「驚き」を測ると、実際の天気は本当の分布 P に従って起こるので、驚きの期待値は次のようになります。
−x∑P(x)logQ(x)
これを 交差エントロピー と呼びます。「本当の確率で起こることを、予想した確率で驚いたときの、驚きの平均」です。
交差エントロピー = エントロピー + KLダイバージェンス
いろいろな予想 Q について計算しました(自然対数)。
(どの値も小数第4位を四捨五入しているため、最後の行のように、足し算が小数第3位で1ずれることがあります)
- エントロピー0.802は、本当の分布 P だけで決まる数なので、予想によらず同じです
- 交差エントロピーは、予想が本当の分布と同じとき、エントロピーと等しくなり、それが一番小さい値です。予想がずれるほど大きくなります
交差エントロピーとエントロピーの差を、KLダイバージェンス(カルバック・ライブラー情報量)と呼び、DKL(P∥Q) と書きます。
交差エントロピー=エントロピー+DKL(P∥Q)
KLダイバージェンスは、「2つの分布がどれだけ違うか」を表す数で、必ず0以上になり、2つの分布が同じときだけ0になります。
KLダイバージェンスは、向きで値が変わる
P と Q を入れ替えて計算すると、(0.6, 0.3, 0.1) のときは DKL(P∥Q)=0.027、DKL(Q∥P)=0.029、(0.34, 0.33, 0.33) のときは0.286と0.314で、値が違いました。KLダイバージェンスは、ふつうの「距離」とは違い、向きによって値が変わります。両方の向きを組み合わせて、向きによらない値にしたものに、JSダイバージェンス(ジェンセン・シャノン情報量)があります。
第5章の罰は、交差エントロピーそのもの
分類の学習では、1件のデータの「本当の分布」は、正解のクラスだけが1、残りが0の分布です(例えば正解が晴れなら、P=(1,0,0))。このとき、
- エントロピーは0(結果がはっきり決まっていて、驚きがない)
- 交差エントロピーは、−1×logQ(晴れ)−0−0=−logQ(正解)
となり、正解に付けた確率の −log、つまり第5章の罰そのものになります。エントロピーは0なので、この罰を小さくすることは、KLダイバージェンス(本当の分布とモデルの予想のずれ)を小さくすることと同じです。
レッスン4では、同じ罰を「最尤推定」から導きました。最尤推定の見方でも、情報理論の見方でも、同じ罰にたどり着く のです。
Pythonで確かめる、よくある誤解と振り返り
エントロピー・交差エントロピー・KLダイバージェンスを計算する
import numpy as np
P = np.array([0.7, 0.2, 0.1]) # 本当の分布(晴れ・くもり・雨)
Q = np.array([0.6, 0.3, 0.1]) # 予想した分布
H = -(P * np.log(P)).sum() # エントロピー → 0.8018…
CE = -(P * np.log(Q)).sum() # 交差エントロピー → 0.8286…
KL = (P * np.log(P / Q)).sum() # KLダイバージェンス → 0.0268…
print(H + KL, CE) # → 同じ値(0.8286…)
KLダイバージェンスは ∑xP(x)logQ(x)P(x) で、交差エントロピーからエントロピーを引いた式を、対数の性質(割り算は引き算になる)でまとめたものです。
確率が0のところがあると、np.log(0) はマイナス無限大になり、計算が壊れます。実際のライブラリでは、確率に小さな数を足したり、0のところを計算から除いたりして、これを防いでいます。
機械学習のどこで使われるか
- 分類の学習: 交差エントロピーを最小にする(第5〜9章。PyTorch の
CrossEntropyLoss)
- 決定木: 第5章では、混ざり具合を「ジニ不純度」で測りました。代わりにエントロピーで測り、分けたときにエントロピーが一番下がる質問を選ぶこともできます(scikit-learn では
criterion="entropy"。下がった量を 情報利得 と呼びます)
- 知識の蒸留: 大きなモデルの予想の分布に、小さなモデルの予想を近づける(KLダイバージェンスを小さくする)
- 画像の生成: 変分オートエンコーダー(VAE)ではKLダイバージェンスを、敵対的生成ネットワーク(GAN)の元の考え方ではJSダイバージェンスを使う
よくある誤解
- 「エントロピーは、乱雑さのこと」: 物理の言葉と同じ名前ですが、ここでのエントロピーは「結果の予想しにくさ(驚きの期待値)」です
- 「KLダイバージェンスは、2つの分布の距離」: 向きを入れ替えると値が変わるので、ふつうの距離ではありません
- 「交差エントロピーが0.5なら、正解率は50%」: 交差エントロピーは、正解に付けた確率の −log の平均で、正解率とは別の数です。正解率が同じでも、自信を持って正解しているモデルほど小さくなります
振り返り
- 自己情報量 −log2p は、確率 p のことを知ったときの驚き。エントロピーは、その期待値で、結果の予想しにくさを表す
- 交差エントロピーは、本当の分布で起こることを、予想した分布で驚いたときの驚きの平均。交差エントロピー = エントロピー + KLダイバージェンス
- 分類の罰(交差エントロピー)を小さくすることは、KLダイバージェンスを小さくすることであり、最尤推定でもある