モンテカルロのための並列メルセンヌツイスター


10

最近、モンテカルロ法を行うほとんどすべての研究者が間違っていると主張するコメントに出くわしました。Mersenne TwisterなどのPRNGのインスタンスごとに異なるシードを選択するだけでは、悪い衝突が発生する可能性があるため、公平な結果を保証するには不十分であるとさらに説明しました。メルセンヌツイスター上のWikipediaの記事を裏付けるようです:

複数のパラメーター値のセットを選択する方法はありますが、シード値のみが異なる(他のパラメーターは異なる)複数のMersenne Twisterインスタンスは、独立した乱数ジェネレーターを必要とするモンテカルロシミュレーションには一般的に適していません。

私は認めなければならない、私は起訴されたように有罪です。しかし、これまでに見てきた他のすべての並列モンテカルロライブラリの実装、特にALPSも同様です。

ウィキペディアの記事では、救済策を提供する2つの論文も参照しています。

どちらの方法も、メルセンヌツイスターアルゴリズムの原作者である松本と西村によって共同開発されました。

私は、数論や代数についてあまり知識がなく、上記のスキームやメルセンヌツイスターの背後にある数学を完全には理解していません。私の質問は主に実用的な性質のものです:

  • そのようなスキームを採用していない場合、実際に(少なくとも私のコミュニティでは)誰もそれを気にしない場合、シミュレーションにバイアスを導入することについて本当に心配する必要がありますか?
  • これらの対策の1つを実装した場合、Jump-Aheadは確固たる理論に基づいており、より近代的な方法であるため、Jump-Aheadの方が適していると思いますか?

1
この質問はMTに固有のものではありませんか?他のPRNGは、Pierre L'Ecuyerの他の研究で説明されているように、独立したストリームを生成するかなり単純な方法を持っています(特にiro.umontreal.ca/~lecuyer/myftp/papers/parallel-rng-imacs.pdfなどの彼の調査を参照してください)。
キリル

はい、それはMTにいくらか特有です。私はこれまでMCシミュレーションでMTを使用しただけで、同僚からは少し高価ですが最も安全なオプションと見なされています。これが一般的に当てはまるかどうかはわかりませんが、私が太刀打ちしたものです。
Jonas Greitemann 16

回答:


8

あなたが言うように、並列計算にMersenne Twisterを使用することは、正しい方法を実装するのが難しいため、ほとんどの場合、正しく行われません。

はるかに簡単で最良の答えは、Mersenne Twisterから完全に離れて、箱から出して複数のストリームを提供するPCGファミリーのようなものを使用することです。

メルセンヌツイスターは、いくつかの統計的検定失敗することが知られていますが、PCGやXorShift +ファミリーなどの新しいRNGよりも低速です。

Mersenne Twisterが今日非常に広く使用されている理由は、主にパフォーマンスと品質の両方でRNGが大幅に悪化する前の結果です。また、元の作者が高性能な実装をオープンソース化したことにも役立ちました。


2
リンクしている論文では、MTはビットストリームの2つの線形複雑度テストに失敗しただけなので、その失敗が必ずしも使用に不適格であるとは限らず、影響を受けない多くのアプリケーションがあると思いますその特定の種類の失敗。
キリル

もちろん。多くのアプリケーションに最適です。古いアプリケーションの場合、MTから変更することはほとんどの場合無駄な作業です。ただし、新しいもの、または乱数の複数のストリームを必要とするアプリケーションの場合、それを使用する理由はありません。
LKlevin

1
PCGジェネレーターは素晴らしいサウンドです。本当であるにはほとんどあまりにも良い。多分それは科学的な懐疑論の過剰摂取であるかもしれないし、あるいは多分それはウェブサイトの重い売り込みです。いずれにせよ、それはかなり新しいです。その主張を裏付ける独立した調査はありますか?
Jonas Greitemann 16

1
彼らはPCGに対して非常に重い売り込みを行っていますが、それはメルセンヌツイスターから継承されたものでもあります。見xorshift +別のグループが同じことをやって参照するには、ホームページ。サードパーティについては、PCGグループとは何の関係もないので、私は数えると思います。また、彼らの主張を徹底的に検証しました(自分のRNGを証明しようとしている)。PCGでTestU01を自分で実行して、要求をテストすることもできます。
LKlevin

私のアプリケーション/ハードウェアではxorshift+、「同等の」PCGジェネレーターの約2倍の速度であることがわかったので、速度が重要な場合は両方を試してください。メインのPCGコードには、非常に軽量なxorshift+コードと比較して、多くの機能が組み込まれています。
horchler 2016


1

実際には、シミュレーションバイアスについての質問と、それがアプリケーションで受け入れられるかどうかにのみ答えることができます。私が使用する標準的な手順:

多数のシミュレーションを使用して、疑似ランダムシーケンスをベンチマーク(標準モンテカルロ)として設定します(リスク管理では10,000がよく使用されますが、他のフィールドでは100,000〜1Mが使用される場合があります)。

データのサブセットの同じ入力データに対してRNGを実行します(1年を使用しますが、多くの場合過剰です)。

結論/意思決定に実際に使用するデータの特徴を説明する統計を使用して結果を比較します。パーセンタイル(1、5、25、50、75、95、99)、絶対誤差、誤差の標準偏差を使用します。これらはすべて、ベンチマークに関連しています。

これで分析が完了したので、RNGバイアスが受け入れ可能かどうかについて、独自の判断を使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.