読者です 読者をやめる 読者になる 読者になる

まんぼう日記

takataka's diary

正規分布間の Kullback-Leibler divergence とその勾配

研究

毎年この時期は定期試験とか卒業研究とかその他もろもろ重なって

\(@_@\... .../@_@)/

なたかたかです.そーいうわけで,遊び 研究に逃避.

 

確率分布の間の「距離のようなもの」を測る規準の一つに Kullback-Leibler divergence ちうもんがあります( カルバック・ライブラー情報量 - Wikipedia ).二つの連続な確率分布 \( p(\mathbf{x}) \) と \( q(\mathbf{x}) \) があったとき,両者の間の KL-divergence \( D_{\rm KL}(p\Vert q)\) は

\[ D_{\rm KL}(p\Vert q) = -\int_{\cal X} p(\mathbf{x}) \log{ \frac{q(\mathbf{x})}{p(\mathbf{x})} } d\mathbf{x} \]

と定義されます.「距離」じゃなくて「距離のようなもの」な理由は,\( D_{\rm KL}(p\Vert q) \neq D_{\rm KL}(q\Vert p)\) やったり三角不等式が成り立たへんかったりするからなんですが,まあそれは置いといて.

 

 

\( p \) も \( q \) も1次元の正規分布とした場合,

\[ D_{\rm KL}(p\Vert q) = \frac{1}{2} \left( \frac{\sigma^2_p}{\sigma^2_q} + \frac{(\mu_p - \mu_q)^2}{\sigma_q^2} -\log{ \frac{\sigma^2_p}{\sigma^2_q} } - 1 \right) \]

となります.\( \mu_p, \mu_q \) は それぞれ \( p, q \) の平均, \( \sigma^2_p, \sigma^2_q \) は分散です.この式眺めてたら,分布のパラメータ(平均と分散)で微分できるなあ,そしたら,一方を固定して他方を勾配法で近づけられるなあ,とか思いまして.どんな動き方するんか眺めてみたくなりました.

 

とりあえず \( p \) を固定して \( q \) を動かすことにして,\( x = \mu_q, y = \log{\sigma^2_q} \)  とおくと,

\[ \frac{\partial D_{\rm KL}(p\Vert q)}{\partial x} =  -\frac{\mu_p - \mu_q}{\sigma^2_q}\]

\[ \frac{\partial D_{\rm KL}(p\Vert q)}{\partial y} = \frac{1}{2}\left( 1 - \frac{\sigma^2_p}{\sigma^2_q} - \frac{(\mu_p - \mu_q)^2}{\sigma^2_q} \right) \]

となりました.\( y \) をこんなふうにしたのは,\( \sigma^2_q = e^y \) として,\( y \) の動く範囲を制約しなくても \( \sigma^2_q > 0 \) となるようにするため.\( x \) の方は平均の差に応じて動く形やけど,\( y \) の方は分散の比に応じて動かす働きをする前の2項に加えて後ろに平均の差に関する項がついてます.

 

比較のために,パラメータ間のユークリッド距離でも目的関数を定義してみました.

\[ E(p,q) = \frac{1}{2} \left( (\mu_p - \mu_q )^2 + \left(\sqrt{\sigma_p^2} - \sqrt{\sigma_q^2}\right)^2 \right) \]

後ろ側は,分散の差を考えて \( (\sigma_p^2 - \sigma_q^2 )^2 \) とするよりも標準偏差の差にした方が,前の項とバランスがとれてええやろうとか思ってこうしました.すると,

\[ \frac{\partial E(p,q)}{\partial x} = - (\mu_p - \mu_q)\]

\[ \frac{\partial E(p,q)}{\partial y} = \frac{1}{2}\left( \sigma_q^2 - \sqrt{\sigma_p^2\sigma_q^2}\right)\]

となりました.当然ですが,KL-divergence の場合と違って平均と分散が独立に動くことになります.

 

というわけで,簡単なプログラムを書いて実験.パラメータ更新のステップ毎にグラフを描いてPNG画像を出力して,

$ convert hoge*.png hoge.gif

とかやって animation GIF にしてみました.

 

f:id:takatakamanbou:20160122100948g:plain

上の図は,KL-divergence を用いた場合.\( p \) は標準正規分布として,\( q \) のパラメータの初期値は \( \mu_q = 5, \sigma_q^2 = 10 \) としました.一度分散が大きくなってから左に移動しつつ分散を小さくしていってます.

 

f:id:takatakamanbou:20160122100949g:plain

一方,こちらはユークリッド距離を用いた場合.条件は上と同じ.平均と分散が単純にターゲットに近づいていってます.

 

とまあ,こんなんなりました.オチは特にありません (^^;

 

逃避はこの辺にして,はよ試験問題作らな...