स्वचालित भेदभाव के बारे में, स्रोत-कोड-परिवर्तन (STC) ऑपरेटर-ओवरलोडिंग (OO) से अधिक कुशल है?


12

हम एक स्पेस-टाइम प्रक्रिया के लिए एक बायेसियन मॉडल पर काम कर रहे हैं, और एक नो-यू-टर्न सैंपलर (एनयूटीएस) का उपयोग कर रहे हैं जिसमें लॉग-प्रायिकता के लिए एक मॉडल की आवश्यकता होती है और यह मॉडल मापदंडों के संबंध में ढाल है। अधिक संक्षेप में, हमारे पास काफी जटिल लॉग-प्रायिकता फ़ंक्शन , जिसमें सांख्यिकीय वितरण, क्रोनकर उत्पाद, घातांक, अनुपात, if-else स्टेटमेंट आदि शामिल हैं, और इसे प्रदान करने की आवश्यकता है। और यह NUTS के लिए ढाल है। कई पैकेज ( स्टेन और जूलिया की एमसीएमसी ) स्वचालित रूप से ढाल प्राप्त करने के लिए ऑपरेटर-ओवरलोडिंग (मेरे ज्ञान का सबसे अच्छा करने के लिए) का उपयोग करते हैं।f:RnR

यदि हम अपने स्वयं के ढाल समारोह बनाने में सक्षम थे, तो शायद एक स्रोत-कोड-परिवर्तन ऑटो-डिफरेंशियल टूल का उपयोग करके, क्या हमें बेहतर प्रदर्शन मिलेगा, या क्या ओओ केवल अच्छा या बेहतर है?

जवाबों:


9

स्रोत-से-स्रोत परिवर्तन को प्रदर्शन के मामले में सोने का मानक माना जाता है। OO दृष्टिकोण लगभग उतना ही अच्छा लगता है, कि वहाँ अधिक OO पैकेज हैं, और प्रदर्शन में एक महत्वपूर्ण कमी के रूप में उल्लेख नहीं किया गया है। यदि आप एक OO लाइब्रेरी पाते हैं, जिसे आप उस भाषा के लिए पसंद करते हैं, जिसमें आप काम कर रहे हैं, तो मैं इसे पहले इस्तेमाल करूँगा, और फिर बाद में पता लगाऊँगा कि क्या आपको स्रोत से स्रोत में परिवर्तन की आवश्यकता है, और यदि इस तरह के उपकरण से आपकी ज़रूरतें पूरी होती हैं। एक स्वचालित-विभेदीकरण-जनित व्युत्पन्न की सामान्य लागत फ़ंक्शन मूल्यांकन की तुलना में मोटे तौर पर तीन से पांच गुना है, संदर्भ में चीजों को डालने के लिए।

वहाँ और अधिक OO संकुल हैं क्योंकि यह आसान है कि यह स्रोत-से-स्रोत अनुवाद का उपयोग करने के लिए ऑपरेटर ओवरलोडिंग का उपयोग करके स्वचालित भेदभाव उपकरणों को लागू करे। स्रोत-से-स्रोत अनुवादक को लागू करना कंपाइलर लिखने के लिए समान है: स्रोत कोड को पार्स किया जाना चाहिए और टोकेनाइज्ड किया जाना चाहिए, फिर परिणामी अभिव्यक्ति ट्री में परिवर्तन नियम लागू किए जाने चाहिए। एंड्रियास ग्रिवांक की पुस्तक, इवैल्यूइंग डेरिवेटिव्स: प्रिंसिपल्स एंड टेक्निक्स ऑफ अल्गोरिदमिक डिफरेंशिएशन, दूसरा संस्करण, ट्रेडऑफ़ के बारे में अधिक विस्तार से बताता है।


धन्यवाद ज्योफ, यह बहुत मदद करता है, विशेष रूप से विशिष्ट लागतों के आपके अनुमान।
मैथ्यू एम्मेट

1

ढाल अभिकलन के लिए, आप AD के रिवर्स मोड का उपयोग करते हैं। एक ऑपरेंड स्टैक के निर्माण के लिए दोनों मामलों में इसकी आवश्यकता होती है, OO संस्करण को भी एक ऑपरेशन स्टैक का निर्माण करने की आवश्यकता होती है, जिसे कोड के रिवर्स ट्रैवर्सल में व्याख्या करना होगा। स्रोत रूपांतरित कोड रिवर्स-ऑर्डर किए गए ऑपरेशन को अतिरिक्त स्रोत कोड के रूप में लिखते हैं जो संकलित है। ओवरहेड कोड में ऑपरेशन दुभाषिया होने के लिए महत्वपूर्ण हो सकता है। टेपेनडे जनरेट कोड और एडोल-सी की तुलना है जो टेपेनडे के पक्ष में आते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.