MCMC प्रोग्राम डीबग करना बेहद कठिन है। कई मुद्दों में से कुछ के कारण यह कठिनाई उत्पन्न होती है:
(a) एल्गोरिथम की चक्रीय प्रकृति
हम इसे अन्य सभी मापदंडों पर सशर्त रूप से आरेखित करते हैं। इस प्रकार, यदि कोई कार्यान्वयन ठीक से काम नहीं कर रहा है, तो बग को अलग करना मुश्किल है क्योंकि समस्या पुनरावृत्ति नमूना में कहीं भी हो सकती है।
(b) सही उत्तर आवश्यक नहीं है।
हमारे पास यह बताने का कोई तरीका नहीं है कि क्या हमने अभिसरण प्राप्त किया है। कुछ हद तक सिम्युलेटेड डेटा पर कोड का परीक्षण करके इसे कम किया जा सकता है।
उपरोक्त मुद्दों के प्रकाश में, मैं सोच रहा था कि क्या कोई मानक तकनीक है जिसका उपयोग MCMC कार्यक्रमों को डीबग करने के लिए किया जा सकता है।
संपादित करें
मैं अपने स्वयं के कार्यक्रमों को डीबग करने के लिए उपयोग किए जाने वाले दृष्टिकोण को साझा करना चाहता था। मैं, निश्चित रूप से, उन सभी चीजों को करता हूं जिनका पीटर ने उल्लेख किया था। उन लोगों के अलावा, मैं सिम्युलेटेड डेटा का उपयोग करके निम्नलिखित परीक्षण करता हूं:
सभी मापदंडों को सच्चे मूल्यों से शुरू करें और देखें कि क्या नमूना लेने वाला सच्चे मूल्यों से बहुत दूर है।
मेरे पुनरावृत्ति नमूने में प्रत्येक पैरामीटर के लिए झंडे हैं जो यह निर्धारित करते हैं कि क्या मैं उस पैरामीटर को पुनरावृत्त नमूने में खींच रहा हूं। उदाहरण के लिए, यदि कोई ध्वज 'gen_param1' सही पर सेट है, तो मैं पुनरावृत्त नमूने में इसकी पूर्ण स्थिति से 'param1' खींचता हूं। यदि यह असत्य पर सेट है, तो 'परम 1' अपने वास्तविक मूल्य पर सेट है।
एक बार जब मैं नमूना लिखने का काम पूरा कर लेता हूं, तो मैं निम्नलिखित नुस्खा का उपयोग करके कार्यक्रम का परीक्षण करता हूं:
- एक पैरामीटर को सही और बाकी सब चीज़ों के लिए जेनरेट फ्लैग सेट करें और सही मूल्य के संबंध में अभिसरण का आकलन करें।
- पहले एक के साथ संयोजन में दूसरे पैरामीटर के लिए उत्पन्न ध्वज सेट करें और फिर से अभिसरण का आकलन करें।
उपरोक्त कदम मेरे लिए अविश्वसनीय रूप से सहायक रहे हैं।