C ++ AI में कम व्यापक रूप से क्यों उपयोग किया जाता है?


15

मैं बस यह जानना चाहता हूं कि मशीन लर्निंग इंजीनियर और एआई प्रोग्रामर एआई कार्य करने के लिए अजगर जैसी भाषाओं का उपयोग क्यों करते हैं और सी ++ नहीं, भले ही सी ++ तकनीकी रूप से अजगर से अधिक शक्तिशाली भाषा है।


2
यह उत्तर मदद करेगा
यूगनेस

ऐ में आपका स्वागत है! मैंने सवाल का शीर्षक थोड़ा संपादित किया है। उच्च-स्तर, पायथन में प्रकाश वाक्य रचना है और एक व्याख्या की गई भाषा है, जिसका अर्थ है संकलित करना और बिना किसी संकलन के साथ परीक्षण करना। अजगर भी बिटवाइज़ ऑपरेशन की अनुमति देता है ।
DukeZhou

जवाबों:


16

आपको AI की प्रोग्रामिंग के लिए एक शक्तिशाली भाषा की आवश्यकता नहीं है। अधिकांश डेवलपर्स केरेस, मशाल, कैफ, वाटसन, टेन्सरफ्लो इत्यादि जैसे पुस्तकालयों का उपयोग कर रहे हैं। उन पुस्तकालयों को अत्यधिक अनुकूलित किया जाता है और सभी काम को संभालते हैं, वे उच्च प्रदर्शन भाषाओं के साथ निर्मित होते हैं, जैसे सी। पायथन सिर्फ वर्णन करने के लिए हैं। तंत्रिका नेटवर्क परतें, डेटा लोड करें, प्रसंस्करण लॉन्च करें और परिणाम प्रदर्शित करें। इसके बजाय C ++ का उपयोग करना मुश्किल से कोई प्रदर्शन सुधार नहीं होगा, लेकिन गैर-डेवलपर्स के लिए कठिन होगा क्योंकि इसके लिए स्मृति प्रबंधन की देखभाल की आवश्यकता होती है। इसके अलावा, कई एआई लोगों के पास बहुत ठोस प्रोग्रामिंग या कंप्यूटर विज्ञान पृष्ठभूमि नहीं हो सकती है।

एक और समान उदाहरण खेल विकास होगा, जहां इंजन को C / C ++ में कोडित किया गया है, और, अक्सर, सभी खेल तर्क उच्च स्तर की भाषा में लिखे जाते हैं।


1
अगर मैं हार्डवेयर क्षेत्र के लिए मशीन लर्निंग और एलईपी के साथ विकसित करने और काम करने में दिलचस्पी रखता हूं .. तो क्या मैं AI के लिए C ++ का उपयोग कर सकता हूं
मार्क ellon

1
@ वार्निश: आप कर सकते हैं, बशर्ते हार्डवेयर आवश्यक प्रसंस्करण का समर्थन करता है (तंत्रिका नेटवर्क विशेष रूप से बहुत प्रोसेसर गहन हैं)। TensforFlow वास्तव में मूल रूप से C ++ (पायथन बाइंडिंग एक अतिरिक्त है), और यहाँ एपीआई है: tanorflow.org/api_docs/cc
नील स्लेटर

"अधिकांश एआई प्रोफाइल डेटा विज्ञान क्षेत्र से आते हैं"। डेटा विज्ञान भी एक अच्छी तरह से परिभाषित क्षेत्र नहीं है, इसलिए आपके वाक्य को समझा या गलत समझा नहीं जा सकता है।
nbro

1
"सी ++ का उपयोग करने के बजाय मुश्किल से कोई प्रदर्शन में सुधार नहीं होगा, लेकिन गैर-डेवलपर्स के लिए कठिन होगा क्योंकि इसे स्मृति प्रबंधन की देखभाल की आवश्यकता होती है।" यदि आप इसे अच्छी तरह से लिखते हैं तो आपको C ++ के साथ स्मृति प्रबंधन की परवाह करने की आवश्यकता नहीं है।
जेरी ब्लेन

एआई प्रोग्रामिंग केवल केरस और टॉर्च जैसे मौजूदा पुस्तकालयों का उपयोग करने के बारे में नहीं है। बाह्य निर्भरता के बिना एक तंत्रिका नेटवर्क को खरोंच से प्रोग्राम किया जा सकता है। 3-लेयर परसेप्ट्रॉन के उदाहरण इंटरनेट में उपलब्ध हैं और सिग्मॉइड एक्टिवेशन फंक्शन कोड की 4 लाइनों में फिट होता है। मैं कहूंगा, कि मौजूदा पुस्तकालयों के बिना एक तंत्रिका नेटवर्क को लागू करना विषय को समझने का सबसे आसान तरीका है।
मैनुएल रोड्रिगेज

10

C ++ वास्तव में AI / ML स्पेस में उपयोग की जाने वाली सबसे लोकप्रिय भाषाओं में से एक है। पाइथन सामान्य रूप से अधिक लोकप्रिय हो सकता है, लेकिन जैसा कि अन्य ने उल्लेख किया है, यह वास्तव में हाइब्रिड सिस्टम के लिए काफी सामान्य है जहां सीपीयू गहन संख्या-क्रंचिंग सी ++ में किया जाता है और पायथन का उपयोग उच्च स्तर के कार्यों के लिए किया जाता है।

केवल वर्णन करने के लिए:

http://mloss.org/software/language/c__/

http://mloss.org/software/language/python/


5

यह निर्भर करता है कि यह कितना लचीला होना चाहिए: यदि आपके पास उत्पादन के लिए पूरी तरह से तैयार प्रणाली है, जिसे बहुत अधिक समायोजन की आवश्यकता नहीं है, तो C ++ (या यहां तक ​​कि C) ठीक हो सकता है। आपको सॉफ्टवेयर बनाने में बहुत समय लगाना पड़ता है, लेकिन फिर इसे बहुत तेजी से चलाना चाहिए।

हालांकि, यदि आप अभी भी सेटिंग्स और मापदंडों के साथ प्रयोग कर रहे हैं, और शायद वास्तुकला को समायोजित करने की आवश्यकता है, तो C ++ के साथ काम करने के लिए अनाड़ी होगा। आपको पायथन जैसी भाषा की आवश्यकता है जो चीजों को बदलने में आसान बनाती है। कोड बदलना आसान है, क्योंकि आप आमतौर पर पायथन जैसी भाषाओं में तेजी से कोड कर सकते हैं। आपके द्वारा अदा की जाने वाली कीमत यह है कि सॉफ्टवेयर आमतौर पर उतना अच्छा प्रदर्शन नहीं करता है।

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

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

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


1
यदि मैं इसे सी ++ के साथ करता हूं तो क्या मुझे अजगर से तेज निष्पादन मिल सकता है और प्रदर्शन स्तर के बारे में क्या है क्योंकि यह कहा जाता है कि: सी ++ अजगर से 400 गुना तेज है
मार्क एलॉन

1
यह सामान्य आंकड़ा कुछ भी मतलब नहीं है - यह वास्तव में सटीक आवेदन पर निर्भर करता है। मुझे लगता है कि ज्यादातर स्थितियों के लिए 400 बार शायद बहुत आशावादी है। लेकिन मुद्दा यह है कि अगर आपको सॉफ्टवेयर को कोड (और डिबग!) करने में 500 गुना अधिक समय लगता है, तो गति में 400x का सुधार अभी भी धीमा रहेगा! जाहिर है कि संख्याएं थोड़ी यादृच्छिक हैं, लेकिन आपके कार्यक्रम को सही होने में लगने वाले समय को कम न समझें। अक्सर आप पाएंगे कि गति में वृद्धि तेजी से विकास के समय से अधिक है।
ओलिवर मेसन

1
मैंने अजगर और C ++ में टेंसोफ़्लो पुस्तकालयों का उपयोग करके एक तंत्रिका जाल को कोड करने की कोशिश की है .. और मैंने पाया है कि: तंत्रिका नेटवर्क एल्गोरिथ्म जो सी ++ में कोडित किया गया था वह अजगर की तुलना में 280X गुना तेजी से चलता है जिसमें एक ही पुस्तकालय और एक ही एल्गोरिथ्म का उपयोग किया गया था
मार्क एलॉन

1
तो क्यों अजगर के बजाय मशीन लर्निंग एल्गोरिदम कार्यान्वयन के लिए सी ++ का उपयोग नहीं करना है
मार्क एलॉन

1
ऊपर मेरा जवाब देखें ...
ओलिवर मेसन

2

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

C ++ में एक बड़ी समस्या है, इससे पहले कि कोई प्रोग्राम GCC या LLVM कंपाइलर के साथ संकलित किया जा सके, किसी को यह जानना होगा कि उसे किस एल्गोरिथ्म की आवश्यकता है। C ++ किसी दिए गए सोर्सकोड को निष्पादित कर सकता है, और कुशल कमांड प्रदान करता है, लेकिन जिस तरह से सरणी को भरना पड़ता है और कोड में लूप की आवश्यकता होती है वह अस्पष्ट है। यह प्रश्न प्रोटोटाइपिंग चरण में फिट बैठता है, जो एप्लिकेशन प्रोग्राम किए जाने से पहले आता है। समस्या यह नहीं है कि एक संकलित एप्लिकेशन का निर्माण कैसे करें और इसे ऑपरेटिंग सिस्टम पैकेज के रूप में वितरित करें, समस्या अलग-अलग एआई एल्गोरिदम के साथ खेलना है, कुछ गुई प्रोटोटाइप का निर्माण करना है और टीम के सदस्यों के साथ प्रगति पर चर्चा करना है।

नंबर एक गुई प्रोटोटाइप भाषा जो स्क्रिप्टिंग प्रोग्रामिंग पर आधारित है और गुइडो वैन रॉसुम द्वारा पास-स्यूडोकोड क्षमताओं को प्रदान करती है। इसने कभी भी C ++ को प्रतिस्थापित नहीं किया, लेकिन यह एक नए प्रकार का डोमेन बनाता है। सॉफ़्टवेयर लागू होने से पहले एक प्रोटोटाइप चरण की आवश्यकता है, विशेष रूप से आर्टिफिशियल इंटेलिजेंस के अभिनव डोमेन में।

यह समझाने के लिए कि पायथन C ++ से बेहतर क्यों है, हमें C ++ के साथ एक सॉफ्टवेयर प्रोटोटाइप बनाने की कोशिश करनी होगी। क्या यह संभव है कि उस भाषा का उपयोग तेजी से एक गिनी आवेदन को लागू करने के लिए किया जाए? नो सी ++ को तेजी से संपादित चक्रों के साथ एक प्रोटोटाइप भाषा के रूप में नहीं बनाया गया था, लेकिन सिस्टम प्रोग्रामर के लिए एक ठोस चट्टान के रूप में। इसका मतलब है, अगर प्रोटोटाइप पहले से ही काम कर रहा है, अगर एल्गोरिथ्म तय हो गया है और अगर दस्तावेज लिखा गया था तो यह C ++ में कोड को फिर से शुरू करने के लिए समझ में आता है। इसका मतलब है कि, एक दिया गया पायथन प्रोटोटाइप C ++ में परिवर्तित हो जाता है और मौजूदा ऑपरेटिंग सिस्टम को डिलीवर हो जाता है। लेकिन पूर्व-चरण के लिए जो कागजात लिखने के साथ करना है, विकल्पों पर चर्चा करना और नवाचारों का प्रबंधन करना, पायथन बेहतर विकल्प है।


0

आप दावा करते हैं कि

सी ++ तकनीकी रूप से अजगर की तुलना में अधिक शक्तिशाली भाषा है।

लेकिन यह दावा गलत है (या इसका मतलब ज्यादा नहीं है)। याद रखें कि एक प्रोग्रामिंग भाषा एक विनिर्देश है (अक्सर अंग्रेजी में लिखे गए कुछ दस्तावेज़)। उदाहरण के लिए, 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 परियोजना (जिसका महत्वाकांक्षा सबसे -और उम्मीद है कि अपनी सी ++ कोड के सब उत्पन्न करने के लिए है)।

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