कोड विकास के लिए लागू मशीन लर्निंग


17

मेरी पृष्ठभूमि मैकेनिकल इंजीनियरिंग में है, इसलिए कृपया इस क्षेत्र के प्रति मेरी अज्ञानता को क्षमा करें।

मैं वास्तव में प्रोग्रामिंग और सॉफ्टवेयर विकास का आनंद लेता हूं। इसके अलावा, मैंने हाल ही में एक मुफ्त ऑनलाइन मशीन लर्निंग (एमएल) क्लास ली, जिसकी मैं अत्यधिक अनुशंसा करता हूं, जिसे स्टैनफोर्ड के प्रोफेसर एंड्रयू एनजी ने सिखाया था। यहां लिंक करें

मैंने इस प्रोफेसर को यह कहते सुना है कि ऐसे क्षेत्रों को खोजना मुश्किल है जो एमएल कभी प्रभावित नहीं करेंगे।

सवाल

तो मेरा सवाल यह है कि मशीन लर्निंग टू कोड डेवलपमेंट को लागू करने में अब तक क्या शोध हुआ है? डिबगिंग के बारे में कैसे?

यदि संभव हो तो संसाधन / स्रोत / वैज्ञानिक कागजात शामिल करें।

मुझे इसकी खोज करने का सौभाग्य नहीं मिला है क्योंकि अक्सर एमएल और सॉफ्टवेयर डेवलपमेंट (या प्रोग्रामिंग) की खोज करने से एमएल एप्लिकेशन के सॉफ्टवेयर डेवलपमेंट (या प्रोग्रामिंग) के परिणाम सामने आते हैं।


क्या आपका प्रश्न उस कोड के बारे में है जो कोड लिखता है, या आप मशीन लर्निंग को लागू करने के लिए कोडिंग तकनीकों के बारे में पूछ रहे हैं?
रॉबर्ट हार्वे

कोड (एमएल कोड) जो कोड लिखता है, या कोड में सुधार करता है, या कोड में गलतियों की जांच करता है (चाहे वह वेब डेवलपमेंट, संख्यात्मक सोलवर आदि के लिए हो)। मशीन सीखने को लागू करने की तकनीक नहीं।
चार्ल्स

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

इस सवाल को आर्टिफिशियल इंटेलिजेंस साइट पर भेजना चाहिए।
क्विंटुमिनिया

यह वास्तव में एक बहुत अच्छा सवाल है!
जॉन्स जॉन्स

जवाबों:


6

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


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

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

4

हाँ। यह क्षेत्र अभी गर्म है। इसे "बड़ा कोड" कहा जाता है, और DARPA ने $ 40 मिलियन इसमें डाल दिए: http://www.darpa.mil/program/mining-and-understanding-software-enclaves । इस अनुदान के कुछ प्रभावशाली परिणाम सामने आए हैं, जैसे कि पैगंबर के पैगंबर और उत्पत्ति प्रणाली, जो स्वचालित रूप से सही पैच के एक सीखा मॉडल का उपयोग करके कार्यक्रमों में बग को ठीक कर सकते हैं। मार्टिन वेशेव और उनके छात्र वेसेलिन रेचेव भी इस क्षेत्र में अग्रणी रहे हैं। शायद उनका सबसे प्रभावशाली परिणाम JSNice ( http://jsnice.org/ ) है, जो जावास्क्रिप्ट कोड को "डी-मिनिमाइज" कर सकता है।

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

स्वचालित प्रोग्रामिंग के लिए अधिकांश सफल उपकरण अभी भी गैर-एमएल तरीकों पर निर्भर करते हैं जैसे एसएमटी सॉल्वर। किसी भी PL सम्मेलन (जैसे: PLDI, POPL, OOPSLA) या किसी भी अकादमिक सॉफ्टवेयर इंजीनियरिंग सम्मेलन (जैसे: ICSE, FSE, ISSTA, ASE) की कार्यवाही पर एक नज़र डालें, और आपको बहुत सारे उदाहरण दिखाई देंगे।


3

Microsoft किसी दिए गए इनपुट और आउटपुट से एक विधि निकाय की भविष्यवाणी करने के लिए डीपकोडर को गहन सीखने के लिए विकसित कर रहा है । यही एकमात्र उदाहरण है जो मुझे पता है।

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

जेनेटिक प्रोग्रामिंग 2015 में खबरों में था, जब muScalpel ने एक तरह के प्रशिक्षण कार्यक्रम के रूप में दोनों के लिए यूनिट परीक्षणों का उपयोग करते हुए, एक प्रोग्राम से दूसरे में एक फीचर ट्रांसप्लांट करने के लिए एक समाधान विकसित किया।


यह जेनेटिक मॉडल का उपयोग करके एल्गोरिदम बनाने के समान है, है ना? क्या आप कोड विकास के लिए किसी भी आवेदन के बारे में जानते हैं? मैं विशुद्ध रूप से संचालित (आनुवांशिक-आधारित मॉडल) के बजाय मानव-मशीन के साथ मिलकर काम करने के बारे में सोच रहा हूं। मुझे पता है कि यह विशिष्ट लग सकता है, लेकिन मैं ज्यादातर उत्सुक हूं क्योंकि मैं इस क्षेत्र में नया हूं।
चार्ल्स

सुनिश्चित करें कि आप सही हैं, मैं गलत हूं, मैं एमएल करने के लिए एमएल का उपयोग करने के बारे में बहुत सोच-समझकर कर रहा था :) #edited
RJB

2

तो मेरा सवाल यह है कि मशीन लर्निंग टू कोड डेवलपमेंट को लागू करने में अब तक क्या शोध हुआ है? डिबगिंग के बारे में कैसे?

एक संबंधित प्रश्न कोड पीढ़ी और संकलन के लिए मशीन सीखने की तकनीक के बारे में है (क्योंकि आप ट्रांसप्लर्स और कंपाइलर की कल्पना कर सकते हैं, स्वचालित रूप से "कोड विकसित करने के लिए" के रूप में -कुछ उच्च स्तर की भाषा से-कोड लिखना)।

इसके बारे में कई कागजात हैं, उदाहरण के लिए माइलपोस्ट जीसीसी

आप डिबगिंग के लिए या स्टेटिक सोर्स कोड एनालिसिस (या किसी भी तरह के स्टैटिक प्रोग्राम एनालिसिस ) के लिए मशीन लर्निंग तकनीक के बारे में पेपर्स के लिए भी गूगल कर सकते हैं ।

कृत्रिम बुद्धि को बूटस्ट्रैप करने पर J.Pitrat का ब्लॉग भी देखें जो आपके प्रश्न से संबंधित है।


1

गणित के बारे में ACM के संचार में हाल के एक लेख में एरिक मीजर के उपयोग से पैसे कमाने के बारे में जेफ डीन, Google के वरिष्ठ फेलो, सिस्टम और इन्फ्रास्ट्रक्चर ग्रुप का हवाला दिया गया है:

अगर आज Google को खरोंच से बनाया गया था, तो इसका बहुत कुछ सीखा जाएगा, कोडित नहीं।

लेख अनुसंधान क्षेत्र में हाल की गतिविधियों के बारे में अवलोकन देता है। यह एक पे वॉल के पीछे है, लेकिन पढ़ने के लायक हो सकता है यदि आप कोडिंग और मशीन लर्निंग / आंकड़ों के बीच सैद्धांतिक समानता में रुचि रखते हैं। हो सकता है कि लेख के अंत में संदर्भ सूची भी सहायक हो।

एक उदाहरण के रूप में लेख WebPPL को संदर्भित करता है , वेब के लिए संभाव्य प्रोग्रामिंग


0

यहाँ मशीन सीखने का उपयोग करने पर एक प्रयोग केस है, जो माइक्रोसर्ज सर्विस को डिबग करता है। मैंने मशीन लर्निंग के साथ microservice प्रदर्शन डेटा का विश्लेषण करने में कुछ प्रयासों का दस्तावेजीकरण किया, जहां मैंने प्रदर्शन डेटा से एक निर्णय ट्री को लोड किया, जिसमें एक microservice लोड करने से एकत्र किए गए डेटा का अध्ययन किया, फिर उस पेड़ का अध्ययन किया जिसने मुझे पर्यावरणीय मुद्दे पर अंतर्दृष्टि दी और मुझे प्रदर्शन बग का निदान करने और ठीक करने में मदद की।


0

मुझे सभी कोडिंग-संबंधित मशीन सीखने के विषयों पर काफी व्यापक पढ़ने की सूची मिली ।

जैसा कि आप देख सकते हैं, लोग मशीन लर्निंग को कोडिंग में लागू करने की कोशिश कर रहे हैं, लेकिन हमेशा बहुत संकीर्ण क्षेत्रों में, न कि केवल एक मशीन जो कोडिंग या डिबगिंग के सभी तरीके को संभाल सकती है।
इस उत्तर के बाकी हिस्से में आपकी अपेक्षाकृत व्यापक गुंजाइश "डिबगिंग" मशीन पर केंद्रित है और यह वास्तव में अभी तक प्रयास नहीं किया गया है (जहां तक ​​विषय पर मेरे शोध से पता चलता है)।


मैंने जवाब का एक लंबा हिस्सा रिडक्ट किया। संक्षेप में प्रस्तुत करना (यह अगले भाग के लिए महत्वपूर्ण है): वर्तमान मशीन लर्निंग कार्यप्रणाली से, कुछ भी जो मनुष्य सीख सकता है, एक मशीन भी सीख सकती है। हम केवल भौतिक क्षेत्र (सीपीयू की गति, एक मशीन के आकार, ...) द्वारा सीमित हैं, स्वयं सीखने के एल्गोरिथ्म की एक सीमित सीमित प्रयोज्यता नहीं।

कोड विकास के लिए मशीन लर्निंग लागू करने में अब तक क्या शोध किया गया है? डिबगिंग के बारे में कैसे?

यहाँ मुद्दा यह नहीं है कि यह असंभव है, बल्कि यह कि यह एक अविश्वसनीय रूप से जटिल विषय है।

मनुष्य एक सार्वभौमिक कोडिंग मानक को परिभाषित करने के करीब भी नहीं आया है, जिससे हर कोई सहमत है। यहां तक ​​कि एसओएलआईडी जैसे सिद्धांतों पर सबसे व्यापक रूप से सहमति अभी भी चर्चा का एक स्रोत है कि इसे कितनी गहराई से लागू किया जाना चाहिए। सभी व्यावहारिक उद्देश्यों के लिए, जब तक आपके पास कोई वित्तीय (या समय) बाधा न हो तब तक SOLID का पूरी तरह से पालन करना असंभव है; जो निजी क्षेत्र में संभव नहीं है, जहां सबसे अधिक विकास होता है। SOLID एक दिशानिर्देश है, न कि एक कठिन सीमा।

सही और गलत के वस्तुनिष्ठ माप के अभाव में, हम इसे सीखने के लिए मशीन को सकारात्मक / नकारात्मक प्रतिक्रिया कैसे दे पाएंगे?
सबसे अच्छे रूप में, हम कई लोगों को मशीन के लिए अपनी राय दे सकते हैं ("यह अच्छा / बुरा कोड है"), और मशीन का परिणाम तब "औसत राय" होगा। लेकिन यह जरूरी नहीं कि एक सही समाधान के रूप में ही हो । यह हो सकता है, लेकिन यह होने की गारंटी नहीं है।

दूसरे, विशेष रूप से डिबगिंग के लिए, यह स्वीकार करना महत्वपूर्ण है कि विशिष्ट डेवलपर्स एक विशिष्ट प्रकार की बग / गलती को शुरू करने के लिए प्रवण हैं। गलती की प्रकृति कुछ मामलों में हो सकती है जो इसे पेश करने वाले डेवलपर से प्रभावित हो सकती है।

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

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

मशीन-सीखा डिबगर के लिए पूछना एक मशीन-सीखा शर्लक होम्स के लिए पूछने जैसा है। किसी एक को बनाना असंभव नहीं है, लेकिन अक्सर व्यक्तिपरक आकलन पर एक डिबगर / शर्लक होने का मूल तर्क है जो विषय से अलग-अलग होता है और अविश्वसनीय रूप से विस्तृत ज्ञान / संभव दोषों पर स्पर्श करता है।
जल्दी से सही / गलत परिणामों की कमी के कारण मशीन को आसानी से पढ़ाना और यह सत्यापित करना कठिन हो जाता है कि यह अच्छी प्रगति कर रही है।

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