数学編 第32回 乱数生成 ― 逆関数法と Box-Muller 法

位置: 数学編 第32回 / 前提: M15 / 数学編: なし / この回でできるようになること: 一様乱数から、逆関数法と Box-Muller 法で正規乱数を作ることができる
0. 物語 ― 0が出ると対数が発散する
くじ引きで「はずれ」を引くのは、よくあることです。しかし「ゼロ」と書かれた特別な札を引いた瞬間に、ゲームそのものが壊れてしまうとしたらどうでしょうか。コンピュータで乱数を作るとき、まさにそういうことが起こります。
コンピュータがまず用意できるのは、ゼロから1までの数をでたらめに出す仕組みです。サイコロの目のように偏りのない乱数で、これを一様乱数と呼びます。しかし、金融の計算で大量に必要になるのは、つりがね型をした別の種類の乱数です。コンピュータはつりがね型の乱数を直接は作れません。一様乱数を数学的に加工して、つりがね型に変換する必要があります。
変換の方法の一つに、2つの一様乱数を組み合わせて、2つのつりがね型の乱数を同時に作る手法があります。この手法では、片方の一様乱数の対数を途中で計算します。ところが、もしその乱数がちょうどゼロだったら、ゼロの対数は計算できません。値が際限なくマイナスに発散して、変換後の値も際限なく大きくなり、計算全体が使い物にならなくなります。
だから、一様乱数を作る範囲にゼロを含めてはいけません。「端を含む」範囲ではなく「端を含まない」範囲で乱数を取る必要があります。たった1つの値を除外するだけのことですが、それを忘れると結果が丸ごと壊れます。
この回では、一様乱数からつりがね型の乱数を作る2つの方法を証明します。そして、乱数の作り方の質が悪いと何が起こるかを、数値で確かめます。
1. 動機 ― コンピュータで正規分布をどう作るか
この回を読み終えると、一様乱数から、逆関数法と Box-Muller 法で正規乱数を作ることができます。
金融の計算では、正規分布に従う乱数が大量に必要になります。たとえば株価の将来の動きを何万回もシミュレーションするとき(モンテカルロ法と呼ばれ、本編第96回で扱います)、そのたびに正規乱数を生成しなければなりません。
しかし、コンピュータが直接作れる乱数は
この記事で証明すること
- THM-M32-1 一様乱数に分布関数の逆関数を適用すると、目的の分布に従う乱数が得られます(逆関数法)。
- THM-M32-2 2つの独立な一様乱数から、独立な2つの標準正規乱数を同時に作れます(Box-Muller 法)。
- THM-M32-3 決定的な漸化式で作る擬似乱数には周期があり、生成法によっては高次元で規則的な構造が現れます。
2. 設定と仮定 ― 一様乱数から出発する
コンピュータの乱数生成は、次の2段階で構成されます。
- 第1段階: 決定的な漸化式(擬似乱数生成器)で
上の一様乱数を作る。 - 第2段階: 一様乱数を数学的に変換して、目的の分布に従う乱数を作る。
第1段階の最も単純な例は線形合同法です。
ここで
この方法は決定的なので、同じシードからは同じ列が出ます。周期は最大でも
以下では次の仮定を置きます。
, , は 上の一様分布に従う確率変数とします。 と は独立とします。 - 分布関数
は右連続で単調非減少、 , を満たします。
一様乱数さえあれば、変換でほとんどの分布が作れます。問題はその変換をどう構成するかです。
3. 主張 ― 逆関数と変数変換で分布を変えられる
定理 THM-M32-1(逆関数法)
が 上の一様分布に従い、 が分布関数であるとする。一般化逆関数を と定義すると、
は分布関数 を持つ確率変数である。
逆関数法は「一様乱数を分布関数の逆関数に通すだけで、目的の分布が得られる」という強力な結果です。ただし、すべての分布で逆関数が閉じた形で書けるとは限りません。
定理 THM-M32-2(Box-Muller 法)
, が独立に 上の一様分布に従うとする。 とおくと、
と は独立に標準正規分布 に従う。
定理 THM-M32-3(擬似乱数の周期と相関) 線形合同法 (1.1) のように決定的な漸化式で作る擬似乱数には、
以下の周期がある。さらに、3次元以上の空間に連続する出力を並べると、点は有限個の超平面上にしか存在しない。
定理 THM-M32-3 は Marsaglia の定理として知られています。周期の短い生成器ほど、平面の枚数が少なくなり、規則的な構造が目立ちます。
証明を読む(読まなくても記事は完結します)
4. 証明 ― 変数変換の公式でヤコビアンを計算する
この節は読まなくても記事は完結します。
この証明を追いたい人は、数学編 第15回「変数変換とヤコビアン」へ。
THM-M32-1 の証明
一般化逆関数の定義から、次の同値関係が成り立ちます。
これを確認します。
(2.1) を使って
2行目は (2.1) の同値関係を適用しました。
が成り立ちます。一様分布の分布関数が
したがって
THM-M32-2 の証明
Box-Muller 法の証明は、極座標への変数変換とヤコビアンの計算で行います。
ステップ1: 変数変換の設定。
と置きます。すると
ステップ2:
3行目では、
したがって
です。これはレイリー分布です。
ステップ3: 極座標から直交座標への変数変換。
ヤコビアンを計算します。
行列式は
三角関数の基本恒等式
ステップ4: 同時密度を計算する。
ここで
を得ます。これは
と因数分解できます。右辺は標準正規密度
THM-M32-3 の証明(要点)
線形合同法 (1.1) の状態空間は
Marsaglia(1968)は、線形合同法の連続
5. 反例 ― 質の悪い乱数は平面に並ぶ
CEX-M32-1: 正規分布には逆関数法が直接使えない
逆関数法は強力ですが、分布関数の逆関数が閉じた形で書ける場合にしか直接使えません。指数分布の場合は
しかし、標準正規分布の分布関数
は初等関数で表すことができません。したがって
CEX-M32-2: 周期の短い線形合同法は3次元で破綻する
先頭の5組を見ると
| 1 | 22 | 207 | 252 |
| 2 | 207 | 252 | 173 |
| 3 | 252 | 173 | 50 |
| 4 | 173 | 50 | 27 |
| 5 | 50 | 27 | 56 |
これらの点は
質の悪い乱数を使っても結果は変わらない、という理解は誤りです。高次元の構造が計算結果を歪めます。
CEX-M32-3: 一様乱数に 0 が含まれると計算が壊れる
Box-Muller 法では
となり、
実装では np.clip(U1, 1e-300, 1.0) のように下限を設けるか、
6. 数値例 ― 正規乱数を作って検定する
compute.py で実際に乱数を生成し、理論値と比較します。
逆関数法による指数分布
| 統計量 | 標本値 | 理論値 |
|---|---|---|
| 平均 | ||
| 分散 |
標本値は理論値に十分近く、逆関数法が正しく機能していることが確認できます。
Box-Muller 法による標準正規乱数
独立な一様乱数の組
| 統計量 | 理論値 | ||
|---|---|---|---|
| 平均 | |||
| 分散 | |||
| 歪度 | ― | ||
| 尖度 | ― |
すべての統計量が理論値の近傍にあり、Box-Muller 法が正しく標準正規乱数を生成していることが確認できます。
7. 次回へ ― 本編に戻って読む
数学編はこの第32回で一巡します。ここまでに扱った道具――測度、積分、確率変数、確率微分方程式、そして今回の乱数生成――は、本編の各回で前提として参照されます。本編の議論で数学的な基礎に立ち返りたくなったとき、対応する数学編に戻って読めるように設計されています。
本編第96回では、今回の乱数生成を使って金融商品の価格を計算する方法を扱います。
よくある質問
コンピュータの乱数は本当にランダムですか
ランダムではありません。決まった規則で作られますが、統計的にランダムに見えるように設計されています。
なぜ一様乱数から始めるのですか
一様乱数さえあれば、変換でほとんどの分布が作れるからです。
Box-Muller 法は今も使われていますか
使われています。より速い方法もありますが、考え方の基本として重要です。
参考文献
- Glasserman P.、Monte Carlo Methods in Financial Engineering、Springer、2004年
- Knuth D. E.、The Art of Computer Programming Volume 2 ― Seminumerical Algorithms、第3版、Addison-Wesley、1997年
数値例は compute.py によりシード固定で検算済み。

