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情報量が負の値になってしまうことがあり論文などに記載するとすぐ突っ込まれそうで悩んでしまいます.このとき、下記のように式変形してから
$${\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)| }$$
なので計算結果はいつも正となるからです.
この記事が気に入ったらサポートをしてみませんか?