KL Divergence: Forward vs Reverse?

GANの勉強をしていたらリバースカルバック・ライブラー情報量が出てきて気になったので調べてみた。
調べてみて見つけた秀逸な記事
https://wiseodd.github.io/techblog/2016/12/21/forward-reverse-kl/
をなるべく平易な日本語で補足を追記しつつまとめてみた。

カルバック・ライブラー情報量(Kullback-Leibler Divergence、以降KL Divergence)は二つの確率分布$P(X)$, $Q(X)$間の距離を表すのに使われる。

例えば二つの確率分布として正規分布$P(X) = N(0, 2)$(※平均0, 分散2という意味), $Q(X) = N(0, 3)$があるとする。(それぞれ下図の青線と緑線)
このときこれら二つの確率分布の距離(厳密には数学的な距離の要件は満たさないらしい。ここでは二つの分布間の差異を表す指標と捉える。)はどのように定義されるだろうか?

<img width="555" alt="スクリーンショット 2018-09-25 23.59.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/113923/74ee787d-8b05-d2e6-55cf-bb2846573f0d.png">

KL Divergenceはこの距離を次のように定義する。

```math
D_{KL}[P(X)||Q(X)] = \sum_{x \in X}P(x)\log\biggl( \frac{P(x)}{Q(x)}\biggr)
```

ここで$\log\({P(x)}/{Q(x)})$の部分は$P(x)$と$Q(x)$の差異と捉えると、KL Divergenceは全ての確率変数 $x \in X $について$P(x)$と$Q(x)$の差異に$P(x)$という重みをつけた平均と解釈することができる。(符号付き差異と書いたがギブスの不等式によりKL Divergence全体では非負の値となる。ここでは単純に差異の大きさくらいに捉えて差し支えないと思われる。)

# 最適化計算におけるKL Divergence

最適化問題において, $P(X)$を正解の分布、$Q(X)$を推定された分布とする。
他の距離関数（e.g. ユークリッド距離）と同様にKL Divergenceも最適化問題、特に確率的な問題において誤差関数として使用することができる。
例えば変分ベイス法で事後確率を近似するときは、$Q(X)$と$P(X)$間のKL Divergenceを最小化する計算を行う。

しかし、ここでKL Divergenceに関する重要なこととしてKL Divergenceは非対称ということに注意する必要がある。つまり、$D_{KL}[P(X)||Q(X)] \neq D_{KL}[Q(X)||P(X)]$ということである。

$D_{KL}[P(X)||Q(X)]$ はForward KL、$D_{KL}[Q(X)||P(X)]$はReverse KLと呼ばれる.


# Forward KL

Forward KLでは$P(X)$と$Q(X)$の差異は$P(X)$で重みつけされる。このことについてちょっと考察してみる。

ある$x$において$P(x)=0$ということは何を意味するだろうか？$P(x)$は重みなのでここが0ということは重みつけされる部分がどんな値であってもケアされないということを意味する。言い換えると$P(x)=0$である範囲においては$P(x)$と$Q(x)$の差異がどんなに大きかろうとForward KL的には加算されず0(距離が0, つまり完全に一致している)とみなされるということである。最適化計算においては$P(x)=0$である範囲においては$Q(x)$は無視されるということである。

逆に$P(x)>0$の範囲では$log\({P(x)}/{Q(x)})$は全体のKL Divergenceに対して影響を与える。これはKL Divergenceを最小化しようとしている場合はうれしくないことになる。従って、$P(x)>0$の範囲では$P(x)$と$Q(x)$の差異は最小化されることになる。

いくつかの例を見てみよう。
<img width="545" alt="スクリーンショット 2018-09-27 0.42.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/113923/2a29b5d0-0cf5-a6cf-fba4-fc5042dca7ac.png">
図1

上図1では$P(X)$が左右に二つの山を持っている。従って$Q(X)$が図のようになっているときは$P(X)$の右の山において$P(x)$と$Q(x)$の差異が加算されてしまい、結果としてKL Divergenceは大きな値になる。従って最適化計算においてはアルゴリズムは$Q(X)$が別の形状になるように探索することになる。


<img width="554" alt="スクリーンショット 2018-09-27 0.42.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/113923/d8aea296-35b2-4262-e1dd-9dcdb44c0ad6.png">
図2

上図2では$Q(x)$はもっと広範囲に分布していて全ての$P(X)>0$の範囲を覆っている。

一部の範囲では$Q(X)$はきれいにマッチしていないものの、この$Q(X)$の形状が最適化計算で求められているKL Divergenceを最小にする解である。

このように、$P(x)>0$のいかなる範囲でも$Q(x)=0$が回避されていることから、Forward KLはゼロ回避(zero avoiding)と呼ばれる。

# Reverse KL

Reverse KLでは定義の式において$P(x)$と$Q(x)$の位置が入れ替わっている。すなわち$Q(x)$が重みになっている。$P(X)$が正解の分布、$Q(X)$が推定された分布であることに従来通り変更はない。Reverse KLについても考察してみる。

まず$Q(x)=0$の範囲では最適化計算において何が起こるだろうか？この場合、$P(x)>0$の範囲を無視してもなんのペナルティも生じない。

次に$Q(x)>0$の範囲では最適化計算において何が起こるだろうか？この範囲においては$P(x)$と$Q(x)$の差異は全体のKL　Divergenceに加算されてしまうため、差異をなるべく小さくしなくてはならない。

従ってForward KLでは正しくないとされた図1の$Q(X)$がReverse KLにおいては求められているKL Divergenceを最小にする解となる。つまり、Reverse KLにおいては$P(X)$の一部においてよくフィットするような近似が良しとされる。

その結果、Reverse KLは広範囲に分布するのを回避するように働く。そのため$P(X)$の一部は$Q(X)$に近似されない。(具体的には$Q(x)=0$の範囲)

このように、いくらかの範囲で$Q(X)$が(たとえ$P(X)>0$であっても)強制的に0になることから、Reverse KLはゼロ強制(zero forcing)と呼ばれる。

# 結論
じゃあ結局どちらのKLがよいのか？

その答えは「状況による」となる。上で見てきたように、両方とも独自の性質を持つ。従って何をしたいかによって、解きたい課題に対してどちらのKL Divergenceが適しているかによって適切なKL Divergenceを選択する。

ベイズ推定、特に変分ベイズ法ではReverse KLは広く用いられている。 Variational Autoencoder(VAE)でもReverse KLは用いられている。(もっとも、VAEはそもそも変分ベイス法に端を発するものである)

例えば白黒画像のカラー化タスクなど、正解がない状況でそれらしい画像を生成するタスクにおいては妥当な正解は一つとは限らず正解は今回の例における複数の山を持つ$P(X)$のようになる。だからReverse KLが使われているという話につながる。

# 参考文献
Agustinus Kristiadi's Blog
https://wiseodd.github.io/techblog/2016/12/21/forward-reverse-kl/

Blei, David M. “Variational Inference.” Lecture from Princeton, 
https://www.cs.princeton.edu/courses/archive/fall11/cos597C/lectures/variational-inference-i.pdf (2011).

Fox, Charles W., and Stephen J. Roberts. “A tutorial on variational Bayesian inference.” Artificial intelligence review 38.2 (2012): 85-95.