Tại sao Mersenne Twister được coi là tốt?


38

Mersenne Twister được coi là tốt. Heck, nguồn CPython nói rằng nó "là một trong những máy phát điện được thử nghiệm rộng rãi nhất trong sự tồn tại." Nhưng nó có nghĩa gì? Khi được yêu cầu liệt kê các thuộc tính của trình tạo này, hầu hết những gì tôi có thể cung cấp đều tệ:

  • Nó đồ sộ và không linh hoạt (ví dụ: không tìm kiếm hoặc nhiều luồng),
  • Nó thất bại trong các bài kiểm tra thống kê tiêu chuẩn mặc dù kích thước nhà nước khổng lồ của nó,
  • Nó có vấn đề nghiêm trọng khoảng 0, cho thấy nó ngẫu nhiên khá kém,
  • Nó hầu như không nhanh

vân vân So với các RNG đơn giản như XorShift *, nó cũng vô cùng phức tạp.

Vì vậy, tôi đã tìm kiếm một số thông tin về lý do tại sao điều này từng được cho là tốt. Bài báo gốc đưa ra rất nhiều bình luận về thời kỳ "siêu thiên văn" và sự phân chia 623 chiều, cho biết

Trong số nhiều biện pháp đã biết, các thử nghiệm dựa trên tính đồng nhất về chiều cao hơn, chẳng hạn như thử nghiệm quang phổ (cf, Knuth [1981]) và thử nghiệm phân phối k, được mô tả dưới đây, được coi là mạnh nhất.

Nhưng, đối với tài sản này, máy phát điện bị đánh bại bởi một bộ đếm có chiều dài đủ! Điều này làm cho không có bình luận về các bản phân phối cục bộ , đó là những gì bạn thực sự quan tâm trong một trình tạo (mặc dù "cục bộ" có thể có nghĩa là nhiều thứ khác nhau). Và ngay cả CSPRNG cũng không quan tâm đến những khoảng thời gian lớn như vậy, vì nó không quan trọng từ xa.

Có rất nhiều bài toán trong bài báo, nhưng theo tôi có thể nói rất ít về điều này thực sự là về chất lượng ngẫu nhiên. Khá nhiều đề cập đến điều đó nhanh chóng quay trở lại với những tuyên bố ban đầu, phần lớn là vô dụng.

Có vẻ như mọi người đã nhảy vào nhóm nhạc này với chi phí cho các công nghệ cũ hơn, đáng tin cậy hơn. Ví dụ: nếu bạn chỉ tăng số lượng từ trong LCG lên 3 (ít hơn nhiều so với "chỉ 624" của Mersenne Twister) và xuất ra từ hàng đầu mỗi lần vượt qua, nó sẽ vượt qua BigCrush ( phần khó hơn của bộ kiểm tra TestU01 ), mặc dù Twister không thành công ( giấy PCG, hình 2 ). Đưa ra điều này, và bằng chứng yếu mà tôi có thể tìm thấy để hỗ trợ cho Mersenne Twister, điều gì đã gây ra sự chú ý để ủng hộ nó hơn các lựa chọn khác?

Đây cũng không hoàn toàn là lịch sử. Tôi đã được thông báo rằng Mersenne Twister ít nhất được chứng minh trong thực tế hơn là, ngẫu nhiên , PCG . Nhưng các trường hợp sử dụng có sáng suốt đến mức chúng có thể làm tốt hơn các bài kiểm tra pin của chúng tôi không? Một số Googling cho thấy họ có thể không.

Nói tóm lại, tôi tự hỏi làm thế nào Mersenne Twister có được danh tiếng tích cực rộng rãi, cả trong bối cảnh lịch sử và mặt khác. Một mặt tôi rõ ràng hoài nghi về phẩm chất của nó, nhưng mặt khác thật khó để tưởng tượng rằng đó là một sự xuất hiện hoàn toàn ngẫu nhiên.


2
Tôi nghĩ bạn đúng. Mersenne Twister không có gì đặc biệt. Nó chỉ nổi tiếng (và nhiều PRNG nổi tiếng khác xảy ra tồi tệ hơn). Có những PRNG khác cũng khá tốt. Đối với một PRNG thậm chí tốt hơn, người ta có thể sử dụng PRNG mật mã. Tuy nhiên, tôi không chắc loại câu trả lời nào có thể đưa ra ngoài "không có gì sai với lý luận của bạn".
DW

1
Tôi nghĩ rằng câu hỏi mà bạn nên hỏi không phải là MT có tốt hay không (vì nó là, theo nhiều số liệu), nhưng tại sao nó lại được sử dụng phổ biến hơn các lựa chọn thay thế như PCG hoặc XorShift. Câu trả lời có lẽ là nó đã tồn tại lâu hơn và là mặc định hợp lý nhất trong một thời gian dài (trong những năm Internet).
Bút danh

1
@vzn "sự cân nhắc khác là thời gian thế hệ; PRNG" chất lượng "phải trả giá bằng thời gian chạy" → Ngoại trừ việc Mersenne Twister chậm hơn tệ hơn LCG lớn tương xứng. Xem hình 16 trong bài báo PCG. (Về việc tôi đã đọc bài báo chưa: Tôi đã đọc hầu hết các phần phi toán học của bài báo Mersenne Twister và tất cả các bài viết ngẫu nhiên của PCG. Mặc dù vậy, tôi chủ yếu đọc lướt phần ba.)
Veedrac

1
Bạn đang nói về thuật toán XorShift hoặc KISS?
gnasher729

1
@ gnasher729 Tôi đề cập đến XorShift *, nhưng tôi không thực sự cụ thể cho một sự thay thế cụ thể. Tôi không biết về KISS, FWIW.
Veedrac

Câu trả lời:


15

MT được coi là tốt trong một số năm, cho đến khi nó được phát hiện là khá tệ với các bài kiểm tra TestCr01 BigCrush tiên tiến hơn và PRNG tốt hơn.

Bảng tại pcg-random.org, ví dụ: cung cấp một cái nhìn tổng quan về các tính năng của một số PRNG được sử dụng nhiều nhất, trong đó tính năng "tốt" duy nhất của Mersenne Twister là thời kỳ khổng lồ, và khả năng sử dụng seed (Kết quả tái sản xuất), nó vượt qua các bài kiểm tra SmallCrush đơn giản và nhanh TestU01, nhưng nó đã thất bại một số thử nghiệm chất lượng thống kê mới hơn, đặc biệt. TestC01 của TestC01 Test Test và Pin Crush và BigCrush của TestU01.2219937

Trang này liệt kê chi tiết các tính năng của Mersenne-Twister:

Phẩm chất tích cực

  • Tạo ra các số 32 bit hoặc 64 bit (do đó có thể sử dụng làm nguồn của các bit ngẫu nhiên)
  • Vượt qua hầu hết các bài kiểm tra thống kê

Phẩm chất trung tính

  • Khoảng thời gian cực kỳ lớn là22199371
  • 623 chiều ngang nhau
  • Thời gian có thể được phân vùng để mô phỏng nhiều luồng

Phẩm chất tiêu cực

  • Thất bại một số bài kiểm tra thống kê, với ít nhất 45.000 số.
  • Có thể dự đoán - sau 624 đầu ra, chúng ta hoàn toàn có thể dự đoán đầu ra của nó.
  • Trạng thái trình tạo chiếm 2504 byte RAM - ngược lại, một trình tạo cực kỳ tiện dụng với thời gian sử dụng nhiều hơn bất kỳ ai có thể sử dụng có thể phù hợp với 8 byte RAM.
  • Không đặc biệt nhanh.
  • Không đặc biệt hiệu quả không gian. Trình tạo sử dụng 20000 bit để lưu trữ trạng thái bên trong của nó (20032 bit trên các máy 64 bit), nhưng có chu kỳ chỉ , ít hơn một (ít hơn 295) so với một trình tạo lý tưởng có cùng kích thước.2219937
  • Sản lượng không đồng đều; máy phát điện có thể vào trạng thái xấu của hồi phục chậm.
  • Các hạt giống chỉ khác nhau một chút mất nhiều thời gian để phân kỳ từ nhau; gieo hạt phải được thực hiện cẩn thận để tránh các trạng thái xấu.
  • Mặc dù nhảy về phía trước là có thể, các thuật toán để làm điều đó rất chậm để tính toán (nghĩa là yêu cầu vài giây) và hiếm khi được cung cấp bởi các triển khai.

Tóm tắt : Mersenne Twister không còn đủ tốt nữa, nhưng hầu hết các ứng dụng và thư viện vẫn chưa có.


7
Cảm ơn vì tóm tắt tốt đẹp! Tuy nhiên, tôi lo ngại rằng nguồn rõ ràng duy nhất cho bài đăng của bạn là một trang web thực sự là một quảng cáo cho một họ các trình tạo số ngẫu nhiên khác chưa được đánh giá ngang hàng. Bản thân trang web không cung cấp bất kỳ tài liệu tham khảo nào cho các mục nhưng bài viết được đề xuất dường như chứa nhiều. Do đó, tôi nghĩ rằng bạn có thể cải thiện câu trả lời của mình cho bối cảnh ở đây (chỉ trích MT) bằng cách đưa ra các tài liệu tham khảo cho các điểm riêng lẻ.
Raphael

10
Có phải họ nghiêm túc ngụy biện rằng khoảng thời gian đó chỉ là chứ không phải , và sau khi nói rằng một khoảng thời gian dài là thuộc tính "trung lập" của prng? 295 × 2 219.9372 219.9452219937295×22199372219945
David Richerby

1
"Dự đoán" - MT không có ý định làm PRNG mật mã, vì vậy vui lòng chỉnh sửa câu trả lời của bạn.
Jason S

8

Tôi là Biên tập viên đã chấp nhận giấy MT trong ACM TOMS vào năm 1998 và tôi cũng là người thiết kế TestU01. Tôi không sử dụng MT, nhưng chủ yếu là MRG32k3a, MRG31k3p và LRSR113. Để biết thêm về những điều này, về MT và về những gì khác, bạn có thể xem các giấy tờ sau:

F. Panneton, P. Bencuyer và M. Matsumoto, `` Các bộ tạo thời gian dài được cải tiến dựa trên các phép lặp tuyến tính Modulo 2 '', Giao dịch ACM trên phần mềm toán học, 32, 1 (2006), 1-16.

P. bencuyer, `` Tạo số ngẫu nhiên '', chương 3 của Sổ tay thống kê tính toán, JE Gentle, W. Haerdle, và Y. Mori, biên tập, Ấn bản thứ hai, Springer-Verlag, 2012, 35-71 . https://link.springer.com/ch CHƯƠNG / 10.1007/978-3-642-21551-3_3

P. Ficuyer, D. Munger, B. Oreshkin và R. Simard, `` Số ngẫu nhiên cho máy tính song song: Yêu cầu và phương pháp, '' Toán học và Máy tính trong Mô phỏng, 135, (2017), 3-17. http://www.scTHERirect.com/science/article/pii/S0378475416300829?via%3Dihub

P. thuyết phục


3
Cảm ơn câu trả lời của bạn! Bạn có phiền khi thêm một cái gì đó vào câu hỏi? 1) Tại sao bạn nghĩ MT là tốt (hoặc ít nhất là giá trị xuất bản) sau đó? 2) Tại sao bạn không nghĩ rằng nó đủ tốt để sử dụng?
Raphael

Cảm ơn đã thêm bối cảnh lịch sử có giá trị. Tôi cũng tò mò về câu hỏi của Raphael và suy nghĩ cá nhân của bạn khi bạn chấp nhận bài báo.
Veedrac

5

Giống như các thuật toán sắp xếp về vấn đề này, không có PRNG "một kích thước phù hợp với tất cả". Những cái khác nhau được sử dụng cho các mục đích khác nhau và có rất nhiều tiêu chí thiết kế và sử dụng. Có thể sử dụng các PRNG một cách sai lầm, chẳng hạn như sử dụng một mã hóa cho mật mã mà nó không được thiết kế cho. Bài viết của Wikipedia về Mersenne Twister cũng đề cập rằng nó không được thiết kế cho "mô phỏng Monte-Carlo yêu cầu trình tạo số ngẫu nhiên độc lập".

Như đã lưu ý trên Wikipedia, PRNG này thực sự được sử dụng trong một số lượng lớn các ngôn ngữ lập trình và ứng dụng ngay cả như một PRNG mặc định. Sẽ cần một phân tích gần như xã hội học để giải thích tại sao một PRNG được ưa chuộng. Một số yếu tố có thể có thể đóng góp cho PRNG này:

  • Tác giả có thông tin khoa học tốt / mạnh trong khu vực và đã làm việc trong PRNG trong nhiều thập kỷ.

  • Nó được thiết kế đặc biệt để vượt trội hơn các phương pháp khác vào thời điểm đó.

  • Tác giả đang tham gia vào việc thực hiện và theo dõi chúng, cũng đóng góp cho chúng. Một số PRNG mang tính lý thuyết nhiều hơn và các tác giả không phải lúc nào cũng quan tâm đến việc triển khai thực tế.

  • Hệ thống được hỗ trợ / cập nhật tốt trên một trang web.

  • Các phiên bản mới của PRNG đã được phát triển để đối phó với các điểm yếu. Không có một thuật toán Mersenne Twister nào, nó giống các phiên bản khác nhau và một nhóm các biến thể có thể đáp ứng các nhu cầu khác nhau.

  • Nó đã được phân tích / kiểm tra rộng rãi bằng phần mềm phân tích ngẫu nhiên tiêu chuẩn và được thông qua, bởi các cơ quan độc lập.

  • Có một hiệu ứng đã biết được đo bằng các trang web và nhiều bối cảnh khác như trích dẫn khoa học gọi là "đính kèm ưu tiên" có thể đo lường được. Về cơ bản, đó là nơi các nguồn lịch sử được thiết lập từ lâu tích lũy thêm sử dụng. Một hiệu ứng như vậy có thể giải thích các lựa chọn PRNG theo thời gian.

Nói cách khác, bạn đang hỏi về một hiện tượng "phổ biến" có liên quan và liên quan đến lựa chọn của con người và không bị ràng buộc chặt chẽ với các phẩm chất cụ thể, nhưng là một loại tài sản phức tạp / nổi lên và tương tác giữa các thuật toán, người dùng và môi trường khác nhau / bối cảnh sử dụng.

Dưới đây là một phân tích độc lập như vậy về thuật toán Mersenne Twister - Trình tạo số ngẫu nhiên giả và biến thể của nó bởi Jagannatam (15p). Đoạn kết luận về cơ bản là một câu trả lời cho câu hỏi của bạn. trích dẫn chỉ có 1 st vài câu:

Mersenne Twister về mặt lý thuyết được chứng minh là một PRNG tốt, với thời gian dài và tính tương đương cao. Nó được sử dụng rộng rãi trong các lĩnh vực mô phỏng và điều chế. Các lỗi được tìm thấy bởi người dùng đã được sửa chữa bởi các nhà phát minh. MT đã được nâng cấp, để sử dụng và tương thích với các công nghệ mới nổi của CPU như SIMD và các đường ống song song trong phiên bản SFMT của nó.


2
Cảm ơn. Tuy nhiên, một số điều bạn đang nói nghe có vẻ khá mơ hồ, như "Nó được thiết kế đặc biệt để vượt trội hơn các phương pháp khác vào thời điểm đó". và "Nó đã được phân tích / kiểm tra rộng rãi bằng phần mềm phân tích ngẫu nhiên tiêu chuẩn và được thông qua, bởi các cơ quan độc lập.", đó chính xác là những tuyên bố mà tôi nghi ngờ. Tuy nhiên, tôi sẽ đi sâu vào bài báo một chút để xem điều đó có làm sáng tỏ mọi thứ không.
Veedrac

Một điều khác cần tính đến là khả năng tái tạo khoa học. Nhiều nhà khoa học làm việc trong khu vực mô phỏng Monte Carlo gặp rất nhiều rắc rối để đảm bảo rằng toàn bộ chương trình tạo ra cùng một đầu ra cho cùng một hạt giống, bất kể số lượng luồng. Nhiều người trong số họ yêu cầu khả năng tương thích bug-for-bug với việc triển khai PRNG tham chiếu.
Bút danh

2
Bạn cũng nói, "Các phiên bản mới của PRNG đã được phát triển để giải quyết các điểm yếu.", Nhưng với hầu hết các triển khai là phiên bản đầu tiên không có tiêu chuẩn, điều này nghe có vẻ giống như một lời chỉ trích đối với tôi. Tôi cũng hơi ngạc nhiên khi thấy "Hệ thống được hỗ trợ / cập nhật tốt trên một trang web." - LCG cần bao nhiêu hỗ trợ thực sự!?
Veedrac

@Pseudonymous Tôi không thực sự làm theo. Tại sao điều đó ngăn cản sử dụng một máy phát khác nhau? Rõ ràng bạn phải sử dụng cùng một trình tạo khi chạy lại các bài kiểm tra, nhưng tại sao cho các bài kiểm tra mới?
Veedrac

dường như không có nhiều sự mơ hồ về tất cả các phân tích khoa học trong các bài báo gốc và các bài báo tiếp theo và câu hỏi ban đầu có phần "được tải" theo cách này (sử dụng nhiều PRNG với ít phân tích / hỗ trợ được sử dụng). Điểm giả danh, afaik tất cả các PRNG đều có thể lặp lại bằng cách sử dụng các hạt giống khởi đầu giống nhau, chỉ có các trình tạo dựa trên phần cứng thì không (và chúng không thực sự là PRNG nữa mà là "tiếng ồn / ngẫu nhiên thực tế"). không chắc chắn làm thế nào điều này được cho là khó đảm bảo với nhiều luồng (không biết tại sao các luồng riêng biệt không thể sử dụng thuật toán giống hệt nhau với các hạt khác nhau)
vzn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.