本文へスキップ
ひもとくAI

エントロピーと交差エントロピー・KLダイバージェンス:予想のずれを測る

レッスン 5/6

情報量とエントロピー:「驚き」を数える

めずらしいことほど、知ったときの「驚き」が大きい

「明日の朝、太陽が東から昇る」と聞いても、何の驚きもありません。必ず起こることだからです。一方、「明日、この町に雪が降る」と真夏に聞いたら、とても驚きます。めったに起こらないことだからです。

起こる確率が低いことほど、それを知ったときに得られる 情報 は大きい、と考えます。確率 pp のことが起こったと知ったときの情報の大きさを、次の式で表し、自己情報量 と呼びます。

−log⁡2p-\log_2 p

例:8人の中から1人を当てる

8人の中から、先生が心の中で選んだ1人を当てるとします。「はい・いいえ」で答えられる質問(「前半の4人の中にいますか?」など)を使うと、候補を毎回半分に絞れるので、3回の質問で必ず当てられます(8→4→2→18 \to 4 \to 2 \to 1)。

「選ばれたのはAさん」と教えてもらうことは、確率 18\frac{1}{8} のことを知ることで、その自己情報量は −log⁡218=3-\log_2 \frac{1}{8} = 3 です。3回の「はい・いいえ」の質問と同じ量の情報 を得たことになります。この単位を ビット と呼びます。硬貨の表・裏(確率 12\frac{1}{2})を知ることは、1ビットの情報です。

エントロピー:驚きの期待値

硬貨を投げる前に、「結果を知ったときの驚き(自己情報量)は、平均してどれくらいか」を考えます。これはレッスン1の期待値で、「自己情報量 × その確率」の合計です。

H=−∑xP(x)log⁡2P(x)H = -\sum_{x} P(x) \log_2 P(x)

これを エントロピー と呼びます。「結果が、どれくらい予想しにくいか」を表す数です。

表の確率エントロピー(ビット)00.10.30.50.70.9100.51
硬貨の表の確率(横軸)と、エントロピー(縦軸、ビット)。山の形で、表の確率が0.5のときに一番高い1ビット。0.7で0.881、0.9で0.469(○の3点)。表の確率が0か1に近づくと、エントロピーは0に近づく
表の確率0.50.70.90.991.0
エントロピー(ビット)1.00.8810.4690.0810

表と裏が半々の硬貨が、一番予想しにくく、エントロピーが最大の1ビットです。表ばかり出る硬貨ほど予想しやすく、必ず表が出る硬貨(確率1.0)では、結果を知っても驚きがないので0です。サイコロ(6通りが同じ確率)は log⁡26≈2.585\log_2 6 \approx 2.585 ビットで、硬貨より予想しにくいことが分かります。

機械学習では、2の代わりに自然対数 log⁡\log を使うことがほとんどです(単位は ナット と呼びます)。どちらを使っても、比べたときの大小は変わりません。

交差エントロピーとKLダイバージェンス:予想のずれを測る

本当の分布と、予想した分布

ある町の天気は、本当は「晴れ70%・くもり20%・雨10%」の確率で決まっているとします。これを 本当の分布 P=(0.7,0.2,0.1)P = (0.7, 0.2, 0.1) と呼びます。天気予報のモデルは、この本当の分布を知らないので、予想した分布 QQ を出します。

モデルが予想した分布 QQ で「驚き」を測ると、実際の天気は本当の分布 PP に従って起こるので、驚きの期待値は次のようになります。

−∑xP(x)log⁡Q(x)-\sum_{x} P(x) \log Q(x)

これを 交差エントロピー と呼びます。「本当の確率で起こることを、予想した確率で驚いたときの、驚きの平均」です。

交差エントロピー = エントロピー + KLダイバージェンス

いろいろな予想 QQ について計算しました(自然対数)。

予想した分布 QQ(晴れ・くもり・雨)エントロピー交差エントロピー差(KLダイバージェンス)
(0.7, 0.2, 0.1)(本当と同じ)0.8020.8020
(0.6, 0.3, 0.1)(少しずれ)0.8020.8290.027
(0.34, 0.33, 0.33)(ほぼ当て推量)0.8021.0880.286
(0.1, 0.2, 0.7)(晴れと雨を逆に)0.8021.9691.168

(どの値も小数第4位を四捨五入しているため、最後の行のように、足し算が小数第3位で1ずれることがあります)

  • エントロピー0.802は、本当の分布 PP だけで決まる数なので、予想によらず同じです
  • 交差エントロピーは、予想が本当の分布と同じとき、エントロピーと等しくなり、それが一番小さい値です。予想がずれるほど大きくなります

交差エントロピーとエントロピーの差を、KLダイバージェンス(カルバック・ライブラー情報量)と呼び、DKL(P∥Q)D_{KL}(P \| Q) と書きます。

交差エントロピー=エントロピー+DKL(P∥Q)\text{交差エントロピー} = \text{エントロピー} + D_{KL}(P \| Q)

KLダイバージェンスは、「2つの分布がどれだけ違うか」を表す数で、必ず0以上になり、2つの分布が同じときだけ0になります。

KLダイバージェンスは、向きで値が変わる

PP と QQ を入れ替えて計算すると、(0.6, 0.3, 0.1) のときは DKL(P∥Q)=0.027D_{KL}(P \| Q) = 0.027、DKL(Q∥P)=0.029D_{KL}(Q \| P) = 0.029、(0.34, 0.33, 0.33) のときは0.286と0.314で、値が違いました。KLダイバージェンスは、ふつうの「距離」とは違い、向きによって値が変わります。両方の向きを組み合わせて、向きによらない値にしたものに、JSダイバージェンス(ジェンセン・シャノン情報量)があります。

第5章の罰は、交差エントロピーそのもの

分類の学習では、1件のデータの「本当の分布」は、正解のクラスだけが1、残りが0の分布です(例えば正解が晴れなら、P=(1,0,0)P = (1, 0, 0))。このとき、

  • エントロピーは0(結果がはっきり決まっていて、驚きがない)
  • 交差エントロピーは、−1×log⁡Q(晴れ)−0−0=−log⁡Q(正解)-1 \times \log Q(\text{晴れ}) - 0 - 0 = -\log Q(\text{正解})

となり、正解に付けた確率の −log⁡-\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)log⁡P(x)Q(x)\sum_{x} P(x) \log \frac{P(x)}{Q(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⁡-\log の平均で、正解率とは別の数です。正解率が同じでも、自信を持って正解しているモデルほど小さくなります

振り返り

  • 自己情報量 −log⁡2p-\log_2 p は、確率 pp のことを知ったときの驚き。エントロピーは、その期待値で、結果の予想しにくさを表す
  • 交差エントロピーは、本当の分布で起こることを、予想した分布で驚いたときの驚きの平均。交差エントロピー = エントロピー + KLダイバージェンス
  • 分類の罰(交差エントロピー)を小さくすることは、KLダイバージェンスを小さくすることであり、最尤推定でもある

演習

演習を読み込んでいます…