Box-Muller変換
概要
Box-Muller 変換は、一様乱数を正規乱数に変える手法です。 独立な一様乱数のペアを入力すると、独立な標準正規乱数のペアが出力されます。 本アプリのすべてのガウスサンプリング(代表的には Robustness ウィジェットの入力ノイズ摂動)は、このサンプラーの上に載っています。
採用の理由は 3 つあります。 近似ではなく厳密であること、分岐がないこと、そしてアプリの決定論的な ChaCha8 ベース乱数生成器の上で再現性を確保しやすいことです。 特に最後の点は重要で、シードを固定することで同じ設定なら常に同じ解析結果が得られます。
数式
独立な一様乱数 に対して:
このとき であり、両者は独立です。
この構成は、極座標への変数変換です。 は半径の 2 乗に自由度 2 のカイ二乗分布(標準 2 変量正規分布における の分布)を与え、$\Theta = 2\pi U_2$ は角度を一様に選びます。 半径と角度をそれぞれ正しい分布から独立に引くことで、ペア を直交座標へ戻すだけで独立な標準正規乱数が 2 つ得られます。
平均 、標準偏差 の一般のガウスサンプルは、スケールとシフトで得ます: 。 たとえば Robustness ウィジェットの入力ノイズは、$\mu = 0$、$\sigma$ を各パラメータの宣言レンジに対する割合として与えたものです。
特性・限界
- 厳密:出力は(浮動小数点誤差を除き)正規分布に厳密に従います。一様乱数 12 個の和のような近似法とは異なります。
- 定義域への配慮:$\ln U_1$ は を要求します。基盤の生成器は の値を返すため、Tunny Dashboard は対数に ( の範囲)を渡し、生の値がちょうど でも が発生しないようにしています。
- 本アプリは余弦側( )のみを使い、$Z_1$ は捨てています。効率は半分になります。ですが を次の呼び出しまで持ち越す状態を抱えずに済むため、呼び出しが単純になります。解析あたり数千サンプル程度の規模では、このコストは無視できます。
- 再現性:シード付き ChaCha8 乱数生成器で駆動されるため、同じシードなら常に同じガウス列が得られます。ロバスト性解析の結果が設定固定で決定論的になるのは、この性質によるものです。同じ候補設計を 2 回解析しても統計量は動きません。これにより、2 つの候補の分布を並べて比較する使い方が成立します。
- 裾の挙動は、$1$ 近傍での の分解能に制限されます。53 ビット倍精度では到達可能な最大の は約 です。ここで扱うサンプル数は最大でも 4096 なので、この制限が問題になることはほとんどありません。
アプリ内での利用箇所
- Robustness ウィジェット:候補設計点まわりのガウス入力ノイズ摂動の生成と、("Model uncertainty" 有効時の)GP 事後分布からのドローに使われます。
参考文献
- Box, G. E. P., & Muller, M. E. (1958). A Note on the Generation of Random Normal Deviates. Annals of Mathematical Statistics, 29(2), 610–611. https://doi.org/10.1214/aoms/1177706645