ダイバージェンス#

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

前提知識:エントロピー#

自己情報量#

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

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

Self-Information
\[ I(x) = \log \frac{1}{P(x)} = - \log P(x) \]

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

エントロピー#

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

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

離散型確率変数の場合:

\[ H(P) = \sum_i P(x_i) \log \frac{1}{P(x_i)} \]

連続型確率変数の場合:

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

交差エントロピー#

Cross-Entropy
\[ 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) = \sum_i P(x_i) \log \frac{1}{Q(x_i)} \]

連続型確率変数の場合:

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

KLダイバージェンス#

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

Kullback-Leibler Divergance

\[ D_{KL} (P||Q) = \mathbb{E}_{x\sim P}\left[ \log \frac{P(x_i)}{Q(x_i)} \right] \]

離散の場合

\[ D_{KL} (P||Q) = \sum_i P(x_i) \log \frac{P(x_i)}{Q(x_i)} \]

連続の場合

\[ D_{KL} (P||Q) = \int_{-\infty}^{\infty} P(x) \log \frac{ P(x) } { Q(x) } dx \]

特徴

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

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

別表現

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

\[\begin{split} \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} \end{split}\]

と変形できる。

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

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

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

\[\begin{split} \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} \end{split}\]

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

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

\[ H(P, Q) = H(P) + D_{KL}(P||Q) \]

が成り立つ

導出

\(\log \frac{M}{N} = \log M - \log N\)より、

\[\begin{split} \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} \end{split}\]
\[ D_{KL}(p||q) = H(P, Q) - H(P) \]
導出
\[\begin{split} \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} \end{split}\]
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.

\[\begin{split} D_{\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 \end{split}\]

積分を回避する案#

参考#