ทำไม Mersenne Twister ถึงถูกมองว่าดี?


38

Mersenne Twister ได้รับการยกย่องอย่างกว้างขวางว่าดี Heck แหล่ง CPythonบอกว่า "เป็นหนึ่งในเครื่องกำเนิดไฟฟ้าที่ได้รับการทดสอบอย่างกว้างขวางมากที่สุดที่มีอยู่" แต่สิ่งนี้หมายความว่าอย่างไร เมื่อถูกขอให้แสดงรายการคุณสมบัติของเครื่องกำเนิดนี้สิ่งที่ฉันสามารถเสนอได้ส่วนใหญ่จะไม่ดี:

  • มันมีขนาดใหญ่และยืดหยุ่นไม่ได้ (เช่นไม่มีการค้นหาหรือสตรีมหลายรายการ)
  • มันล้มเหลวในการทดสอบทางสถิติมาตรฐานแม้จะมีขนาดใหญ่
  • มันมีปัญหาร้ายแรงประมาณ 0 ซึ่งบอกว่ามันสุ่มตัวเองค่อนข้างแย่
  • มันเร็วมาก

และอื่น ๆ เมื่อเทียบกับ RNG แบบง่าย ๆ เช่น XorShift * มันก็ซับซ้อนเช่นกัน

ดังนั้นฉันจึงหาข้อมูลเกี่ยวกับสาเหตุที่สิ่งนี้คิดว่าดี กระดาษต้นฉบับให้ความเห็นจำนวนมากในช่วง "ซุปเปอร์ดาราศาสตร์" และการแบ่งตัว 623 มิติ

ในหลายมาตรการที่รู้จักกันการทดสอบตามความสม่ำเสมอของมิติที่สูงขึ้นเช่นการทดสอบสเปกตรัม (cf, Knuth [1981]) และการทดสอบการกระจายตัว k ที่อธิบายไว้ด้านล่างนี้ถือว่ามีความแข็งแกร่งที่สุด

แต่สำหรับคุณสมบัตินี้เครื่องกำเนิดไฟฟ้าจะถูกตีด้วยเคาน์เตอร์ที่มีความยาวเพียงพอ! สิ่งนี้ไม่มีความเห็นเกี่ยวกับการกระจายในท้องที่ซึ่งเป็นสิ่งที่คุณสนใจจริง ๆ ในเครื่องกำเนิดไฟฟ้า (แม้ว่า "ท้องถิ่น" อาจหมายถึงสิ่งต่าง ๆ ) และแม้แต่ CSPRNG ก็ไม่สนใจช่วงเวลาที่ยิ่งใหญ่เช่นนี้เพราะมันไม่สำคัญเลยจากระยะไกล

มีคณิตศาสตร์จำนวนมากในกระดาษ แต่เท่าที่ฉันสามารถบอกได้ว่าเรื่องนี้เกี่ยวกับคุณภาพการสุ่ม ค่อนข้างพูดถึงทุกอย่างที่กระโดดอย่างรวดเร็วกลับไปที่ต้นฉบับเหล่านี้เรียกร้องที่ไร้ประโยชน์ส่วนใหญ่

ดูเหมือนว่าผู้คนเพิ่มขึ้นใน bandwagon นี้ด้วยค่าใช้จ่ายของเทคโนโลยีที่เก่ากว่าและน่าเชื่อถือกว่า ตัวอย่างเช่นหากคุณเพิ่มจำนวนคำใน LCG ถึง 3 (น้อยกว่า "เพียง 624" ของ Mersenne Twister) และส่งออกคำบนสุดในแต่ละรอบมันจะผ่าน BigCrush ( ส่วนที่ยากขึ้นของชุดทดสอบ TestU01 ) แม้ว่า Twister จะล้มเหลว ( กระดาษ PCG, รูปที่ 2 ) ให้นี้และหลักฐานที่อ่อนแอผมก็สามารถที่จะหาได้ในการสนับสนุนของ Mersenne Twister สิ่งที่ไม่ได้ให้ความสนใจสาเหตุที่จะชอบมันมากกว่าตัวเลือกอื่น ๆ ?

นี่ไม่ใช่ประวัติศาสตร์อย่างแท้จริง ฉันได้รับการบอกเล่าผ่านว่า Mersenne Twister อย่างน้อยได้รับการพิสูจน์ในทางปฏิบัติมากขึ้นกว่าการพูดPCG สุ่ม แต่เป็นกรณีการใช้งานเพื่อให้ทราบว่าพวกเขาสามารถทำได้ดีกว่าแบตเตอรี่ทดสอบของเราหรือไม่ Googling บางคนแนะนำว่าพวกเขาอาจไม่ได้

ในระยะสั้นฉันสงสัยว่า Mersenne Twister มีชื่อเสียงในเชิงบวกอย่างกว้างขวางทั้งในบริบททางประวัติศาสตร์และอื่น ๆ อย่างไร ในอีกแง่หนึ่งฉันสงสัยในคุณสมบัติของมัน แต่ในอีกแง่หนึ่งมันยากที่จะจินตนาการว่ามันเป็นเหตุการณ์ที่เกิดขึ้นแบบสุ่มทั้งหมด


2
ฉันคิดว่าคุณพูดถูก Mersenne Twister ไม่มีอะไรพิเศษเป็นพิเศษ มันเป็นที่รู้จักกันดี (และ PRNG ที่รู้จักกันดีอื่น ๆ อีกมากมายนั้นเลวร้ายกว่า) มี PRNG อื่น ๆ ที่ค่อนข้างดีเช่นกัน สำหรับ PRNG ที่ดียิ่งขึ้นเราสามารถใช้ PRNG เข้ารหัสได้ ฉันไม่แน่ใจว่าคำตอบแบบใดที่เราสามารถให้ได้นอกเหนือจาก "ไม่มีอะไรผิดกับเหตุผลของคุณ"
DW

1
ฉันคิดว่าคำถามที่คุณควรถามไม่ใช่ว่า MT นั้นดีหรือไม่ (เนื่องจากเป็นตัวชี้วัดหลายตัว) แต่ทำไมมันถูกใช้มากกว่าทางเลือกอื่นเช่น PCG หรือ XorShift คำตอบน่าจะเป็นว่ามันเพิ่งจะอยู่ได้นานกว่าและเป็นค่าเริ่มต้นที่เหมาะสมที่สุดเป็นเวลานาน (ในปีอินเทอร์เน็ต)
นามแฝง

1
@ vzn "การพิจารณาอีกอย่างคือเวลาในการสร้าง PRNG" คุณภาพ "มาจากค่าใช้จ่ายในการดำเนินการ" →ยกเว้นว่า Mersenne Twister ช้าลงและแย่ลงกว่า LCG ขนาดใหญ่ที่สามารถใช้งานได้ ดูรูปที่ 16 ในกระดาษ PCG (เกี่ยวกับว่าฉันอ่านกระดาษ: ฉันอ่านส่วนที่ไม่ใช่วิชาคณิตศาสตร์ของ Mersenne Twister ในรายละเอียดและกระดาษสุ่ม PCG ทั้งหมดฉันมักจะอ่านส่วนที่สาม)
Veedrac

1
คุณกำลังพูดถึง XorShift หรืออัลกอริทึม KISS?
gnasher729

1
@ gnasher729 ฉันพูดถึง XorShift * แต่ฉันไม่ได้เจาะจงกับตัวเลือกเฉพาะ ฉันไม่รู้เกี่ยวกับ KISS, FWIW
Veedrac

คำตอบ:


15

MT ได้รับการยกย่องว่าดีเป็นเวลาหลายปีจนกระทั่งพบว่าไม่ดีนักเมื่อเทียบกับการทดสอบขั้นสูงของ TestU01 BigCrush และ PRNG ที่ดีกว่า

ตารางที่pcg-random.orgเช่นให้ภาพรวมที่ดีเกี่ยวกับคุณสมบัติของ PRNG ที่ใช้มากที่สุดซึ่งคุณลักษณะ "ดี" เพียงอย่างเดียวของ Mersenne Twister คือระยะเวลาและความเป็นไปได้ที่จะใช้ เมล็ดพันธุ์ (ผลลัพธ์ที่ทำซ้ำได้) มันผ่านการทดสอบ TestU01 SmallCrush ที่ง่ายและรวดเร็ว แต่มันล้มเหลวในการทดสอบคุณภาพทางสถิติที่ใหม่กว่า การทดสอบ LinearComp ของ TestU01 และแบตเตอรี่ Crush และ BigCrush ของ TestU012219937

หน้านี้แสดงรายละเอียดคุณสมบัติของ Mersenne-Twister:

คุณสมบัติเชิงบวก

  • สร้างตัวเลข 32- บิตหรือ 64- บิต (ซึ่งสามารถใช้เป็นแหล่งที่มาของบิตสุ่ม)
  • ผ่านการทดสอบทางสถิติส่วนใหญ่

คุณภาพเป็นกลาง

  • ระยะเวลามากเกินไป22199371
  • 623- แบ่งมิติ
  • ระยะเวลาสามารถแบ่งพาร์ติชันเพื่อเลียนแบบสตรีมหลาย ๆ

คุณสมบัติเชิงลบ

  • ล้มเหลวในการทดสอบทางสถิติโดยมีตัวเลขน้อยถึง 45,000
  • คาดการณ์ได้ - หลังจาก 624 เอาต์พุตเราสามารถทำนายผลลัพธ์ได้อย่างสมบูรณ์
  • สถานะเครื่องกำเนิดนั้นใช้ RAM 2504 ไบต์ - ในทางตรงกันข้ามเครื่องกำเนิดไฟฟ้าที่ใช้งานได้ดีมากในช่วงเวลาที่ใช้งานได้ยาวนานกว่าใคร ๆ
  • ไม่เร็วมาก
  • พื้นที่ไม่ได้มีประสิทธิภาพโดยเฉพาะอย่างยิ่ง เครื่องกำเนิดใช้ 20000 บิตเพื่อจัดเก็บสถานะภายใน (20032 บิตบนเครื่อง 64 บิต) แต่มีระยะเวลาเพียง , ปัจจัย 263 (หรือ 295) น้อยกว่าเครื่องกำเนิดในอุดมคติที่มีขนาดเท่ากัน2219937
  • ไม่สม่ำเสมอในการส่งออก; เครื่องกำเนิดไฟฟ้าสามารถเข้าสู่“ สถานะที่ไม่ดี” ที่ฟื้นตัวช้า
  • การเพาะเมล็ดที่แตกต่างกันเพียงเล็กน้อยใช้เวลานานในการแยกออกจากกัน ต้องทำการเพาะอย่างระมัดระวังเพื่อหลีกเลี่ยงสภาวะเลวร้าย
  • ในขณะที่การข้ามไปข้างหน้าเป็นไปได้อัลกอริธึมที่จะทำเช่นนั้นช้าในการคำนวณ (เช่นต้องใช้หลายวินาที) และไม่ค่อยมีการใช้งาน

สรุป : Mersenne Twister ยังไม่ดีพออีกต่อไป แต่แอปพลิเคชันและห้องสมุดส่วนใหญ่ยังไม่พร้อม


6
ขอบคุณสำหรับบทสรุปที่ดี! อย่างไรก็ตามฉันกังวลว่าแหล่งข้อมูลที่ชัดเจนสำหรับโพสต์ของคุณคือเว็บไซต์ที่มีประสิทธิภาพในการโฆษณาสำหรับกลุ่มเครื่องกำเนิดเลขสุ่มอื่นซึ่งยังไม่ได้รับการตรวจสอบโดยเพื่อน เว็บไซต์เองไม่ได้ให้การอ้างอิงใด ๆ สำหรับรายการ แต่บทความที่เสนอดูเหมือนจะมีจำนวนมาก ดังนั้นฉันคิดว่าคุณสามารถปรับปรุงคำตอบของคุณสำหรับบริบทที่นี่ (คำติชมของ MT) โดยให้การอ้างอิงสำหรับแต่ละประเด็น
Raphael

9
พวกเขาพูดเล่นอย่างจริงจังหรือไม่ว่าช่วงเวลานั้นมีเพียงมากกว่าและหลังจากบอกว่าระยะเวลานานเป็นสมบัติ "เป็นกลาง" ของ prng 295 × 2 2199372 2199452219937295×22199372219945
David Richerby

1
"Predictable" - MT ไม่ได้มีไว้สำหรับเข้ารหัส PRNG ดังนั้นโปรดแก้ไขคำตอบของคุณ
Jason S

8

ฉันเป็นบรรณาธิการที่ยอมรับกระดาษ MT ใน ACM TOMS ย้อนกลับไปในปี 1998 และฉันยังเป็นผู้ออกแบบ TestU01 ฉันไม่ได้ใช้ MT แต่ส่วนใหญ่เป็น MRG32k3a, MRG31k3p และ LRSR113 หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้เกี่ยวกับ MT และสิ่งอื่น ๆ ที่มีอยู่คุณสามารถดูเอกสารต่อไปนี้:

F. Panneton, P. L'Ecuyer และ M. Matsumoto, `` เครื่องกำเนิดไฟฟ้าระยะยาวที่ได้รับการปรับปรุงตามการเกิดซ้ำเชิงเส้น Modulo 2 '' ธุรกรรม ACM เกี่ยวกับซอฟต์แวร์ทางคณิตศาสตร์, 32, 1 (2006), 1-16

P. L'Ecuyer, `` การสร้างเลขสุ่ม '', บทที่ 3 ของคู่มือการคำนวณทางสถิติ, JE Gentle, W. Haerdle, และ Y. Mori, บรรณาธิการ, รุ่นที่สอง, 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 และ R. Simard, `` ตัวเลขสุ่มสำหรับคอมพิวเตอร์แบบขนาน: ความต้องการและวิธีการ, '' คณิตศาสตร์และคอมพิวเตอร์ในการจำลอง, 135, (2017), 3-17 http://www.sciencedirect.com/science/article/pii/S0378475416300829?via%3Dihub

P. L'Ecuyer `` การสร้างตัวเลขสุ่มด้วยหลายสตรีมสำหรับคอมพิวเตอร์แบบเรียงลำดับและแบบขนาน '' เชิญการฝึกอบรมขั้นสูงการดำเนินการของการประชุมการจำลองฤดูหนาว 2015, IEEE Press, 2015, 31-44


3
ขอบคุณสำหรับคำตอบ! คุณจะเพิ่มสิ่งที่มีต่อคำถามหรือไม่ 1) ทำไมคุณถึงคิดว่า MT นั้นดี (หรืออย่างน้อยก็ควรมีการเผยแพร่)? 2) ทำไมคุณไม่คิดว่ามันดีพอสำหรับการใช้งาน?
Raphael

ขอขอบคุณที่เพิ่มบริบททางประวัติศาสตร์ที่มีค่า ฉันยังสงสัยเกี่ยวกับคำถามของราฟาเอลและความคิดส่วนตัวของคุณเมื่อคุณตอบรับเอกสาร
Veedrac

5

ค่อนข้างคล้ายกับขั้นตอนวิธีการเรียงลำดับในเรื่องนี้ไม่มี "หนึ่งขนาดที่เหมาะกับทุกคน" PRNG มีการใช้วัตถุประสงค์ที่แตกต่างกันและมีเกณฑ์การออกแบบและการใช้งานที่หลากหลาย เป็นไปได้ที่จะนำ PRNG ไปใช้อย่างไม่ถูกต้องเช่นการใช้อันหนึ่งสำหรับการเข้ารหัสที่ไม่ได้ออกแบบมา รายการของวิกิพีเดียในMersenne Twisterยังระบุด้วยว่ามันไม่ได้ถูกออกแบบมาสำหรับ "การจำลอง Monte-Carlo ที่ต้องใช้เครื่องกำเนิดหมายเลขสุ่มอิสระ"

ตามที่ระบุไว้ใน Wikipedia, PRNG นี้ใช้ในภาษาโปรแกรมและแอปพลิเคชั่นจำนวนมากอย่างแน่นอนแม้จะเป็น PRNG เริ่มต้น มันจะใช้การวิเคราะห์ทางสังคมวิทยาเพื่ออธิบายว่าทำไม PRNG หนึ่งถึงได้รับการสนับสนุน ปัจจัยที่เป็นไปได้บางอย่างที่อาจนำไปสู่ ​​PRNG นี้:

  • ผู้เขียนมีข้อมูลประจำตัวทางวิทยาศาสตร์ที่ดี / แข็งแกร่งในพื้นที่และได้ทำงานใน PRNG มานานหลายทศวรรษ

  • มันถูกออกแบบมาโดยเฉพาะเพื่อให้เหนือกว่าวิธีอื่น ๆ ในเวลา

  • ผู้เขียนมีส่วนร่วมในการใช้งานและติดตามพวกเขารวมถึงพวกเขา PRNG บางตัวมีทฤษฎีมากกว่าและผู้เขียนไม่เกี่ยวข้องกับการใช้งานจริง

  • ระบบได้รับการสนับสนุน / ปรับปรุงอย่างดีบนหน้าเว็บ

  • PRNG เวอร์ชั่นใหม่ได้รับการพัฒนาขึ้นเพื่อจัดการกับจุดอ่อน ไม่มีอัลกอริทึม Mersenne Twister เพียงหนึ่งเดียวมันมีรูปแบบที่แตกต่างกันมากกว่าและตระกูลของตัวแปรที่สามารถรองรับความต้องการที่แตกต่างกันได้

  • มันได้รับการวิเคราะห์อย่างกว้างขวาง / ทดสอบโดยซอฟต์แวร์การวิเคราะห์แบบแผนมาตรฐานและผ่านโดยหน่วยงานอิสระ

  • มีเอฟเฟกต์ที่รู้จักซึ่งวัดได้สำหรับเว็บไซต์และบริบทอื่น ๆ เช่นการอ้างอิงทางวิทยาศาสตร์ที่เรียกว่า"สิ่งที่แนบมาพิเศษ"ซึ่งสามารถวัดได้ มันเป็นพื้นที่แหล่งข้อมูลทางประวัติศาสตร์ที่ก่อตั้งขึ้นมายาวนานมีการใช้งานเพิ่ม ผลดังกล่าวสามารถอธิบายทางเลือกของ PRNG เมื่อเวลาผ่านไป

กล่าวอีกนัยหนึ่งคุณกำลังถามเกี่ยวกับปรากฏการณ์ของ "ความนิยม" ซึ่งเกี่ยวข้องและเชื่อมโยงกับการเลือกของมนุษย์และไม่ได้เชื่อมโยงกับคุณสมบัติเฉพาะอย่างเคร่งครัด แต่เป็นคุณสมบัติที่ซับซ้อน / เกิดขึ้นใหม่และมีอิทธิพลซึ่งกันและกันระหว่างอัลกอริทึมผู้ใช้และสิ่งแวดล้อม บริบทการใช้งาน

นี่คือหนึ่งในการวิเคราะห์อิสระของอัลกอริทึมMersenne Twister - ตัวสร้างตัวเลขสุ่มหลอกและตัวแปรของมันโดย Jagannatam (15p) ย่อหน้าสุดท้ายคือคำตอบสำหรับคำถามของคุณ อ้างเพียง 1 เซนต์ไม่กี่ประโยค:

Mersenne Twister ได้รับการพิสูจน์ทางทฤษฎีว่าเป็น PRNG ที่ดีมีระยะเวลาที่ยาวนานและมีความเท่าเทียมสูง มันถูกใช้อย่างกว้างขวางในด้านการจำลองและการมอดูเลต ข้อบกพร่องที่พบโดยผู้ใช้ได้รับการแก้ไขโดยนักประดิษฐ์ MT ได้รับการอัพเกรดใช้งานและเข้ากันได้กับเทคโนโลยีใหม่ของ CPU เช่น SIMD และ pipelines แบบขนานใน SFMT เวอร์ชัน


2
ขอบคุณ บางสิ่งที่คุณพูดฟังดูค่อนข้างคลุมเครือเช่น "มันถูกออกแบบมาโดยเฉพาะให้เหนือกว่าวิธีอื่น ๆ ในเวลานั้น" และ "มันได้รับการวิเคราะห์อย่างกว้างขวาง / ทดสอบโดยซอฟต์แวร์การวิเคราะห์แบบแผนมาตรฐานและผ่านโดยหน่วยงานอิสระ" ซึ่งเป็นข้อเรียกร้องที่ฉันสงสัยอย่างแน่นอน แต่ฉันจะดำดิ่งลงในกระดาษเล็กน้อยเพื่อดูว่าสิ่งที่ล้าง
Veedrac

สิ่งหนึ่งที่ต้องคำนึงถึงก็คือการทำซ้ำทางวิทยาศาสตร์ นักวิทยาศาสตร์หลายคนที่ทำงานในพื้นที่จำลองมอนติคาร์โลมีปัญหามากมายเพื่อให้แน่ใจว่าโปรแกรมโดยรวมสร้างผลลัพธ์เดียวกันกับเมล็ดเดียวกันโดยไม่คำนึงถึงจำนวนเธรด หลายคนต้องการความเข้ากันได้แบบ bug-for-bug กับการใช้งานอ้างอิงของ PRNG
นามแฝง

2
คุณยังบอกด้วยว่า "เวอร์ชั่นใหม่ของ PRNG ได้รับการพัฒนาขึ้นเพื่อจัดการกับจุดอ่อน" แต่เนื่องจากการใช้งานส่วนใหญ่นั้นเป็นรุ่นแรกที่มีมาตรฐานที่ลุ่มและมีเสียงดังฟังดูเหมือนเป็นการวิจารณ์ ฉันรู้สึกประหลาดใจเล็กน้อยที่เห็น "ระบบได้รับการสนับสนุน / อัปเดตอย่างดีบนหน้าเว็บ" LCG ต้องการการสนับสนุนมากเพียงใด!
Veedrac

@ นามแฝงฉันไม่ได้ติดตามจริงๆ ทำไมสิ่งนั้นจึงดักคอการใช้เครื่องกำเนิดไฟฟ้าที่แตกต่างกัน? เห็นได้ชัดว่าคุณต้องใช้ตัวสร้างเดียวกันเมื่อทำการทดสอบซ้ำ แต่ทำไมต้องทำการทดสอบใหม่
Veedrac

ดูเหมือนจะไม่มีความคลุมเครือมากนักเกี่ยวกับการวิเคราะห์ทางวิทยาศาสตร์ในเอกสารต้นฉบับและเอกสารที่ตามมาและคำถามเดิมค่อนข้าง "โหลด" ด้วยวิธีนี้ (afaik หลาย PRNGs ที่ใช้การวิเคราะห์ / สนับสนุนน้อยกว่า) Re Pseudonyms, afaik ทั้งหมด PRNG สามารถทำซ้ำได้โดยใช้เมล็ดเริ่มต้นเดียวกันมีเพียงเครื่องกำเนิดไฟฟ้าที่ใช้ฮาร์ดแวร์เท่านั้นไม่ใช่ ไม่แน่ใจว่าวิธีนี้เป็นเรื่องยากที่คาดคะเนเพื่อให้แน่ใจว่ามีหลายหัวข้อ (ไม่รู้ว่าทำไมกระทู้แยกต่างหากลาดเทใช้ขั้นตอนวิธีการเหมือนกันกับเมล็ดพันธุ์ที่แตกต่างกัน)
vzn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.