疑似乱数生成器

決定的なアルゴリズムによって、統計的にはランダムに見える数列を生成する仕組み(PRNG)。設計思想・状態の持ち方・並列化のしやすさで系統立てて整理できるため、代表的なアルゴリズムをまとめるハブノート。

状態逐次更新型

  • Mersenne Twister — 1997年発表。624×32bitの大きな内部状態を「twist」操作で更新する。長らくの標準だったが、LinearComp検定の失敗など弱点も知られる。
  • PCG — 線形合同法(LCG)に出力permutationを加えた設計。状態サイズが小さく(典型64bit)、Mersenne Twisterより高速。
  • Xoshiro256** — Xorshift系列の後継。XOR・シフト・ローテートで256bit状態を更新し、非線形な出力スクランブルを加える。2128刻みでジャンプ可能。

カウンタベース型

  • Philox — 「カウンタ+鍵」のみを状態として持ち、暗号学的ハッシュに似た関数で直接出力を計算する無記憶な設計。任意のインデックスに直接ジャンプできるため並列計算との親和性が最も高く、TensorFlowのデフォルト生成器に採用。

選び方の傾向

状態逐次更新型(Mersenne Twister/PCG/Xoshiro256)は汎用用途で使われ、中でもPCG・Xoshiro256はMersenne Twisterより高速・高品質な後継として置き換えが進んでいる。カウンタベース型のPhiloxは、GPU/分散環境で「どのスレッドがどの範囲の乱数を生成するか」を厳密に制御したい場面(大規模並列シミュレーション、機械学習フレームワーク)で選ばれる。

#random #moc

作成日時: 2026-08-21 12:23 / 更新日時: 2026-08-21 12:23