見出し画像

KL情報量をプログラムで計算するとき

機械学習の理論解析などで真の分布$${q(x)}$$を仮定しているときなどKL情報量をプログラム的に計算したいことがあります。理論的にはKL情報量は

$${K(q(x)||p(x))=0}$$

なのですが数値的に求める場合はデータを$${q(x)}$$から生成して

$${\frac{1}{n}\sum_{i=1}^n \log \frac{q(x)}{p(x)}}$$

で計算を行います.このときデータの出かたによってはKL情報量が負の値になってしまうことがあり論文などに記載するとすぐ突っ込まれそうで悩んでしまいます.このとき、下記のように式変形してから

KL情報量の式変形

$${\frac{1}{n}\sum_{i=1}^n \left\{ \frac{p(x)}{q(x)}-1-\log \frac{p(x)}{q(x)}  \right\} }$$

を計算するとうまくいきます.この変形はうまく出来ていて$${g(x)=\frac{p(x)}{q(x)}}$$とおけば

$${\frac{1}{n}\sum_{i=1}^n \left\{ g(x)-1-\log g(x) \right\} }$$

を計算することになるのですが下図のように$${g(x)>1}$$のときは

$${g(x)-1 >\log g(x) }$$

となり、$${g(x)<1}$$のときは$${g(x)-1,\log g(x) < 0}$$でかつ

$${|g(x)-1| < |\log g(x)| }$$

なので計算結果はいつも正となるからです.

$${y=x-1,y=\log x}$$のグラフ


この記事が気に入ったらサポートをしてみませんか?