मैं बस यह जानना चाहता हूं कि मशीन लर्निंग इंजीनियर और एआई प्रोग्रामर एआई कार्य करने के लिए अजगर जैसी भाषाओं का उपयोग क्यों करते हैं और सी ++ नहीं, भले ही सी ++ तकनीकी रूप से अजगर से अधिक शक्तिशाली भाषा है।
मैं बस यह जानना चाहता हूं कि मशीन लर्निंग इंजीनियर और एआई प्रोग्रामर एआई कार्य करने के लिए अजगर जैसी भाषाओं का उपयोग क्यों करते हैं और सी ++ नहीं, भले ही सी ++ तकनीकी रूप से अजगर से अधिक शक्तिशाली भाषा है।
जवाबों:
आपको AI की प्रोग्रामिंग के लिए एक शक्तिशाली भाषा की आवश्यकता नहीं है। अधिकांश डेवलपर्स केरेस, मशाल, कैफ, वाटसन, टेन्सरफ्लो इत्यादि जैसे पुस्तकालयों का उपयोग कर रहे हैं। उन पुस्तकालयों को अत्यधिक अनुकूलित किया जाता है और सभी काम को संभालते हैं, वे उच्च प्रदर्शन भाषाओं के साथ निर्मित होते हैं, जैसे सी। पायथन सिर्फ वर्णन करने के लिए हैं। तंत्रिका नेटवर्क परतें, डेटा लोड करें, प्रसंस्करण लॉन्च करें और परिणाम प्रदर्शित करें। इसके बजाय C ++ का उपयोग करना मुश्किल से कोई प्रदर्शन सुधार नहीं होगा, लेकिन गैर-डेवलपर्स के लिए कठिन होगा क्योंकि इसके लिए स्मृति प्रबंधन की देखभाल की आवश्यकता होती है। इसके अलावा, कई एआई लोगों के पास बहुत ठोस प्रोग्रामिंग या कंप्यूटर विज्ञान पृष्ठभूमि नहीं हो सकती है।
एक और समान उदाहरण खेल विकास होगा, जहां इंजन को C / C ++ में कोडित किया गया है, और, अक्सर, सभी खेल तर्क उच्च स्तर की भाषा में लिखे जाते हैं।
C ++ वास्तव में AI / ML स्पेस में उपयोग की जाने वाली सबसे लोकप्रिय भाषाओं में से एक है। पाइथन सामान्य रूप से अधिक लोकप्रिय हो सकता है, लेकिन जैसा कि अन्य ने उल्लेख किया है, यह वास्तव में हाइब्रिड सिस्टम के लिए काफी सामान्य है जहां सीपीयू गहन संख्या-क्रंचिंग सी ++ में किया जाता है और पायथन का उपयोग उच्च स्तर के कार्यों के लिए किया जाता है।
केवल वर्णन करने के लिए:
यह निर्भर करता है कि यह कितना लचीला होना चाहिए: यदि आपके पास उत्पादन के लिए पूरी तरह से तैयार प्रणाली है, जिसे बहुत अधिक समायोजन की आवश्यकता नहीं है, तो C ++ (या यहां तक कि C) ठीक हो सकता है। आपको सॉफ्टवेयर बनाने में बहुत समय लगाना पड़ता है, लेकिन फिर इसे बहुत तेजी से चलाना चाहिए।
हालांकि, यदि आप अभी भी सेटिंग्स और मापदंडों के साथ प्रयोग कर रहे हैं, और शायद वास्तुकला को समायोजित करने की आवश्यकता है, तो C ++ के साथ काम करने के लिए अनाड़ी होगा। आपको पायथन जैसी भाषा की आवश्यकता है जो चीजों को बदलने में आसान बनाती है। कोड बदलना आसान है, क्योंकि आप आमतौर पर पायथन जैसी भाषाओं में तेजी से कोड कर सकते हैं। आपके द्वारा अदा की जाने वाली कीमत यह है कि सॉफ्टवेयर आमतौर पर उतना अच्छा प्रदर्शन नहीं करता है।
आपको यह तय करने की आवश्यकता है कि आपके लिए यह व्यापार बंद कैसे सबसे अच्छा काम करता है। आमतौर पर कोडिंग पर कम समय बिताना बेहतर होता है, और अधिक समय तक चलने की चिंता भी नहीं करनी चाहिए। यदि आप अपने कोड को पूरा करने में एक दिन कम लेते हैं, तो सी-कोडेड संस्करण को पकड़ने में बहुत समय लगता है। ज्यादातर समय यह इसके लायक नहीं है।
एक सामान्य दृष्टिकोण हाइब्रिड सिस्टम लगता है, जहां कोर लाइब्रेरीज़ को C / C ++ में लागू किया जाता है, क्योंकि उन्हें बहुत अधिक परिवर्तन की आवश्यकता नहीं होती है, और फ्रंट-एंड / ग्लू / इंटरफेस पायथन में हैं, क्योंकि आपको लचीलापन और गति की आवश्यकता नहीं है यह महत्वपूर्ण है।
यह एआई के लिए एक विशेष मुद्दा नहीं है, वैसे, लेकिन संकलित बनाम संकलित भाषाओं का एक सामान्य प्रश्न है। एआई के साथ बहुत सारे सिस्टम अभी भी आवेदन के बजाय अनुसंधान पर केंद्रित हैं, और यही वह जगह है जहां विकास की गति निष्पादन की गति को गति देती है।
एआई अनुप्रयोगों के लिए सॉफ़्टवेयर विकास को प्रोग्रामिंग और प्रोटोटाइप में अलग किया जा सकता है। C / C ++ एप्लिकेशन बनाने के लिए एक शानदार भाषा है क्योंकि यह बहुत तेज़ चलती है और इसे मुख्यधारा के ऑपरेटिंग सिस्टम के लिए पुस्तकालयों के रूप में वितरित किया जा सकता है। यदि कोई व्यक्ति टर्नकी उपकरण तैनात करना चाहता है, तो एक पूर्व-निर्धारित सी / सी ++ आवेदन सोने का मानक है।
C ++ में एक बड़ी समस्या है, इससे पहले कि कोई प्रोग्राम GCC या LLVM कंपाइलर के साथ संकलित किया जा सके, किसी को यह जानना होगा कि उसे किस एल्गोरिथ्म की आवश्यकता है। C ++ किसी दिए गए सोर्सकोड को निष्पादित कर सकता है, और कुशल कमांड प्रदान करता है, लेकिन जिस तरह से सरणी को भरना पड़ता है और कोड में लूप की आवश्यकता होती है वह अस्पष्ट है। यह प्रश्न प्रोटोटाइपिंग चरण में फिट बैठता है, जो एप्लिकेशन प्रोग्राम किए जाने से पहले आता है। समस्या यह नहीं है कि एक संकलित एप्लिकेशन का निर्माण कैसे करें और इसे ऑपरेटिंग सिस्टम पैकेज के रूप में वितरित करें, समस्या अलग-अलग एआई एल्गोरिदम के साथ खेलना है, कुछ गुई प्रोटोटाइप का निर्माण करना है और टीम के सदस्यों के साथ प्रगति पर चर्चा करना है।
नंबर एक गुई प्रोटोटाइप भाषा जो स्क्रिप्टिंग प्रोग्रामिंग पर आधारित है और गुइडो वैन रॉसुम द्वारा पास-स्यूडोकोड क्षमताओं को प्रदान करती है। इसने कभी भी C ++ को प्रतिस्थापित नहीं किया, लेकिन यह एक नए प्रकार का डोमेन बनाता है। सॉफ़्टवेयर लागू होने से पहले एक प्रोटोटाइप चरण की आवश्यकता है, विशेष रूप से आर्टिफिशियल इंटेलिजेंस के अभिनव डोमेन में।
यह समझाने के लिए कि पायथन C ++ से बेहतर क्यों है, हमें C ++ के साथ एक सॉफ्टवेयर प्रोटोटाइप बनाने की कोशिश करनी होगी। क्या यह संभव है कि उस भाषा का उपयोग तेजी से एक गिनी आवेदन को लागू करने के लिए किया जाए? नो सी ++ को तेजी से संपादित चक्रों के साथ एक प्रोटोटाइप भाषा के रूप में नहीं बनाया गया था, लेकिन सिस्टम प्रोग्रामर के लिए एक ठोस चट्टान के रूप में। इसका मतलब है, अगर प्रोटोटाइप पहले से ही काम कर रहा है, अगर एल्गोरिथ्म तय हो गया है और अगर दस्तावेज लिखा गया था तो यह C ++ में कोड को फिर से शुरू करने के लिए समझ में आता है। इसका मतलब है कि, एक दिया गया पायथन प्रोटोटाइप C ++ में परिवर्तित हो जाता है और मौजूदा ऑपरेटिंग सिस्टम को डिलीवर हो जाता है। लेकिन पूर्व-चरण के लिए जो कागजात लिखने के साथ करना है, विकल्पों पर चर्चा करना और नवाचारों का प्रबंधन करना, पायथन बेहतर विकल्प है।
आप दावा करते हैं कि
सी ++ तकनीकी रूप से अजगर की तुलना में अधिक शक्तिशाली भाषा है।
लेकिन यह दावा गलत है (या इसका मतलब ज्यादा नहीं है)। याद रखें कि एक प्रोग्रामिंग भाषा एक विनिर्देश है (अक्सर अंग्रेजी में लिखे गए कुछ दस्तावेज़)। उदाहरण के लिए, n3337 C ++ विनिर्देशन का एक देर से मसौदा है। मुझे पायथन पसंद नहीं है, लेकिन यह सी ++ की तुलना में अधिक शक्तिशाली लगता है (भले ही सी ++ क्रियान्वयन आमतौर पर पायथन लोगों की तुलना में तेज हो): क्या अच्छा पायथन प्रोग्रामर पायथन में अच्छी तरह से कोड कर सकता है, एक और अच्छा सी ++ प्रोग्रामर सी ++ और उपाध्यक्ष में अच्छी तरह से कोड कर सकता है विपरीत।
सैद्धांतिक रूप से, C ++ और पायथन दोनों ही ट्यूरिंग-पूर्ण (उद्देश्य पर) प्रोग्रामिंग भाषाएं हैं।
और पाइथन C ++ के जितना ही एक्सप्रेसिव है। मैं एक प्रोग्रामिंग भाषा की सुविधा का नाम नहीं दे सकता, जिसमें पायथन है, लेकिन C ++ ( प्रतिबिंब से संबंधित लोगों को छोड़कर), इस उत्तर को भी देखें और इसके बारे में अवगत रहें - dlopen
मेरे manydl.c प्रोग्राम देखें -, libVccjit के , LLVM के , libbacktrace के , और कुछ मेटा पर विचार करें -programming उन लोगों के साथ दृष्टिकोण, ला à Bismon या की तरह J.Pitrat के ब्लॉग यह अधिवक्ताओं)।
हो सकता है कि आप एक प्रोग्रामिंग लैंग्वेज के बारे में सोचें जो इसे लागू करने वाले सॉफ्टवेयर के रूप में हो। फिर पायथन C ++ की तरह अभिव्यंजक है (और सीखना आसान लगता है, लेकिन यह एक भ्रम है; उस भ्रम के बारे में अधिक जानने के लिए http://norvig.com/21-days.html देखें )। पायथन और सी ++ में काफी समान शब्दार्थ है , भले ही उनका वाक्यविन्यास बहुत अलग हो। उनकी प्रकार प्रणाली बहुत अलग है।
गौर करें कि दुर्भाग्य से, (जैसे कि हाल ही में कई प्रमुख मशीन सीखने पुस्तकालयों TensorFlow या Gudhi ) कर रहे हैं व्यवहार में आसान अजगर में उपयोग करने के लिए सी में से ++। लेकिन आप C ++ कोड से TensorFlow या Gudhi का उपयोग कर सकते हैं क्योंकि TensorFlow और Gudhi ज्यादातर C ++ में कोडित होते हैं और दोनों C ++ API प्रदान करते हैं और दस्तावेज़ करते हैं (न कि केवल एक पायथन एक)।
C ++ बहु-थ्रेडेड प्रोग्रामिंग को सक्षम बनाता है , लेकिन सामान्य पायथन कार्यान्वयन में इसकी GIL होती है , जो बायटेकोडेड है , इसलिए C ++ की तुलना में काफी धीमी है (जो आमतौर पर GCC या Clang जैसे संकलनकर्ताओं के अनुकूलन द्वारा संकलित की जाती है ; हालाँकि आप C ++ दुभाषियों, जैसे Cling ) को देख सकते हैं। पायथन के कुछ प्रयोगात्मक कार्यान्वयन JIT- संकलित और GIL के बिना हैं। लेकिन ये परिपक्व नहीं हैं: मैं उनकी टीआरएल बढ़ाने के लिए एक मिलियन यूरो का निवेश करने की सलाह देता हूं ।
यह भी देखें कि पायथन की तुलना में C ++ सीखना अधिक कठिन है। यहां तक कि C ++ प्रोग्रामिंग अनुभव के एक दर्जन वर्षों के साथ, मैं वास्तव में C ++ का अधिकांश पता करने का दावा नहीं कर सकता।
दुख की बात है, सबसे हाल ही ऐ सॉफ्टवेयर इंजीनियरिंग (जैसे शिक्षण किताबें इस एक या कि एक) उनके उदाहरण के लिए उपयोग अजगर (नहीं सी ++)। मैं वास्तव में C ++ का उपयोग करके हाल की AI पुस्तकें चाहता हूं!
बीटीडब्ल्यू, मैं एआई तकनीकों का उपयोग करके ओपन सोर्स सॉफ़्टवेयर (जैसे यह , या अप्रचलित जीसीसी एमईएलटी ) प्रोग्राम करता हूं , लेकिन वे पायथन का उपयोग नहीं करते हैं। एआई अनुप्रयोगों के लिए मेरा दृष्टिकोण उनमें कुछ डीएसएल डिजाइन करना शुरू करना है।
कुछ एआई दृष्टिकोणों में मेटाप्रोग्रामिंग शामिल होता है, जैसे कुछ (या अधिकांश, या यहां तक कि सभी) उत्पन्न करने वाला सिस्टम का कोड। J.Pitrat (अक्टूबर 2019 में उनका निधन) ने इस दृष्टिकोण को आगे बढ़ाया। देखें अपने ब्लॉग , उसकी Caia प्रणाली, और RefPerSys परियोजना (जिसका महत्वाकांक्षा सबसे -और उम्मीद है कि अपनी सी ++ कोड के सब उत्पन्न करने के लिए है)।