KL情報量を概念的に理解する

KL情報量(カルバック・ライブラー・ダイバージェンス)は、確率分布どうしの距離的な尺度で、次元削減とか機械学習とかいろんなところでとってもよく出てきます。が、使うときはその意味はあまり考慮する必要はないので、今回はあえてそこを考えます。

情報量

 まず、情報量について考えます。情報量というのは、情報の価値の指標です。情報の価値は、その情報が発生する確率に依存します。起こるのが珍しいほど良い情報ということです。

 例えば、「宝くじが当たった」という情報は情報量が高く、「地球がまわった」という情報は情報量が低い、というようになっています。まあ、確かにレアなものほど嬉しい気はしますよね。こういったように情報量という指標をシャノンさんが定めました。具体的には次式のように表現します。

{
I(E)=log \cfrac{1}{P(E)}=-log P(E)
}

logは単調増加の関数で、確率P(E)の逆数をとっているので、I(E)P(E)が小さいほど大きくなるような量として設計されていることがわかります。このあたりの情報理論とかにもし興味があれば、本とか読んでみてください。ファイル圧縮とか通信などに応用されています。



カルバック・ライブラー情報量

 では、KL情報量の定義式を見ていきましょう。


{
KL(P||Q) = E_{x \sim P(x)} log \cfrac{P(x)}{Q(x)}
}


なんとなく情報量の式に見える気がします。少し変形させてみましょう。


{ \displaystyle \begin{eqnarray}
KL(P||Q)&=&E_{x \sim P(x)} (log \cfrac{1}{Q(x)} - log \cfrac{1}{P(x)})\\\\
&=&E_{x \sim P(x)} ( I_q(x) - I_p(x) )
\end{eqnarray}}


よくみると期待値の中身が情報量同士の差分になっていますね。これらの関係を具体的に数字を入れて、図で見ていきます。

 とりあえず例として、PQ正規分布とし、それぞれ平均を0, 3、分散を2.5, 2としたものを考えます。確率密度関数は以下のとおり。


f:id:YasuKe:20160607125723p:plain
この確率密度関数から、最初に説明した情報量を算出することができます。以下の図がそれを表しており、それぞれの確率が高いとろこの情報量は低くなっています。

f:id:YasuKe:20160607125744p:plain

 I_p(x) = -log P(x)
 I_q(x) = -log Q(x)

これらの差を見てみるとこのようになっています。

f:id:YasuKe:20160607125750p:plain

 D(x) = I_p(x) - I_q(x)

さらに、これに P(x)で重みをつけたものをは下の図のようになっています。これを積分した値がKL情報量です。この図を見ると、確率 P(x)が高い部分の差をより考慮していることがわかります。もともと発生する確率が低いところの差分はあまり考慮する必要はないですよね。

f:id:YasuKe:20160607125739p:plain

 WD(x) = P(x)D(x)

なんとなく、KL情報量が何をしているかわかった気がしますね。つまり、2つの確率分布の情報量の差の期待値になっているということです。

 ちなみに、KL情報量では向きが変わると値が変わります。つまり、KL(P||Q) \not = KL(Q||P)となります。これを双方向で等しくしたタイプのJS情報量というものもあり、これは2つの分布の平均の分布とのKL情報量を利用しています。


 JS(P||Q) = \cfrac{1}{2}KL\Big(P || \cfrac{P+Q}{2}\Big) + \cfrac{1}{2}KL\Big(Q || \cfrac{P+Q}{2}\Big)

まとめ

 今回は、KL情報量について少しだけ考察しました。ここでは、情報量の差の期待値という視点で説明しましたが、他の情報理論に関する量をKL情報量として捉えることもできたりするようで、もしかしたらもっとわかりやすい理解もあるかもしれません。まあ、少しでも理解してもらえると嬉しいです。


 また、今回の実験のコードはjupyter notebookにまとめてGitHubにあげているのでよかったらどうぞ。
Jupyter Notebook Viewer


では、