สิ่งที่เป็นแบบสุ่มจริงๆ


23

ฉันเป็นนักเรียนด้านวิทยาศาสตร์คอมพิวเตอร์และกำลังลงทะเบียนเรียนในหลักสูตรการจำลองระบบและการสร้างแบบจำลอง มันเกี่ยวข้องกับการจัดการกับระบบในชีวิตประจำวันรอบตัวเราและจำลองพวกเขาในสถานการณ์ที่แตกต่างกันโดยการสร้างตัวเลขสุ่มในเส้นโค้งการกระจายที่แตกต่างกันเช่น IID, Gaussian ฯลฯ เป็นต้น ฉันทำงานเกี่ยวกับโครงการ boids และมีคำถามหนึ่งที่ทำให้ฉันรู้สึกว่า "สุ่ม" ที่แท้จริงคืออะไร? ฉันหมายถึงเช่นทุกหมายเลขสุ่มที่เราสร้างแม้ในภาษาการเขียนโปรแกรมของเราเช่นผ่านMath.random()วิธีการใน Java เป็นหลักถูกสร้างขึ้นตาม "อัลกอริทึม"

เราจะรู้ได้อย่างไรว่าลำดับของตัวเลขที่เราผลิตนั้นเป็นจริงโดยการสุ่มและมันจะช่วยเราในการจำลองแบบจำลองที่แม่นยำที่สุดเท่าที่จะเป็นไปได้?



คำตอบ:


18

คำตอบสั้น ๆ ก็คือไม่มีใครรู้ว่าสุ่มจริงคืออะไรหรือถ้ามีสิ่งนั้นอยู่ หากคุณต้องการที่จะหาจำนวนหรือวัดสุ่มของวัตถุที่ไม่ต่อเนื่องคุณมักจะหันไปซับซ้อน Kolmogorov ก่อนที่ความซับซ้อนของ Kolmogorov เราจะไม่มีทางหาปริมาณของการสุ่มลำดับของตัวเลขโดยไม่คำนึงถึงกระบวนการที่เกิดขึ้น

ต่อไปนี้เป็นตัวอย่างที่เข้าใจง่ายที่หลอกผู้คนในสมัยนั้น พิจารณาลำดับของการโยนเหรียญ ผลลัพธ์ของการโยนหนึ่งครั้งคือ heads ( ) หรือ tails ( ) สมมติว่าเราทำการทดลองสองครั้งโดยที่เราจะโยนเหรียญ 10 ครั้ง การทดลองครั้งแรกจะช่วยให้เรา H การทดลองที่สองจะช่วยให้เรา H หลังจากเห็นผลลัพธ์คุณอาจถูกล่อลวงให้อ้างว่ามีบางอย่างผิดปกติกับเหรียญในหรืออย่างน้อยก็ด้วยเหตุผลแปลก ๆ บางอย่างที่คุณได้รับไม่ใช่แบบสุ่ม แต่ถ้าคุณสมมติว่าทั้งและน่าจะเป็น (เหรียญนั้นยุติธรรม) ความน่าจะเป็นที่จะได้รับเช่นกันT E 1 H , H , H , H , H , H , H , H , H , H E H 2 T , T , H , T , H , T , T , H , T , H E 1 H T E 1 E 2 ( 1 / 2 ) 10 E 2 EHTE1H,H,H,H,H,H,H,H,H,HE2T,T,H,T,H,T,T,H,T,HE1HTE1หรือเท่ากับ{10} ในความเป็นจริงการได้รับลำดับที่เฉพาะเจาะจงใด ๆที่น่าจะเป็น! ถึงกระนั้นรู้สึกสุ่มและไม่ได้E2(1/2)10E2 E1

โดยทั่วไปเนื่องจากความซับซ้อนของ Kolmogorov นั้นไม่สามารถคำนวณได้เราไม่สามารถคำนวณได้ว่าการเรียงลำดับของตัวเลขนั้นสุ่มอย่างไรไม่ว่ากระบวนการแบบสุ่มทั้งหมดจะอ้างว่าอย่างไร


สำหรับลำดับอนันต์เรามีเครื่องมือมากมายในการนิยามการสุ่มเช่นปกติ
เดนิส

1
@dkuper สังเกตว่าลำดับอนันต์ของกลุ่มเริ่มต้นนั้นสุ่มทั้งหมดตามคำจำกัดความความซับซ้อนของ Kolmogorov จะเป็นเรื่องปกติ แต่การเป็นปกตินั้นไม่เพียงพอที่จะพิจารณาว่าสุ่มอย่างแท้จริง ตัวอย่างเช่นมีตัวเลขปกติทุกกลุ่มที่เริ่มต้นมีมากกว่า 1 มากกว่า 0
Quinn Culver

@ Culinn Culver ใช่ฉันเห็นด้วยปกติเป็นเพียงตัวอย่างของเครื่องมือเพิ่มเติมที่เรามี (ในหมู่อื่น ๆ ) สำหรับลำดับที่ไม่มีที่สิ้นสุด ความซับซ้อนของ Kolmogorov และอื่น ๆ ยังคงมีประโยชน์
เดนิส

8

ในกรณีของ Java (หรือภาษาที่คล้ายกัน) เรารู้อัลกอริทึมที่ใช้ในการสร้างตัวเลขสุ่ม หากเริ่มต้นด้วยเมล็ดเดียวตัวเลขจะไม่สุ่มเลยนั่นคือถ้าเรารู้จักในลำดับเรารู้ว่าหรือระบุว่าเป็นความน่าจะเป็นแบบมีเงื่อนไข: 0 , ... , n ฉัน+ 1K , L , ฉัน: P ( ฉัน+ 1 = k | ฉัน = L ) { 0 , 1 }aia0,,anai+1

k,l,i:P(ai+1=kai=l){0,1}

อย่างไรก็ตามชุดเหล่านั้นอาจเติมเต็มคุณสมบัติ (ดูตัวอย่างเช่นWP: Autocorrelation ) ว่าตัวเลขสุ่มตอบสนองและคุณสมบัติเหล่านี้มักจะเพียงพอที่จะทำงานให้สำเร็จซึ่งเราต้องการใช้ "ของจริง" (เช่นสร้างโดยกระบวนการทางกายภาพบางอย่าง) แต่สามารถ ' พยายามพวกเขาไม่ได้


3

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

หากคุณสามารถสร้างลำดับยาว ๆ ไม่สิ้นสุดโดยใช้ตัวสร้างแบบสุ่มของคุณควรมีพารามิเตอร์เดียวกับการแจกแจงแบบสุ่ม ตัวอย่างเช่นถ้าคุณกำลังใช้เสียนกระจายมาตรฐานแล้วลำดับของคุณควรจะเข้าใกล้ค่าเฉลี่ย 0 และค่าเบี่ยงเบนมาตรฐาน1ดังนั้นวิธีหนึ่งในการตรวจสอบเครื่องกำเนิดไฟฟ้าของคุณคือการสร้างลำดับที่ยาวมากและตรวจสอบว่ามันใกล้เคียงกับการแจกแจงแบบสุ่มที่ต้องการ1(μ=0,σ=1)1

คุณสามารถเพิ่มช่วงเวลาเพิ่มเติมของการแจกแจง (เช่นความเบ้) ที่น่าสนใจสำหรับการตรวจสอบเพิ่มเติม สำหรับหมายเลข IID คุณสามารถลองฝึกอัลกอริทึมการเรียนรู้ของเครื่องเพื่อทำนายองค์ประกอบที่จะมาถึงของลำดับแล้วทดสอบสมมติฐานว่างว่าประวัติปรับปรุงประสิทธิภาพ อย่างไรก็ตามไม่มีวิธีการใดที่สามารถพิสูจน์ได้ว่าลำดับนั้นเป็นแบบสุ่มอย่างแท้จริงและอย่างดีที่สุดสามารถรับรู้ได้เมื่อลำดับไม่ได้ถูกสุ่ม


3

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

จะเป็นบิตที่แม่นยำยิ่งขึ้นขอบอกว่าคุณดูแลเกี่ยวกับขั้นตอนวิธีการทั้งหมดในชั้นเรียน{A} อาจเป็นได้AAA

  • เครื่องจักรทัวริงทั้งหมดที่หยุด
  • ครอบครัววงจรขนาดพหุนามทั้งหมด
  • เวลาพหุนามทุกเครื่อง
  • ทัวริงพื้นที่ทั้งหมดทัวริงเครื่อง

คลาสจะเป็น "ตัวแยกความแตกต่าง" จากนั้นลำดับของตัวแปรสุ่มโดยที่รับค่าในคือ -pseudorandom เทียบกับถ้าทั้งหมด , ที่เป็นตัวแปรสุ่มกระจายอย่างสม่ำเสมอใน nA(Xn)Xn{0,1}nϵAAA

|Pr[A(Xn)=1]Pr[A(Un)=1]|ϵ,
Un{0,1}n

ความคิดนี้อยู่เบื้องหลังแนวคิดที่เป็นทางการเกี่ยวกับการปลอมแปลงสมัยใหม่


2

นี่คืออีกสองเซ็นต์

วิธีหนึ่งที่จะคิดเกี่ยวกับอัลกอริธึมแบบสุ่มคือการทำรูปภาพกล่องที่รับอินพุตทำสิ่งลึกลับให้กับอินพุตนั้นและสร้างเอาต์พุต ("ไม่แน่นอน") บางอย่าง

แต่แทนก็อาจจะเป็นประโยชน์ที่จะคิดว่าพวกเขาเป็นขั้นตอนวิธีการที่กำหนดว่าจะใช้เวลาสองปัจจัยการผลิต: การป้อนข้อมูล "จริง" และบางคน "สุ่ม" Math.Random()ปัจจัยการผลิตที่เราได้รับจากการทำงานเช่น

ตอนนี้เมื่อเราวิเคราะห์ขั้นตอนวิธีการที่เราสามารถทำให้งบเช่นนี้ " หากปัจจัยสุ่มของเรามีความสม่ำเสมอและเป็นอิสระเกี่ยวกับ , จากนั้นมีโอกาสสูงขั้นตอนวิธีการทำงานของเราในเวลา " หรือ "มีโอกาสสูง คำตอบถูกต้อง "[0,1]nlogn

นี่เป็นความจริงที่แท้จริงเกี่ยวกับอัลกอริทึมของเรา ตอนนี้คำถามที่สองคือว่าอินพุตสุ่มตรงกับสมมติฐานประเภทนี้จริงหรือไม่ ผมชอบแบบเบย์จัดเรียงของมุมมองที่ว่านี้: สมมติว่าที่ที่ดีที่สุดของความรู้และความเชื่อของฉัน , แบบแผนของการป้อนข้อมูลของฉันเป็นชุดและเป็นอิสระใน[0,1]จากนั้นความจริงที่เราพิสูจน์ข้างต้นบอกฉันว่าจะเชื่อเกี่ยวกับผลลัพธ์ของอัลกอริทึมของฉัน (คือว่ามันมีโอกาสมากที่จะทำงานในเวลาหรือถูกต้องหรืออื่น ๆ )[0,1]nlogn

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


-2

เราไม่สามารถสร้างตัวเลขสุ่มอย่างแท้จริง มีวิธีการที่แตกต่างกันสำหรับการสร้างตัวเลขสุ่มหลอกโดยใช้สมการที่ระบุและค่าเมล็ดโดยเฉพาะ ดังนั้นการสุ่มของตัวเลขจึงขึ้นอยู่กับค่าของเมล็ด เมื่อเรารู้ค่าเมล็ดแล้วเราสามารถทำนายได้ว่าลำดับจะเป็นอย่างไร นอกจากนี้ยังมีวิธีอื่นในการสร้างตัวเลขสุ่ม ขณะนี้ผู้คนกำลังใช้วิธีการบางอย่างเพื่อสร้างตัวเลขสุ่มจริงเช่นใช้เวลาในการเคลื่อนที่ของหัวดิสก์และวิธีการทางกายภาพอื่น ๆ ซึ่งสามารถรวมไว้ในคอมพิวเตอร์อ้างถึง: http://en.wikipedia.org/wiki/Random_number_generation#Generation_methods



-3

โดยวิธีการที่กำหนดเช่นคุณพูด
Math.random () ใน Java
Randomize; สุ่ม (n); ใน Delphi

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

ขอบคุณ


2
นี่จะตอบคำถามที่ว่า "ใครจะรู้ว่าลำดับเป็นแบบสุ่ม" ได้อย่างไร?
Juho

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

-4

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

  • "ความจริง / การสุ่มของจริง" เกิดขึ้นกับกระบวนการทางกายภาพระดับต่ำ & "เสียง" เช่นในซีเนอร์ไดโอดกลศาสตร์ควอนตัม ฯลฯ ซึ่งสามารถควบคุมได้ในฮาร์ดแวร์ที่ใช้RNG

  • ตัวเลขอื่น ๆ ที่สร้างขึ้นในขอบเขตของคอมพิวเตอร์คือสิ่งที่เรียกว่า"pseudorandom"ซึ่งจำลองขึ้นและไม่สามารถเทียบได้กับ "การสุ่มที่แท้จริง" สิ่งเหล่านี้เรียกว่าPRNG

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

  • อีกความรู้สึกที่เกี่ยวข้องค่อนข้างขึ้นมาคือ "ความแข็งของการพิสูจน์" จินตนาการหลักฐานที่จะพิสูจน์ว่า RNG เป็นเส้นเวลา(n) การพิสูจน์นั้นดูเหมือนจะง่ายกว่าการพิสูจน์ว่าเป็นสมการกำลังสองเป็นต้น แนวคิดนี้ยังอยู่ในขั้นตอนของการกรงเล็บ / วิจัย แต่ที่จริง Impinges ตามคำถามลึกเช่นP NPในกระดาษที่มีชื่อเสียงเรียกว่าธรรมชาติพิสูจน์ ประมาณผู้เขียนแสดงหลักฐานP NP จะต้องมี "ความซับซ้อน" บางอย่างมิฉะนั้นเทคนิคการวิเคราะห์เดียวกันสามารถใช้ในการทำลาย PRNGs และยิ่งกว่านั้นค่อนข้างน่าแปลกใจส่วนใหญ่หรือทั้งหมดที่ซับซ้อนแยก / เทคนิคที่รู้จักกันในวันที่ ( หรือแม้กระทั่งO ( n 2 ) ? =O(n)O(n2)=?หลังจากนั้นจนถึงปัจจุบัน ) ไม่มีความซับซ้อนเพียงพอ

  • หัวข้อการวิจัยที่สำคัญใน TCS เป็นแบบสุ่มและ derandomized อัลกอริทึม ความคิดคือคร่าว ๆ เพื่อศึกษาว่ามีการเปลี่ยนแปลงอัลกอริธึมมากแค่ไหนโดยแทนที่ "ความเป็นจริงของการสุ่ม" กับ PRNG และมีทฤษฎีบทต่าง ๆ ในเรื่องลึก นี่คือคำถาม cstheory.se ที่มีการระบุสูงซึ่งให้รสชาติของการวิจัยในพื้นที่นี้: อัลกอริธึมแบบสุ่มที่มีประสิทธิภาพและง่ายซึ่งการกำหนดเป็นเรื่องยาก

  • อีกหัวข้อที่เกี่ยวข้องกับคีย์ใน TCS คือเอนโทรปีของสารสนเทศซึ่ง แต่เดิมเปิดตัวในวิชาฟิสิกส์มานานแล้วซึ่งศึกษาแนวคิดที่เกี่ยวข้องอย่างใกล้ชิดของ "data dis-order" และเหมือนกับแนวคิดที่สำคัญอื่น ๆ ใน (T) CS ดูเหมือนจะเป็นหนึ่งในแนวคิดหลัก ๆ เขตแดนระหว่างการวิเคราะห์ประยุกต์ทฤษฎีและแม้บางส่วนของสูตรที่มีเหมือนกัน

  • ยืนยันอีกครั้งถึงสถานะของการวิจัยเชิงรุกมีคำถามระดับสูงอื่น ๆ ใน cstheory.se ที่เกี่ยวข้องกับคำถามนี้ นี่คือหนึ่งใกล้เกือบเหมือนกัน: เป็นตัวกำเนิดตัวเลขสุ่มอย่างแท้จริงทัวริงคำนวณ


และไม่เพียง แต่นักวิทยาศาสตร์คอมพิวเตอร์เท่านั้นที่สนใจเรื่อง "แบบแผน" มันอาจเป็นคำถามอมตะที่พิจารณาจากมุมมองทางศาสนาและปรัชญา
Juho

เห็นด้วยเช่นกันในวิชาฟิสิกส์มันเป็นแนวคิดหลักในการคิดค้นQMและการอภิปรายBohr-Einstein , Bells thmและยังคงกระตุ้น"ทฤษฎีตัวแปรที่ซ่อนอยู่"อีกครั้งซึ่งเป็นพื้นที่ของการวิจัย อย่างที่คุณพูดอาจจะไม่มีใครรู้ว่ามันคืออะไร แต่หลายคนยังคงพยายามหาคำตอบที่ชัดเจนยิ่งขึ้นเมื่อเราพูด
vzn

เพิ่มเติมเกี่ยวกับความเกี่ยวข้องของการสุ่มกับมุม P vs NP มันแสดงให้เห็นในความน่าพอใจและกลุ่ม "จุดเปลี่ยน" เช่นในบทความนี้ความซับซ้อนของเสียงเดียวของ k-Clique ในกราฟสุ่มโดย Rossman
vzn

กำลังทำลายเครื่องกำเนิดจำนวนสุ่มดูการโจมตีของ RNGวิกิพีเดีย
vzn

ภาพรวมเกี่ยวกับการสุ่มใน CS โดยwigderson RANDOMNESS และ PSEUDORANDOMNESS
vzn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.