Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

ダイバージェンス

情報理論において ダイバージェンス(divergence) とは、2つの確率分布がどれだけ異なっているかを数量化する指標

前提知識:エントロピー

自己情報量

情報理論において、ある事象xxが起こる確率P(x)P(x)が小さい(めったに起こらない事象)ほど「情報量が多い」と考える。

そこで、確率の逆数の対数を surpriseあるいは 自己情報量(self-information) という。

Self-Information
I(x)=log1P(x)=logP(x)I(x) = \log \frac{1}{P(x)} = - \log P(x)

(対数を取ることで独立な事象の同時確率を確率の積として計算するときに計算しやすい)

エントロピー

自己情報量の期待値を エントロピー(entropy)期待情報量シャノン情報量 などと呼ぶ。

Entropy
H(P)=ExP[log1P(x)]=ExP[logP(x)]H(P) = \mathbb{E}_{x\sim P}\left[\log \frac{1}{P(x)}\right] = - \mathbb{E}_{x\sim P}[\log P(x)]

離散型確率変数の場合:

H(P)=iP(xi)log1P(xi)H(P) = \sum_i P(x_i) \log \frac{1}{P(x_i)}

連続型確率変数の場合:

H(P)=P(x)log1P(x)dxH(P) = \int_{-\infty}^{\infty} P(x) \log \frac{1}{P(x)} dx

交差エントロピー

Cross-Entropy
H(P,Q)=ExP[log1Q(x)]=ExP[logQ(x)]H(P, Q) = \mathbb{E}_{x\sim P}\left[\log \frac{1}{Q(x)}\right] = - \mathbb{E}_{x\sim P}[\log Q(x)]

離散型確率変数の場合:

H(P,Q)=iP(xi)log1Q(xi)H(P, Q) = \sum_i P(x_i) \log \frac{1}{Q(x_i)}

連続型確率変数の場合:

H(P,Q)=P(x)log1Q(x)H(P, Q) = \int_{-\infty}^{\infty} P(x) \log \frac{1}{Q(x)}

KLダイバージェンス

KLダイバージェンス(Kullback-Leibler Divergance) は 2つの確率分布の間の距離を測る関数。

特徴

  • 対称性をもたない:DKL(PQ)DKL(QP)D_{KL} (P||Q) \neq D_{KL} (Q||P)

    • → KLダイバージェンスは厳密な意味での距離ではない

別表現

logMN=logMlogN\log \frac{M}{N} = \log M - \log Nより、KLダイバージェンスは

DKL(PQ)=iP(xi)logP(xi)Q(xi)=iP(xi)logP(xi)iP(xi)logQ(xi)\begin{aligned} D_{KL} (P||Q) &= \sum_i P(x_i) \log \frac{P(x_i)}{Q(x_i)}\\ &= \sum_i P(x_i) \log P(x_i) - \sum_i P(x_i) \log Q(x_i) \end{aligned}

と変形できる。

交差エントロピーとの関係

KLダイバージェンスの最小化 = 交差エントロピーの最小化

KLダイバージェンスは2つの分布P,QP,Qの違いを定量評価する関数であるが、仮にPPが観測データでQQが予測モデルの出力だとするとPPの部分は定数なので

DKL(PQ)=iP(xi)logP(xi)定数iP(xi)logQ(xi)=iP(xi)logQ(xi)=H(P,Q)\begin{aligned} D_{KL} (P||Q) &= \underbrace{ \sum_i P(x_i) \log P(x_i) }_{\text{定数}} - \sum_i P(x_i) \log Q(x_i)\\ &= - \sum_i P(x_i) \log Q(x_i)\\ &= H(P, Q) \end{aligned}

となる。よって、minDKL(PQ)=minH(P,Q)\min D_{KL} (P||Q) = \min H(P,Q)、つまり、ダイバージェンスの最小化をしたい場合は交差エントロピーを最小化すればよいことになる。

式変形・エントロピーとの関係

H(P,Q)=H(P)+DKL(PQ)H(P, Q) = H(P) + D_{KL}(P||Q)

が成り立つ

導出

logMN=logMlogN\log \frac{M}{N} = \log M - \log Nより、

H(P,Q)=H(P)+DKL(pq)=P(x)logP(x)dx+P(x)logP(x)Q(x)dx=P(x)logP(x)dx+P(x){logP(x)logQ(x)}dx=P(x)logP(x)dxH(P)+P(x)logP(x)dxH(P)P(x)logQ(x)dxH(P,Q)=H(P,Q)\begin{align} H(P, Q) &= H(P) + D_{KL}(p||q) \\ &= - \int P(x) \log P(x) dx + \int P(x) \log \frac{ P(x) } { Q(x) } dx\\ &= - \int P(x) \log P(x) dx + \int P(x) \big\{ \log P(x) - \log Q(x) \big\} dx \\ &= \underbrace{ - \int P(x) \log P(x) dx }_{ H(P) } + \underbrace{ \int P(x) \log P(x) dx }_{ -H(P) } \underbrace{ - \int P(x) \log Q(x) dx }_{ H(P, Q) } \\ &= H(P, Q) \end{align}
DKL(pq)=H(P,Q)H(P)D_{KL}(p||q) = H(P, Q) - H(P)
導出
DKL(pq)=H(P,Q)H(P)=P(x)logQ(x)dx+P(x)logP(x)dx=P(x)logP(x)dxP(x)logQ(x)dx=P(x)logP(x)Q(x)dx\begin{align} D_{KL}(p||q) &= H(P, Q) - H(P)\\ &= - \int P(x) \log Q(x) dx + \int P(x) \log P(x) dx\\ &= \int P(x) \log P(x) dx - \int P(x) \log Q(x) dx\\ &= \int P(x) \log \frac{P(x)}{Q(x)} dx\\ \end{align}
import numpy as np
from scipy.stats import entropy

# ----------------------------
# サンプルデータ(観測値)
# ----------------------------
# 例:2つのサンプル集合
x_samples = np.array([0, 0, 1, 1, 1, 2, 2, 2, 2])
y_samples = np.array([0, 1, 1, 2, 2, 2, 2, 2, 2])

# ----------------------------
# 経験分布(ヒストグラム)を作成
# ----------------------------
# 共通のビン(カテゴリ)
bins = np.union1d(x_samples, y_samples)

def empirical_distribution(samples, bins):
    counts = np.array([(samples == b).sum() for b in bins])
    return counts / counts.sum()

P = empirical_distribution(x_samples, bins)
Q = empirical_distribution(y_samples, bins)

# 数値安定性のための微小量
eps = 1e-12
P = np.clip(P, eps, 1.0)
Q = np.clip(Q, eps, 1.0)

# 正規化(念のため)
P /= P.sum()
Q /= Q.sum()

# ----------------------------
# KLダイバージェンスの計算
# ----------------------------
# KL(P || Q)
kl_pq = entropy(P, Q)

# KL(Q || P)
kl_qp = entropy(Q, P)

print("P =", P)
print("Q =", Q)
print(f"KL(P || Q) = {kl_pq:.3f}")
print(f"KL(Q || P) = {kl_qp:.3f}")
P = [0.22222222 0.33333333 0.44444444]
Q = [0.11111111 0.22222222 0.66666667]
KL(P || Q) = 0.109
KL(Q || P) = 0.103

Density Power Divergence

β\beta-divergenceとも

KLダイバージェンスの拡張で、外れ値に頑健

Basu et al. (1998). Robust and efficient estimation by minimising a density power divergence. Biometrika, 85(3), 549-559.

Dβ(Q,P)=dβ(Q,P)dβ(Q,Q)dβ(Q,P)=1βP(x)βdQ(x)+rD_{\beta}(Q, P) = d_{\beta}(Q, P) - d_{\beta}(Q, Q)\\ d_{\beta}(Q, P) = - \frac{1}{\beta} \int P(x)^{\beta} dQ(x) + r