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

Coursera現況

Courseraの今週の課題は期限的にかなり厳しく、未完成のまま提出することも頭をよぎったのだが、ここで手を抜くと自分の性格上後半でサボることになると判断しクソ粘りを発揮した。結果、不完全ではあろうものの、最後まで課題をこなして提出することができた。


今週は一般化された高次空間におけるサンプリングと積分の関係について、いつも通りpythonプログラムを作りながら考えるという内容だった。
d次元空間を考える。d次元空間内の一点はd個の座標の組で指定されるので、これを(x[0], x[1],..., x[d-1])などとする。d個の各座標成分について、領域[-1,1]の直積として高次立方体を定義することができる。また、次のような方程式でd次元に一般化された球のようなオブジェクトを考えることも可能である:
 x_{0}^{2}+x_{1}^{2}+\cdots x_{d-1}^{2}<1
よく大学の授業なんかの導入で、単位円に外接する正方形を考え、正方形の中にサンプリング点を落としていくという例が紹介される。そこでは円の中に落とされたサンプリング点の数の全体に対する割合が円周率になっている、という理屈なのだけど、ナイーブにそれと同じことをこの一般化された球に対して行おうとすると大変なことになる。
一般化された単位円の内側にサンプリング点が落ちる確率を計算してみれば、言わんとすることが分かると思う。このためには球の体積を計算すればよい。これは実は \pi^{d/2}/\Gamma (d/2 + 1)と表されることが知られている。Γはガンマ関数である。わからなければ微分積分学の教科書にgo backしてほしい。ちなみに一般化球の体積の導出は、ネットにも転がっているが、ベータ関数とかガンマ関数とかを使うと、それらの多くよりずっとスマートに導出できる。
この体積は、次元dが大きくなるとこれは指数(より強い)的に小さくなる。対数をとってみるとわかりやすいと思う。
 \ln (\pi^{\frac{d}{2}}/\Gamma (\frac{d}{2} + 1)) = \frac{d}{2}\ln (\pi) - (\frac{d}{2}-1)\ln (\frac{d}{2}-1)。じっさいこれはかなり小さい数である。たとえばd=200とかになると、一般化球の体積は~10^(-147)であって、これだけのサンプル数を取ることは不可能だ。
ではどうすれば良いか?マルコフ連鎖モンテカルロの出番である。まさに真打ち登場。