एमएल के विकास और शोध के लिए सीखने की बातें

ऑक्टेवियन में हमारे ग्रीष्मकालीन शोध के साथी अश्वथ सालिमथ ने आज पूछा कि उन्हें अपने मशीन सीखने के कौशल को मजबूत करने पर क्या ध्यान देना चाहिए:

मैं TensorFlow में कोर एमएल एल्गोरिदम की महारत विकसित करना चाहता हूं, और शोध पत्रों को जल्दी से लिखित कोड में बदलने में सक्षम होना चाहता हूं। अगले 3-6 महीनों में मुझे क्या करना चाहिए?

इससे एक दिलचस्प चर्चा हुई, जिसका सारांश मुझे आशा है कि यहां दूसरों के लिए उपयोगी है।

मशीन लर्निंग एल्गोरिदम को विकसित करने (और संभावित रूप से फिर शोध में विस्तार) पर ठोस बनने के लिए, मैं निम्नलिखित समय बिताने की सलाह देता हूं:

खरोंच से मॉडल की एक विविध रेंज लिखें

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

इसके अलावा, एक मॉडल डिबगिंग आपको यह समझने के लिए मजबूर करता है कि यह क्या है (/ नहीं है) क्या कर रहा है, यह क्यों कर रहा है, इसकी सीमाएं क्या हैं और सामान्य समस्याओं को कैसे हल किया जाए।

यह गैर-तुच्छ डेटा समस्या (उदाहरण के लिए MNIST या Iris) को चुनने की अनुशंसा नहीं करेगा, ताकि आप अधिक वास्तविक-विश्व की प्रासंगिक चुनौतियों (उदाहरण के लिए, वर्ग असंतुलन, शोर, असत्यता, विभिन्न सटीकता मैट्रिक्स, डेटा-सफाई और पूर्व-) में भाग लें प्रसंस्करण)।

यदि आप वास्तव में सीखना चाहते हैं (और कुछ दर्द का अनुभव करते हैं!) एक ट्यूटोरियल / सार्वजनिक समाधान की कमी वाली समस्याओं को उठाते हैं। इनमें कोई आसान शॉर्ट-कट नहीं है और यह आपकी क्षमताओं को आगे बढ़ाएगा।

ताकि आप लचीले हों और कई प्रकार की रणनीति बना सकें, मेरा सुझाव है कि सभी प्रमुख एमएल आर्किटेक्चर से परिचित हों:

  • घने परत / प्रतिगमन
  • संवादी तंत्रिका नेटवर्क
  • आवर्ती तंत्रिका नेटवर्क
  • सुदृढीकरण तंत्रिका नेटवर्क
  • एंबेडिंग (उदा। सहयोगी फ़िल्टरिंग, खोज)
  • बोनस: तंत्रिका ट्यूरिंग मशीनें

मॉड्यूलर, परीक्षण योग्य, मुखर / टाइप कोड बनाएँ

मशीन लर्निंग लाइब्रेरी अखंडता को प्रोत्साहित करने के लिए, पढ़ने के लिए कठिन, परीक्षण कोड के लिए कठिन है। इस आग्रह से लड़ो!

अधिक बुलेट-प्रूफ कोड लिखने से आप तेजी से काम करने वाले मॉडल लिख पाएंगे।

आप ऐसा कोड बनाना चाहते हैं जो दूसरों के अनुकूल हो, काम करने की संभावना हो और पेसकी शून्य डेटा सटीकता के बजाय आसानी से समझने में त्रुटि देगा।

  1. अपने मॉडल का निर्माण कई छोटे कार्यों से करें जो एक कहानी बताते हैं
  2. जितना संभव हो उतना स्टैटिक और रनटाइम चेकिंग शामिल करें (जैसे उन टेंसरों को शामिल करें जो आपको लगता है कि वे आकार होंगे, मुखर मास्क वास्तव में सही प्रारूप हैं)
  3. उप-मॉड्यूल की इकाई परीक्षण शामिल करें (जैसे कि आपकी मेमोरी रीड मॉड्यूल सही तरीके से मूल्यों को पुनः प्राप्त करता है? क्या भाषा टोकन मज़बूती से सांकेतिक शब्दों में बदलना है?)
  4. जब संभव हो तो अपने आप को रोल करने के बजाय अच्छी तरह से परीक्षण किए गए पुस्तकालय कार्यों का उपयोग करें (उदाहरण के लिए अपने पुस्तकालय की उपयोगिताओं का पता लगाएं!)

कई टूल और प्लेटफ़ॉर्म आज़माएं

आपके काम को तेज करने के लिए बहुत सारे बेहतरीन उपकरण और प्लेटफॉर्म हैं। उदाहरण के लिए:

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

शोध पत्रों से विचारों को पढ़ें / लागू करें

सबसे पहले, शोध पत्र पढ़ने की आदत में पड़ना एक शानदार तरीका है:

  • गणित पढ़ने और अत्याधुनिक कंप्यूटर विज्ञान में अच्छा हो
  • नए विचारों के बारे में सुनें
  • परियोजनाओं के लिए प्रेरणा प्राप्त करें

वर्तमान में नए कागजात खोजने के लिए ट्विटर एक अच्छी जगह है। यहां कुछ विचारों के बारे में बताया गया है।

अगला, कागजात से चीजों को लागू करने का प्रयास करें। यहां तक ​​कि अगर एक संपूर्ण शोध प्रणाली को लागू करना कठिन है, तो छोटे विचार हैं जिन्हें आप अपने काम में लगा सकते हैं। उदाहरण के लिए, मैं एक सीखने की दर को खोजने के लिए संघर्ष कर रहा था जो सफलतापूर्वक एक एम्बेडिंग मॉडल को प्रशिक्षित करेगा, और एक 5 प्रतिशत कार्यान्वयन PercentDelta ने मेरे मुद्दे को हल किया।

एक वितरित प्रशिक्षण प्रणाली बनाएँ

कई वास्तविक विश्व समस्याएं / डेटासेट आपके लैपटॉप पर दस मिनट में चलने के लिए बहुत बड़ी हैं। वितरित सिस्टम एक पूरी तरह से अलग जानवर हैं (और संभवतः गहन शिक्षण मॉडल की तुलना में डीबग करना कठिन है!)

Whilst एक उद्यम पैमाने पर वितरित प्रशिक्षण प्रणाली का निर्माण एक बड़ा प्रयास है, और अधिक अनुकूल आकार की परियोजनाएं आसानी से संभव हैं:

  • प्रशिक्षण / भविष्यवाणी डेटा के लिए एक वितरित कतार का उपयोग करने का प्रयास करें (उदा। काफ्का, खरगोश एमक्यू, फायरबेस)
  • प्रशिक्षण के लिए कई कंप्यूटर / इंस्टेंसेस का उपयोग करने का प्रयास करें (उदा। कुबेरनेट क्लस्टर, AWS इंस्टेंस, आपके मित्रों के लैपटॉप)

व्यक्तिगत रूप से, मैं एक आनुवंशिक एल्गोरिदम / न्यूरल ट्यूरिंग मशीन प्रयोग के साथ मदद करने के लिए वितरित प्रशिक्षण का निर्माण कर रहा हूं।

एक सीमित डिवाइस पर एक मॉडल चलाएं

अक्सर वास्तविक-विश्व परिनियोजन के पास सीमित संसाधन होते हैं (उदा। इसे किसी ब्राउज़र में चलना चाहिए, या उपयोगकर्ताओं के लिए बहुत तेज़ी से उत्तर देना चाहिए)।

निम्न में से कोई एक आज़माएँ:

  • एक मॉडल प्राप्त करें जिसे आपने फोन पर भविष्यवाणी करने का प्रशिक्षण दिया है
  • एक मॉडल प्राप्त करें जिसे आपने ब्राउज़र में भविष्यवाणी करने का प्रशिक्षण दिया है
  • फोन / पुराने कंप्यूटर पर एक मॉडल को प्रशिक्षित करना संभव बनाएं

आपके द्वारा सीखी गई चीजों के बारे में लिखें

लेखन और शिक्षण आपको अपने ज्ञान के अंतराल पर प्रकाश चमकाने के लिए मजबूर करता है। वे दोनों मूल्यवान कौशल हैं, साथ ही साथ पुरस्कृत और मज़ेदार भी हैं।

यहां कुछ सामान्य प्रारूप दिए गए हैं जिन्हें आप आज़मा सकते हैं:

  • आपने क्या किया, क्या परिणाम थे, इसकी एक लैब रिपोर्ट
  • एक छोटी तकनीकी क्यूए (जैसे कि एक आम खराबी को कैसे हल किया जाए, एक बग के आसपास मिलता है)
  • एक ट्यूटोरियल
  • एक जटिल अवधारणा की व्याख्या
  • एक नई खोज की प्रस्तुति

दिलचस्प समस्याओं का पता लगाने का अभ्यास करें

एक अच्छा शोध शीर्षक / समस्या का पता लगाना अपने आप में एक कौशल है। आप कुछ ऐसा खोजना चाहते हैं:

  • उपन्यास (पहले से ही हल / किया नहीं गया है)
  • दूसरों के लिए दिलचस्प है
  • आपके पास समय, कौशल और संसाधनों के साथ संभव है

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

आखिरकार…

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