確率分布の類似度を計算するにあたってKLダイバージェンスが用いられることが多いですが、式の解釈は抽象的で理解が難しいです。当記事ではKLダイバージェンスの概略が把握できるように通常の確率化とSoftmax関数による確率化を題材に一様分布とのKLダイバージェンスの計算を行いました。
「パターン認識と機械学習」の$1.6$節の「Information Theory」などを主に参考に作成を行いました。
・用語/公式解説
https://www.hello-statisticians.com/explain-terms
前提の確認
KLダイバージェンスの式定義
確率変数の取り得る値の集合を$X$とおくと、離散型確率分布$p(x), q(x)$のKLダイバージェンスは下記のような式で定義される。
$$
\large
\begin{align}
KL(p||q) = \sum_{x \in X} p(x) \log{ \left[ \frac{p(x)}{q(x)} \right] }
\end{align}
$$
上記で定義されたKLダイバージェンスはイェンセンの定理に基づいて$KL(p||q) \geq 0$が成立する。
ソフトマックス関数
$\mathbf{a} = (a_1, \cdots , a_K)$が与えられたとき、ソフトマックス関数$\mathrm{Softmax}(a_k)$は下記のように定義できる。
$$
\large
\begin{align}
\mathrm{Softmax}(a_k) = \frac{\exp{(a_k)}}{\displaystyle \sum_{j=1}^{K} \exp{(a_j)}}
\end{align}
$$
上記の定義より、ソフトマックス関数について下記の式が成立する。
$$
\large
\begin{align}
\mathrm{Softmax}(a_k) & \geq 0 \\
\sum_{j=1}^{K} \mathrm{Softmax}(a_j) &= 1
\end{align}
$$
KLダイバージェンスの計算
以下、$\mathbf{a} = (2, 7, 6)$が得られた際に「割り算による確率化」と「ソフトマックス関数による確率化」を行い、それぞれ一様分布とのKLダイバージェンスの計算を行う。まず下記のようなプログラムを実行することで$\mathbf{a} = (2, 7, 6)$の確率化を行うことができる。
import numpy as np
a = np.array([2., 7., 6.])
p_1 = a/np.sum(a)
p_2 = np.exp(a)/np.sum(np.exp(a))
print(p_1)
print(p_2)
・実行結果
[ 0.13333333 0.46666667 0.4 ]
[ 0.00490169 0.72747516 0.26762315]
計算結果を確認すると、ソフトマックス関数の結果が[ 0.00490169 0.72747516 0.26762315]
であり、「緩やかなmax
関数」のように解釈することができる。次に一様分布とのKLダイバージェンスは下記のようなプログラムを実行することで計算できる。
p_u = np.ones(3)/3.
KL_1 = np.sum(p_1 * np.log(p_1/p_u))
KL_2 = np.sum(p_2 * np.log(p_2/p_u))
print(KL_1)
print(KL_2)
・実行結果
0.155489202361
0.704475577074
上記より、ソフトマックス関数を適用することで一様分布とのKLダイバージェンスが大きくなることが確認できる。
[…] 「一様分布」と「Softmax関数による確率化」間のKLダイバージェンスの計算 […]