Por que o Mersenne Twister é considerado bom?

38

O Mersenne Twister é amplamente considerado bom. Heck, a fonte do CPython diz que "é um dos geradores mais amplamente testados que existe". Mas o que isso significa? Quando solicitado a listar as propriedades desse gerador, a maior parte do que posso oferecer é ruim:

  • É massivo e inflexível (por exemplo, sem busca ou múltiplos fluxos),
  • Ele falha nos testes estatísticos padrão, apesar de seu enorme tamanho de estado,
  • Ele tem sérios problemas em torno de 0, sugerindo que se randomiza bastante mal,
  • Dificilmente é rápido

e assim por diante. Comparado a RNGs simples como o XorShift *, também é irremediavelmente complicado.

Por isso, procurei algumas informações sobre por que isso foi considerado bom. O artigo original faz muitos comentários sobre o período "super astronômico" e a equidistribuição 623 dimensional, dizendo

Entre muitas medidas conhecidas, os testes baseados na uniformidade dimensional mais alta, como o teste espectral (cf. Knuth [1981]) e o teste de distribuição k, descritos abaixo, são considerados os mais fortes.

Mas, para essa propriedade, o gerador é derrotado por um contador de comprimento suficiente! Isso não faz comentários sobre as distribuições locais , o que realmente interessa a você em um gerador (embora "local" possa significar várias coisas). E mesmo os CSPRNGs não se importam com períodos tão grandes, já que isso não é remotamente importante.

Há muita matemática no jornal, mas, tanto quanto posso dizer, pouco disso é realmente sobre a qualidade da aleatoriedade. Praticamente todas as menções disso rapidamente retornam a essas alegações originais, em grande parte inúteis.

Parece que as pessoas entraram nesse movimento às custas de tecnologias mais antigas e confiáveis. Por exemplo, se você apenas aumentar o número de palavras em um LCG para 3 (muito menos que os "apenas 624" de um Mersenne Twister) e emitir a palavra principal a cada passagem, ela passará no BigCrush ( a parte mais difícil do conjunto de testes TestU01 ), apesar da falha do Twister ( papel PCG, fig. 2 ). Diante disso, e as poucas evidências que pude encontrar em apoio ao Mersenne Twister, o que causou atenção para favorecê-lo em relação às outras opções?

Isso também não é puramente histórico. Disseram-me de passagem que o Mersenne Twister é pelo menos mais comprovado na prática do que, digamos, PCG aleatoriamente . Mas os casos de uso são tão exigentes que podem fazer melhor do que nossas baterias de testes? Alguns pesquisadores do Google sugerem que provavelmente não o são.

Em resumo, estou me perguntando como o Mersenne Twister obteve sua reputação positiva generalizada, tanto em seu contexto histórico quanto em outros aspectos. Por um lado, sou obviamente cético em relação a suas qualidades, mas, por outro, é difícil imaginar que se tratou de uma ocorrência inteiramente aleatória.

Veedrac
fonte
2
Eu acho que você está certo. Mersenne Twister não é nada de especial. É apenas conhecido (e muitos dos outros PRNGs conhecidos são piores). Existem outros PRNGs também muito bons. Para um PRNG ainda melhor, pode-se usar um PRNG criptográfico. Não sei ao certo que tipo de resposta se pode dar além de "não há nada errado com o seu raciocínio".
DW
11
Acho que a pergunta que você deve fazer não é se o MT é bom ou não (por muitas métricas), mas por que é mais comumente usado do que as alternativas como PCG ou XorShift. A resposta provavelmente é que ela existe há mais tempo e foi o melhor padrão razoável por um longo tempo (em anos na Internet).
Pseudônimo
11
@vzn "outra consideração é o tempo de geração; a" qualidade "dos PRNGs custa à custa do tempo de execução" → Exceto que o Mersenne Twister é mais lento e pior do que um LCG razoavelmente grande. Veja a Fig. 16 no documento PCG. (Sobre se eu li o jornal: li a maioria das partes não matemáticas do jornal Mersenne Twister em detalhes e todo o artigo aleatório do PCG. Mas, na maior parte dos casos, passei pelo terceiro.)
Veedrac
11
Você está falando sobre o XorShift ou os algoritmos do KISS?
gnasher729
11
@ gnasher729 Menciono o XorShift *, mas na verdade não estou sendo específico para uma alternativa específica. Eu não sabia sobre o KISS, FWIW.
Veedrac #

Respostas:

15

O MT foi considerado bom por alguns anos, até que se descobriu muito ruim nos testes mais avançados do TestU01 BigCrush e nos melhores PRNGs.

A tabela em pcg-random.org, por exemplo, fornece uma boa visão geral dos recursos de alguns dos PRNGs mais usados, onde o único recurso "bom" do Mersenne Twister é o período imenso, e a possibilidade de usar uma semente (Reprodutível Resultados), ele passa nos testes TestU01 SmallCrush simples e rápidos, mas falha em alguns dos testes estatísticos de qualidade mais recentes, esp. Teste LinearComp do TestU01 e Baterias de esmagamento e BigCrush do TestU01.2219937

Esta página lista os recursos de Mersenne-Twister em detalhes:

Qualidades positivas

  • Produz números de 32 ou 64 bits (portanto utilizáveis ​​como fonte de bits aleatórios)
  • Passa na maioria dos testes estatísticos

Qualidades Neutras

  • Período extraordinariamente grande de 2219937-1 1
  • 623-dimensionalmente equidistribuído
  • O período pode ser particionado para emular vários fluxos

Qualidades negativas

  • Falha em alguns testes estatísticos, com apenas 45.000 números.
  • Previsível - após 624 saídas, podemos prever completamente sua saída.
  • O estado do gerador ocupa 2504 bytes de RAM - por outro lado, um gerador extremamente utilizável com um período de mais do que qualquer um que possa usar pode caber em 8 bytes de RAM.
  • Não é particularmente rápido.
  • 2219937
  • Desigual na sua produção; o gerador pode entrar em "estados ruins" que demoram a recuperar.
  • As mudas que diferem apenas levemente levam muito tempo para divergirem umas das outras; a semeadura deve ser feita com cuidado para evitar estados ruins.
  • Embora o salto em frente seja possível, os algoritmos para fazer isso são lentos na computação (ou seja, requerem vários segundos) e raramente são fornecidos pelas implementações.

Resumo : Mersenne Twister não é mais suficiente, mas a maioria dos aplicativos e bibliotecas ainda não existe.

suburbano
fonte
7
Obrigado pelo bom resumo! No entanto, estou preocupado que a única fonte aparente para sua postagem seja um site que seja efetivamente um anúncio para outra família de geradores de números aleatórios que ainda não foi revisada por pares. O site em si não oferece nenhuma referência para as entradas, mas o artigo proposto parece conter muitas. Portanto, acho que você pode melhorar sua resposta para o contexto aqui (crítica à MT), dando referências para os pontos individuais.
Raphael
10
2219937295×22199372219945
11
"Previsível" - o MT não se destina a um PRNG criptográfico; portanto, edite sua resposta.
Jason S
8

Sou o editor que aceitou o artigo de MT no ACM TOMS em 1998 e também sou o designer do TestU01. Não uso MT, mas principalmente MRG32k3a, MRG31k3p e LRSR113. Para saber mais sobre isso, sobre o MT e sobre o que mais existe, você pode consultar os seguintes documentos:

F. Panneton, P. L'Ecuyer e M. Matsumoto, `` Geradores de longo período aprimorados com base no módulo 2 de recorrências lineares '', ACM Transactions on Mathematics Software, 32, 1 (2006), 1-16.

P. L'Ecuyer, `` Random Number Generation '', capítulo 3 do Handbook of Computational Statistics, JE Gentle, W. Haerdle e Y. Mori, eds., Segunda Edição, Springer-Verlag, 2012, 35-71 . https://link.springer.com/chapter/10.1007/978-3-642-21551-3_3

O objetivo deste artigo é apresentar uma revisão bibliográfica sobre o uso de softwares de computação em nuvem, bem como sobre o uso de tecnologias de computação em nuvem. http://www.sciencedirect.com/science/article/pii/S0378475416300829?via%3Dihub

L'Ecuyer, `` Geração de números aleatórios com múltiplos fluxos para computadores sequenciais e paralelos '', convidou o tutorial avançado, Anais da Conferência de Simulação de Inverno de 2015, IEEE Press, 2015, 31-44.

Pierre L'Ecuyer
fonte
3
Obrigado pela sua resposta! Você se importaria de acrescentar algo à pergunta? 1) Por que você achou que o MT era bom (ou pelo menos vale a pena publicar) então? 2) Por que você não acha que é bom o suficiente para usar?
Raphael
Obrigado por adicionar esse contexto histórico valioso. Também estou curioso sobre as perguntas de Raphael e seus pensamentos pessoais quando você aceitou o jornal.
Veedrac #
5

Um pouco como os algoritmos de classificação a esse respeito, não existe PRNG "tamanho único". Diferentes são usados ​​para diferentes fins e há uma grande variedade de critérios e usos de design. É possível aplicar PRNGs de maneira incorreta, como usar um para criptografia para o qual não foi projetado. A entrada da Wikipedia no Mersenne Twister também menciona que não foi projetada para "simulações de Monte Carlo que exigem geradores de números aleatórios independentes".

Conforme observado na Wikipedia, esse PRNG é realmente usado em um grande número de linguagens de programação e aplicativos, mesmo como um PRNG padrão. Seria necessária uma análise quase sociológica para explicar por que um PRNG é favorecido. Alguns possíveis fatores que podem estar contribuindo para este PRNG:

  • O autor possui boas / fortes credenciais científicas na área e trabalha em PRNGs há décadas.

  • Foi projetado especificamente para ser superior a outros métodos da época.

  • O autor está envolvido em implementações e rastreá-las, contribuindo também para elas. Alguns PRNGs são mais teóricos e os autores nem sempre se preocupam com implementações reais.

  • O sistema é bem suportado / atualizado em uma página da web.

  • Novas versões do PRNG foram desenvolvidas para lidar com os pontos fracos. Não existe um único algoritmo Mersenne Twister, é mais como versões diferentes e uma família de variantes que podem lidar com necessidades diferentes.

  • Foi extensivamente analisado / testado pelo software padrão de análise aleatória e aprovado por autoridades independentes.

  • Há um efeito conhecido medido nos sites e em muitos outros contextos, como citações científicas chamadas "anexo preferencial" que podem ser medidos. É basicamente onde fontes históricas estabelecidas há muito tempo adquirem mais uso. Tal efeito poderia explicar as opções de PRNG ao longo do tempo.

Em outras palavras, você está perguntando sobre um fenômeno de "popularidade" associado e inter-relacionado às escolhas humanas e não está estritamente ligado a qualidades particulares, mas é um tipo de propriedade complexa / emergente e interação entre diferentes algoritmos, usuários e ambiente. / contextos de uso.

Aqui está uma análise independente do algoritmo Mersenne Twister - um gerador de números pseudo-aleatórios e suas variantes por Jagannatam (15p). O parágrafo final é essencialmente uma resposta à sua pergunta. citando apenas os 1 st algumas frases:

Mersenne Twister é teoricamente comprovado como um bom PRNG, com um longo período e alta equidistribuição. É amplamente utilizado nos campos de simulação e modulação. Os defeitos encontrados pelos usuários foram corrigidos pelos inventores. O MT foi atualizado, para usar e ser compatível com as novas tecnologias emergentes de CPUs, como SIMD e pipelines paralelos em sua versão do SFMT.

vzn
fonte
2
Obrigado. Algumas das coisas que você está dizendo parecem bastante vagas, como "Foi projetado especificamente para ser superior a outros métodos da época". e "Ele foi extensivamente analisado / testado pelo software padrão de análise aleatória e aprovado por autoridades independentes.", que são exatamente as alegações das quais desconfio. Vou mergulhar um pouco no papel, para ver se isso esclarece as coisas.
Veedrac
Outra coisa a considerar é a reprodutibilidade científica. Muitos cientistas que trabalham na área de simulação de Monte Carlo enfrentam muitos problemas para garantir que o programa como um todo produza a mesma saída, dada a mesma semente, independentemente do número de threads. Muitos deles exigem compatibilidade bug a bug com a implementação de referência do PRNG.
Pseudônimo
2
Você também diz: "Novas versões do PRNG foram desenvolvidas para lidar com os pontos fracos.", Mas, como a maioria das implementações é a primeira versão do pântano, isso me parece mais uma crítica. Também estou um pouco surpreso ao ver "O sistema é bem suportado / atualizado em uma página da web". - De quanto apoio um LCG realmente precisa?
Veedrac #
@ Pseudônimo Eu realmente não sigo. Por que isso impediria o uso de um gerador diferente? Obviamente, você precisa usar o mesmo gerador ao executar novamente os testes, mas por que para novos testes?
Veedrac
não parece haver muita imprecisão em todas as análises científicas nos trabalhos originais e subsequentes, e a pergunta original é um pouco "carregada" dessa maneira (após muitos PRNGs com menos análise / suporte são usados). Quanto aos pseudônimos, todos os PRNGs são repetíveis usando as mesmas sementes iniciais, apenas geradores baseados em hardware não são (e não são mais PRNGs, mas "ruído físico real / aleatoriedade"). Não sei como este é supostamente difícil garantir com vários segmentos (não sei por que segmentos separados não pode usar o algoritmo idêntico com diferentes sementes)
vzn