क्या MCMC कार्यक्रमों को डिबग करने के लिए एक मानक तकनीक है?


11

MCMC प्रोग्राम डीबग करना बेहद कठिन है। कई मुद्दों में से कुछ के कारण यह कठिनाई उत्पन्न होती है:

(a) एल्गोरिथम की चक्रीय प्रकृति

हम इसे अन्य सभी मापदंडों पर सशर्त रूप से आरेखित करते हैं। इस प्रकार, यदि कोई कार्यान्वयन ठीक से काम नहीं कर रहा है, तो बग को अलग करना मुश्किल है क्योंकि समस्या पुनरावृत्ति नमूना में कहीं भी हो सकती है।

(b) सही उत्तर आवश्यक नहीं है।

हमारे पास यह बताने का कोई तरीका नहीं है कि क्या हमने अभिसरण प्राप्त किया है। कुछ हद तक सिम्युलेटेड डेटा पर कोड का परीक्षण करके इसे कम किया जा सकता है।

उपरोक्त मुद्दों के प्रकाश में, मैं सोच रहा था कि क्या कोई मानक तकनीक है जिसका उपयोग MCMC कार्यक्रमों को डीबग करने के लिए किया जा सकता है।

संपादित करें

मैं अपने स्वयं के कार्यक्रमों को डीबग करने के लिए उपयोग किए जाने वाले दृष्टिकोण को साझा करना चाहता था। मैं, निश्चित रूप से, उन सभी चीजों को करता हूं जिनका पीटर ने उल्लेख किया था। उन लोगों के अलावा, मैं सिम्युलेटेड डेटा का उपयोग करके निम्नलिखित परीक्षण करता हूं:

  1. सभी मापदंडों को सच्चे मूल्यों से शुरू करें और देखें कि क्या नमूना लेने वाला सच्चे मूल्यों से बहुत दूर है।

  2. मेरे पुनरावृत्ति नमूने में प्रत्येक पैरामीटर के लिए झंडे हैं जो यह निर्धारित करते हैं कि क्या मैं उस पैरामीटर को पुनरावृत्त नमूने में खींच रहा हूं। उदाहरण के लिए, यदि कोई ध्वज 'gen_param1' सही पर सेट है, तो मैं पुनरावृत्त नमूने में इसकी पूर्ण स्थिति से 'param1' खींचता हूं। यदि यह असत्य पर सेट है, तो 'परम 1' अपने वास्तविक मूल्य पर सेट है।

एक बार जब मैं नमूना लिखने का काम पूरा कर लेता हूं, तो मैं निम्नलिखित नुस्खा का उपयोग करके कार्यक्रम का परीक्षण करता हूं:

  • एक पैरामीटर को सही और बाकी सब चीज़ों के लिए जेनरेट फ्लैग सेट करें और सही मूल्य के संबंध में अभिसरण का आकलन करें।
  • पहले एक के साथ संयोजन में दूसरे पैरामीटर के लिए उत्पन्न ध्वज सेट करें और फिर से अभिसरण का आकलन करें।

उपरोक्त कदम मेरे लिए अविश्वसनीय रूप से सहायक रहे हैं।

जवाबों:


10

मानक प्रोग्रामिंग अभ्यास:

  • जब डिबगिंग यादृच्छिकता के नियत स्रोतों (यानी एक ही बीज) के साथ सिमुलेशन को चलाते हैं ताकि कोई भी परिवर्तन कोड परिवर्तनों के कारण हो न कि अलग-अलग यादृच्छिक संख्याओं के कारण।
  • एक मॉडल (या कई मॉडल) पर अपना कोड आज़माएं जहां उत्तर IS को ज्ञात हो।
  • अच्छी प्रोग्रामिंग आदतों को अपनाएं ताकि आप कम बग का परिचय दें।
  • आपके द्वारा प्राप्त उत्तरों के बारे में बहुत कठिन और लंबे समय तक सोचें, चाहे वे समझ में आएं, आदि।

मैं आपको शुभकामनाएं देता हूं, और बहुत सारी कॉफी!


3

मेरे पास यहां साझा करने के लिए एक निराशाजनक और बहुत ही विशिष्ट किस्सा नहीं है। मैंने कुछ समय एक सांख्यिकीय एमटी शोधकर्ता के सह-कार्यकर्ता के रूप में बिताया। यदि आप वास्तव में बड़ा, जटिल, मॉडल देखना चाहते हैं, तो आगे न देखें।

वह एनएलपी बूटकैंप के माध्यम से मुझे अपने मनोरंजन के लिए डाल रहा था। मैं, सामान्य रूप से, प्रोग्रामर का प्रकार जो यूनिट टेस्ट और डिबगर द्वारा जीवित और मर जाता है। प्रतीक के रूप में एक युवा व्यक्ति के रूप में, मैं कामोद्दीपकता से मारा गया था, 'प्रोग्रामिंग एक खाली संपादक बफर को डिबग कर रहा है।' (एक अवधारणात्मक मॉडल के प्रशिक्षण की तरह।)

इसलिए, मैंने उनसे पूछा, 'आप इस सामान का परीक्षण और डीबग कैसे करते हैं।' उन्होंने जवाब दिया, "आप इसे पहली बार सही पाते हैं। आप इसे (उनके मामले में, अक्सर कागज पर) बहुत सावधानी से सोचते हैं, और आप इसे बहुत सावधानी से कोड करते हैं। क्योंकि जब आप इसे गलत करते हैं, तो समस्या को अलग करने की संभावना होती है। बहुत पतली।"


मैंने यह किस्सा पहले भी सुना है (शायद आपसे भी?)। यह मेरे लिए घर पर आया, और पहली बार सुनने के बाद से, यह कई मौकों (यानी समस्या को अलग करने की कठिनाई) पर सच हो गया है।
Redmoskito

3

पीटरआर के उत्तर में अच्छी युक्तियां; वास्तविक डिबगिंग के लिए मेरे पास और कोई सुझाव नहीं है, लेकिन मुझे परीक्षण के लिए एक बहुत उपयोगी कार्यवाही मिली अगर आपका कोड बग हो सकता है। यह इस पत्र में वर्णित है:

http://pubs.amstat.org/doi/abs/10.1198/016214504000001132

अनिवार्य रूप से इस विचार में दो सिमुलेशन हैं: एक आपके मॉडल के मापदंडों (अनुमान के लिए) के लिए एमसीएमसी है। दूसरा सिम्युलेटर केवल पूर्व से मापदंडों का नमूना लेता है। वे दोनों सिमुलेटर के मापदंडों से डेटा उत्पन्न करते हैं, और मापदंडों और डेटा के संयुक्त वितरण की तुलना करते हुए एक परीक्षण सांख्यिकीय की गणना करते हैं। यदि MCMC कोड पीछे के मापदंडों को सही ढंग से मापता है, तो परीक्षण आँकड़ा में N (0,1) का वितरण होगा। परीक्षण सांख्यिकीय की गणना के लिए कोड उपलब्ध है।


कुक एट अल में एक संबंधित दृष्टिकोण पाया जा सकता है। (2006; stat.columbia.edu/~gelman/research/published/… )। मैंने दो अवसरों पर कुक एट अल के दृष्टिकोण का उपयोग किया है, और मैं परिणामों से प्रभावित हुआ हूं। मैंने Geweke के दृष्टिकोण का उपयोग नहीं किया है, लेकिन कुक एट अल के अनुसार, "Geweke के दृष्टिकोण का लाभ है कि केवल एक प्रतिकृति को प्रदर्शन करने की आवश्यकता है ... एक नुकसान यह है कि इसे परीक्षण किए जाने वाले सॉफ़्टवेयर को बदलने की आवश्यकता है।" वे यह भी कहते हैं कि ग्वेके के दृष्टिकोण के लिए परिमित विचरण वाले पादरियों की आवश्यकता होती है, जबकि उनकी नहीं है।
jmtroos
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.