人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

重点サンプリング (3)

重点サンプリング (2)(2014/9/21)のつづき。前回からけっこう日があいてしまったが、予定どおり重点関数をいろいろ変えたときにモンテカルロ積分の収束性がどのように変わるか検証した。 対象とする積分は下の式。通常のモンテカルロ積分では、平均0、標準偏差1の標準正規分布 f(x) からサンプリングするがそれだとほとんどのサンプルが使われなくなり積分が0になってしまう点が問題となっていた。

 \displaystyle \int_{-\infty}^{\infty} I(x \geq 5) N(x;0,1) dx

重点サンプリングでは、オリジナルの標準正規分布 f(x) の代わりに重点関数 g(x) からサンプリングして以下の値で積分を近似する。

 \displaystyle \bar{h}_{m} = \frac{1}{m} \sum_{j=1}^{m} \frac{f(x_j)}{g(x_j)} h(x_j)

以下の6つの正規分布を重点関数 g(x) として収束速度を調べてみた。

  • 平均0、標準偏差1の正規分布(オリジナルの分布と同じ)
  • 平均5、標準偏差1の正規分布
  • 平均10、標準偏差1の正規分布
  • 平均0、標準偏差3の正規分布
  • 平均5、標準偏差3の正規分布
  • 平均10、標準偏差3の正規分布

f:id:aidiary:20141002221521j:plain

結果は、下のようなグラフになる。青色は scipy.integrate で求めた値で理論値にかなり近い積分値である。

f:id:aidiary:20141002222434p:plain

この結果を考察してみると・・・

平均0、標準偏差1の場合は、ほとんどのサンプルが5以上の値を取ることがなくh(x)=0 となってしまい、いくらサンプリングしても積分が0のままであることがわかる。前回、実験したように被積分関数にほどよく重なる平均5、標準偏差1のようにすると非常に早く理想値に収束する。ただし、平均10、標準偏差1の結果を見るとわかるように被積分関数と重なるからと言って、オリジナルの分布 f(x) から遠く外れていると、今度は f(x)=0 となってしまい積分が0のままになる。下の段のように標準偏差を少し広げて、被積分関数とオリジナルの関数の両方に少しずつ重なるようにしてやると積分が0になってしまう問題が緩和されている。

何となくどんな重点関数を選べばよいのかわかってきたけれど、最適な重点関数の決め方はあるのだろうか?3.3.3節の説明によると理論的に最適な重点関数を決める定理があるらしいのだが、実用性は低いので上のように推定量の分散で収束性を判断するのが一般的のようだ。

次回は、Rによるモンテカルロ法入門に出てくる例と練習問題を解いていきたい。あともっとこまめに更新したい・・・