機械学習で分類モデルを訓練するとき、ほぼ確実に登場する損失関数が交差エントロピー(cross-entropy)です。しかし、なぜ交差エントロピーを最小化すると良いモデルが得られるのか、その情報論的な意味を正確に理解している人は意外と少ないかもしれません。交差エントロピーは単なる「損失関数の一つ」ではなく、情報理論の深い概念と結びついているのです。
交差エントロピーとそれに密接に関連するKLダイバージェンス(Kullback-Leibler divergence)を理解することで、以下のような幅広い問題の本質が見えてきます。
- 機械学習: 分類問題の損失関数(ログロス)としての交差エントロピーの役割を理論的に理解できます
- 統計学: 最尤推定がKLダイバージェンスの最小化と等価であることがわかります
- 情報理論: 最適な符号化と不適切な符号化のコスト差を定量化できます
- 変分推論: VAE(変分オートエンコーダ)のELBO(Evidence Lower Bound)の導出にKLダイバージェンスが使われます
- 自然言語処理: 言語モデルの評価指標であるパープレキシティは交差エントロピーの指数です
本記事では、エントロピー、交差エントロピー、KLダイバージェンスの関係を情報論的に理解し、機械学習への応用をPythonで実装して確認します。
本記事の内容
- シャノンエントロピーの復習と直感的意味
- 交差エントロピーの定義と情報論的解釈
- KLダイバージェンスの定義と性質
- 三者の関係: $H(p, q) = H(p) + D_{\mathrm{KL}}(p \| q)$
- 機械学習における交差エントロピー損失
- 最尤推定とKLダイバージェンス最小化の等価性
- Pythonによる可視化と検証
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
シャノンエントロピーの復習
情報量と平均情報量
ある事象が確率 $p$ で起こるとき、その事象を観測したときに得られる情報量(自己情報量)は $-\log p$ で定義されます(対数の底は通常2またはe)。確率が小さい事象ほど「驚き」が大きく、情報量も大きくなります。
確率分布 $p = (p_1, p_2, \dots, p_K)$ のシャノンエントロピーは、情報量の期待値(平均情報量)です。
$$ \begin{equation} H(p) = -\sum_{k=1}^K p_k \log p_k \end{equation} $$
エントロピーは分布の「不確実性」や「ランダムさ」を測る量です。一様分布のとき最大値 $\log K$ をとり、確定的な分布(ある $k$ で $p_k = 1$)のときゼロになります。
シャノンの源符号化定理により、エントロピーは分布 $p$ から生成されるメッセージを符号化するために必要な最小平均ビット数でもあります。
エントロピーは「最適な符号化のコスト」を表しています。では、最適でない符号化を使った場合のコストはどうなるでしょうか。ここで交差エントロピーが登場します。
交差エントロピーの定義と情報論的解釈
符号化の観点からの動機
データの真の分布が $p$ であるのに、別の分布 $q$ に基づいた符号化を使ったとしましょう。分布 $q$ に基づく最適な符号は、事象 $k$ に長さ $-\log q_k$ ビットの符号語を割り当てます。しかし、データは実際には分布 $p$ から生成されるので、平均符号語長は $-\sum_k p_k \log q_k$ になります。
この量が交差エントロピーです。
$$ \begin{equation} H(p, q) = -\sum_{k=1}^K p_k \log q_k \end{equation} $$
交差エントロピーは「真の分布 $p$ に対して、分布 $q$ に基づく符号化を使ったときの平均符号語長」です。
直感的な理解
交差エントロピーの直感を掴むために、具体的な例を考えましょう。
サイコロの目を伝える状況を想像してください。公正なサイコロの場合、各目の確率は $p_k = 1/6$ です。最適な符号化では $H(p) = \log_2 6 \approx 2.585$ ビットが必要です。
もし「このサイコロは1が出やすい」と誤って信じて($q_1 = 0.5, q_2 = \dots = q_6 = 0.1$)、この信念に基づく符号化を使ったとします。1に短い符号語($-\log_2 0.5 = 1$ ビット)、他に長い符号語($-\log_2 0.1 \approx 3.32$ ビット)を割り当てることになります。
交差エントロピーは $H(p, q) = -\frac{1}{6}\log_2 0.5 – \frac{5}{6}\log_2 0.1 \approx 2.94$ ビットとなり、最適な $2.585$ ビットよりも多くのビット数が必要です。誤った信念に基づく符号化は効率が悪いのです。
交差エントロピーの基本性質
交差エントロピーには以下の重要な性質があります。
- $H(p, q) \geq H(p)$: 交差エントロピーは常にエントロピー以上です(等号は $p = q$ のとき)
- 非対称性: 一般に $H(p, q) \neq H(q, p)$ です
- 非負性: $H(p, q) \geq 0$
性質1は「誤った分布に基づく符号化は、最適な符号化よりも効率が悪い」ことを意味しています。$H(p, q) – H(p)$ がどれだけ「余分に」ビットが必要かを表しており、この差がまさにKLダイバージェンスです。
KLダイバージェンスの定義と性質
定義
KLダイバージェンス(Kullback-Leibler divergence)は、二つの確率分布 $p$ と $q$ の間の「差異」を測る量です。
$$ \begin{equation} D_{\mathrm{KL}}(p \| q) = \sum_{k=1}^K p_k \log \frac{p_k}{q_k} = -\sum_{k=1}^K p_k \log q_k + \sum_{k=1}^K p_k \log p_k \end{equation} $$
最後の式を見ると、
$$ \begin{equation} D_{\mathrm{KL}}(p \| q) = H(p, q) – H(p) \end{equation} $$
すなわち、KLダイバージェンスは交差エントロピーからエントロピーを引いたものです。符号化の言葉で言えば、「誤った分布 $q$ に基づく符号化で余分に必要になるビット数」です。
KLダイバージェンスの基本性質
1. 非負性(ギブスの不等式):
$$ D_{\mathrm{KL}}(p \| q) \geq 0 $$
等号は $p = q$ のときに限ります。
証明: イェンセンの不等式を使います。$-\log$ は凸関数なので、
$$ D_{\mathrm{KL}}(p \| q) = -\sum_k p_k \log \frac{q_k}{p_k} \geq -\log\left(\sum_k p_k \cdot \frac{q_k}{p_k}\right) = -\log\left(\sum_k q_k\right) = -\log 1 = 0 $$
等号条件はイェンセンの不等式の等号条件から $q_k/p_k$ が定数、すなわち $p = q$ です。$\square$
2. 非対称性: $D_{\mathrm{KL}}(p \| q) \neq D_{\mathrm{KL}}(q \| p)$(一般に)
この非対称性のため、KLダイバージェンスは「距離」ではありません。三角不等式も満たしません。
3. 加法性: 独立な分布の直積に対して、$D_{\mathrm{KL}}(p_1 \otimes p_2 \| q_1 \otimes q_2) = D_{\mathrm{KL}}(p_1 \| q_1) + D_{\mathrm{KL}}(p_2 \| q_2)$。独立な情報源の「ずれ」は足し合わせられるという自然な性質です
4. 凸性: $D_{\mathrm{KL}}(p \| q)$ は分布の対 $(p, q)$ に対して同時に凸です。すなわち、$D_{\mathrm{KL}}(\lambda p_1 + (1-\lambda)p_2 \| \lambda q_1 + (1-\lambda)q_2) \leq \lambda D_{\mathrm{KL}}(p_1 \| q_1) + (1-\lambda)D_{\mathrm{KL}}(p_2 \| q_2)$
三者の関係のまとめ
エントロピー、交差エントロピー、KLダイバージェンスの関係を一つの式にまとめます。
$$ \begin{equation} H(p, q) = H(p) + D_{\mathrm{KL}}(p \| q) \end{equation} $$
$H(p)$ は $p$ の「固有の不確実性」であり $q$ に依存しません。$D_{\mathrm{KL}}(p \| q)$ は $p$ と $q$ の「ずれ」によるペナルティです。
この分解から、$q$ に関して交差エントロピー $H(p, q)$ を最小化することは、KLダイバージェンス $D_{\mathrm{KL}}(p \| q)$ を最小化することと等価であることがわかります($H(p)$ は $q$ に依存しないため)。
この事実が機械学習で交差エントロピー損失を使う理論的根拠です。次にその詳細を見ましょう。
機械学習における交差エントロピー損失
分類問題の損失関数
$K$ クラスの分類問題を考えます。入力 $\bm{x}$ に対して、真のラベルの分布が $p$ であり、モデルの予測確率が $q_\theta(\bm{x})$ であるとします。
交差エントロピー損失は次のように定義されます。
$$ \begin{equation} \mathcal{L}(\theta) = -\sum_{k=1}^K p_k \log q_{\theta,k}(\bm{x}) \end{equation} $$
実際のラベルがone-hotベクトル(正解クラス $c$ だけ $p_c = 1$、他は0)の場合、
$$ \mathcal{L}(\theta) = -\log q_{\theta,c}(\bm{x}) $$
と簡略化されます。これは「正解クラスの予測確率の負の対数」であり、正解クラスの予測確率が高いほど損失が小さくなります。
最尤推定との等価性
データセット $\{(\bm{x}_i, y_i)\}_{i=1}^N$ に対して、交差エントロピー損失の平均を最小化することは、モデルパラメータの最尤推定と等価です。
対数尤度は $\ell(\theta) = \sum_{i=1}^N \log q_\theta(y_i | \bm{x}_i)$ であり、交差エントロピー損失の合計は $\mathcal{L}_{\text{total}} = -\sum_{i=1}^N \log q_\theta(y_i | \bm{x}_i)$。したがって、
$$ \underset{\theta}{\min}\, \mathcal{L}_{\text{total}}(\theta) = \underset{\theta}{\max}\, \ell(\theta) $$
交差エントロピー最小化 = 対数尤度最大化(最尤推定)です。
経験分布とKLダイバージェンスの関係
もう少し深く考えましょう。データセットの経験分布を $\hat{p}(y | \bm{x})$ とすると、交差エントロピー損失の平均は
$$ \frac{1}{N}\sum_{i=1}^N \mathcal{L}(\theta; \bm{x}_i, y_i) = H(\hat{p}, q_\theta) = H(\hat{p}) + D_{\mathrm{KL}}(\hat{p} \| q_\theta) $$
$H(\hat{p})$ は $\theta$ に依存しないので、交差エントロピーの最小化は経験分布とモデル分布のKLダイバージェンスの最小化と等価です。
つまり、交差エントロピー損失を最小化することは、モデルの予測分布 $q_\theta$ を真の分布(の経験的近似)$\hat{p}$ にKLダイバージェンスの意味で最も近づけることに他なりません。
バイナリ交差エントロピー
2クラス分類($K = 2$)の場合、交差エントロピー損失は特に簡潔な形になります。正解ラベルを $y \in \{0, 1\}$、モデルの予測確率を $\hat{y} = q_\theta(Y=1|\bm{x})$ とすると、
$$ \begin{equation} \mathcal{L}_{\text{BCE}} = -\left[y\log\hat{y} + (1-y)\log(1-\hat{y})\right] \end{equation} $$
これはバイナリ交差エントロピー(binary cross-entropy)またはログロス(log loss)と呼ばれます。
$y = 1$ のとき $\mathcal{L} = -\log\hat{y}$ であり、$\hat{y} \to 1$ で損失がゼロ、$\hat{y} \to 0$ で損失が無限大になります。逆に $y = 0$ のとき $\mathcal{L} = -\log(1-\hat{y})$ であり、$\hat{y} \to 0$ で損失がゼロです。
ロジスティック回帰では $\hat{y} = \sigma(\bm{w}^T\bm{x} + b)$($\sigma$ はシグモイド関数)であり、バイナリ交差エントロピーはモデルパラメータに関して凸です。この凸性が最適化の収束を保証し、ロジスティック回帰が実用的に優れた手法である理由の一つです。
Forward KL と Reverse KL の違い
KLダイバージェンスの非対称性は、機械学習における重要な設計選択に直結します。
Forward KL: $D_{\mathrm{KL}}(p \| q) = E_p[\log(p/q)]$
真の分布 $p$ に関する期待値を取るため、$p > 0$ かつ $q \approx 0$ の領域で大きなペナルティが生じます。つまり、forward KLを最小化すると、$q$ は $p$ がカバーするすべての領域をカバーしようとします。結果として、$q$ は $p$ のモードをすべてカバーする傾向があります(mean-seeking behavior)。
最尤推定はforward KLの最小化であるため、多峰性の真の分布に対してすべてのモードをカバーしようとします。しかし、$q$ の表現力が十分でない場合、モード間の谷間にも確率を割り当ててしまう「ぼやけた」分布になることがあります。
Reverse KL: $D_{\mathrm{KL}}(q \| p) = E_q[\log(q/p)]$
近似分布 $q$ に関する期待値を取るため、$q > 0$ かつ $p \approx 0$ の領域で大きなペナルティが生じます。つまり、reverse KLを最小化すると、$q$ は $p$ がゼロに近い領域を避けようとします。結果として、$q$ は $p$ の一つのモードに集中する傾向があります(mode-seeking behavior)。
変分推論(VAE)のELBOはreverse KL $D_{\mathrm{KL}}(q_\phi(\bm{z}|\bm{x}) \| p(\bm{z}|\bm{x}))$ を最小化するものであり、近似事後分布 $q$ が真の事後分布 $p$ の一つのモードに集中しやすいという性質を持ちます。これが変分推論の限界の一つです。
連続分布への拡張
離散分布の交差エントロピーとKLダイバージェンスは、連続分布に対して自然に拡張できます。確率密度関数 $p(x)$ と $q(x)$ に対して、
$$ H(p, q) = -\int p(x)\log q(x)\,dx $$
$$ D_{\mathrm{KL}}(p \| q) = \int p(x)\log\frac{p(x)}{q(x)}\,dx $$
離散の場合と同様に $H(p, q) = h(p) + D_{\mathrm{KL}}(p \| q)$ が成り立ちます($h(p)$ は微分エントロピー)。ただし、微分エントロピーは離散エントロピーと異なり負になりうるため、交差エントロピーも負になりえます。一方、KLダイバージェンスは連続の場合でも常に非負であり、この性質は普遍的です。
ここまでで理論的な枠組みを整理しました。次にPythonで交差エントロピーとKLダイバージェンスの振る舞いを可視化して、直感的な理解を深めましょう。
Pythonによる可視化と検証
交差エントロピーとKLダイバージェンスの可視化
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import rel_entr
def entropy(p):
"""シャノンエントロピー"""
p = p[p > 0]
return -np.sum(p * np.log(p))
def cross_entropy(p, q):
"""交差エントロピー"""
return -np.sum(p * np.log(q + 1e-15))
def kl_divergence(p, q):
"""KLダイバージェンス"""
return np.sum(rel_entr(p, q))
# --- 二値分布での可視化 ---
p_true = 0.3 # 真の確率
q_range = np.linspace(0.01, 0.99, 200)
H_p = np.array([entropy(np.array([p_true, 1 - p_true]))] * len(q_range))
H_pq = np.array([cross_entropy(np.array([p_true, 1 - p_true]),
np.array([q, 1 - q])) for q in q_range])
KL_pq = np.array([kl_divergence(np.array([p_true, 1 - p_true]),
np.array([q, 1 - q])) for q in q_range])
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# 左: H(p,q), H(p), D_KL の関係
ax = axes[0]
ax.plot(q_range, H_pq, 'b-', linewidth=2, label='$H(p, q)$ (cross-entropy)')
ax.plot(q_range, H_p, 'g--', linewidth=2, label='$H(p)$ (entropy)')
ax.plot(q_range, KL_pq, 'r-', linewidth=2, label='$D_{KL}(p \\| q)$')
ax.axvline(p_true, color='gray', linestyle=':', linewidth=1,
label=f'$q = p = {p_true}$')
ax.set_xlabel('$q$', fontsize=12)
ax.set_ylabel('bits (nats)', fontsize=12)
ax.set_title(f'Binary case: $p = {p_true}$', fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, 4)
# 中: H(p,q) = H(p) + D_KL の検証
ax = axes[1]
ax.plot(q_range, H_pq, 'b-', linewidth=2.5, label='$H(p,q)$')
ax.plot(q_range, H_p + KL_pq, 'r--', linewidth=1.5, label='$H(p) + D_{KL}$')
ax.set_xlabel('$q$', fontsize=12)
ax.set_ylabel('Value', fontsize=12)
ax.set_title('Verification: $H(p,q) = H(p) + D_{KL}(p \\| q)$', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# 右: KLダイバージェンスの非対称性
ax = axes[2]
KL_forward = np.array([kl_divergence(np.array([p_true, 1 - p_true]),
np.array([q, 1 - q])) for q in q_range])
KL_reverse = np.array([kl_divergence(np.array([q, 1 - q]),
np.array([p_true, 1 - p_true])) for q in q_range])
ax.plot(q_range, KL_forward, 'b-', linewidth=2, label='$D_{KL}(p \\| q)$ (forward)')
ax.plot(q_range, KL_reverse, 'r-', linewidth=2, label='$D_{KL}(q \\| p)$ (reverse)')
ax.axvline(p_true, color='gray', linestyle=':', linewidth=1)
ax.set_xlabel('$q$', fontsize=12)
ax.set_ylabel('$D_{KL}$', fontsize=12)
ax.set_title('Asymmetry of KL divergence', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, 4)
plt.tight_layout()
plt.savefig('cross_entropy_kl.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフから、以下の重要な関係が確認できます。
-
左図: 交差エントロピー $H(p, q)$ はエントロピー $H(p)$ とKLダイバージェンス $D_{\text{KL}}(p \| q)$ の和です。$q = p$ で交差エントロピーが最小値 $H(p)$ をとり、KLダイバージェンスがゼロになります。$q$ が $p$ から離れるほど両者は増加します
-
中図: $H(p, q) = H(p) + D_{\text{KL}}(p \| q)$ の関係が数値的に正確に成り立っている。青い実線と赤い破線が完全に重なっています
-
右図: KLダイバージェンスは非対称です。$D_{\text{KL}}(p \| q)$(forward KL)と $D_{\text{KL}}(q \| p)$(reverse KL)は一般に異なる値をとります。forward KLは $q \to 0$ で発散し($p > 0$ の領域を $q$ がカバーしないとペナルティが大きい)、reverse KLは $q \to 1$ で発散します
ソフトマックスと交差エントロピーの数値安定性
多クラス分類では、ソフトマックス関数とセットで交差エントロピーが使われます。ソフトマックス関数は生のスコア(ロジット) $z_k$ を確率に変換します。
$$ q_k = \frac{\exp(z_k)}{\sum_{j=1}^K \exp(z_j)} $$
交差エントロピー損失と組み合わせると、正解クラス $c$ に対して
$$ \mathcal{L} = -\log q_c = -z_c + \log\sum_{j=1}^K \exp(z_j) $$
となります。この式の勾配は非常にシンプルです。
$$ \frac{\partial \mathcal{L}}{\partial z_k} = q_k – \mathbf{1}_{k=c} $$
つまり、「予測確率 – 正解のone-hotベクトル」がそのまま勾配になります。この単純さがソフトマックス交差エントロピーが深層学習で標準的に使われる理由の一つです。
実装上の注意点として、$\exp(z_k)$ はオーバーフローしやすいため、$\log\sum_j \exp(z_j) = \max_j z_j + \log\sum_j \exp(z_j – \max_j z_j)$ というlog-sum-expトリックが使われます。深層学習フレームワーク(PyTorch, TensorFlow)のCrossEntropyLossはこのトリックを内部で適用しているため、ユーザーはロジットを直接渡すだけで済みます。
ラベルスムージングと交差エントロピー
実際の深層学習では、ラベルスムージング(label smoothing)という技法がよく使われます。正解ラベルのone-hotベクトルを「柔らかく」して、
$$ p_k^{\text{smooth}} = (1 – \epsilon)\cdot\mathbf{1}_{k=c} + \frac{\epsilon}{K} $$
とします($\epsilon$ は通常0.1程度)。これにより、モデルが過度に自信を持つ($q_c \to 1$)ことを防ぎ、汎化性能が向上します。
情報論的には、ラベルスムージングは真の分布 $p$ に一様分布のノイズを加えたものに対して交差エントロピーを最小化することに相当し、モデルの予測分布のエントロピーに対する正則化項を暗黙的に加えていると解釈できます。
分類問題での交差エントロピー損失
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
# --- 3クラス分類のシミュレーション ---
K = 3
N = 1000
true_dist = np.array([0.5, 0.3, 0.2])
# データ生成
labels = np.random.choice(K, size=N, p=true_dist)
# モデルの予測を変化させながら損失を計算
# パラメータ t: t=0 で一様分布、t=1 で真の分布
t_range = np.linspace(0, 2, 100)
losses = []
kl_values = []
for t in t_range:
# q(t) = softmax of t * log(p)
logits = t * np.log(true_dist + 1e-15)
q = np.exp(logits) / np.sum(np.exp(logits))
# 経験的交差エントロピー
loss = -np.mean(np.log(q[labels] + 1e-15))
losses.append(loss)
kl_values.append(kl_divergence(true_dist, q))
fig, axes = plt.subplots(1, 2, figsize=(13, 5.5))
# 左: 損失と KL
ax = axes[0]
ax.plot(t_range, losses, 'b-', linewidth=2, label='Cross-entropy loss')
ax.plot(t_range, kl_values, 'r--', linewidth=2, label='$D_{KL}(p \\| q)$')
ax.axhline(entropy(true_dist), color='g', linestyle=':', linewidth=1.5,
label=f'$H(p) = {entropy(true_dist):.3f}$')
ax.axvline(1.0, color='gray', linestyle=':', linewidth=1, alpha=0.5,
label='$q = p$')
ax.set_xlabel('Parameter $t$', fontsize=12)
ax.set_ylabel('Value', fontsize=12)
ax.set_title('Cross-entropy loss optimization', fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
# 右: 学習曲線(SGDのシミュレーション)
ax = axes[1]
# ロジスティック回帰の簡易シミュレーション
np.random.seed(42)
# 2次元特徴量
X = np.random.randn(N, 2)
# 線形分離可能なデータを生成
W_true = np.array([[2, 0], [0, 2], [-1, -1]])
logits_true = X @ W_true.T
probs_true = np.exp(logits_true) / np.exp(logits_true).sum(axis=1, keepdims=True)
y = np.array([np.random.choice(K, p=probs_true[i]) for i in range(N)])
# SGD
W = np.zeros((K, 2))
lr = 0.01
batch_size = 32
loss_history = []
for epoch in range(200):
indices = np.random.permutation(N)
epoch_loss = 0
for start in range(0, N, batch_size):
batch_idx = indices[start:start + batch_size]
X_batch = X[batch_idx]
y_batch = y[batch_idx]
# forward
logits_batch = X_batch @ W.T
probs_batch = np.exp(logits_batch - logits_batch.max(axis=1, keepdims=True))
probs_batch /= probs_batch.sum(axis=1, keepdims=True)
# loss
loss = -np.mean(np.log(probs_batch[range(len(y_batch)), y_batch] + 1e-15))
epoch_loss += loss * len(y_batch)
# gradient
grad = probs_batch.copy()
grad[range(len(y_batch)), y_batch] -= 1
dW = grad.T @ X_batch / len(y_batch)
W -= lr * dW
loss_history.append(epoch_loss / N)
ax.plot(range(len(loss_history)), loss_history, 'b-', linewidth=1.5)
ax.set_xlabel('Epoch', fontsize=12)
ax.set_ylabel('Cross-entropy loss', fontsize=12)
ax.set_title('Training with cross-entropy loss', fontsize=13)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('cross_entropy_ml.png', dpi=150, bbox_inches='tight')
plt.show()
機械学習の文脈での交差エントロピーの振る舞いが確認できます。
-
左図: 交差エントロピー損失は $q = p$ で最小値 $H(p)$ をとり、KLダイバージェンスは $q = p$ でゼロになります。$t = 1$ のとき $q$ が真の分布 $p$ に一致し、損失がエントロピー $H(p)$ に達します。$H(p)$ は「最良のモデルでも避けられない本質的な不確実性」を表しています
-
右図: SGDによる学習で交差エントロピー損失が単調に減少しています。学習が進むにつれてモデルの予測分布 $q_\theta$ が真の条件付き分布に近づき、KLダイバージェンスが減少していることに対応します
パープレキシティ — 交差エントロピーの指数
自然言語処理で言語モデルの性能評価に使われるパープレキシティ(perplexity)は、交差エントロピーの指数として定義されます。
テストデータの単語系列 $w_1, w_2, \dots, w_N$ に対して、言語モデル $q$ のパープレキシティは
$$ \begin{equation} \text{PPL} = \exp\!\left(-\frac{1}{N}\sum_{i=1}^N \log q(w_i | w_{
ここで $p$ はテストデータの経験分布、$H(p, q)$ は交差エントロピーです。
パープレキシティの直感的な意味は、「モデルが各ステップで何通りの中から次の単語を選んでいるか」です。パープレキシティが100であれば、モデルは平均的に100個の候補の中から等確率で1つを選んでいるのと同じ不確実性を持っていることになります。パープレキシティが低いほどモデルの予測精度が高いことを意味します。
完璧なモデル($q = p$)ではパープレキシティは $\exp(H(p))$ となり、これがデータの本質的な不確実性から来る下限です。モデルの改善はこの下限に向かってパープレキシティを下げることに対応します。GPT-4のような最新の大規模言語モデルは、テストデータに対するパープレキシティを年々低下させています。
まとめ
本記事では、交差エントロピーとKLダイバージェンスの定義と関係を情報理論と機械学習の両面から解説しました。
- シャノンエントロピー $H(p)$ は分布 $p$ の「本質的な不確実性」であり、最適な符号化に必要な平均ビット数です
- 交差エントロピー $H(p, q)$ は「真の分布 $p$ に対して分布 $q$ に基づく符号化を使ったときの平均ビット数」であり、常に $H(p, q) \geq H(p)$ です
- KLダイバージェンス $D_{\text{KL}}(p \| q) = H(p, q) – H(p) \geq 0$ は「誤った分布 $q$ を使うことによる追加コスト」です。非負性はイェンセンの不等式(ギブスの不等式)から証明されます
- 機械学習における交差エントロピー損失の最小化は、KLダイバージェンスの最小化であり、最尤推定と等価です。これが交差エントロピーが損失関数として普遍的に使われる理論的根拠です
- Forward KLは $p$ のすべてのモードをカバーしようとし(mean-seeking)、Reverse KLは一つのモードに集中しようとします(mode-seeking)。この違いは最尤推定と変分推論の振る舞いの違いに直結します
- パープレキシティは交差エントロピーの指数であり、言語モデルの標準的な評価指標です
次のステップとして、以下の記事も参考にしてください。
- レート歪み理論 — 情報圧縮の限界
- 最大エントロピー原理 — 制約つきエントロピー最大化
- f-ダイバージェンスの統一理論 — KLダイバージェンスの一般化