【第1回】「情報量」って計算できるの?AIが扱う「驚き」と「エントロピー」

私たちは普段、「情報」という言葉を何気なく使っています。「いい情報を手に入れた!」「情報量が多すぎる…」などです。 でも、「その情報の量は、具体的に数字でいくつですか?」 と聞かれたら、答えに困ってしまいますよね。

実は、AI(機械学習)の基礎となっている「情報理論」の世界では、情報の量は明確に計算式で定義されています。 しかも、その根本にある考え方は、私たちが日常で感じる「えっ、マジで!?」という「驚き」の感情と深く結びついているのです。

今回は、E資格の必須項目である「自己情報量」と「エントロピー」について、数式とPythonを使って直感的に理解していきましょう。

1. 「珍しい」ほど価値がある:自己情報量

まず、「情報量」とは何でしょうか? 情報理論の父、クロード・シャノンは次のように考えました。

「起こる確率が低い(珍しい)出来事ほど、情報量は大きい」

どういうことか、例で考えてみましょう。

  • ニュースA: 「明日、太陽が東から昇るそうです」
  • ニュースB: 「明日、巨大隕石が地球に衝突するそうです」

ニュースAは「当たり前(確率ほぼ100%)」なので、聞いても「ふーん」で終わりですよね。驚きもなければ、情報としての価値もほぼゼロです。 一方、ニュースBは「めったにない(確率ほぼ0%)」ことなので、「えっ!?」と腰を抜かすほど驚きます。これはものすごい情報量を持っています。

自己情報量の公式

この「驚きの度合い」を数式にしたのが自己情報量(じこじょうほうりょう)です 。 ある事象 x が起きる確率を P(x) とすると、次のように定義されます。

I(x) = -\log_2(P(x))

ここでのポイントは2つです。

  1. 対数(log)を使う: 確率は掛け算で計算しますが、情報量は足し算で扱いたい(情報Aと情報Bを合わせたら量が増える)ため、logを使います。
  2. マイナスをつける: 確率は1以下(例:0.5)なので、logをとるとマイナスになってしまいます。それをプラスに戻すためにマイナスをつけます。

資料の例で計算してみましょう

  • 宝くじで1等が当たる確率(0.000002%): 情報量は約 19 bit。すごい情報量です。
  • 宝くじがハズレる確率(90%): 情報量はたった 0.15 bit。ほとんど情報がありません。

2. 予測の難しさを示す「シャノンエントロピー」

「1回ごとの驚き」はわかりました。では、そのシステム全体(ギャンブルやデータセット)が、「平均してどれくらい驚きに満ちているか(予測しにくいか)」を表すにはどうすればいいでしょうか?

それが「平均情報量」、通称シャノンエントロピー(単にエントロピー)です 。 これは、起こりうる全ての事象の「自己情報量」を、その確率で重み付けして平均した値(期待値)です 。

H(x) = -\sum P(x) \log_2(P(x))

「コイン投げ」vs「イカサマコイン」

エントロピーは、「不確実性(予測の難しさ)」や「乱雑さ」の指標になります。

  • 公平なコイン(表50%、裏50%): どっちが出るか全く読めません。「モヤモヤ度」MAXです。 このとき、エントロピーは 1.0 bit(最大値)になります 。
  • イカサマコイン(表90%、裏10%): 「たぶん表が出るだろう」と予測しやすいですよね。「モヤモヤ度」は低いです。 このとき、エントロピーは 約0.47 bit に下がります。
  • 絶対表が出るコイン(表100%): 結果は分かっています。驚きゼロです。 エントロピーは 0 bit になります。

つまり、データが偏りなくバラバラである(何が起きるかわからない)ほど、エントロピーは高くなるのです。

3. その他のエントロピー(発展)

E資格では、もう少し複雑なエントロピーも出題範囲に含まれます。名前だけ紹介しておきます。

  • 結合エントロピー: 2つの事象が「同時に」起こるときの不確実性 。
  • 条件付きエントロピー: 片方の結果を知った上で、もう片方を予測するときの不確実性 。
  • 相互情報量: 片方を知ることで、もう片方の不確実性がどれだけ減ったか(情報の共有度合い) 。

これらは、「天気(X)」と「アイスの売上(Y)」のように、データ同士の関係性を分析する際に使われます。

Pythonで「驚き」を計算してみよう

では、Pythonを使って「公平なコイン」と「イカサマコイン」のエントロピーを計算し、予測のしやすさを数値で比べてみましょう。 科学技術計算ライブラリ SciPy を使うと一行で計算できます。

import numpy as np
from scipy.stats import entropy

# 1. 公平なコイン (表0.5, 裏0.5)
# どっちが出るか全くわからない状態
coin_fair = [0.5, 0.5]

# エントロピーの計算 (底は2を指定します)
h_fair = entropy(coin_fair, base=2)
print(f"公平なコインのエントロピー: {h_fair:.3f} bit")


# 2. イカサマコイン (表0.9, 裏0.1)
# ほぼ表が出ると予想できる状態
coin_biased = [0.9, 0.1]

h_biased = entropy(coin_biased, base=2)
print(f"偏ったコインのエントロピー: {h_biased:.3f} bit")


# 3. 完全に決まっているコイン (表1.0, 裏0.0)
# 驚きがない状態
coin_fixed = [1.0, 0.0]
h_fixed = entropy(coin_fixed, base=2)
print(f"結果が決まっているコインのエントロピー: {h_fixed:.3f} bit")

実行結果の解説

これを実行すると、以下のようになるはずです。

  • 公平なコイン: 1.000 bit (最大)
  • 偏ったコイン: 0.469 bit (小さい)
  • 決まっているコイン: 0.000 bit (ゼロ)

「何が起きるかわからない」ほど数値が大きくなることが確認できましたね。

今後の学習の指針

今回は、情報の量を測る基礎概念を学びました。

  • 自己情報量: 「珍しさ」を数値化したもの。確率が低いほど大きい。
  • エントロピー: 「予測のしにくさ(不確実性)」を数値化したもの。

次回は、このエントロピーの考え方を使って、「AIの予測」と「正解」がどれくらいズレているかを測る方法を学びます。 ここで登場するのが、機械学習の損失関数として超重要な「KLダイバージェンス」と「交差エントロピー」です。

【最終回】AIはどうやって「間違い」に気づく?KLダイバージェンスと交差エントロピー

前回は、情報の量を「驚きの度合い」として数値化する「エントロピー」について学びました。

今回は、その知識を使って、AIが学習する上で最も重要なプロセス、「正解とのズレ(誤差)を測る方法」について解説します。

AIの学習とは、一言で言えば「AIが予測した確率分布」を「真の正解分布」に近づけていく作業のことです。

このとき、「あとどれくらい離れているの?」を測るメジャー(定規)が必要です。

それが、今回紹介する「KLダイバージェンス」と「交差エントロピー(クロスエントロピー)」です。

名前は厳ついですが、やっていることは単純な引き算の親戚です。

これらを理解すれば、ニューラルネットワークが学習する仕組み(損失関数)の謎が完全に解けますよ!

1. 分布と分布の「距離」を測るKLダイバージェンス

AI(機械学習モデル)は、データを見て確率分布を出力します。

例えば、「この画像は80%猫で、20%犬だ」という具合です。これを分布 Q としましょう。

一方、正解データは「これは100%猫だ(犬要素は0%)」という分布 P です。

この2つの分布 PQ が、どれくらい「似ていないか」を数値化したものが、カルバック・ライブラー(KL)ダイバージェンスです 。

KLダイバージェンスの式

式はこうなります。

D_{KL}(P||Q) = \sum P(x) \log \frac{P(x)}{Q(x)}

ログの中身が分数になっていますね。対数の性質 \log(A/B) = \log A - \log B を使うと、引き算の形に変形できます。

D_{KL}(P||Q) = \sum P(x) (\log P(x) - \log Q(x))

直感的な意味

  • 一致するとゼロ: もし予測 Q が正解 P と完全に同じなら、\log(1) = 0 になり、KLダイバージェンスはゼロになります。
  • 似ていないと大きい: ズレていればいるほど、値は大きくなります 。

注意!「距離」だけど一方通行

KLダイバージェンスは「距離のようなもの」ですが、普通の距離とは違う点があります。それは「非対称」だということです。

「Aから見たBの距離」と「Bから見たAの距離」が同じとは限りません。

D_{KL}(P||Q) \neq D_{KL}(Q||P)

機械学習では、「真の分布 P」を基準にして、「予測 Q」がどれくらい離れているかを見たいので、通常は D_{KL}(P||Q) を使います。

2. AI学習の主役「交差エントロピー」

次に、AIの損失関数(Loss Function)として頻繁に使われる「交差エントロピー(クロスエントロピー)」です 。

実はこれ、KLダイバージェンスとほぼ同じ意味を持っています。

KLダイバージェンスの式を展開してみましょう。

D_{KL}(P||Q) = \sum P(x)\log P(x) - \sum P(x)\log Q(x)

前半の \sum P(x)\log P(x) は、前回学んだ「正解データ自身のエントロピー(マイナスがつきます)」です。

正解データ P は固定された事実なので、この部分は学習中に変化しない「定数」とみなせます。

ということは、KLダイバージェンス(ズレ)を最小化するためには、後半の部分を最小化すればいいことになります。

この後半部分こそが、交差エントロピーです。

交差エントロピーの式

H(P, Q) = -\sum P(x) \log Q(x)

AIの学習においては、

「KLダイバージェンスを最小化する(分布を似せる)」ことと、

「交差エントロピーを最小化する」ことは、数学的に同じ意味になります 。

だから、計算が少し楽な交差エントロピーが損失関数として使われるのです。

3. 具体例:AIはどう計算している?

画像分類AIの例で計算してみましょう。

  • 正解(P): [猫: 1.0, 犬: 0.0] (これは猫です!)
  • AIの予測(Q): [猫: 0.7, 犬: 0.3] (たぶん猫かな…?)

交差エントロピーを計算します。

H = -(1.0 \times \log(0.7) + 0.0 \times \log(0.3))

正解が 0.0 の項(犬の部分)は消えるので、計算はとてもシンプルになります。

H = -\log(0.7) \approx 0.36

もしAIがもっと自信を持って「猫: 0.9」と予測していたら?

H = -\log(0.9) \approx 0.10

値が小さくなりましたね。つまり「誤差が減った」ということです。

AIは、この交差エントロピーの値が 0 に近づくように、ひたすら学習(重みの更新)を繰り返しているのです。

4. Pythonで「誤差」を計算してみよう

では、PythonでKLダイバージェンスと交差エントロピーを計算してみましょう。

import numpy as np
from scipy.stats import entropy

# 1. データの定義
# 正解分布 P (One-hotベクトル)
P = np.array([1.0, 0.0])
# 予測分布 Q (AIの出力)
Q = np.array([0.7, 0.3])

print(f"正解 P: {P}")
print(f"予測 Q: {Q}")

# 2. KLダイバージェンスの計算
# scipy.stats.entropy(P, Q) で計算できます
kl = entropy(P, Q)
print(f"\nKLダイバージェンス: {kl:.4f}")

# 3. 交差エントロピーの計算
# 定義通りに計算: -sum(P * log(Q))
# logの底はネイピア数eを使うのが一般的です
cross_entropy = -np.sum(P * np.log(Q))
print(f"交差エントロピー: {cross_entropy:.4f}")

# 4. 確認:関係式 H(P,Q) = H(P) + KL(P||Q)
# Pのエントロピー H(P) は、確率が1.0と0.0なので 0 になります
entropy_p = entropy(P)
print(f"正解のエントロピー H(P): {entropy_p:.4f}")

print(f"確認: {entropy_p:.4f} + {kl:.4f} = {entropy_p + kl:.4f}")

実行すると、交差エントロピーとKLダイバージェンスの値が( H(P)=0 なので)一致することが確認できるはずです。

シリーズまとめ:AIエンジニアへの数学パスポート

全2回にわたる「情報理論」、そしてこれまでの「線形代数」「確率・統計」の連載、いかがでしたでしょうか。

  1. 線形代数: データをベクトルや行列で表現し、変換する。
  2. 確率・統計: データの不確実性を扱い、分布として捉える。
  3. 情報理論: 確率を「情報量」に変換し、AIの「間違い(誤差)」を定義する。

これらの数学は、AIというブラックボックスの中身を照らす「光」です。

「なぜここでログをとるの?」「なぜこの損失関数なの?」

そう思ったときに、この連載で学んだ基礎が必ず役に立つはずです。

長い間お付き合いいただき、本当にありがとうございました!