บางทีแนวคิดทำไมมันถูกใช้และตัวอย่าง
บางทีแนวคิดทำไมมันถูกใช้และตัวอย่าง
คำตอบ:
ก่อนอื่นเราต้องเข้าใจว่าโซ่มาร์คอฟคืออะไร ลองพิจารณาตัวอย่างสภาพอากาศต่อไปนี้จาก Wikipedia สมมติว่าสภาพอากาศในแต่ละวันสามารถแบ่งได้เป็นสองสถานะเท่านั้น: แดดจัดและฝนตก จากประสบการณ์ที่ผ่านมาเรารู้ดังต่อไปนี้:
เนื่องจากสภาพอากาศในวันถัดไปอาจมีแดดหรือฝนตก
ในทำนองเดียวกันให้:
ดังนั้นจึงเป็นไปตามนั้น:
ตัวเลขสี่ตัวข้างต้นสามารถถูกแทนอย่างแน่นหนาเป็นเมทริกซ์การเปลี่ยนแปลงซึ่งแสดงถึงความน่าจะเป็นของสภาพอากาศที่เคลื่อนที่จากรัฐหนึ่งไปอีกรัฐหนึ่งดังนี้:
เราอาจถามคำถามหลายข้อที่มีคำตอบดังนี้:
Q1:หากอากาศแจ่มใสในวันนี้สภาพอากาศในวันพรุ่งนี้เป็นอย่างไร
A1:เนื่องจากเราไม่ทราบว่าจะเกิดอะไรขึ้นแน่นอนสิ่งที่ดีที่สุดที่เราสามารถพูดได้คือมีโอกาสที่มีแนวโน้มว่าจะมีแดดและว่าจะมีฝนตก10 %
Q2:ประมาณสองวันจากวันนี้
A2:การคาดการณ์หนึ่งวัน:แดดฝน ดังนั้นสองวันต่อจากนี้:10 %
วันแรกสามารถแดดจัดและวันถัดไปก็แดดจัด โอกาสที่จะเกิดขึ้นนี้คือ:0.9
หรือ
วันแรกฝนตกและวันที่สองฝนตก โอกาสที่จะเกิดขึ้นนี้คือ:0.5
ดังนั้นความน่าจะเป็นที่อากาศจะแจ่มใสในสองวันคือ:
ความน่าจะเป็นที่ฝนจะตก:
ในพีชคณิตเชิงเส้น (การฝึกอบรมการเปลี่ยนแปลง) คำนวณเหล่านี้สอดคล้องกับพีชคณิตทั้งหมดในการเปลี่ยนจากขั้นตอนที่หนึ่งไปยังถัดไป (แดดเพื่อแดด ( ), แดดไปฝน ( ) ฝนตกต่อแดด ( ) หรือ rainy-to-rainy ( )) ที่มีความน่าจะเป็นที่คำนวณได้:
ในส่วนล่างของภาพเราจะเห็นวิธีการคำนวณความน่าจะเป็นของสถานะในอนาคต (หรือ ) จากความน่าจะเป็น (ฟังก์ชันมวลความน่าจะเป็น, ) สำหรับทุกสถานะ (แดดจัดหรือฝน) ในเวลาศูนย์ หรือ ) เป็นการคูณเมทริกซ์อย่างง่าย
ถ้าคุณให้การคาดการณ์สภาพอากาศเช่นนี้คุณจะสังเกตได้ว่าในที่สุดคาดการณ์ -th วันที่มีขนาดใหญ่มาก (พูด ) การตัดสินต่อไปนี้ 'สมดุล' ความน่าจะเป็น:
และ
กล่าวอีกนัยหนึ่งการคาดการณ์ของคุณสำหรับวันที่ -th และวันที่ยังคงเหมือนเดิม นอกจากนี้คุณยังสามารถตรวจสอบความน่าจะเป็นของ 'สมดุล' ไม่ได้ขึ้นอยู่กับสภาพอากาศในปัจจุบัน คุณจะได้รับการพยากรณ์อากาศแบบเดียวกันหากคุณเริ่มต้นโดยสมมติว่าวันนี้อากาศแจ่มใสหรือมีฝนตก
ตัวอย่างข้างต้นจะใช้งานได้ก็ต่อเมื่อความน่าจะเป็นในการเปลี่ยนสถานะเป็นไปตามเงื่อนไขหลายประการซึ่งฉันจะไม่พูดถึงที่นี่ แต่สังเกตเห็นคุณสมบัติดังต่อไปนี้ของห่วงโซ่มาร์คอฟ 'nice' (ความน่าจะเป็นที่ดี = ช่วงการเปลี่ยนภาพเป็นไปตามเงื่อนไข):
โดยไม่คำนึงถึงสถานะเริ่มต้นในที่สุดเราก็จะไปถึงการกระจายความน่าจะเป็นสมดุลของรัฐ
Markov Chain Monte Carlo ใช้ประโยชน์จากคุณลักษณะดังกล่าวข้างต้น:
เราต้องการสร้างการสุ่มจับจากการกระจายเป้าหมาย จากนั้นเราจะระบุวิธีในการสร้างห่วงโซ่มาร์คอฟที่ 'ดี' อย่างนั้นการกระจายความน่าจะเป็นที่สมดุลคือการกระจายเป้าหมายของเรา
หากเราสามารถสร้างห่วงโซ่ดังกล่าวได้เราก็เริ่มจากจุดใดจุดหนึ่งแล้วย้ำห่วงโซ่มาร์คอฟซ้ำหลาย ๆ ครั้ง (เช่นที่เราคาดการณ์สภาพอากาศครั้ง ) ในที่สุดวาดที่เราสร้างจะปรากฏราวกับว่าพวกเขามาจากการกระจายเป้าหมายของเรา
จากนั้นเราจะประมาณปริมาณของดอกเบี้ย (เช่นค่าเฉลี่ย) โดยการหาค่าเฉลี่ยตัวอย่างของการดึงหลังจากทิ้งการดึงเริ่มต้นสองสามอันซึ่งเป็นองค์ประกอบ Monte Carlo
มีหลายวิธีในการสร้างเชนมาร์คอฟที่ 'ดี' (เช่นตัวอย่าง Gibbs, อัลกอริทึม Metropolis-Hastings)
ฉันคิดว่ามีสัญชาตญาณที่ดีและเรียบง่ายที่จะได้รับจากอัลกอริทึม Metropolis-Hastings
ก่อนเป้าหมายคืออะไร? เป้าหมายของ MCMC คือการดึงตัวอย่างจากการแจกแจงความน่าจะเป็นบางส่วนโดยไม่ต้องทราบความสูงที่แน่นอน ณ จุดใด ๆ วิธีที่ MCMC ประสบความสำเร็จคือการ "เดินไปรอบ ๆ " ในการแจกจ่ายนั้นด้วยวิธีที่จำนวนเวลาที่ใช้ในแต่ละสถานที่นั้นเป็นสัดส่วนกับความสูงของการกระจาย หากกระบวนการ "หลงทาง" ถูกตั้งค่าอย่างถูกต้องคุณสามารถตรวจสอบให้แน่ใจว่าได้สัดส่วนนี้ (ระหว่างเวลาที่ใช้และความสูงของการกระจาย)
โดยสัญชาตญาณสิ่งที่เราต้องการจะทำคือการเดินไปรอบ ๆ บนพื้นผิว (เป็นก้อน) ในลักษณะที่ระยะเวลาที่เราใช้ (หรือตัวอย่าง # วาด) ในแต่ละตำแหน่งเป็นสัดส่วนกับความสูงของพื้นผิวในตำแหน่งนั้น ดังนั้นเช่นเราต้องการใช้เวลาสองเท่าบนยอดเขาที่ระดับความสูง 100 เมตรเมื่อเราทำบนเนินเขาใกล้เคียงที่ระดับความสูง 50 เมตร สิ่งที่ดีคือเราสามารถทำสิ่งนี้ได้แม้ว่าเราจะไม่ทราบความสูงแน่นอนของจุดบนพื้นผิว: สิ่งที่เราต้องรู้ก็คือความสูงสัมพัทธ์ เช่นถ้าหนึ่งยอดเขา A สูงเป็นสองเท่าของยอดเขา B ดังนั้นเราต้องการใช้เวลาสองเท่าที่ A เมื่อเราใช้จ่ายที่ B
ตัวแปรที่ง่ายที่สุดของอัลกอริทึม Metropolis-Hastings (การสุ่มตัวอย่างห่วงโซ่อิสระ) บรรลุผลดังต่อไปนี้: สมมติว่าในทุกขั้นตอน (ไม่ต่อเนื่อง) เราเลือกตำแหน่ง "เสนอ" ใหม่แบบสุ่ม (เลือกอย่างสม่ำเสมอทั่วทั้งพื้นผิว) หากตำแหน่งที่เสนอสูงกว่าที่เรายืนอยู่ตอนนี้ให้ย้ายไปยังตำแหน่งนั้น หากตำแหน่งที่เสนอต่ำกว่าให้ย้ายไปยังตำแหน่งใหม่ด้วยความน่าจะเป็น p โดยที่ p คืออัตราส่วนของความสูงของจุดนั้นต่อความสูงของตำแหน่งปัจจุบัน (กล่าวคือพลิกเหรียญที่มีความน่าจะเป็นที่จะได้รับหัวถ้ามันเกิดขึ้นให้ย้ายไปยังตำแหน่งใหม่ถ้าเป็นหางให้อยู่ในตำแหน่งที่เราอยู่) เก็บรายการตำแหน่งที่คุณอยู่ในทุกขั้นตอนและรายการนั้นจะ (สัดส่วน) มีสัดส่วนเวลาที่ถูกต้องในแต่ละส่วนของพื้นผิว
มีรูปแบบที่ซับซ้อนกว่าสำหรับการเสนอที่ตั้งใหม่และกฎสำหรับการยอมรับสถานที่เหล่านั้น แต่แนวคิดพื้นฐานยังคงอยู่: (1) เลือกที่ตั้งใหม่ "ที่เสนอ"; (2) ดูว่าตำแหน่งนั้นสูงขึ้นหรือต่ำลงเท่าใดเมื่อเทียบกับตำแหน่งปัจจุบันของคุณ (3) ความน่าจะเป็นที่จะย้ายหรือย้ายไปยังตำแหน่งนั้นในลักษณะที่เคารพเป้าหมายโดยรวมของการใช้เวลาตามสัดส่วนกับความสูงของที่ตั้ง
สิ่งนี้มีประโยชน์สำหรับอะไร? สมมติว่าเรามีแบบจำลองความน่าจะเป็นของสภาพอากาศที่ช่วยให้เราประเมิน A * P (สภาพอากาศ) โดยที่ A เป็นค่าคงที่ที่ไม่รู้จัก (สิ่งนี้มักจะเกิดขึ้น - หลายรุ่นมีความสะดวกในการกำหนดในแบบที่คุณไม่สามารถระบุได้ว่า A คืออะไร) ดังนั้นเราจึงไม่สามารถประเมิน P ("ฝนตกในวันพรุ่งนี้") ได้อย่างแน่นอน อย่างไรก็ตามเราสามารถเรียกใช้ตัวอย่าง MCMC ได้ครู่หนึ่งแล้วถามว่าส่วนใดของตัวอย่าง (หรือ "สถานที่") ที่อยู่ในสถานะ "พรุ่งนี้ฝน" ส่วนนั้นจะเป็นการพยากรณ์อากาศแบบอิงโมเดล
ฉันอาจพูดบางสิ่งเช่นนี้:
"เมื่อใดก็ตามที่เราต้องการพูดถึงความน่าจะเป็นเราจะรวมความหนาแน่นเข้าด้วยกันจริง ๆ ในการวิเคราะห์แบบเบย์ความหนาแน่นจำนวนมากที่เราเกิดขึ้นไม่ใช่การวิเคราะห์ที่ง่ายต่อการวิเคราะห์: คุณสามารถรวมเข้าด้วยกันได้เท่านั้น - ด้วยความทุกข์ทรมานมากมายดังนั้นสิ่งที่เราทำคือการจำลองตัวแปรสุ่มจำนวนมากแล้วหาความน่าจะเป็นจากการสุ่มตัวเลขของเราถ้าเราต้องการทราบความน่าจะเป็นที่ X น้อยกว่า 10 เราจะนับ สัดส่วนของตัวแปรสุ่มที่จำลองแล้วมีผลลัพธ์น้อยกว่า 10 และใช้เป็นค่าประมาณของเรานั่นคือส่วน "Monte Carlo" มันเป็นค่าประมาณความน่าจะเป็นจากการสุ่มตัวเลขด้วยตัวเลขสุ่มที่จำลองได้เพียงพอการประมาณนั้นดีมาก สุ่มโดยเนื้อแท้
"ดังนั้นทำไม" Markov Chain "เพราะภายใต้เงื่อนไขทางเทคนิคบางอย่างคุณสามารถสร้างกระบวนการที่ไม่มีหน่วยความจำ (หรือที่รู้จักว่า Markovian one) ที่มีการกระจาย จำกัด เช่นเดียวกับตัวแปรสุ่มที่คุณพยายามจำลองคุณสามารถวนซ้ำใด ๆ จำนวนกระบวนการจำลองที่แตกต่างกันซึ่งสร้างตัวเลขสุ่มที่มีความสัมพันธ์กัน (ขึ้นอยู่กับมูลค่าปัจจุบันของตัวเลขเหล่านั้น) และคุณรับประกันได้ว่าเมื่อคุณรวมผลลัพธ์เพียงพอคุณจะจบลงด้วยจำนวนตัวเลขที่มีลักษณะ " ราวกับว่า "คุณมีวิธีจัดการกับตัวอย่างที่เป็นอิสระจากการแจกแจงที่ซับซ้อนที่คุณอยากรู้
"ตัวอย่างเช่นถ้าฉันต้องการประเมินความน่าจะเป็นที่ตัวแปรสุ่มปกติมาตรฐานน้อยกว่า 0.5 ฉันสามารถสร้างการรับรู้อิสระหนึ่งหมื่นจากการแจกแจงแบบปกติมาตรฐานและนับจำนวนน้อยกว่า 0.5 กล่าวว่าฉันได้ 6905 นั่น น้อยกว่า 0.5 จาก 10,000 ตัวอย่างทั้งหมดการประมาณของฉันสำหรับ P (Z <0.5) จะเท่ากับ 0.6905 ซึ่งไม่ไกลจากค่าจริงนั่นคือประมาณการของ Monte Carlo
รายการตัวเลขที่ฉันได้รับจากโพรซีเดอร์จะถูกกระจายเหมือนการดึงจำนวนมากจากสิ่งที่สร้างตัวแปรสุ่มแบบปกติ นี่จะให้การจำลองแบบมาร์คอฟเชนมอนติคาร์โลกับฉันสำหรับตัวแปรสุ่มมาตรฐานแบบปกติ ถ้าฉันใช้สิ่งนี้เพื่อประมาณความน่าจะเป็นนั่นก็คือการประเมิน MCMC "
ลองนึกภาพคุณต้องการหากลยุทธ์ที่ดีกว่าในการเอาชนะเพื่อนของคุณในเกมกระดาน ลดความซับซ้อนของสิ่งที่มีความสำคัญในเกมกับคำถาม: คุณสมบัติใดที่ผู้คนลงจอดมากที่สุด? คำตอบขึ้นอยู่กับโครงสร้างของกระดานกฎของเกมและการโยนลูกเต๋าสองลูก
วิธีหนึ่งในการตอบคำถามคือ เพียงทำตามกระดานรอบกระดานขณะที่คุณโยนลูกเต๋าและปฏิบัติตามกฎ นับจำนวนครั้งที่คุณลงจอดในแต่ละสถานที่ให้บริการ (หรือโปรแกรมคอมพิวเตอร์เพื่อทำงานให้คุณ) ในที่สุดหากคุณมีความอดทนเพียงพอหรือคุณได้ตั้งกฎไว้อย่างดีพอในคอมพิวเตอร์ของคุณคุณจะสร้างภาพลักษณ์ที่ดีของอสังหาริมทรัพย์ที่มีธุรกิจมากที่สุด สิ่งนี้จะช่วยให้คุณชนะได้บ่อยขึ้น
สิ่งที่คุณทำคือการวิเคราะห์มาร์คอฟเชนมอนติคาร์โล (MCMC) คณะกรรมการกำหนดกฎ ที่ที่คุณลงจอดต่อไปจะขึ้นอยู่กับว่าคุณอยู่ที่ไหนไม่ใช่ในที่ที่คุณเคยอยู่ก่อนหน้านี้และความน่าจะเป็นที่เฉพาะเจาะจงจะถูกกำหนดโดยการกระจายของการโยนของลูกเต๋าสองลูก MCMC คือการประยุกต์ใช้ความคิดนี้กับระบบทางคณิตศาสตร์หรือทางกายภาพเช่นสภาพอากาศในวันพรุ่งนี้จะเป็นอย่างไรหรือที่เม็ดละอองเรณูที่ถูกบีบอัดแบบสุ่มโดยโมเลกุลของก๊าซจะจบลง
ตกลงนี่เป็นความพยายามอย่างที่สุดของฉันในการอธิบายอย่างไม่เป็นทางการและหยาบคาย
Markov Chain เป็นกระบวนการสุ่มที่มีคุณสมบัติที่อนาคตขึ้นอยู่กับสถานะปัจจุบันของกระบวนการเท่านั้นไม่ใช่อดีตนั่นคือไร้ความจำ ตัวอย่างของกระบวนการสุ่มอาจเป็นการแลกเปลี่ยนหุ้น ตัวอย่างของ Markov Chain จะเป็นเกมกระดานเช่น Monopoly หรือ Snakes and Ladders ซึ่งตำแหน่งในอนาคตของคุณ (หลังจากกลิ้ง Die) จะขึ้นอยู่กับตำแหน่งที่คุณเริ่มต้นก่อนที่จะเริ่มเล่นไม่ใช่ตำแหน่งก่อนหน้าของคุณ ตัวอย่างตำราของมาร์คอฟเชนคือ "การเดินของคนขี้เมา" ลองนึกภาพใครบางคนที่เมาและสามารถขยับซ้ายหรือขวาเพียงก้าวเดียว เมาเมาไปทางซ้ายหรือขวาด้วยความน่าจะเป็นที่เท่ากัน นี่คือมาร์คอฟเชนที่ตำแหน่งอนาคตของเมา / ต่อไปขึ้นอยู่กับว่าเขาอยู่ที่ไหนในปัจจุบัน
วิธีการมอนติคาร์โลเป็นขั้นตอนวิธีการคำนวณ (เพียงชุดคำสั่ง) ซึ่งสุ่มตัวอย่างจากกระบวนการบางอย่างภายใต้การศึกษา พวกเขาเป็นวิธีการประเมินบางสิ่งที่ยากเกินไปหรือใช้เวลานานในการค้นหาแบบไม่แน่นอน โดยพื้นฐานแล้วมันเป็นรูปแบบการจำลองด้วยคอมพิวเตอร์ในกระบวนการทางคณิตศาสตร์หรือทางกายภาพ ชื่อเล่น Monte Carlo มาจากการเปรียบเทียบระหว่างคาสิโนและการสร้างตัวเลขสุ่ม กลับไปที่ตัวอย่างเกมกระดานของเราก่อนหน้านี้บางทีเราต้องการทราบว่ามีคุณสมบัติบางอย่างในคณะกรรมการการผูกขาดถูกเยี่ยมชมบ่อยกว่าเกมอื่นหรือไม่ การทดลองของ Monte Carlo จะเกี่ยวข้องกับการทอยลูกเต๋าซ้ำ ๆ และนับจำนวนครั้งที่คุณลงจอดในแต่ละสถานที่ให้บริการ นอกจากนี้ยังสามารถใช้สำหรับการคำนวณอินทิกรัลเชิงตัวเลข (อย่างไม่เป็นทางการมากเราสามารถคิดอินทิกรัลเป็นพื้นที่ใต้กราฟของฟังก์ชันบางอย่าง ) การบูรณาการ Monte Carlo ทำงานได้อย่างยอดเยี่ยมในฟังก์ชั่นมิติสูงโดยการสุ่มตัวอย่างของจุดของฟังก์ชั่นและคำนวณค่าเฉลี่ยบางประเภทที่จุดต่าง ๆ เหล่านี้ ด้วยการเพิ่มขนาดตัวอย่างกฎของคนจำนวนมากบอกเราว่าเราสามารถเพิ่มความแม่นยำของการประมาณของเราได้โดยการครอบคลุมฟังก์ชันมากขึ้นเรื่อย ๆ
แนวคิดทั้งสองนี้สามารถนำมารวมกันเพื่อแก้ปัญหาที่ยากลำบากบางอย่างในพื้นที่เช่นการอนุมานแบบเบย์, การคำนวณทางชีววิทยา, ฯลฯ ซึ่งการคำนวณปริพันธ์หลายมิติจำเป็นต้องคำนวณเพื่อแก้ปัญหาที่พบบ่อย ความคิดคือการสร้างห่วงโซ่มาร์คอฟซึ่งมาบรรจบกับการกระจายความน่าจะเป็นที่ต้องการหลังจากหลายขั้นตอน สถานะของ chain หลังจากขั้นตอนจำนวนมากถูกใช้เป็นตัวอย่างจากการกระจายที่ต้องการและกระบวนการซ้ำแล้วซ้ำอีก มีอัลกอริทึม MCMC ที่แตกต่างกันมากมายซึ่งใช้เทคนิคที่แตกต่างกันในการสร้าง Markov Chain คนทั่วไป ได้แก่ Metropolis-Hastings และ Gibbs Sampler
ตัดตอนมาจากวิธีการแบบเบย์สำหรับแฮกเกอร์
ภาพประกอบด้านล่างแสดงให้เห็นถึงสิ่งนี้ ยิ่งสีแดงเข้มยิ่งมีความน่าจะเป็นที่ไม่ทราบล่วงหน้ามากเท่าไหร่ ในทางกลับกันพื้นที่ที่มีสีน้ำเงินเข้มแสดงว่านักบวชของเรากำหนดความน่าจะเป็นที่ต่ำมากให้กับสิ่งที่ไม่รู้อยู่
นี่คือตัวอย่างง่ายๆในพื้นที่ 2 มิติที่สมองของเราสามารถเข้าใจพื้นผิวได้ดี ในทางปฏิบัติช่องว่างและพื้นผิวที่สร้างโดยนักบวชของเรานั้นอาจมีมิติที่สูงกว่ามาก
ดันพื้นผิวดั้งเดิมให้สูงขึ้น จำนวนของการผลักดันขึ้นจะถูกต่อต้านโดยความน่าจะเป็นก่อนหน้าดังนั้นความน่าจะเป็นที่น้อยกว่านั้นหมายถึงการต่อต้านที่มากขึ้น ดังนั้นในกรณีเลขยกกำลังสองข้างต้นข้างบนภูเขา (หรือภูเขาหลายลูก) ที่อาจปะทุอยู่ใกล้กับมุม (0,0) จะสูงกว่าภูเขาที่ปะทุเข้ามาใกล้มากขึ้น (5,5) เนื่องจากมีความต้านทานใกล้เข้ามามากกว่า (5,5) ภูเขาหรือโดยทั่วไปอาจเป็นเทือกเขาสะท้อนถึงความน่าจะเป็นหลังซึ่งเป็นที่ที่พารามิเตอร์ที่น่าจะถูกค้นพบ
จุดสีดำแสดงถึงพารามิเตอร์ที่แท้จริง แม้จะมีจุดตัวอย่าง 1 จุดตามที่จำลองไว้ด้านบนภูเขาก็พยายามที่จะมีพารามิเตอร์ที่แท้จริง แน่นอนการอนุมานด้วยขนาดตัวอย่างที่ 1 นั้นไร้เดียงสาอย่างไม่น่าเชื่อและการเลือกตัวอย่างขนาดเล็กนั้นเป็นเพียงตัวอย่างเท่านั้น
จากการกระจายหลังไม่ใช่การกระจายตัว การขยายขอบเขตการเปรียบเทียบภูเขาของเราจนถึงขีด จำกัด นั้น MCMC ทำงานคล้ายกับถามซ้ำ ๆ ว่า "ก้อนกรวดนี้มีโอกาสมากน้อยเพียงใดที่ฉันพบว่ามาจากภูเขาที่ฉันกำลังค้นหา" และทำภารกิจของมันให้สำเร็จโดยการคืนก้อนกรวดที่ยอมรับจำนวนหลายพัน ภูเขาดั้งเดิม ใน MCMC และ PyMC ศัพท์แสงลำดับกลับมาของ "ก้อนกรวด" เป็นตัวอย่างที่มากขึ้นมักจะเรียกว่าร่องรอย
เมื่อฉันพูดว่า MCMC ค้นหาอย่างชาญฉลาดฉันหมายถึง MCMC หวังว่าจะมาบรรจบกันในพื้นที่ที่มีความน่าจะเป็นหลังสูง MCMC ทำเช่นนี้โดยการสำรวจตำแหน่งใกล้เคียงและย้ายไปยังพื้นที่ที่มีโอกาสสูงกว่า บางทีคำว่า "บรรจบ" อาจไม่ใช่คำที่ถูกต้องเพื่ออธิบายความก้าวหน้าของ MCMC การบรรจบมักหมายถึงการเคลื่อนที่ไปยังจุดใดจุดหนึ่งในพื้นที่ แต่ MCMC เคลื่อนที่ไปยังพื้นที่ที่กว้างขึ้นในอวกาศและเดินแบบสุ่มในพื้นที่นั้นเพื่อเก็บตัวอย่างจากพื้นที่นั้น
ในตอนแรกการส่งคืนตัวอย่างหลายพันตัวอย่างไปยังผู้ใช้อาจดูเหมือนเป็นวิธีที่ไม่มีประสิทธิภาพในการอธิบายการแจกแจงหลัง ฉันจะยืนยันว่านี่มีประสิทธิภาพมาก พิจารณาความเป็นไปได้ทางเลือก ::
นอกจากเหตุผลทางคอมพิวเตอร์แล้วเหตุผลที่แข็งแกร่งที่สุดสำหรับตัวอย่างที่ส่งคืนคือเราสามารถใช้กฎจำนวนมากเพื่อแก้ปัญหาที่ยากลำบากได้ ฉันเลื่อนการอภิปรายนี้สำหรับบทต่อไป
มีตระกูลอัลกอริธึมขนาดใหญ่ที่ทำหน้าที่ MCMC อย่างง่ายที่สุดอัลกอริทึมส่วนใหญ่สามารถแสดงในระดับสูงดังนี้:
1. Start at current position.
2. Propose moving to a new position (investigate a pebble near you ).
3. Accept the position based on the position's adherence to the data
and prior distributions (ask if the pebble likely came from the mountain).
4. If you accept: Move to the new position. Return to Step 1.
5. After a large number of iterations, return the positions.
ด้วยวิธีนี้เราไปในทิศทางทั่วไปไปยังภูมิภาคที่มีการแจกแจงหลังและรวบรวมตัวอย่างในการเดินทาง เมื่อเราไปถึงการกระจายด้านหลังเราสามารถรวบรวมตัวอย่างได้ง่ายเนื่องจากพวกมันน่าจะเป็นของการกระจายตัวด้านหลัง
หากตำแหน่งปัจจุบันของอัลกอริทึม MCMC อยู่ในพื้นที่ที่มีความน่าจะเป็นต่ำมากซึ่งมักเป็นกรณีเมื่ออัลกอริทึมเริ่มต้น (โดยทั่วไปจะอยู่ที่ตำแหน่งสุ่มในพื้นที่) อัลกอริทึมจะย้ายในตำแหน่งที่ไม่น่าจะมาจากคนหลังแต่ดีกว่าทุกอย่างในบริเวณใกล้เคียง ดังนั้นการเคลื่อนไหวครั้งแรกของอัลกอริทึมจึงไม่สะท้อนแสงของหลัง
ดังนั้นจึงมีคำตอบมากมายที่นี่ถอดความจากหนังสือสถิติ / ความน่าจะเป็น Wikipedia และอื่น ๆ ฉันเชื่อว่าเรามี "คนธรรมดา" ที่ฉันทำงาน ฉันคิดว่าพวกเขาอยู่ในแผนกการตลาด หากฉันต้องอธิบายเทคนิคใด ๆ กับพวกเขาฉันจะใช้กฎ "show Don't tell" โดยกฎนั้นฉันอาจแสดงให้พวกเขาเห็นเช่นนี้
ความคิดที่นี่คือพยายามรหัสอัลกอริทึมที่ฉันสามารถสอนการสะกด - ไม่ใช่โดยการเรียนรู้กฎหลายร้อย (พัน?) เช่นเมื่อเพิ่มการสิ้นสุดลงในคำที่ลงท้ายด้วยเงียบ e วางสุดท้าย e ถ้าตอนจบเริ่มต้นด้วยสระ เหตุผลข้อหนึ่งที่ใช้ไม่ได้คือฉันไม่รู้กฎเหล่านั้น (ฉันไม่แน่ใจด้วยซ้ำว่าฉันเพิ่งท่องถูกต้อง) แต่ฉันจะสอนให้สะกดด้วยการแสดงคำที่สะกดถูกต้องและให้มันแยกกฎออกจากคำเหล่านั้นซึ่งเป็นสาระสำคัญของการเรียนรู้ของเครื่องโดยไม่คำนึงถึงอัลกอริทึม - การแยกรูปแบบและการจดจำรูปแบบ .
เกณฑ์ความสำเร็จคือการสะกดคำที่อัลกอริทึมไม่เคยเห็นมาก่อนอย่างถูกต้อง (ฉันรู้ว่าสามารถเกิดขึ้นได้โดยโอกาสที่บริสุทธิ์ แต่นั่นจะไม่เกิดขึ้นกับนักการตลาดดังนั้นฉันจะไม่สนใจ - บวกฉันจะมีอัลกอริทึม พยายามสะกดไม่ใช่หนึ่งคำ แต่มีมากดังนั้นจึงไม่น่าที่เราจะถูกผู้อื่นเดาได้โดยการเดาโชค)
ชั่วโมงหรือดังนั้นที่ผ่านมาผมดาวน์โหลด (เป็นไฟล์ข้อความธรรมดา) จากที่ยอดเยี่ยมโครงการ Gutenberg เว็บไซต์, เฮอร์แมนเฮสส์นวนิยายพระพุทธเจ้า ฉันจะใช้คำในนวนิยายเรื่องนี้เพื่อสอนอัลกอริทึมวิธีการสะกด
ดังนั้นฉันจึงเขียนอัลกอริทึมด้านล่างที่สแกนนวนิยายนี้ทีละสามตัวอักษร (แต่ละคำมีอักขระเพิ่มเติมหนึ่งตัวในตอนท้ายซึ่งก็คือ 'ช่องว่าง' หรือท้ายคำ) ลำดับสามตัวอักษรสามารถบอกคุณได้มากมายตัวอย่างเช่นตัวอักษร 'q' มักตามด้วย 'u' เสมอ ลำดับ 'ty' มักจะเกิดขึ้นในตอนท้ายของคำ; z ไม่ค่อยมีและอื่น ๆ (หมายเหตุ: ฉันสามารถป้อนคำทั้งหมดได้อย่างง่ายดายเพื่อฝึกฝนให้พูดในประโยคที่สมบูรณ์ - เป็นแนวคิดเดียวกันเพียงแค่ปรับแต่งโค้ดไม่กี่ข้อ)
ไม่มีสิ่งใดที่เกี่ยวข้องกับ MCMC แม้ว่าจะเกิดขึ้นหลังจากการฝึกอบรมเมื่อเราให้อัลกอริธึมกับตัวอักษรสุ่มสองสามตัว อัลกอริทึมสร้างคำอย่างไร ลองนึกภาพว่ามันมีบล็อค 'ใฐานะที่เป็น'; มันเพิ่มตัวอักษรอะไรต่อไป? ในระหว่างการฝึกอัลกอริธึมได้สร้างเมทริกซ์ความถี่ l * etter-sequence ขนาดใหญ่จากคำศัพท์ทั้งหมดหลายพันคำในนวนิยาย ที่ไหนสักแห่งในเมทริกซ์นั้นคือบล็อกสามตัวอักษร 'ใฐานะที่เป็น' และความถี่สำหรับตัวละครที่สามารถทำตามลำดับ อัลกอริทึมจะเลือกตัวอักษรตามความถี่ที่สามารถติดตามได้ ดังนั้นตัวอักษรที่อัลกอริธึมเลือกถัดไปขึ้นอยู่กับ - และเพียงอย่างเดียว - สามตัวสุดท้ายในคิวการสร้างคำ
นั่นคืออัลกอริทึมของ Markov Chain Monte Carlo
ฉันคิดว่าบางทีวิธีที่ดีที่สุดในการอธิบายวิธีการทำงานคือการแสดงผลลัพธ์ตามระดับการฝึกอบรมที่แตกต่างกัน ระดับการฝึกอบรมจะแตกต่างกันโดยการเปลี่ยนจำนวนรอบที่อัลกอริธึมทำแม้ว่านวนิยาย - ยิ่งผ่านไปเท่าไหร่ความแม่นยำของเมทริกซ์การเรียงลำดับความถี่จดหมายจะยิ่งมากขึ้น ด้านล่างนี้คือผลลัพธ์ - ในรูปแบบของสตริงอักขระ 100 ตัวที่ส่งออกโดยอัลกอริทึม - หลังจากการฝึกอบรมเรื่อง 'Siddharta'
ผ่านนวนิยายSiddhartha :
แล้ว whoicks ร็อคกี้ wiff ทั้งหมด mothany ยืนบนคุณ livid theartim mudded sullintionexp กลัวเขา sible ของเขา
(ทันทีมันเรียนรู้ที่จะพูดภาษาเวลช์เกือบจะสมบูรณ์แบบ; ฉันไม่ได้คาดหวังไว้)
หลังจากที่ทั้งสองผ่านนวนิยาย:
Prenskinith แอ๊วววแสดงเป็น twor เห็น th notheady theatin ที่ดิน rhatingle คือ ov ที่นั่น
หลังจากผ่านไป 10 ครั้ง:
แม้จะมี แต่การอธิษฐานด้วยแอ๊ตอนนี้มีน้ำปวดเท้าคันสุนัขของเธอแต่ละคนไม่ได้เป็นหน่วยความจำที่อ่อนแอ
และนี่คือรหัส (ใน Python ฉันเกือบจะแน่ใจว่าสิ่งนี้สามารถทำได้ใน R โดยใช้แพ็คเกจ MCMC ซึ่งมีหลาย ๆ อันในเวลาเพียง 3-4 บรรทัด)
def create_words_string(raw_string) :
""" in case I wanted to use training data in sentence/paragraph form;
this function will parse a raw text string into a nice list of words;
filtering: keep only words having more than 3 letters and remove
punctuation, etc.
"""
pattern = r'\b[A-Za-z]{3,}\b'
pat_obj = re.compile(pattern)
words = [ word.lower() for word in pat_obj.findall(raw_string) ]
pattern = r'\b[vixlm]+\b'
pat_obj = re.compile(pattern)
return " ".join([ word for word in words if not pat_obj.search(word) ])
def create_markov_dict(words_string):
# initialize variables
wb1, wb2, wb3 = " ", " ", " "
l1, l2, l3 = wb1, wb2, wb3
dx = {}
for ch in words_string :
dx.setdefault( (l1, l2, l3), [] ).append(ch)
l1, l2, l3 = l2, l3, ch
return dx
def generate_newtext(markov_dict) :
simulated_text = ""
l1, l2, l3 = " ", " ", " "
for c in range(100) :
next_letter = sample( markov_dict[(l1, l2, l3)], 1)[0]
simulated_text += next_letter
l1, l2, l3 = l2, l3, next_letter
return simulated_text
if __name__=="__main__" :
# n = number of passes through the training text
n = 1
q1 = create_words_string(n * raw_str)
q2 = create_markov_dict(q1)
q3 = generate_newtext(q2)
print(q3)
โดยทั่วไปจะใช้ MCMC เป็นทางเลือกแทนเทคนิคการจำลองแบบมอนติคาร์โล ทั้ง MCMC และเทคนิคมอนติคาร์โลอื่น ๆ ใช้ในการประเมินอินทิเกรตที่ยาก แต่ MCMC สามารถใช้งานได้มากกว่าปกติ
ตัวอย่างเช่นปัญหาที่พบบ่อยในสถิติคือการคำนวณผลลัพธ์เฉลี่ยที่เกี่ยวข้องกับแบบจำลองความน่าจะเป็น / แบบสุ่ม ทั้งเทคนิค MCMC และ Monte Carlo จะแก้ปัญหานี้โดยการสร้างลำดับของผลลัพธ์ที่จำลองขึ้นมาซึ่งเราสามารถใช้เพื่อประเมินค่าเฉลี่ยที่แท้จริง
ทั้งเทคนิค MCMC และน้ำมันดิบ Monte Carlo ทำงานเป็นสัดส่วนระยะยาวของการจำลองที่เท่ากับผลลัพธ์ที่ได้จะเท่ากับ * กับความน่าจะเป็นแบบจำลองของผลลัพธ์นั้น ดังนั้นโดยการสร้างแบบจำลองที่เพียงพอผลลัพธ์ที่ผลิตโดยทั้งสองวิธีจะถูกต้อง
* ฉันพูดเท่ากันแม้ว่าโดยทั่วไปฉันควรพูดคุยเกี่ยวกับชุดที่วัดได้ อย่างไรก็ตามบุคคลทั่วไปอาจไม่สนใจเรื่องนี้ *
อย่างไรก็ตามในขณะที่น้ำมันดิบมอนติคาร์โลเกี่ยวข้องกับการผลิตแบบจำลองอิสระหลายแห่งซึ่งแต่ละแบบมีการกระจายตามการกระจายแบบจำลอง MCMC เกี่ยวข้องกับการสร้างการเดินแบบสุ่มที่ในระยะยาว "การเข้าชม" ผลแต่ละครั้งด้วยความถี่ที่ต้องการ
ดังนั้นเคล็ดลับในการ MCMC คือการเลือกเดินแบบสุ่มที่จะ "เยี่ยมชม" แต่ละผลลัพธ์ด้วยความถี่ระยะยาวที่ต้องการ
ตัวอย่างง่ายๆอาจเป็นการจำลองจากแบบจำลองที่บอกว่าความน่าจะเป็นของผลลัพธ์ "A" คือ 0.5 และผลลัพธ์ "B" คือ 0.5 ในกรณีนี้ถ้าฉันเริ่มการเดินแบบสุ่มที่ตำแหน่ง "A" และกำหนดว่าในแต่ละขั้นตอนมันจะเปลี่ยนไปที่ตำแหน่งอื่นด้วยความน่าจะเป็น 0.2 (หรือความน่าจะเป็นอื่น ๆ ที่มากกว่า 0) ฉันอาจมั่นใจได้ว่าหลังจาก จำนวนขั้นตอนที่การเดินแบบสุ่มจะไปเยี่ยมชมแต่ละ "A" และ "B" โดยประมาณ 50% ของขั้นตอน - สอดคล้องกับความน่าจะเป็นที่กำหนดโดยแบบจำลองของเรา
เห็นได้ชัดว่านี่เป็นตัวอย่างที่น่าเบื่อมาก อย่างไรก็ตามปรากฎว่า MCMC มักจะใช้งานได้ในสถานการณ์ที่ยากที่จะใช้มาตรฐานมอนติคาร์โลหรือเทคนิคอื่น ๆ
คุณสามารถค้นหาบทความที่ครอบคลุมพื้นฐานของมันคืออะไรและทำไมมันทำงานที่นี่:
ฉันเป็นนักวิเคราะห์ DNA ที่ใช้ซอฟต์แวร์ genotyping ที่น่าจะเป็นไปได้อย่างต่อเนื่องเพื่อตีความหลักฐาน DNA และฉันต้องอธิบายวิธีการทำงานของคณะลูกขุน เป็นที่ยอมรับเราเข้าใจง่ายกว่าและฉันรู้ว่าบางสิ่งนี้ผ่านการลดความซับซ้อนของการเสียสละความถูกต้องของรายละเอียดเฉพาะในชื่อของการปรับปรุงความเข้าใจโดยรวม แต่ในบริบทของคณะลูกขุนเข้าใจว่ากระบวนการนี้ใช้ในการตีความดีเอ็นเอโดยไม่ต้องมีวุฒิการศึกษาและประสบการณ์วิชาชีพมานานหลายปีพวกเขาได้รับส่วนสำคัญ :)
ความเป็นมา: ซอฟต์แวร์ใช้มหานคร Hastings MCMC และแบบจำลองทางชีวภาพที่เลียนแบบพฤติกรรมที่รู้จักของโปรไฟล์ DNA (โมเดลถูกสร้างขึ้นตามข้อมูลการตรวจสอบที่สร้างขึ้นโดยห้องปฏิบัติการวิเคราะห์โปรไฟล์ DNA จำนวนมากจากเงื่อนไขที่รู้จักซึ่งเป็นตัวแทนของช่วงที่ไม่ทราบ) มีเครือข่ายอิสระ 8 แห่งและเราประเมินการบรรจบกันเพื่อพิจารณาว่าจะเรียกใช้อีกครั้งเพิ่มการเบิร์นอินและโพสต์ยอมรับหรือไม่ (ค่าเริ่มต้น Burnin 100k ยอมรับและโพสต์ 400k ยอมรับ)
เมื่อถูกถามโดยการฟ้องร้อง / การป้องกันเกี่ยวกับ MCMC: เราอธิบายว่ามันหมายถึงห่วงโซ่มาร์คอฟ Monte Carlo และแสดงถึงคลาส / อัลกอริทึมพิเศษที่ใช้สำหรับการแก้ปัญหาที่ซับซ้อนและอัลกอริทึมเป็นเพียงคำแฟนซีที่อ้างถึงชุดของขั้นตอนหรือกิจวัตร ดำเนินการโดยคอมพิวเตอร์ ... อัลกอริทึม mcmc ดำเนินการโดยเสนอวิธีแก้ปัญหาจำลองสถานการณ์นั้นจากนั้นประเมินว่าการจำลองนั้นสะท้อนข้อมูลหลักฐานที่แท้จริงที่สังเกตได้ดีเพียงใด ... การจำลองที่เหมาะกับการสังเกตหลักฐานมีความน่าจะเป็นสูงกว่า การจำลองที่ไม่เหมาะกับการสังเกตการณ์ ... ในการสุ่มตัวอย่าง / การเดาคำตอบของการแก้ปัญหาที่เสนอซ้ำหลายครั้งโซ่มาร์คอฟขยับออกห่างจากคำตอบที่น่าจะเป็นต่ำไปสู่การแก้ปัญหาความน่าจะเป็นสูง ประสบความสำเร็จหมายถึงอัลกอริทึมที่มีความสามารถ จำกัด ในการสุ่มตัวอย่างข้อเสนอใหม่ที่ให้ความน่าจะเป็นที่เพิ่มขึ้นอย่างมีนัยสำคัญ
เมื่อถูกถามเกี่ยวกับมหานคร Hastings: เราอธิบายว่ามันเป็นการปรับแต่งขั้นตอนวิธี MCMC ที่อธิบายถึงกระบวนการตัดสินใจของการยอมรับหรือปฏิเสธข้อเสนอ ... โดยปกตินี่จะอธิบายด้วยการเปรียบเทียบของเกมเด็ก "ร้อน / เย็น" แต่ฉันอาจพิจารณาใช้ " ปัดไปทางซ้ายหรือขวา "เมื่อคณะลูกขุนยังอายุน้อยโดยเฉพาะ !! : p แต่เมื่อใช้การเปรียบเทียบแบบร้อน / เย็นเรามักจะยอมรับการเดาแบบร้อนและจะยอมรับการเดาแบบเย็นเพียงเสี้ยวเวลาและอธิบายวัตถุประสงค์ของการยอมรับการเดาแบบเย็นในบางครั้งเพื่อให้แน่ใจว่าโซ่ตัวอย่างเป็นไปได้ในวงกว้าง ไม่เห็นด้วยกับการติดอยู่รอบ ๆ ข้อเสนอหนึ่งก่อนที่จะเกิดความสมดุลที่แท้จริง
แก้ไขเพื่อเพิ่ม / ชี้แจง: ด้วยการเปรียบเทียบร้อน / เย็นเราอธิบายว่าในเกมของเด็กผู้นำเลือกวัตถุ / พื้นที่เป้าหมายภายในห้องและผู้เล่นผลัดกันเดาทิศทางที่จะย้ายไปเทียบกับตำแหน่ง / ตำแหน่งปัจจุบันของพวกเขา ผู้นำบอกให้พวกเขาเปลี่ยนตำแหน่ง / เคลื่อนย้ายหากเป็นการเดาที่ร้อนและพวกเขาสูญเสียตาแหน่ง / อยู่ในตำแหน่งหากเป็นการคาดเดาที่เย็นชา ในทำนองเดียวกันภายในซอฟต์แวร์ของเราการตัดสินใจที่จะย้าย / ยอมรับขึ้นอยู่กับความน่าจะเป็นของข้อเสนอที่เปรียบเทียบกับความน่าจะเป็นของตำแหน่งที่จัดขึ้นในปัจจุบัน ... อย่างไรก็ตามเป้าหมายนั้นกำหนดไว้ล่วงหน้า / เป็นที่รู้จักโดยผู้นำในเกมของเด็ก เป้าหมายภายในซอฟต์แวร์ของเราไม่ได้กำหนดไว้ล่วงหน้า - ไม่เป็นที่รู้จักโดยสมบูรณ์
อย่างที่ฉันบอกไว้ว่าพื้นฐานขั้นสูงพิเศษและขาดรายละเอียดทางเทคนิคอย่างมากเพื่อปรับปรุงความเข้าใจ - เราพยายามอธิบายเกี่ยวกับการศึกษาระดับมัธยมต้น อย่าลังเลที่จะให้คำแนะนำ ฉันจะรวมพวกเขา
คำถามนี้กว้าง แต่คำตอบมักจะไม่เป็นทางการ อีกวิธีหนึ่งคุณสามารถดูกระดาษนี้ซึ่งให้คำอธิบายทางคณิตศาสตร์ที่รัดกุมของคลาส MCMC อัลกอริทึมที่กว้างขวางรวมถึงอัลกอริทึม Metropolis-Hastings การสุ่มตัวอย่างกิ๊บส์ มิลโตเนียนมอนติคาร์โล, การสุ่มตัวอย่าง NUTS, อัลกอริธึมหลอกตาร์เมทิส - เฮสติ้งส์และมิลโตเนียนมอนติคาร์โลปลอมหลอกตามที่ผู้เขียนอภิปราย
รีวิวที่น่าเชื่อถือได้รับที่นี่
ฉันจะหาเวลาเพิ่มเติมเพื่ออธิบายเนื้อหาในรูปแบบของ stackexchange
วิดีโอนี้ (เริ่มต้นที่ 5:50) มีคำแถลงที่ดีมาก
ลองนึกภาพคุณต้องการสุ่มตัวอย่างจุดที่อยู่บนกิ่งไม้สีเขียว (หลายมิติ) ในภาพนี้ หากคุณโยนคะแนนไปทั่วซูเปอร์สเปซสีดำและตรวจสอบค่าของพวกเขาแสดงว่าคุณกำลังสูญเสียพลังงานไปมาก ดังนั้นจึงเหมาะสมกว่าที่จะควบคุมกลยุทธ์การสุ่มตัวอย่างของคุณ (ซึ่งสามารถเป็นแบบอัตโนมัติ) เพื่อเลือกจุดที่ใกล้กับกิ่งสีเขียว สาขาสีเขียวสามารถพบได้โดยการกดหนึ่งครั้งโดยไม่ตั้งใจ (หรือควบคุม) และส่วนที่เหลือของการสุ่มตัวอย่าง (จุดสีแดง) จะถูกสร้างขึ้นในภายหลัง เหตุผลที่สีแดงดึงดูดสายสีเขียวนั้นเป็นเพราะเมทริกซ์การเปลี่ยนผ่านโซ่มาร์คอฟที่ทำหน้าที่เป็นเครื่องมือเก็บตัวอย่างของคุณ
ดังนั้นในแง่ของคนธรรมดา MCMC เป็นวิธีการสุ่มตัวอย่างประหยัดพลังงาน (ต้นทุนต่ำ) โดยเฉพาะอย่างยิ่งเมื่อทำงานในพื้นที่ขนาดใหญ่และ 'มืด' (หลายมิติ)