2010-07-04 14 views
8

मैं पाइथन आंकड़ों के पैकेज के लिए automatic differentiation को लागू करने का प्रयास कर रहा हूं (समस्या फॉर्मूलेशन ऑप्टिमाइज़ेशन समस्या फॉर्मूलेशन के समान है)।दूसरे व्युत्पन्न के लिए स्वत: भिन्नता कार्यान्वित करना: कम्प्यूटेशनल ग्राफ को पार करने के लिए एल्गोरिदम?

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

+1

"ऑफ-विषय" मेरे पैर (अकेले को टिप्पणी करने वाले जिसने इस तरह मतदान किया) - यह सब प्रोग्रामिंग के बारे में है, और क्या "कम्प्यूटेशनल को पार कर सकता है ग्राफ "के बारे में हो ?! (हालांकि मुझे समझ में नहीं आ रहा है कि क्यों @ जॉन अपनी पहली व्युत्पन्न कार्यक्षमता को दो बार लागू करके दूसरा व्युत्पन्न नहीं कर सकता है, ऐसा इसलिए हो सकता है क्योंकि मुझे नहीं पता कि "हेसियन" क्या है [[जर्मन-जन्मी सैनिक को छोड़कर 1776 में ब्रितियों के लिए लड़ रहे हैं! -)]])। –

+0

अपने प्रश्न का उत्तर देने के लिए, चर के बीच बातचीत के कारण दो बार अंतर करना गैर-तुच्छ है। यदि आपका कार्य एक स्केलर है (एन इनपुट के साथ), पहला व्युत्पन्न एक वेक्टर लंबाई एन है, दूसरा व्युत्पन्न एक एन^2 मैट्रिक्स है जो तीसरा व्युत्पन्न एन^3 आदि है। पहले व्युत्पन्न के लिए, आपको 1 यात्रा करना है दूसरे व्युत्पन्न के लिए आपको स्वतंत्र आश्रित चर से प्रति शब्द, दो अलग-अलग पथों की यात्रा करना है। मैं/थोड़ा चिंतित था कि यह विषय बंद था, लेकिन मुझे नहीं पता कि इस सवाल के लिए एक बेहतर मंच क्या है; यह निश्चित रूप से एक गणित अतिप्रवाह चीज नहीं है। –

+0

स्वचालित भेदभाव बिल्कुल जरूरी है?हर बार जब मैंने इसे माना है, मैंने पाया है कि हाथ से एल्गोरिदम को मैन्युअल रूप से अलग करना अधिक सरल होता है, लेकिन फिर, मेरे हेसियन आमतौर पर काफी सरल होते हैं (जैसे विकर्ण, या विश्लेषणात्मक सूत्र द्वारा गणना योग्य)। –

उत्तर

1

सबसे पहले आप अगर आप तय करना होगा (आप हेस्सियन मैट्रिक्स का प्रतिलोम गणना करने के लिए की आवश्यकता होगी) चाहते हैं कि एक स्पैस हेसियन या पूरी तरह से घने हेसियन के करीब कुछ की गणना करें।

यदि स्पैस आप चाहते हैं, तो वर्तमान में ऐसा करने के दो प्रतिस्पर्धी तरीके हैं। केवल एक चतुर रास्ते में कम्प्यूटेशनल ग्राफ का उपयोग कर, कम्प्यूटेशनल ग्राफ में से एक रिवर्स स्वीप आप edge_pushing कलन विधि का उपयोग हेस्सियन मैट्रिक्स की गणना कर सकते हैं:

http://www.tandfonline.com/doi/full/10.1080/10556788.2011.580098

या आप में अपने हेस्सियन मैट्रिक्स संकुचित करने के लिए ग्राफ रंग तकनीक की कोशिश कर सकते कम स्तंभों की एक मैट्रिक्स है, तो प्रत्येक स्तंभ

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.66.2603

गणना करने के लिए रिवर्स संचय का उपयोग क्या आप चाहते हैं एक घने हेस्सियन (व्यवहार में असामान्य) है, तो आपके शायद हेस्सियन में से एक स्तंभ की गणना के बेहतर रिवर्स संचय (ब्रूस क्रिस्टियनसन और रिवर्स संचय के लिए खोज) का उपयोग करते समय एक समय

+0

यह बहुत दिलचस्प है। क्या आपके पास पहले पेपर का पीडीएफ संस्करण है? –

-1

3 आयामों में हेस्सियन का अनुमान करने के लिए सामान्य विधि BFGS

L-BFGS विधि समान है।

Here आप स्रोत हालांकि अजगर में नहीं एल BFGS के लिए कोड कई भाषाओं में (सी #, सी ++, VBA, आदि) (जो ODEs को सुलझाने के लिए एक मध्यवर्ती परिणाम के रूप में हेस्सियन की गणना करता है) मिल सकता है। मुझे लगता है कि अनुवाद करना आसान नहीं है।

आप किसी अन्य भाषा से alg अनुवाद करने के लिए जा रहे हैं, संख्यात्मक त्रुटियों पर विशेष ध्यान दें और संवेदनशीलता विश्लेषण करना

संबंधित मुद्दे