दो छोटे जवाब
सैद्धांतिक दृष्टिकोण से संक्षिप्त उत्तर यह है कि ...
एक गतिशील कम्प्यूटेशनल ग्राफ एक उत्परिवर्तनीय प्रणाली है जिसे संचालन के बीच डेटा प्रवाह के निर्देशित ग्राफ के रूप में दर्शाया गया है। इसे तीरों से जुड़े पाठ के आकार के रूप में देखा जा सकता है, जिससे कोने (आकार) किनारों (तीर) के साथ बहने वाले डेटा पर संचालन का प्रतिनिधित्व करते हैं।
ध्यान दें कि ऐसा ग्राफ डेटा प्रवाह में निर्भरता को परिभाषित करता है, लेकिन जरूरी नहीं कि संचालन के आवेदन का अस्थायी आदेश, जो अस्थायी पूर्वाग्रह को निर्दिष्ट करने के लिए अतिरिक्त तंत्र के बिना ग्राफ़ में स्थिति या चक्र में राज्य की अवधारण में अस्पष्ट हो सकता है।
अनुप्रयोगों के विकास के दृष्टिकोण से संक्षिप्त उत्तर यह है कि ...
एक गतिशील कम्प्यूटेशनल ग्राफ़ फ्रेमवर्क पुस्तकालयों, इंटरफेस और घटकों की एक प्रणाली है जो एक लचीला, प्रोग्रामेटिक, रन टाइम इंटरफ़ेस प्रदान करता है जो एक परिमित लेकिन शायद संचालन के एक्स्टेंसिबल सेट को जोड़कर सिस्टम के निर्माण और संशोधन की सुविधा प्रदान करता है।
PyTorch फ्रेमवर्क
PyTorch, Python भाषा और डेटा संरचना के साथ मशाल ढांचे का एकीकरण है। मशाल में थीनो, टेंसोरफ्लो और अन्य गतिशील कम्प्यूटेशनल सिस्टम निर्माण ढांचे के साथ प्रतिस्पर्धा होती है।
—— अतिरिक्त दृष्टिकोण समझने के लिए ——
मनमाना कम्प्यूटेशनल संरचनाएं
एक घटक जो एक कम्प्यूटेशनल सिस्टम के निर्माण के लिए इस्तेमाल किया जा सकता है वह एक तत्व है जिसे तंत्रिका नेटवर्क बनाने के लिए परस्पर जोड़ा गया है। इन की उपलब्धता निर्माण गहन सीखने और तंत्रिका नेटवर्क के वापस प्रसार का समर्थन करती है। घटकों की विधानसभा को शामिल करने वाली अन्य प्रणालियों की एक विस्तृत विविधता जो मनमाने ढंग से परिभाषित कम्प्यूटेशनल संरचनाओं में संभावित बहुआयामी डेटा के साथ काम करती है, का निर्माण भी किया जा सकता है।
डेटा स्केलर मान हो सकते हैं, जैसे कि फ्लोटिंग पॉइंट नंबर, पूर्णांक, या तार, या इनका ऑर्थोगोनल एकत्रीकरण, जैसे कि वैक्टर, मेट्रिसेस, क्यूब्स या हाइपर-क्यूब्स। इन डेटा फ़ार्मों के सामान्यीकरण पर किए गए कार्य, असतत टेनर्स होते हैं और टेंसर संचालन की असेंबली से कार्य प्रणालियों में निर्मित संरचनाएँ डेटा फ़्लो होती हैं।
गतिशील संगणना अवधारणा को समझने के लिए संदर्भ के बिंदु
गतिशील कम्प्यूटेशनल रेखांकन विशेष रूप से नई अवधारणा नहीं है, भले ही यह शब्द अपेक्षाकृत नया हो। डेटा साइंटिस्ट शब्द के रूप में कंप्यूटर वैज्ञानिकों के बीच डीसीजी में रुचि नई नहीं है। बहरहाल, सवाल सही ढंग से बताता है कि कुछ अच्छे लिखित संसाधन उपलब्ध हैं (कोड उदाहरणों के अलावा) जिनसे कोई भी व्यक्ति अपने उद्भव और उपयोग के आसपास की समग्र अवधारणा को जान सकता है।
DCGs को समझने के लिए शुरुआत के लिए एक संभव बिंदु कमांड डिज़ाइन पैटर्न है जो ऑब्जेक्ट ओरिएंटेड डिज़ाइन के समर्थकों द्वारा लोकप्रिय कई डिज़ाइन पैटर्न में से एक है। कमांड डिज़ाइन पैटर्न ऑपरेशंस को गणना इकाइयों के रूप में मानता है जिसका विवरण कमांड ऑब्जेक्ट्स से छिपा हुआ है जो उन्हें ट्रिगर करता है। कमांड डिज़ाइन पैटर्न का उपयोग अक्सर इंटरप्रेटर डिज़ाइन पैटर्न के साथ संयोजन में किया जाता है।
DCGs के मामले में, कम्पोजिट और फेकडे डिजाइन पैटर्न परिभाषा प्लग-एंड-प्ले असतत टेंसर संचालन को सुविधाजनक बनाने के लिए भी शामिल हैं जिन्हें सिस्टम बनाने के लिए पैटर्न में एक साथ इकट्ठा किया जा सकता है।
सिस्टम बनाने के लिए डिज़ाइन पैटर्न का यह विशेष संयोजन वास्तव में एक सॉफ्टवेयर अमूर्तता है जो मोटे तौर पर उस कट्टरपंथी विचार से मिलता-जुलता है जिसके कारण आज अधिकांश कंप्यूटरों में वॉन न्यूमैन वास्तुकला का उदय हुआ। कंप्यूटर के उद्भव के लिए वॉन न्यूमैन का योगदान बूलियन तर्क, अंकगणित, और शाखाओं में बंटने वाले मनमाने एल्गोरिदम को अनुमति देने का विचार है जो डेटा - एक कार्यक्रम के रूप में दर्शाया और संग्रहीत किया जाता है।
DCGs का एक अन्य अग्रदूत अभिव्यक्ति इंजन है। अभिव्यक्ति इंजन अंकगणितीय इंजन की तरह सरल हो सकता है और मैथेमेटिका जैसे अनुप्रयोगों के रूप में जटिल हो सकता है। एक नियम इंजन DCGs की तरह ही होता है, सिवाय इसके कि नियम इंजन घोषणात्मक होते हैं और नियम घोषणाओं के लिए मेटा-नियम उन घोषणाओं पर काम करते हैं।
कार्यक्रम हेरफेर कार्यक्रम
DCG के साथ इनका जो आम है वह यह है कि लागू किए जाने वाले डेटा और संचालन के प्रवाह को रन टाइम पर परिभाषित किया जा सकता है। DCG के साथ, इनमें से कुछ सॉफ़्टवेयर पुस्तकालयों और अनुप्रयोगों में कार्यात्मक विवरणों पर लागू होने की अनुमति देने के लिए एपीआई या अन्य तंत्र हैं। यह अनिवार्य रूप से एक कार्यक्रम का विचार है जो किसी अन्य कार्यक्रम के हेरफेर की अनुमति देता है।
इस सिद्धांत को एक आदिम स्तर पर समझने के लिए एक और संदर्भ बिंदु स्विच-केस स्टेटमेंट है जो कुछ कंप्यूटर भाषाओं में उपलब्ध है। यह एक स्रोत कोड संरचना है जिसके तहत प्रोग्रामर अनिवार्य रूप से व्यक्त करता है, "हमें यकीन नहीं है कि क्या किया जाना चाहिए, लेकिन इस चर का मूल्य वास्तविक समय निष्पादन मॉडल को बताएगा कि संभावनाओं के एक सेट से क्या करना है।"
स्विच-केस स्टेटमेंट एक एब्स्ट्रैक्शन है जो निर्णय को स्थगित करने के विचार को बढ़ाता है जब तक कि रन टाइम तक गणना की दिशा में नहीं। यह एक समकालीन सीपीयू की नियंत्रण इकाई के अंदर और कुछ एल्गोरिथ्म विवरणों को हटाने की अवधारणा के विस्तार के साथ जो किया जाता है, उसका सॉफ्टवेयर संस्करण है। C ++, Java, या Python में C या बहुरूपता में फंक्शनलर्स (फंक्शन पॉइंटर्स) की एक तालिका अन्य प्रमुख उदाहरण हैं।
गतिशील संगणना अमूर्तता को और आगे ले जाती है। वे सबसे अधिक बचाव करते हैं यदि सभी अभिकलन के विनिर्देश और उनके बीच के रिश्तों को चलाने के लिए नहीं। यह व्यापक सामान्यीकरण रन टाइम पर कार्यात्मक संशोधन की संभावनाओं को व्यापक बनाता है।
कम्प्यूटेशन का निर्देशित ग्राफ प्रतिनिधित्व
यही डायनामिक कम्प्यूटेशनल मॉडल है। अब ग्राफ भाग के लिए।
एक बार चलने के समय तक किसी भी संचालन की पसंद को स्थगित करने का निर्णय लेने के बाद, संचालन, उनके निर्भरता संबंधों और शायद मानचित्रण मापदंडों को पकड़ने के लिए एक संरचना की आवश्यकता होती है। इस तरह का प्रतिनिधित्व एक वाक्य्यात्मक पेड़ से अधिक है (जैसे कि स्रोत कोड के पदानुक्रम का प्रतिनिधित्व करने वाला एक पेड़)। असेंबली लैंग्वेज प्रोग्राम या मशीन कोड के विपरीत, यह आसानी से और मनमाने ढंग से होना चाहिए। इसमें डेटा फ्लो ग्राफ की तुलना में अधिक जानकारी और मेमोरी मैप की तुलना में बहुत अधिक जानकारी होनी चाहिए। कम्प्यूटेशनल संरचना को निर्दिष्ट करने वाली डेटा संरचना कैसी होनी चाहिए?
सौभाग्य से निर्दिष्ट कार्यों के बीच निर्भरता के एक निर्देशित ग्राफ के रूप में किसी भी मनमाना, परिमित, बाध्य एल्गोरिथ्म का प्रतिनिधित्व किया जा सकता है। इस तरह के एक ग्राफ में, कोने (अक्सर प्रदर्शित होने पर विभिन्न आकृतियों के नोड्स के रूप में दर्शाए जाते हैं) डेटा पर किए गए संचालन का प्रतिनिधित्व करते हैं और किनारों (अक्सर प्रदर्शित किए जाने पर तीर के रूप में दर्शाया जाता है) कुछ ऑपरेशन (या सिस्टम इनपुट) से उत्पन्न होने वाली जानकारी का डिजिटल प्रतिनिधित्व होते हैं और जिस पर अन्य संचालन (या सिस्टम आउटपुट) निर्भर करते हैं।
ध्यान रखें कि निर्देशित ग्राफ़ न तो एक एल्गोरिथ्म है (जिसमें संचालन का एक सटीक क्रम निर्दिष्ट है) और न ही एक घोषणा (उस डेटा में स्पष्ट रूप से संग्रहीत और लूप, शाखाएं, फ़ंक्शन और मॉड्यूल निश्चित और नेस्टेड हो सकते हैं)।
इनमें से अधिकांश डायनामिक कम्प्यूटेशनल ग्राफ़ फ़्रेमवर्क और लाइब्रेरीज़ घटक को इनपुट सीखने वाले घटक इनपुट पर कंप्यूटेशन करने की अनुमति देते हैं। निर्देशित ग्राफ में ऊर्ध्वाधर तंत्रिका जाल या घटकों के निर्माण के लिए न्यूरॉन्स के सिमुलेशन हो सकते हैं जो अंतर पथरी का समर्थन करते हैं। ये चौखटे उन निर्माणों की संभावनाएँ प्रस्तुत करते हैं जिनका उपयोग अधिक सामान्यीकृत अर्थों में गहन सीखने के लिए किया जा सकता है।
कंप्यूटर इतिहास के संदर्भ में
फिर, कंप्यूटर विज्ञान के लिए अब तक वर्णित कुछ भी नया नहीं है। LISP कम्प्यूटेशनल स्कीमैटिक्स को अन्य एल्गोरिदम द्वारा संशोधित करने की अनुमति देता है। और सामान्यीकृत इनपुट आयामीता और संख्यात्मकता को लंबे समय तक प्लग-एंड-प्ले इंटरफेस और प्रोटोकॉल के एक नंबर में बनाया गया है। एक ही मध्य बीसवीं शताब्दी की अवधि में भी सीखने के लिए एक रूपरेखा का विचार।
लोकप्रियता में क्या नया और लाभकारी है एकीकृत विशेषताओं का एक विशेष संयोजन और शब्दावली का संबद्ध सेट, प्रत्येक सुविधाओं के लिए मौजूदा शब्दावली का एकत्रीकरण, सॉफ्टवेयर उद्योग में पहले से ही अध्ययन करने और काम करने वालों के लिए व्यापक आधार के लिए अग्रणी। ।
- एपीआई इंटरफेस के समकालीन (ट्रेंडी) स्वाद
- वस्तु अभिविन्यास
- असतत टेंसर समर्थन
- निर्देशित ग्राफ अमूर्तता
- लोकप्रिय भाषाओं और पैकेजों के साथ अंतर, जो बड़े डेटा, डेटा माइनिंग, मशीन लर्निंग और सांख्यिकीय विश्लेषण का समर्थन करते हैं
- मनमाना और व्यवस्थित तंत्रिका नेटवर्क निर्माण के लिए समर्थन
- गतिशील तंत्रिका नेटवर्क संरचनात्मक अनुकूलन की संभावना (जो तंत्रिका प्लास्टिसिटी पर प्रयोग की सुविधा देता है)
इन रूपरेखाओं में से कई इनपुट आयामीता (आयामों की संख्या और प्रत्येक की सीमा) को बदलने के लिए अनुकूलन क्षमता का समर्थन करते हैं।
कंपाइलर्स में एब्सट्रैक्ट सिंबल ट्रीज़ की समानता
इनपुट और आउटपुट के आउटपुट का एक निर्भरता ग्राफ अमूर्त प्रतीक पेड़ों (एएसटी) के भीतर भी दिखाई देता है, जो कुछ अधिक प्रगतिशील संकलक स्रोत कोड संरचना की व्याख्या के दौरान निर्माण करते हैं। एएसटी को तब पुस्तकालयों के साथ जोड़ने और एक निष्पादन योग्य बनाने की प्रक्रिया में कोडांतरक निर्देश या मशीन निर्देश उत्पन्न करने के लिए उपयोग किया जाता है। एएसटी एक निर्देशित ग्राफ है जो डेटा की संरचना, प्रदर्शन किए गए संचालन और स्रोत कोड द्वारा निर्दिष्ट नियंत्रण प्रवाह का प्रतिनिधित्व करता है।
डेटा प्रवाह बस संचालन के बीच निर्भरता का सेट है, जो एएसटी में एएसटी के लिए अंतर्निहित होना चाहिए ताकि कोडांतरक या मशीन कोड में निष्पादन निर्देश बनाने के लिए उपयोग किया जा सके जो स्रोत कोड में निर्दिष्ट एल्गोरिथ्म का सटीक रूप से पालन करता है।
डायनामिक कम्प्यूटेशनल ग्राफ़ फ्रेमवर्क, कंपाइलर्स में स्विच-केस स्टेटमेंट या एएसटी मॉडल के विपरीत, वास्तविक समय में हेरफेर किया जा सकता है, अनुकूलित किया जा सकता है, (प्लास्टिक कृत्रिम जाल के मामले में), उलटा, टेनर्स द्वारा तब्दील, विघटित, जोड़ने या हटाने के लिए संशोधित। एंट्रोपी, नियमों के एक सेट के अनुसार उत्परिवर्तित, या अन्यथा व्युत्पन्न रूपों में अनुवादित। उन्हें फ़ाइलों या धाराओं के रूप में संग्रहीत किया जा सकता है और फिर उनसे पुनर्प्राप्त किया जा सकता है।
यह LISP प्रोग्रामर या उन लोगों के लिए एक तुच्छ अवधारणा है जो डेटा के रूप में परिचालन विनिर्देशों को संग्रहीत करने के लिए जॉन वॉन न्यूमैन की सिफारिश की प्रकृति को समझते हैं। इस बाद के अर्थ में, एक प्रोग्राम एक कंपाइलर और ऑपरेटिंग सिस्टम, वीएलएसआई डिजिटल सर्किटरी में लागू एक गतिशील कम्प्यूटेशनल सिस्टम के माध्यम से निर्देश देने के लिए एक डेटा स्ट्रीम है।
अनुकूलनीय आयाम और न्यूमेरोसिटी प्राप्त करना
प्रश्न में टिप्पणी यह है कि कोई भी व्यक्ति, "डेटा सेट करने की आवश्यकता नहीं है - कि इसके भीतर सभी उदाहरणों में समान, निश्चित संख्या में इनपुट होते हैं।" यह कथन सटीक समझ को बढ़ावा नहीं देता है। इनपुट अनुकूलन क्षमता के बारे में क्या कहना है, इसके स्पष्ट तरीके हैं।
एक DCG और एक समग्र प्रणाली के अन्य घटकों के बीच के इंटरफ़ेस को परिभाषित किया जाना चाहिए, लेकिन इन इंटरफेस में गतिशील गतिशीलता या संख्यात्मकता हो सकती है। यह अमूर्तता की बात है।
उदाहरण के लिए, एक असतत टेंसर ऑब्जेक्ट प्रकार एक विशिष्ट सॉफ़्टवेयर इंटरफ़ेस प्रस्तुत करता है, फिर भी एक टेंसर एक गतिशील गणितीय अवधारणा है जिसके चारों ओर एक सामान्य इंटरफ़ेस का उपयोग किया जा सकता है। एक असतत टेंसर एक अदिश, एक वेक्टर, एक मैट्रिक्स, एक क्यूब या एक हाइपर-क्यूब हो सकता है, और प्रत्येक आयाम के लिए निर्भर चर की श्रेणी परिवर्तनीय हो सकती है।
यह मामला हो सकता है कि डायनामिक कम्प्यूटेशनल ग्राफ में परिभाषित प्रणाली की एक परत में नोड्स की मात्रा किसी विशेष प्रकार के इनपुट की संख्या का एक कार्य हो सकती है, और वह भी समय को चलाने के लिए एक गणना विघटित हो सकती है।
परत संरचना (स्विच-केस प्रतिमान का एक विस्तार फिर से) का चयन करने के लिए रूपरेखा तैयार की जा सकती है या संरचना के आकार और गहराई या सक्रियण को परिभाषित करने वाले मापदंडों की गणना कर सकते हैं। हालाँकि ये परिष्कृत विशेषताएं वे नहीं हैं जो एक गतिशील कम्प्यूटेशनल ग्राफ़ ढांचे के रूप में रूपरेखा को योग्य बनाती हैं।
डायनामिक कम्प्यूटेशनल ग्राफ़ का समर्थन करने के लिए एक रूपरेखा क्या योग्य है?
डायनामिक कम्प्यूटेशनल ग्राफ फ्रेमवर्क के रूप में अर्हता प्राप्त करने के लिए, फ्रेमवर्क को चलाने के लिए एल्गोरिदम के निर्धारण के समर्थन का समर्थन करना चाहिए, इसलिए कम्प्यूटेशनल निर्भरता और संचालन के समय पर डेटा प्रवाह के संचालन के ढेर को खोलना। स्थगित किए गए ऑपरेशनों की मूल बातों में निर्देशन, हेरफेर, निष्पादन, और निर्देशित ग्राफ़ का भंडारण शामिल होना चाहिए जो ऑपरेशन की प्रणालियों का प्रतिनिधित्व करते हैं।
यदि एल्गोरिथ्म के विनिर्देश को रन टाइम तक स्थगित नहीं किया जाता है, लेकिन एक विशिष्ट ऑपरेटिंग सिस्टम के लिए डिज़ाइन किए गए निष्पादन योग्य में संकलित किया जाता है, तो केवल निम्न-स्तरीय भाषाओं द्वारा प्रदान की जाने वाली पारंपरिक लचीलापन जैसे कि if-then, अन्यथा, स्विच-केस, बहुरूपता, सरणियाँ फंक्शनलर्स, और वैरिएबल लेंथ स्ट्रिंग्स, इसे स्टैटिक एल्गोरिथम माना जाता है।
यदि संचालन, उनके बीच निर्भरताएं, डेटा प्रवाह, प्रवाह के भीतर डेटा की गतिशीलता, और इनपुट संख्यात्मकता और आयामीता के लिए सिस्टम की अनुकूलनशीलता एक अत्यधिक अनुकूली प्रणाली बनाने के लिए एक तरह से रन टाइम पर सभी चर हैं, तब एल्गोरिथ्म इन तरीकों से गतिशील है।
फिर से, LISP प्रोग्राम, जो LISP प्रोग्राम पर काम करते हैं, मेटा-नियम क्षमताओं के साथ नियम इंजन, अभिव्यक्ति इंजन, असतत टेंसर ऑब्जेक्ट लाइब्रेरी, और यहां तक कि अपेक्षाकृत सरल कमांड डिज़ाइन पैटर्न सभी अर्थों में गतिशील हैं, जो समय को चलाने के लिए कुछ विशेषताओं को दर्शाते हैं। डीसीजी अपनी क्षमताओं में लचीले और व्यापक हैं और इस तरह से मनमाने ढंग से कम्प्यूटेशनल निर्माणों का समर्थन करने के लिए गहन शिक्षण प्रयोग और सिस्टम कार्यान्वयन के लिए एक समृद्ध वातावरण बनाते हैं।
डायनामिक कम्प्यूटेशनल ग्राफ़ का उपयोग कब करें
डीसीजी के पेशेवरों और विपक्ष पूरी तरह से विशिष्ट समस्या हैं। यदि आप उपरोक्त विभिन्न गतिशील प्रोग्रामिंग अवधारणाओं की जांच करते हैं और अन्य जो संबंधित साहित्य में उनके साथ निकटता से जुड़े हो सकते हैं, तो यह स्पष्ट हो जाएगा कि आपको एक गतिशील कम्प्यूटेशनल ग्राफ की आवश्यकता है या नहीं।
सामान्य तौर पर, यदि आपको गहन शिक्षण प्रणाली, गणितीय हेरफेर प्रणाली, अनुकूली प्रणाली, या अन्य लचीले और जटिल सॉफ्टवेयर का निर्माण करने के लिए अभिकलन के एक मनमाने और बदलते मॉडल का प्रतिनिधित्व करने की आवश्यकता है जो DCG प्रतिमान को अच्छी तरह से मैप करता है, तो एक प्रमाण समस्या के समाधान के लिए अपने सॉफ़्टवेयर आर्किटेक्चर को परिभाषित करने में एक गतिशील कम्प्यूटेशनल ग्राफ़ फ्रेमवर्क का उपयोग करते हुए अवधारणा एक अच्छा पहला कदम है।
सभी सीखने वाले सॉफ़्टवेयर DCG का उपयोग नहीं करते हैं, लेकिन वे अक्सर एक अच्छा विकल्प होते हैं, जब एक मनमाना कम्प्यूटेशनल संरचना के व्यवस्थित और संभवतः निरंतर हेरफेर एक रन समय की आवश्यकता होती है।