มีการปรับปรุงอะไรบ้างที่รู้จักกันดีในอัลกอริทึม MCMC แบบเรียนที่ผู้คนใช้สำหรับการอนุมานแบบเบย์?


21

เมื่อฉันเขียนโค้ดสำหรับการจำลอง Monte Carlo สำหรับปัญหาบางอย่างและตัวแบบนั้นง่ายพอฉันใช้การสุ่มตัวอย่างตำราเรียนพื้นฐานกิ๊บส์ เมื่อเป็นไปไม่ได้ที่จะใช้การสุ่มตัวอย่างของกิ๊บส์ฉันจะเขียนรหัสตำราเรียน Metropolis-Hastings ที่ฉันเรียนรู้เมื่อหลายปีก่อน ความคิดเดียวที่ฉันมอบให้คือเลือกการกระจายการกระโดดหรือพารามิเตอร์

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

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

มีทางเลือกอื่น ๆ ที่รู้จักกันดีใน Metropolis-Hastings หรือไม่:

  • ใช้งานง่ายพอสมควร
  • เป็นที่ยอมรับในระดับสากลว่าเป็น MH
  • และปรับปรุงผลลัพธ์ของ MH ให้ดีขึ้นอยู่เสมอ (การคำนวณประสิทธิภาพความแม่นยำ ฯลฯ )

ฉันรู้เกี่ยวกับการปรับปรุงที่พิเศษมากสำหรับโมเดลที่มีความพิเศษมาก แต่มีบางสิ่งที่ทุกคนใช้โดยทั่วไปที่ฉันไม่รู้


1
คุณหมายถึง Markov chain Monte Carlo หรือไม่ การปรับปรุงตำราเรียนสำหรับการจำลอง Monte Carlo ที่ฉันสามารถนึกถึงเกี่ยวข้องกับการสุ่มตัวอย่างแบบ antithetic และ / หรือการแบ่งชั้นเช่นเดียวกับ quasi-Monte Carlo แม้ว่าการอ้างถึง Gibbs และ Metropolis-Hastings ของคุณเป็นสิ่งที่บ่งบอกถึงการคำนวณแบบเบย์
StasK

@StasK ใช่ฉันสนใจในแบบจำลอง Bayesian และแบบจำลองทางสถิติเชิงสถิติ (ซึ่งเป็นเพียงการอนุมานแบบ Bayesian ในการแจกแจงแบบ gibbs p (x) = 1 / Z exp (-E (x) / T) ขออภัยที่ไม่ได้กล่าวถึง
Rafael S. Calsaverini

3
(+1) ตกลงที่ดีวัตถุประสงค์ทั่วไปขั้นตอนวิธีการปรับตัว "เมื่อเร็ว ๆ นี้" ตีพิมพ์และนำมาใช้ในการวิจัย, Python และ Matlab แล้วเป็นtwalk มันใช้งานได้ดี แต่มันก็เป็นแนวปฏิบัติที่ดีในการตรวจสอบซ้ำโดยใช้วิธีอื่น BTW, MH จะดำเนินการในแพคเกจ R MCMC แน่นอนมีคนอื่นอีกหลายคน แต่ส่วนใหญ่ไม่ได้นำไปใช้ในระดับทั่วไปและ / หรือยากที่จะนำไปใช้ พื้นที่ยอดนิยมอื่นในปัจจุบันคือ Sequential Monte Carlo ฉันหวังว่านี่จะช่วยได้.

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

1
ฉันไม่รู้อะไรเลยเกี่ยวกับ ABC แต่ฉันจะดีใจถ้าใครสามารถอธิบายเล็กน้อยเกี่ยวกับความแตกต่างระหว่างวิธีการ ABC และ MCMC ...
Manoel Galdino

คำตอบ:


20

ฉันไม่ใช่ผู้เชี่ยวชาญในเรื่องเหล่านี้ แต่ฉันคิดว่าฉันจะพาพวกเขาไปที่นั่นเพื่อดูว่าชุมชนคิดอย่างไร ยินดีต้อนรับการแก้ไข

วิธีการหนึ่งที่ได้รับความนิยมมากขึ้นซึ่งไม่ได้นำไปใช้อย่างตรงไปตรงมาเรียกว่าHamiltonian Monte Carlo (หรือบางครั้ง Hybrid Monte Carlo) มันใช้แบบจำลองทางกายภาพที่มีศักยภาพและพลังงานจลน์เพื่อจำลองลูกบอลกลิ้งไปรอบ ๆ พื้นที่พารามิเตอร์ดังที่อธิบายไว้ในบทความนี้โดย Radford Neal แบบจำลองทางกายภาพใช้ทรัพยากรการคำนวณในปริมาณที่พอสมควรดังนั้นคุณมักจะได้รับการอัพเดทน้อยลง แต่การปรับปรุงมีความสัมพันธ์น้อยกว่า HMC เป็นเครื่องมือที่อยู่เบื้องหลังซอฟต์แวร์STANใหม่ที่ได้รับการพัฒนาให้เป็นทางเลือกที่มีประสิทธิภาพและยืดหยุ่นมากขึ้นสำหรับ BUGS หรือ JAGS สำหรับการสร้างแบบจำลองทางสถิติ

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

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

หวังว่านี่จะช่วยได้

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