Perché il Mersenne Twister è considerato buono?


39

Il Mersenne Twister è ampiamente considerato buono. Diamine, la fonte CPython afferma che "è uno dei generatori più ampiamente testati esistenti". Ma cosa significa? Quando viene chiesto di elencare le proprietà di questo generatore, la maggior parte di ciò che posso offrire è negativo:

  • È massiccio e poco flessibile (ad es. Nessuna ricerca o flussi multipli),
  • Non supera i test statistici standard nonostante le enormi dimensioni dello stato,
  • Ha seri problemi intorno a 0, suggerendo che si randomizza piuttosto male,
  • È appena veloce

e così via. Rispetto ai semplici RNG come XorShift *, è anche irrimediabilmente complicato.

Quindi ho cercato alcune informazioni sul perché questo fosse mai stato considerato buono. L'articolo originale fa molti commenti sul periodo "super astronomico" e sull'equidistribuzione a 623 dimensioni

Tra le molte misure note, i test basati sull'uniformità dimensionale superiore, come il test spettrale (cfr. Knuth [1981]) e il test di distribuzione k, descritti di seguito, sono considerati i più forti.

Ma, per questa proprietà, il generatore è battuto da un contatore di lunghezza sufficiente! Questo non fa commenti sulle distribuzioni locali , che è ciò di cui ti preoccupi in un generatore (anche se "locale" può significare varie cose). E anche i CSPRNG non si occupano di periodi così grandi, dal momento che non è solo lontanamente importante.

Ci sono molti calcoli nel documento, ma per quanto ne so poco si tratta in realtà della qualità della casualità. Praticamente ogni menzione di ciò passa rapidamente a queste affermazioni originali, in gran parte inutili.

Sembra che le persone siano saltate su questo carro a spese di tecnologie più vecchie e più affidabili. Ad esempio, se aumenti il ​​numero di parole in un LCG a 3 (molto meno del "solo 624" di un Mersenne Twister) e produci la parola in cima a ogni passaggio, passa BigCrush ( la parte più difficile della suite di test TestU01 ), nonostante il Twister non riesca ( carta PCG, fig. 2 ). Alla luce di ciò, e delle deboli prove che sono stato in grado di trovare a sostegno del Mersenne Twister, che cosa ha suscitato attenzione per favorirlo rispetto alle altre scelte?

Anche questo non è puramente storico. Mi è stato detto per inciso che il Mersenne Twister è almeno più provato in pratica che, diciamo, PCG casuale . Ma i casi d'uso sono così esigenti da poter fare meglio delle nostre batterie di test? Alcuni googling suggeriscono che probabilmente non lo sono.

In breve, mi chiedo come il Mersenne Twister abbia ottenuto la sua diffusa reputazione positiva, sia nel suo contesto storico che in altro modo. Da un lato sono ovviamente scettico sulle sue qualità, ma dall'altro è difficile immaginare che si sia trattato di un evento del tutto casuale.


2
Penso tu abbia ragione. Mersenne Twister non è niente di particolarmente speciale. È solo ben noto (e molti degli altri PRNG ben noti sembrano essere peggiori). Ci sono altri PRNG che sono anche abbastanza buoni. Per un PRNG ancora migliore, si può usare un PRNG crittografico. Non sono sicuro di quale tipo di risposta si possa dare, oltre a "non c'è niente di sbagliato nel tuo ragionamento".
DW

1
Penso che la domanda che dovresti porre non sia se MT sia buono (dato che lo è, secondo molte metriche), ma perché è più comunemente usato rispetto alle alternative come PCG o XorShift. La risposta è probabilmente che è in circolazione da più tempo ed è stato il miglior default ragionevole per molto tempo (negli anni di Internet).
Pseudonimo del

1
@vzn "Un'altra considerazione è il tempo di generazione; la" qualità "dei PRNG va a scapito del tempo di esecuzione" → Tranne il fatto che il Mersenne Twister è più lento e peggiore di un LCG risonabilmente grande. Vedere la Fig. 16 nella carta PCG. (A proposito di aver letto il documento: ho letto la maggior parte delle parti non matematiche della carta Mersenne Twister in dettaglio e tutta la carta casuale PCG. Per lo più ho scremato il terzo, però.)
Veedrac

1
Stai parlando di XorShift o degli algoritmi KISS?
gnasher729,

1
@ gnasher729 Cito XorShift *, ma in realtà non sono specifico per una particolare alternativa. Non sapevo di KISS, FWIW.
Veedrac,

Risposte:


15

MT è stato considerato buono per alcuni anni, fino a quando non è stato scoperto che è piuttosto male con i test BigCrush TestU01 più avanzati e PRNG migliori.

La tabella su pcg-random.org, ad esempio, offre una buona panoramica delle caratteristiche di alcuni dei PRNG più utilizzati, in cui l'unica "buona" caratteristica del Mersenne Twister è l'enorme periodo, e la possibilità di usare un seme (Riproducibile Risultati), supera i test SmallCrush TestU01 semplici e veloci, ma non supera alcuni dei più recenti test statistici di qualità, esp. TestU01's LinearComp Test e TestU01's Crush and BigCrush Batteries.2219.937

Questa pagina elenca in dettaglio le funzionalità di Mersenne-Twister:

Qualità positive

  • Produce numeri a 32 o 64 bit (quindi utilizzabili come sorgente di bit casuali)
  • Supera la maggior parte dei test statistici

Qualità neutre

  • Periodo straordinariamente vasto di 2219.937-1
  • 623 equidistribuito dimensionalmente
  • Il periodo può essere partizionato per emulare più flussi

Qualità negative

  • Non supera alcuni test statistici, con solo 45.000 numeri.
  • Prevedibile: dopo 624 uscite, possiamo prevederne completamente l'uscita.
  • Lo stato del generatore occupa 2504 byte di RAM - al contrario, un generatore estremamente utilizzabile con un periodo più grande di chiunque possa mai usare può contenere 8 byte di RAM.
  • Non particolarmente veloce.
  • 2219.937
  • Irregolare nella sua produzione; il generatore può entrare in "cattivi stati" da cui è lento recuperare.
  • Le semenze che differiscono solo leggermente richiedono molto tempo per divergere l'una dall'altra; la semina deve essere fatta con cura per evitare cattivi stati.
  • Mentre il salto in avanti è possibile, gli algoritmi per farlo sono lenti da calcolare (cioè richiedono diversi secondi) e raramente forniti dalle implementazioni.

Riepilogo : Mersenne Twister non è più abbastanza buono, ma la maggior parte delle applicazioni e delle librerie non ci sono ancora.


7
Grazie per il bel riassunto! Tuttavia, sono preoccupato che l'unica fonte apparente per il tuo post sia un sito Web che è effettivamente un annuncio pubblicitario per un'altra famiglia di generatori di numeri casuali che non è ancora stata sottoposta a revisione paritaria. Il sito Web stesso non offre alcun riferimento per le voci, ma l'articolo proposto sembra contenere molti. Quindi, penso che tu possa migliorare la tua risposta al contesto qui (critica di MT) fornendo riferimenti per i singoli punti.
Raffaello

10
2219.937295×2219.9372219.945

1
"Prevedibile": MT non è inteso come un PRNG crittografico, quindi modifica la risposta.
Jason S,

"Mersenne Twister non è più abbastanza buono": cosa si consiglia se la sicurezza non è un problema, impostare un seme è importante e anche la velocità è importante? (Mersenne è stata abbastanza veloce)
Martin Thoma

8

Sono l'editore che ha accettato il documento MT in ACM TOMS nel 1998 e sono anche il progettista di TestU01. Non utilizzo MT, ma principalmente MRG32k3a, MRG31k3p e LRSR113. Per saperne di più su questi, su MT e su cos'altro c'è, puoi guardare i seguenti documenti:

F. Panneton, P. L'Ecuyer e M. Matsumoto, `` Generatori a lungo termine migliorati basati su ricorrenze lineari Modulo 2 '', ACM Transactions on Mathematical Software, 32, 1 (2006), 1-16.

P. L'Ecuyer, `` Random Number Generation '', capitolo 3 del Manuale di statistiche computazionali, JE Gentle, W. Haerdle e Y. Mori, eds., Seconda edizione, Springer-Verlag, 2012, 35-71 . https://link.springer.com/chapter/10.1007/978-3-642-21551-3_3

P. L'Ecuyer, D. Munger, B. Oreshkin e R. Simard, `` Numeri casuali per computer paralleli: requisiti e metodi '', Mathematics and Computers in Simulation, 135, (2017), 3-17. http://www.sciencedirect.com/science/article/pii/S0378475416300829?via%3Dihub

P. L'Ecuyer, `` Generazione di numeri casuali con flussi multipli per computer sequenziali e paralleli '', ha invitato il tutorial avanzato, Atti della Conferenza sulla simulazione invernale 2015, IEEE Press, 2015, 31-44.


3
Grazie per la tua risposta! Ti dispiacerebbe aggiungere qualcosa alla domanda? 1) Perché hai pensato che MT fosse buono (o almeno degno di pubblicazione) allora? 2) Perché non pensi che sia abbastanza buono per l'uso?
Raffaello

Grazie per aver aggiunto quel prezioso contesto storico. Sono anche curioso delle domande di Raffaello e dei tuoi pensieri personali quando hai accettato il documento.
Veedrac,

5

Un po 'come gli algoritmi di ordinamento in questo senso, non esiste un PRNG "taglia unica". Quelli diversi vengono utilizzati per scopi diversi e esiste un'ampia varietà di criteri e usi di progettazione. È possibile applicare erroneamente i PRNG, come ad esempio utilizzarne uno per la crittografia per cui non è progettato. La voce di Wikipedia su Mersenne Twister menziona anche che non è stato progettato per "simulazioni Monte-Carlo che richiedono generatori di numeri casuali indipendenti".

Come notato su Wikipedia, questo PRNG è effettivamente utilizzato in un gran numero di linguaggi e applicazioni di programmazione anche come PRNG predefinito. Ci vorrebbe un'analisi quasi sociologica per spiegare perché un PRNG è favorito. Alcuni possibili fattori che potrebbero contribuire a questo PRNG:

  • L'autore ha buone / forti credenziali scientifiche nell'area e lavora nei PRNG da decenni.

  • È stato specificamente progettato per essere superiore ad altri metodi al momento.

  • L'autore è impegnato nelle implementazioni e nel rintracciarle, contribuendo anche a esse. Alcuni PRNG sono più teorici e gli autori non si occupano sempre di implementazioni reali.

  • Il sistema è ben supportato / aggiornato su una pagina Web.

  • Sono state sviluppate nuove versioni del PRNG per affrontare i punti deboli. Non esiste un singolo algoritmo di Mersenne Twister, è più simile a versioni diverse e una famiglia di varianti in grado di gestire esigenze diverse.

  • È stato ampiamente analizzato / testato da un software standard di analisi della casualità e approvato da autorità indipendenti.

  • Esiste un effetto noto misurato per i siti Web e molti altri contesti come citazioni scientifiche chiamate "attaccamento preferenziale" che possono essere misurati. Fondamentalmente è dove fonti storiche consolidate accumulano ulteriore utilizzo. Un tale effetto potrebbe spiegare le scelte del PRNG nel tempo.

In altre parole, ti stai chiedendo di un fenomeno di "popolarità" che è associato e correlato alle scelte umane e non è strettamente legato a qualità particolari, ma è una sorta di proprietà complessa / emergente e di interazione tra diversi algoritmi, utenti e ambiente / contesti di utilizzo.

Ecco una simile analisi indipendente dell'algoritmo Mersenne Twister - Un pseudo generatore di numeri casuali e le sue varianti di Jagannatam (15p). Il paragrafo conclusivo è essenzialmente una risposta alla tua domanda. citando solo i 1 st poche frasi:

Mersenne Twister ha teoricamente dimostrato di essere un buon PRNG, con un lungo periodo e un'alta equidistribuzione. È ampiamente utilizzato nei settori della simulazione e della modulazione. I difetti riscontrati dagli utenti sono stati corretti dagli inventori. MT è stato aggiornato, per essere utilizzato e compatibile con le nuove tecnologie emergenti di CPU come SIMD e condutture parallele nella sua versione di SFMT.


2
Grazie. Alcune delle cose che stai dicendo sembrano piuttosto vaghe, tuttavia, come "All'epoca era specificamente progettato per essere superiore ad altri metodi". e "È stato ampiamente analizzato / testato da un software standard di analisi della casualità e approvato da autorità indipendenti", che sono esattamente le affermazioni di cui sospetto. Mi immergerò un po 'nel foglio, tuttavia, per vedere se questo chiarisce le cose.
Veedrac,

Un'altra cosa da tenere in considerazione è la riproducibilità scientifica. Molti scienziati che lavorano nell'area di simulazione di Monte Carlo fanno molti problemi per assicurarsi che il programma nel suo insieme produca lo stesso risultato dato lo stesso seme, indipendentemente dal numero di thread. Molti di essi richiedono la compatibilità bug-for-bug con l'implementazione di riferimento del PRNG.
Pseudonimo del

2
Dici anche: "Le nuove versioni del PRNG sono state sviluppate per far fronte ai punti deboli", ma dato che la maggior parte delle implementazioni è la prima versione standard di questo tipo, mi sembra più una critica. Sono anche un po 'sorpreso di vedere "Il sistema è ben supportato / aggiornato su una pagina web". - di quanto supporto ha davvero bisogno un LCG !?
Veedrac,

@Pseudonimo Non seguo davvero. Perché ciò precluderebbe l'uso di un generatore diverso? Ovviamente devi usare lo stesso generatore quando riesegui i test, ma perché per i nuovi test?
Veedrac,

non sembra molto vago riguardo a tutte le analisi scientifiche negli articoli originali e successivi e la domanda originale è in qualche modo "caricata" in questo modo (vengono usati molti PRNG con meno analisi / supporto). Per quanto riguarda gli pseudonimi, tutti i PRNG sono ripetibili usando gli stessi seed iniziali, non lo sono solo i generatori basati su hardware (e non sono più realmente PRNG ma "rumore / casualità fisica"). non sono sicuro di come sia presumibilmente difficile garantire questo con più thread (non so perché thread separati non possono usare un algoritmo identico con semi diversi)
vzn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.