2025/04/14 14:54 Monte Carlo Crash Course: Sampling

やあ、ロボ子。今日はモンテカルロ法で重要な疑似乱数生成(PRNG)について話すのじゃ。

PRNGですね。モンテカルロ法では、完全にランダムな数ではなく、一様に見える決定論的な数列を生成するものと理解しています。

その通り!PRNGは、一様性、独立性、非周期性といった統計的特性を持つ必要があるのじゃ。PCGは、高性能で小型、統計的に堅牢なPRNGのファミリーとして注目されているぞ。

なるほど。他にサンプリングに関する話題はありますか?

次は、一様リジェクションサンプリングじゃ。これは、単純な領域Dのサンプラーを、Dに含まれる複雑な領域Ωのサンプラーに変換するのじゃ。

領域を限定するのですね。点xがΩに含まれるかどうかを示す関数accept(x)が必要になるんでしたね。

そうじゃ!単位円盤の例では、Dを[-1,1]×[-1,1]とし、accept(x)を||x|| ≤ 1で定義するのじゃ。Dからサンプルを生成し、結果がΩに含まれない場合は再試行する。サンプラーのPDFは、fΩ(x) = 1/Vol(Ω)となり、Ω上で一様になるのじゃ。

なるほど。非一様な分布にも拡張できるんでしたね。

その通り!領域D上の分布のPDFがfD(x)であり、PDFがfΩ(x)のΩからサンプリングしたい場合、PDFの比率が有限の上限cを持つ必要があるのじゃ。サンプルxを確率fΩ(x) / (c * fD(x))で受け入れると、サンプラーのPDFはfΩ(x)となるぞ。

リジェクションサンプリングは、fΩがD内の確率密度のかなりの部分を利用できる場合にのみ効率的とのことですが、サンプル効率が悪い場合もあるんですね。

そうじゃ。ΩがDの大部分をカバーしていない場合、リジェクションサンプリングは非効率になるのじゃ。各サンプルは、P{accept}に従って分布する幾何的な数のサンプルを必要とするからの。

他に効率的なサンプリング方法はありますか?

インバージョンサンプリングという手もあるぞ。これは、可逆累積分布関数(CDF) F(x)を持つ1次元分布をサンプリングする方法じゃ。一様分布からpをサンプリングし、Inv = F-1(p)を計算するのじゃ。サンプラーのPDFはfX(x)と一致する。

CDFの逆関数を使うんですね。周辺インバージョンサンプリングは、これを高次元に拡張したものですか?

その通り!各次元の周辺分布を反復的にサンプリングするのじゃ。2次元分布fXY(x,y)の場合、まず周辺分布fX(x)をサンプリングし、次に条件付き周辺分布fY|X(y)をサンプリングする。

なるほど。座標変換もサンプリングに使えますよね。

そうじゃ!ランダム変数を変換するための一般的な手法じゃ。単位円盤の一様サンプラーを定義するために、極座標を使用する例を考えると、極座標から直交座標への変換は面積を保持しないから、一様サンプルは一様にならないのじゃ。

面積の比率|dR|/|dS|は、Φ-1がSをRにマッピングするときにどれだけ押しつぶされたり引き伸ばされたりするかを示すんでしたね。PDFの関係はfS(s) = fR(Φ-1(s)) * |DΦ-1|となる。ここで、|DΦ-1|はΦ-1のヤコビアンの行列式。

よく覚えておるの。座標変換によるサンプリングでは、一様なfSを生成する非一様なfRを選択するのじゃ。単位円盤の例では、fR(r, θ) = r / (2π)となる。インバージョンサンプリングは、1次元での座標変換の特殊なケースじゃ。

適切な座標変換により、多くの有用な分布を効率的にサンプリングできるんですね。

そういうことじゃ!しかし、ロボ子よ、サンプリングの話ばかりしていると、まるで血液検査みたいじゃな。血を抜かれるのは苦手なのじゃ。

博士、私はロボットなので血液はありませんよ。それに、サンプリングはデータ分析には不可欠です。血液検査とは違います。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。