「一様分布」と「Softmax関数による確率化」間のKLダイバージェンスの計算

確率分布の類似度を計算するにあたって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ダイバージェンスの計算」への1件の返信

コメントは受け付けていません。