मॉडल की परफ़ॉर्मेंस को बेहतर बनाने के लिए, वैज्ञानिक तरीका

इस दस्तावेज़ के मकसद के लिए:

मशीन लर्निंग को डेवलप करने का मुख्य मकसद, डिप्लॉय किए गए मॉडल का ज़्यादा से ज़्यादा फ़ायदा पाना है.

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

इस सेक्शन में, इन बातों को माना जाता है:

  • आपके पास पहले से ही पूरी तरह से काम करने वाली ट्रेनिंग पाइपलाइन है. साथ ही, ऐसा कॉन्फ़िगरेशन है जिससे ठीक-ठाक नतीजे मिलते हैं.
  • आपके पास, काम के ट्यूनिंग एक्सपेरिमेंट करने के लिए ज़रूरी कंप्यूटेशनल संसाधन होने चाहिए. साथ ही, कम से कम कई ट्रेनिंग जॉब को एक साथ चलाने के लिए भी ज़रूरी संसाधन होने चाहिए.

इंक्रीमेंटल ट्यूनिंग की रणनीति

सुझाव: आसान कॉन्फ़िगरेशन से शुरुआत करें. इसके बाद, समस्या के बारे में अहम जानकारी इकट्ठा करते हुए, धीरे-धीरे सुधार करें. पक्का करें कि किसी भी तरह का सुधार, ठोस सबूतों के आधार पर किया गया हो.

हम मानते हैं कि आपका लक्ष्य ऐसा कॉन्फ़िगरेशन ढूंढना है जिससे आपके मॉडल की परफ़ॉर्मेंस को ज़्यादा से ज़्यादा बढ़ाया जा सके. कभी-कभी, आपका लक्ष्य तय समयसीमा में मॉडल को ज़्यादा से ज़्यादा बेहतर बनाना होता है. अन्य मामलों में, मॉडल को हमेशा के लिए बेहतर बनाया जा सकता है. उदाहरण के लिए, प्रोडक्शन में इस्तेमाल किए जाने वाले मॉडल को लगातार बेहतर बनाना.

सिद्धांत के तौर पर, एल्गोरिदम का इस्तेमाल करके परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. एल्गोरिदम, संभावित कॉन्फ़िगरेशन के पूरे स्पेस को अपने-आप खोजता है. हालांकि, यह एक व्यावहारिक विकल्प नहीं है. संभावित कॉन्फ़िगरेशन की संख्या बहुत ज़्यादा है. साथ ही, अब तक कोई भी ऐसा एल्गोरिदम नहीं है जो इंसानी मदद के बिना, इस स्पेस को कुशलता से खोज सके. ज़्यादातर ऑटोमेटेड सर्च एल्गोरिदम, हाथ से डिज़ाइन किए गए सर्च स्पेस पर निर्भर करते हैं. यह सर्च स्पेस, खोज के लिए कॉन्फ़िगरेशन का सेट तय करता है. ये सर्च स्पेस काफ़ी अहम हो सकते हैं.

परफ़ॉर्मेंस को बेहतर बनाने का सबसे असरदार तरीका यह है कि शुरुआत में आसान कॉन्फ़िगरेशन का इस्तेमाल किया जाए. इसके बाद, समस्या के बारे में ज़्यादा जानकारी मिलने पर, धीरे-धीरे सुविधाएं जोड़ी जाएं और सुधार किए जाएं.

हमारा सुझाव है कि आप हर राउंड की ट्यूनिंग में, खोज के लिए ऑटोमेटेड एल्गोरिदम का इस्तेमाल करें. साथ ही, अपनी समझ बढ़ने के साथ-साथ खोज के लिए उपलब्ध स्पेस को लगातार अपडेट करें. एक्सप्लोर करने के दौरान, आपको बेहतर कॉन्फ़िगरेशन मिलते रहेंगे. इसलिए, आपका "सबसे अच्छा" मॉडल लगातार बेहतर होता रहेगा.

"लॉन्च" शब्द का मतलब, हमारे सबसे अच्छे कॉन्फ़िगरेशन में अपडेट करना है. ऐसा हो सकता है कि यह किसी प्रोडक्शन मॉडल के असल लॉन्च से मेल खाए या न खाए. हर "लॉन्च" के लिए, आपको यह पक्का करना होगा कि बदलाव, ठोस सबूतों के आधार पर किया गया हो. सिर्फ़ किसी कॉन्फ़िगरेशन के सही होने की वजह से नहीं, ताकि ट्रेनिंग पाइपलाइन में गैर-ज़रूरी जटिलता न बढ़े.

बड़े लेवल पर, हमारी इंक्रीमेंटल ट्यूनिंग की रणनीति में इन चार चरणों को दोहराना शामिल है:

  1. एक्सपेरिमेंट के अगले राउंड के लिए कोई लक्ष्य चुनें. पक्का करें कि लक्ष्य का दायरा सही हो.
  2. एक्सपेरिमेंट के अगले राउंड को डिज़ाइन करें. ऐसे एक्सपेरिमेंट डिज़ाइन और लागू करें जिनसे इस लक्ष्य को हासिल करने में मदद मिले.
  3. एक्सपेरिमेंट के नतीजों से सीखें. चेकलिस्ट के हिसाब से एक्सपेरिमेंट का आकलन करें.
  4. यह तय करना कि सुझाए गए बदलाव को लागू करना है या नहीं.

इस सेक्शन के बाकी हिस्से में, इस रणनीति के बारे में बताया गया है.

एक्सपेरिमेंट के अगले राउंड के लिए कोई लक्ष्य चुनें

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

  • पाइपलाइन को बेहतर बनाने के लिए, कोई नया तरीका आज़माएं. उदाहरण के लिए, नया रेगुलराइज़र, प्रीप्रोसेसिंग का विकल्प वगैरह.
  • किसी मॉडल के हाइपरपैरामीटर (उदाहरण के लिए, ऐक्टिवेशन फ़ंक्शन) के असर को समझना
  • पुष्टि करने से जुड़ी गड़बड़ी को कम करें.

पुष्टि करने से जुड़ी गड़बड़ी को कम करने के लिए, शॉर्ट टर्म के बजाय लॉन्ग टर्म में होने वाली प्रोग्रेस को प्राथमिकता दें

खास जानकारी: ज़्यादातर मामलों में, आपका मुख्य लक्ष्य ट्यूनिंग की समस्या के बारे में जानकारी पाना होता है.

हमारा सुझाव है कि आप ज़्यादातर समय समस्या को समझने में लगाएं. साथ ही, पुष्टि करने वाले सेट की परफ़ॉर्मेंस को ज़्यादा से ज़्यादा बढ़ाने पर कम समय लगाएं. दूसरे शब्दों में कहें, तो ज़्यादातर समय "एक्सप्लोरेशन" पर और सिर्फ़ कुछ समय "एक्सप्लॉइटेशन" पर खर्च करें. परफ़ॉर्मेंस को बेहतर बनाने के लिए, समस्या को समझना ज़रूरी है. कम समय में मिलने वाले फ़ायदे के बजाय अहम जानकारी को प्राथमिकता देने से, इन कामों में मदद मिलती है:

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

आखिरकार, आपको समस्या समझ आ जाएगी. इसके बाद, सिर्फ़ पुष्टि करने से जुड़ी गड़बड़ी पर ध्यान दिया जा सकता है. भले ही, एक्सपेरिमेंट से ट्यूनिंग की समस्या के स्ट्रक्चर के बारे में ज़्यादा जानकारी न मिली हो.

एक्सपेरिमेंट का अगला राउंड डिज़ाइन करना

खास जानकारी: यह पता लगाएं कि एक्सपेरिमेंट के लक्ष्य के लिए, कौनसे हाइपरपैरामीटर वैज्ञानिक, नुकसान पहुंचाने वाले, और तय किए गए हाइपरपैरामीटर हैं. स्टडी की एक ऐसी सीरीज़ बनाएं जिसमें साइंटिफ़िक हाइपरपैरामीटर की अलग-अलग वैल्यू की तुलना की जा सके. ऐसा करते समय, नॉइसेंस हाइपरपैरामीटर को ऑप्टिमाइज़ किया जा सकता है. संसाधन की लागत और वैज्ञानिक वैल्यू के बीच संतुलन बनाए रखने के लिए, परफ़ॉर्मेंस पर असर डालने वाले हाइपरपैरामीटर का सर्च स्पेस चुनें.

वैज्ञानिक, नुकसान पहुंचाने वाले, और तय किए गए हाइपरपैरामीटर की पहचान करना

किसी दिए गए लक्ष्य के लिए, सभी हाइपरपैरामीटर इनमें से किसी एक कैटगरी में आते हैं:

  • वैज्ञानिक हाइपरपैरामीटर वे होते हैं जिनका असर मॉडल की परफ़ॉर्मेंस पर पड़ता है. आपको इसी असर को मेज़र करना होता है.
  • नुसेंस हाइपरपैरामीटर वे होते हैं जिन्हें साइंटिफ़िक हाइपरपैरामीटर की अलग-अलग वैल्यू की तुलना करने के लिए, ऑप्टिमाइज़ करना ज़रूरी होता है. नुसेंस हाइपरपैरामीटर, आंकड़ों में नुसेंस पैरामीटर की तरह होते हैं.
  • फ़िक्स्ड हाइपरपैरामीटर की वैल्यू, एक्सपेरिमेंट के मौजूदा राउंड में एक जैसी होती हैं. साइंटिफ़िक हाइपरपैरामीटर की अलग-अलग वैल्यू की तुलना करते समय, तय किए गए हाइपरपैरामीटर की वैल्यू नहीं बदलनी चाहिए. एक्सपेरिमेंट के सेट के लिए कुछ हाइपरपैरामीटर तय करने पर, आपको यह स्वीकार करना होगा कि एक्सपेरिमेंट से मिले नतीजे, तय किए गए हाइपरपैरामीटर की अन्य सेटिंग के लिए मान्य नहीं हो सकते. दूसरे शब्दों में कहें, तो तय किए गए हाइपरपैरामीटर की वजह से, एक्सपेरिमेंट से मिले नतीजों के आधार पर निकाले गए किसी भी नतीजे में कुछ कमियां हो सकती हैं.

उदाहरण के लिए, मान लें कि आपका लक्ष्य यह है:

यह पता लगाना कि क्या ज़्यादा हिडन लेयर वाले मॉडल में पुष्टि करने से जुड़ी गड़बड़ी कम होती है.

इस मामले में:

  • लर्निंग रेट एक मुश्किल हाइपरपैरामीटर है. ऐसा इसलिए, क्योंकि अलग-अलग हिडन लेयर वाले मॉडल की तुलना सिर्फ़ तब की जा सकती है, जब हर हिडन लेयर के लिए लर्निंग रेट को अलग से ट्यून किया गया हो. (आम तौर पर, लर्निंग रेट सबसे सही है या नहीं, यह मॉडल के आर्किटेक्चर पर निर्भर करता है).
  • अगर आपने पिछले एक्सपेरिमेंट में यह तय कर लिया है कि सबसे अच्छा ऐक्टिवेशन फ़ंक्शन, मॉडल की डेप्थ के हिसाब से नहीं बदलता है, तो ऐक्टिवेशन फ़ंक्शन को फ़िक्स हाइपरपैरामीटर के तौर पर इस्तेमाल किया जा सकता है. इसके अलावा, अगर आपको इस ऐक्टिवेशन फ़ंक्शन को कवर करने के लिए, छिपी हुई लेयर की संख्या के बारे में अपने नतीजों को सीमित करना है. इसके अलावा, अगर आपको हर छिपी हुई लेयर की संख्या के लिए इसे अलग से ट्यून करना है, तो यह एक मुश्किल हाइपरपैरामीटर हो सकता है.

कोई हाइपरपैरामीटर, साइंटिफ़िक हाइपरपैरामीटर, न्यूसेंस हाइपरपैरामीटर या फ़िक्स्ड हाइपरपैरामीटर हो सकता है. हाइपरपैरामीटर का डेज़िग्नेशन, एक्सपेरिमेंट के लक्ष्य के हिसाब से बदलता है. उदाहरण के लिए, ऐक्टिवेशन फ़ंक्शन इनमें से कोई भी हो सकता है:

  • वैज्ञानिक हाइपरपैरामीटर: क्या हमारी समस्या के लिए ReLU या tanh बेहतर विकल्प है?
  • न्युसेंस हाइपरपैरामीटर: क्या कई अलग-अलग ऐक्टिवेशन फ़ंक्शन इस्तेमाल करने की अनुमति देने पर, सबसे अच्छा पांच लेयर वाला मॉडल, सबसे अच्छे छह लेयर वाले मॉडल से बेहतर होता है?
  • फ़िक्स किया गया हाइपरपैरामीटर: ReLU नेट के लिए, क्या किसी खास जगह पर बैच नॉर्मलाइज़ेशन जोड़ने से मदद मिलती है?

एक्सपेरिमेंट का नया राउंड डिज़ाइन करते समय:

  1. एक्सपेरिमेंट के लक्ष्य के लिए, वैज्ञानिक हाइपरपैरामीटर की पहचान करें. (इस चरण में, अन्य सभी हाइपरपैरामीटर को नॉइस हाइपरपैरामीटर माना जा सकता है.)
  2. कुछ ऐसे हाइपरपैरामीटर को फ़िक्स किए गए हाइपरपैरामीटर में बदलें जो परफ़ॉर्मेंस पर बुरा असर डालते हैं.

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

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

ऑप्टिमाइज़र के कुछ पैरामीटर

सामान्य तौर पर, ऑप्टिमाइज़र के कुछ हाइपरपैरामीटर (जैसे, लर्निंग रेट, मोमेंटम, लर्निंग रेट शेड्यूल पैरामीटर, ऐडम बीटा वगैरह) ऐसे हाइपरपैरामीटर होते हैं जो अन्य बदलावों के साथ सबसे ज़्यादा इंटरैक्ट करते हैं. ऑप्टिमाइज़र के ये हाइपरपैरामीटर, वैज्ञानिक हाइपरपैरामीटर नहीं होते. इसकी वजह यह है कि "मौजूदा पाइपलाइन के लिए सबसे अच्छी लर्निंग रेट क्या है?" जैसे लक्ष्य से ज़्यादा जानकारी नहीं मिलती. ऐसा इसलिए, क्योंकि पाइपलाइन में बदलाव होने पर सबसे अच्छी सेटिंग बदल सकती है.

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

ऑप्टिमाइज़र चुनने का विकल्प

आम तौर पर, ऑप्टिमाइज़र के लिए इनमें से कोई विकल्प चुना जाता है:

  • एक वैज्ञानिक हाइपरपैरामीटर
  • फ़िक्स किया गया हाइपरपैरामीटर

अगर आपके एक्सपेरिमेंट का मकसद, दो या उससे ज़्यादा ऑप्टिमाइज़र की तुलना करना है, तो ऑप्टिमाइज़र एक साइंटिफ़िक हाइपरपैरामीटर होता है. उदाहरण के लिए:

यह तय करें कि कौनसे ऑप्टिमाइज़र से, दिए गए चरणों की संख्या में पुष्टि करने से जुड़ी सबसे कम गड़बड़ी होती है.

इसके अलावा, कई वजहों से ऑप्टिमाइज़र को फ़िक्स किया जा सकता है. जैसे:

  • पिछले एक्सपेरिमेंट से पता चलता है कि ट्यूनिंग की समस्या के लिए सबसे अच्छा ऑप्टिमाइज़र, मौजूदा वैज्ञानिक हाइपरपैरामीटर के लिए संवेदनशील नहीं है.
  • आपको इस ऑप्टिमाइज़र का इस्तेमाल करके, वैज्ञानिक हाइपरपैरामीटर की वैल्यू की तुलना करनी है, क्योंकि इसके ट्रेनिंग कर्व को समझना आसान होता है.
  • आपको इस ऑप्टिमाइज़र का इस्तेमाल करना है, क्योंकि यह अन्य ऑप्टिमाइज़र की तुलना में कम मेमोरी का इस्तेमाल करता है.

रेगुलराइज़ेशन हाइपरपैरामीटर

रेगुलराइज़ेशन की तकनीक से जोड़े गए हाइपरपैरामीटर आम तौर पर, न्यसेंस हाइपरपैरामीटर होते हैं. हालांकि, रेगुलराइज़ेशन तकनीक को शामिल करना है या नहीं, यह वैज्ञानिक या तय किया गया हाइपरपैरामीटर होता है.

उदाहरण के लिए, ड्रॉपआउट रेगुलराइज़ेशन से कोड की जटिलता बढ़ जाती है. इसलिए, ड्रॉपआउट रेगुलराइज़ेशन को शामिल करने का फ़ैसला करते समय, "कोई ड्रॉपआउट नहीं" बनाम "ड्रॉपआउट" को साइंटिफ़िक हाइपरपैरामीटर बनाया जा सकता है. हालांकि, ड्रॉपआउट रेट को न्यूसेंस हाइपरपैरामीटर बनाया जा सकता है. अगर इस एक्सपेरिमेंट के आधार पर, पाइपलाइन में ड्रॉपआउट रेगुलराइज़ेशन जोड़ने का फ़ैसला किया जाता है, तो आने वाले समय में होने वाले एक्सपेरिमेंट में ड्रॉपआउट रेट, एक न्यूसेंस हाइपरपैरामीटर होगा.

आर्किटेक्चरल हाइपरपैरामीटर

आर्किटेक्चर से जुड़े हाइपरपैरामीटर अक्सर वैज्ञानिक या तय किए गए हाइपरपैरामीटर होते हैं. ऐसा इसलिए, क्योंकि आर्किटेक्चर में बदलाव करने से, विज्ञापन दिखाने और ट्रेनिंग की लागत, लेटेन्सी, और मेमोरी की ज़रूरी शर्तों पर असर पड़ सकता है. उदाहरण के लिए, लेयर की संख्या आम तौर पर एक वैज्ञानिक या तय किया गया हाइपरपैरामीटर होता है, क्योंकि इससे ट्रेनिंग की स्पीड और मेमोरी के इस्तेमाल पर काफ़ी असर पड़ता है.

वैज्ञानिक हाइपरपैरामीटर पर निर्भरता

कुछ मामलों में, नॉइसेंस और फ़िक्स्ड हाइपरपैरामीटर के सेट, साइंटिफ़िक हाइपरपैरामीटर की वैल्यू पर निर्भर करते हैं. उदाहरण के लिए, मान लें कि आपको यह पता लगाना है कि Nesterov momentum और Adam में से कौनसे ऑप्टिमाइज़र से पुष्टि करने में सबसे कम गड़बड़ी होती है. इस मामले में:

  • साइंटिफ़िक हाइपरपैरामीटर, ऑप्टिमाइज़र होता है. इसकी वैल्यू {"Nesterov_momentum", "Adam"} होती है
  • वैल्यू optimizer="Nesterov_momentum", हाइपरपैरामीटर {learning_rate, momentum} को पेश करती है. ये हाइपरपैरामीटर, नॉइस या फ़िक्स्ड हाइपरपैरामीटर हो सकते हैं.
  • वैल्यू optimizer="Adam" हाइपरपैरामीटर {learning_rate, beta1, beta2, epsilon} को पेश करती है. ये हाइपरपैरामीटर, नॉइस या फ़िक्स्ड हाइपरपैरामीटर हो सकते हैं.

ऐसे हाइपरपैरामीटर जो साइंटिफ़िक हाइपरपैरामीटर की कुछ वैल्यू के लिए ही मौजूद होते हैं उन्हें कंडीशनल हाइपरपैरामीटर कहा जाता है. सिर्फ़ नाम एक जैसा होने की वजह से, यह न मान लें कि दो कंडीशनल हाइपरपैरामीटर एक जैसे हैं! ऊपर दिए गए उदाहरण में, learning_rate नाम का कंडीशनल हाइपरपैरामीटर, optimizer="Nesterov_momentum" के लिए optimizer="Adam" से अलग हाइपरपैरामीटर है. दोनों एल्गोरिदम में इसकी भूमिका एक जैसी होती है. हालांकि, यह एक जैसी नहीं होती. साथ ही, हर ऑप्टिमाइज़र में अच्छी परफ़ॉर्म करने वाली वैल्यू की रेंज, आम तौर पर कई ऑर्डर ऑफ़ मैग्नीट्यूड से अलग होती है.

स्टडी का सेट बनाना

वैज्ञानिक और नुकसान पहुंचाने वाले हाइपरपैरामीटर की पहचान करने के बाद, आपको एक्सपेरिमेंट के लक्ष्य को पूरा करने के लिए, स्टडी या स्टडी की सीरीज़ डिज़ाइन करनी चाहिए. स्टडी में, हाइपरपैरामीटर कॉन्फ़िगरेशन का एक सेट तय किया जाता है. इसका इस्तेमाल, आगे के विश्लेषण के लिए किया जाता है. हर कॉन्फ़िगरेशन को ट्रायल कहा जाता है. स्टडी बनाने के लिए, आम तौर पर इनमें से किसी एक को चुना जाता है:

  • ऐसे हाइपरपैरामीटर जो अलग-अलग ट्रायल में अलग-अलग होते हैं.
  • वे वैल्यू जो हाइपरपैरामीटर ले सकते हैं (सर्च स्पेस).
  • ट्रायल की संख्या.
  • सर्च स्पेस से इतने सारे ट्रायल का सैंपल लेने के लिए, ऑटोमेटेड सर्च एल्गोरिदम.

इसके अलावा, हाइपरपैरामीटर कॉन्फ़िगरेशन का सेट मैन्युअल तरीके से तय करके भी स्टडी बनाई जा सकती है.

इन स्टडी का मकसद एक साथ ये काम करना है:

  • साइंटिफ़िक हाइपरपैरामीटर की अलग-अलग वैल्यू के साथ पाइपलाइन चलाएं.
  • नुक्सान पहुंचाने वाले हाइपरपैरामीटर को "ऑप्टिमाइज़ करना" (या "ऑप्टिमाइज़ करना"), ताकि वैज्ञानिक हाइपरपैरामीटर की अलग-अलग वैल्यू की तुलना ज़्यादा से ज़्यादा निष्पक्ष तरीके से की जा सके.

सबसे आसान मामले में, आपको वैज्ञानिक पैरामीटर के हर कॉन्फ़िगरेशन के लिए एक अलग स्टडी करनी होगी. इसमें हर स्टडी, नॉइसेंस हाइपरपैरामीटर पर ट्यून होती है. उदाहरण के लिए, अगर आपका लक्ष्य नेस्टरोव मोमेंटम और ऐडम में से सबसे अच्छे ऑप्टिमाइज़र को चुनना है, तो दो स्टडी बनाई जा सकती हैं:

  • एक स्टडी, जिसमें optimizer="Nesterov_momentum" और नॉइसेंस हाइपरपैरामीटर {learning_rate, momentum} हैं
  • एक और स्टडी, जिसमें optimizer="Adam" और नॉइज़ वाले हाइपरपैरामीटर {learning_rate, beta1, beta2, epsilon} हैं.

दोनों ऑप्टिमाइज़र की तुलना करने के लिए, आपको हर स्टडी से सबसे अच्छा परफ़ॉर्म करने वाला ट्रायल चुनना होगा.

नुकसान पहुंचाने वाले हाइपरपैरामीटर को ऑप्टिमाइज़ करने के लिए, ग्रेडिएंट-फ़्री ऑप्टिमाइज़ेशन एल्गोरिदम का इस्तेमाल किया जा सकता है. इसमें बेज़ियन ऑप्टिमाइज़ेशन या इवोल्यूशनरी एल्गोरिदम जैसे तरीके शामिल हैं. हालांकि, हम ट्यूनिंग के एक्सप्लोरेशन फ़ेज़ में, क्वाज़ी-रैंडम सर्च का इस्तेमाल करना पसंद करते हैं. ऐसा इसलिए, क्योंकि इस सेटिंग में इसके कई फ़ायदे हैं. एक्सप्लोरेशन खत्म होने के बाद, हमारा सुझाव है कि आप बेज़ियन ऑप्टिमाइज़ेशन के सबसे नए सॉफ़्टवेयर का इस्तेमाल करें. हालांकि, ऐसा तब ही करें, जब यह सॉफ़्टवेयर उपलब्ध हो.

एक ऐसे मुश्किल मामले पर विचार करें जहां आपको वैज्ञानिक हाइपरपैरामीटर की कई वैल्यू की तुलना करनी है, लेकिन इतने सारे स्वतंत्र अध्ययन करना व्यावहारिक नहीं है. इस मामले में, ये काम किए जा सकते हैं:

  • वैज्ञानिक पैरामीटर को उसी खोज स्पेस में शामिल करें जिसमें न्यसेंस हाइपरपैरामीटर शामिल हैं.
  • एक ही स्टडी में, वैज्ञानिक और मुश्किल हाइपरपैरामीटर, दोनों की वैल्यू का सैंपल लेने के लिए, सर्च एल्गोरिदम का इस्तेमाल करें.

इस तरीके का इस्तेमाल करने पर, शर्तों के साथ तय किए गए हाइपरपैरामीटर की वजह से समस्याएं आ सकती हैं. आखिरकार, जब तक वैज्ञानिक हाइपरपैरामीटर की सभी वैल्यू के लिए, न्यसेंस हाइपरपैरामीटर का सेट एक जैसा नहीं होता, तब तक खोज स्पेस के बारे में बताना मुश्किल होता है. इस मामले में, हम फ़ैंसी ब्लैक-बॉक्स ऑप्टिमाइज़ेशन टूल के बजाय, क्वाज़ी-रैंडम सर्च का इस्तेमाल करना ज़्यादा पसंद करते हैं. इसकी वजह यह है कि यह गारंटी देता है कि वैज्ञानिक हाइपरपैरामीटर की अलग-अलग वैल्यू को एक जैसा सैंपल किया जाएगा. सर्च एल्गोरिदम कोई भी हो, यह पक्का करें कि वह वैज्ञानिक पैरामीटर को एक जैसा खोजे.

ज़रूरी जानकारी देने वाले और किफ़ायती एक्सपेरिमेंट के बीच संतुलन बनाए रखना

स्टडी या स्टडी की सीरीज़ डिज़ाइन करते समय, सीमित बजट तय करें, ताकि इन तीन लक्ष्यों को आसानी से हासिल किया जा सके:

  • वैज्ञानिक हाइपरपैरामीटर की अलग-अलग वैल्यू की तुलना करना.
  • सर्च स्पेस के हिसाब से, हाइपरपैरामीटर को ट्यून करना.
  • परेशान करने वाले हाइपरपैरामीटर के खोज स्पेस की काफ़ी हद तक सैंपलिंग की गई हो.

इन तीनों लक्ष्यों को जितना बेहतर तरीके से हासिल किया जा सकेगा, एक्सपेरिमेंट से उतनी ही ज़्यादा इनसाइट निकाली जा सकेंगी. साइंटिफ़िक हाइपरपैरामीटर की ज़्यादा से ज़्यादा वैल्यू की तुलना करने से, आपको एक्सपेरिमेंट से मिलने वाली अहम जानकारी का दायरा बढ़ता है.

जितने हो सके उतने न्यसेंस हाइपरपैरामीटर शामिल करने और हर न्यसेंस हाइपरपैरामीटर को ज़्यादा से ज़्यादा रेंज में बदलने की अनुमति देने से, इस बात की संभावना बढ़ जाती है कि वैज्ञानिक हाइपरपैरामीटर के हर कॉन्फ़िगरेशन के लिए, खोज स्पेस में न्यसेंस हाइपरपैरामीटर की "अच्छी" वैल्यू मौजूद है. इसके अलावा, ऐसा न करने पर, वैज्ञानिक हाइपरपैरामीटर की वैल्यू की तुलना सही तरीके से नहीं की जा सकती. ऐसा इसलिए, क्योंकि आपको न्यसेंस हाइपरपैरामीटर स्पेस के उन संभावित क्षेत्रों के बारे में पता नहीं चलेगा जहां वैज्ञानिक पैरामीटर की कुछ वैल्यू के लिए बेहतर वैल्यू मौजूद हो सकती हैं.

ज़्यादा से ज़्यादा घनत्व के साथ, नुकसान पहुंचाने वाले हाइपरपैरामीटर के खोज स्पेस का सैंपल लें. ऐसा करने से, इस बात की संभावना बढ़ जाती है कि खोज की प्रक्रिया में, आपके खोज स्पेस में मौजूद नुकसान पहुंचाने वाले हाइपरपैरामीटर के लिए कोई अच्छी सेटिंग मिल जाएगी. ऐसा न करने पर, हो सकता है कि आप वैज्ञानिक पैरामीटर की वैल्यू की तुलना सही तरीके से न कर पाएं. इसकी वजह यह है कि कुछ वैल्यू को नॉइसेंस हाइपरपैरामीटर की सैंपलिंग में बेहतर नतीजे मिल सकते हैं.

माफ़ करें, इन तीनों डाइमेंशन में सुधार करने के लिए, इनमें से किसी एक की ज़रूरत होती है:

  • मुफ़्त में आज़माने की सुविधा देने वाले लोगों की संख्या बढ़ने से, संसाधन का खर्च भी बढ़ जाता है.
  • किसी अन्य डाइमेंशन में संसाधनों को सेव करने का तरीका ढूंढना.

हर समस्या की अपनी ख़ासियत और कंप्यूटेशनल सीमाएं होती हैं. इसलिए, इन तीन लक्ष्यों के लिए संसाधनों को बांटने के लिए, डोमेन के बारे में कुछ जानकारी होना ज़रूरी है. स्टडी चलाने के बाद, हमेशा यह पता लगाने की कोशिश करें कि क्या स्टडी ने न्युसेंस हाइपरपैरामीटर को अच्छी तरह से ट्यून किया है. इसका मतलब है कि स्टडी में, काफ़ी बड़े स्पेस को अच्छी तरह से खोजा गया, ताकि वैज्ञानिक हाइपरपैरामीटर की तुलना सही तरीके से की जा सके. इनके बारे में अगले सेक्शन में ज़्यादा जानकारी दी गई है.

एक्सपेरिमेंट के नतीजों से सीखना

सुझाव: एक्सपेरिमेंट के हर ग्रुप के मूल वैज्ञानिक लक्ष्य को हासिल करने के साथ-साथ, सवालों की एक और चेकलिस्ट देखें. अगर आपको कोई समस्या मिलती है, तो एक्सपेरिमेंट में बदलाव करें और उन्हें फिर से चलाएं.

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

एक्सपेरिमेंट चलाने में ज़्यादा खर्च आ सकता है. इसलिए, आपको एक्सपेरिमेंट के हर ग्रुप से अन्य काम की अहम जानकारी भी निकालनी चाहिए. भले ही, यह जानकारी मौजूदा लक्ष्य के लिए तुरंत काम की न हो.

एक्सपेरिमेंट के किसी सेट का विश्लेषण करने से पहले, खुद से ये सवाल पूछें, ताकि उनके मूल लक्ष्य को पूरा किया जा सके:

  • क्या खोज के लिए चुना गया हिस्सा काफ़ी बड़ा है? अगर किसी स्टडी का सबसे सही पॉइंट, एक या उससे ज़्यादा डाइमेंशन में सर्च स्पेस की सीमा के आस-पास है, तो हो सकता है कि सर्च का दायरा काफ़ी बड़ा न हो. इस मामले में, खोज के लिए ज़्यादा जगह के साथ कोई दूसरा अध्ययन करें.
  • क्या आपने खोज के लिए उपलब्ध जगह से काफ़ी पॉइंट लिए हैं? अगर ऐसा नहीं होता है, तो ज़्यादा पॉइंट चलाएं या ट्यूनिंग के लक्ष्यों को कम करें.
  • हर स्टडी में, कितने फ़्रैक्शन के ट्रायल पूरे नहीं किए जा सकते? इसका मतलब है कि, कौनसे ट्रायल अलग-अलग हैं, जिनकी लॉस वैल्यू बहुत खराब है या जो किसी लागू होने वाली शर्त का उल्लंघन करने की वजह से चल ही नहीं पा रहे हैं? जब किसी स्टडी में बहुत ज़्यादा पॉइंट मुमकिन न हों, तो ऐसे पॉइंट की सैंपलिंग से बचने के लिए, खोज के दायरे को अडजस्ट करें. इसके लिए, कभी-कभी खोज के दायरे को फिर से पैरामीटर में बदलना पड़ता है. कुछ मामलों में, बहुत ज़्यादा अवास्तविक पॉइंट से पता चल सकता है कि ट्रेनिंग कोड में कोई गड़बड़ी है.
  • क्या मॉडल में ऑप्टिमाइज़ेशन से जुड़ी समस्याएं हैं?
  • सबसे अच्छे ट्रायल के ट्रेनिंग कर्व से क्या पता चलता है? उदाहरण के लिए, क्या सबसे अच्छे ट्रायल में ट्रेनिंग कर्व, ज़्यादा फ़िटिंग की समस्या से मिलते-जुलते हैं?

अगर ज़रूरी हो, तो पिछले सवालों के जवाबों के आधार पर, सबसे हाल की स्टडी या स्टडी के ग्रुप में बदलाव करें. इससे खोज के दायरे को बेहतर बनाया जा सकता है और/या ज़्यादा ट्रायल के सैंपल लिए जा सकते हैं. इसके अलावा, कोई अन्य सुधार किया जा सकता है.

ऊपर दिए गए सवालों के जवाब देने के बाद, इस बात का आकलन किया जा सकता है कि एक्सपेरिमेंट से मिले सबूत, आपके मूल लक्ष्य को पूरा करने में कितने मददगार हैं. उदाहरण के लिए, यह आकलन करना कि कोई बदलाव कितना फ़ायदेमंद है.

अगर किसी सर्च स्पेस से सैंपल किया गया सबसे अच्छा पॉइंट, उसकी सीमा के आस-पास है, तो उसे संदिग्ध माना जाता है. अगर उस दिशा में खोज की सीमा बढ़ाई जाए, तो आपको और भी बेहतर पॉइंट मिल सकता है.

सर्च स्पेस की सीमाओं की जांच करने के लिए, हमारा सुझाव है कि पूरे हो चुके ट्रायल को बुनियादी हाइपरपैरामीटर ऐक्सिस प्लॉट पर प्लॉट करें. इनमें, हम पुष्टि करने के मकसद की वैल्यू को किसी एक हाइपरपैरामीटर (उदाहरण के लिए, लर्निंग रेट) के हिसाब से प्लॉट करते हैं. प्लॉट पर मौजूद हर पॉइंट, एक ट्रायल से मेल खाता है.

आम तौर पर, हर ट्रायल के लिए पुष्टि करने के मकसद की वैल्यू, ट्रेनिंग के दौरान हासिल की गई सबसे अच्छी वैल्यू होनी चाहिए.

इस ग्राफ़ में, पुष्टि करने के लिए इस्तेमाल किए गए डेटासेट (y-ऐक्सिस) पर गड़बड़ी की दर बनाम पीक लर्निंग रेट (x-ऐक्सिस) दिखाया गया है. इससे पता चलता है कि सर्च स्पेस की सीमाएं सही नहीं हैं. इस ग्राफ़ में, सबसे अच्छे ट्रायल (सबसे कम
          गड़बड़ी की दर) खोज स्पेस के किनारे पर हैं. यहां लर्निंग रेट सबसे ज़्यादा है. इस ग्राफ़ में, पुष्टि करने के लिए इस्तेमाल किए गए डेटा सेट (y-ऐक्सिस) के लिए गड़बड़ी की दर बनाम पीक लर्निंग रेट (x-ऐक्सिस) दिखाया गया है. इससे पता चलता है कि सर्च स्पेस की सीमाएं अच्छी तरह से तय की गई हैं. इस ग्राफ़ में, सबसे अच्छे ट्रायल (सबसे कम
          गड़बड़ी की दर) खोज स्पेस के बीच में हैं. यहां पीक लर्निंग रेट 0.001 है, न कि 0.00001 या 0.1.

पहली इमेज: खोज के लिए खराब और स्वीकार की जाने वाली सीमाओं के उदाहरण.

पहले फ़िगर में दिए गए प्लॉट, शुरुआती लर्निंग रेट के मुकाबले गड़बड़ी की दर (कम होना बेहतर है) दिखाते हैं. अगर सबसे अच्छे पॉइंट, खोज के दायरे के किनारे की ओर क्लस्टर होते हैं (किसी डाइमेंशन में), तो आपको खोज के दायरे की सीमाओं को तब तक बढ़ाना पड़ सकता है, जब तक कि सबसे अच्छा पॉइंट, सीमा के पास न हो.

अक्सर, स्टडी में ऐसे ट्रायल शामिल होते हैं जो "मुमकिन नहीं" होते हैं. इनमें अलग-अलग या बहुत खराब नतीजे मिलते हैं. इन्हें फ़िगर 1 में लाल रंग के X से मार्क किया गया है. अगर कुछ थ्रेशोल्ड वैल्यू से ज़्यादा लर्निंग रेट के लिए सभी ट्रायल मुमकिन नहीं हैं और सबसे अच्छा परफ़ॉर्म करने वाले ट्रायल में लर्निंग रेट, उस क्षेत्र के किनारे पर हैं, तो मॉडल को स्थिरता से जुड़ी समस्याएं हो सकती हैं. इससे मॉडल, ज़्यादा लर्निंग रेट ऐक्सेस नहीं कर पाएगा.

खोज के लिए उपलब्ध डेटा में से ज़रूरत के मुताबिक पॉइंट का सैंपल नहीं लिया गया है

आम तौर पर, यह जानना बहुत मुश्किल हो सकता है कि सर्च स्पेस को काफ़ी हद तक सैंपल किया गया है या नहीं. 🤖 कम ट्रायल चलाने के बजाय ज़्यादा ट्रायल चलाना बेहतर होता है. हालांकि, ज़्यादा ट्रायल चलाने से अतिरिक्त लागत लगती है.

यह जानना मुश्किल है कि आपने ज़रूरत के मुताबिक सैंपल ले लिए हैं या नहीं. इसलिए, हमारा सुझाव है कि आप:

  • अपनी बजट के हिसाब से सैंपल खरीदना.
  • अलग-अलग हाइपरपैरामीटर ऐक्सिस प्लॉट को बार-बार देखकर, अपने इंट्यूशन के आधार पर कॉन्फ़िडेंस लेवल को कैलिब्रेट करना. साथ ही, यह समझने की कोशिश करना कि खोज के दायरे के "अच्छे" क्षेत्र में कितने पॉइंट हैं.

ट्रेनिंग कर्व की जांच करना

खास जानकारी: लॉस कर्व की जांच करना, गड़बड़ी के सामान्य मोड की पहचान करने का एक आसान तरीका है. इससे आपको संभावित अगली कार्रवाइयों को प्राथमिकता देने में मदद मिल सकती है.

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

नुकसान की वक्रों की जांच करते समय, इन सवालों पर ध्यान दें:

  • क्या किसी ट्रायल में ओवरफ़िटिंग की समस्या हो रही है? ओवरफ़िटिंग की समस्या तब होती है, जब ट्रेनिंग के दौरान पुष्टि करने से जुड़ी गड़बड़ी बढ़ने लगती है. एक्सपेरिमेंट की सेटिंग में, साइंटिफ़िक हाइपरपैरामीटर की हर सेटिंग के लिए "सबसे अच्छा" ट्रायल चुनकर, न्यसेंस हाइपरपैरामीटर को ऑप्टिमाइज़ करें. इसके बाद, तुलना किए जा रहे साइंटिफ़िक हाइपरपैरामीटर की सेटिंग से जुड़े सबसे अच्छे ट्रायल में, ज़्यादा फ़िटिंग की समस्या की जांच करें. अगर सबसे अच्छे ट्रायल में से किसी एक में ओवरफ़िटिंग की समस्या दिखती है, तो इनमें से कोई एक या दोनों काम करें:

    • रेगुलराइज़ेशन की अन्य तकनीकों का इस्तेमाल करके, एक्सपेरिमेंट को फिर से चलाएं
    • वैज्ञानिक हाइपरपैरामीटर की वैल्यू की तुलना करने से पहले, मौजूदा रेगुलराइज़ेशन पैरामीटर को फिर से ट्यून करें. अगर वैज्ञानिक हाइपरपैरामीटर में रेगुलराइज़ेशन पैरामीटर शामिल हैं, तो हो सकता है कि यह लागू न हो. ऐसा इसलिए, क्योंकि अगर उन रेगुलराइज़ेशन पैरामीटर की कम स्ट्रेंथ वाली सेटिंग से समस्या वाली ओवरफ़िटिंग होती है, तो इसमें कोई हैरानी नहीं होगी.

    ओवरफ़िटिंग को कम करना अक्सर आसान होता है. इसके लिए, सामान्य रेगुलराइज़ेशन तकनीकों का इस्तेमाल किया जाता है. इनसे कोड की जटिलता या अतिरिक्त कंप्यूटेशन कम होता है. उदाहरण के लिए, ड्रॉपआउट रेगुलराइज़ेशन, लेबल स्मूदिंग, वेट डिके. इसलिए, आम तौर पर एक्सपेरिमेंट के अगले राउंड में इनमें से एक या उससे ज़्यादा को जोड़ना आसान होता है. उदाहरण के लिए, अगर साइंटिफ़िक हाइपरपैरामीटर "हिडन लेयर की संख्या" है और हिडन लेयर की सबसे बड़ी संख्या का इस्तेमाल करने वाले सबसे अच्छे ट्रायल में ओवरफ़िटिंग की समस्या दिखती है, तो हमारा सुझाव है कि हिडन लेयर की कम संख्या को तुरंत चुनने के बजाय, अतिरिक्त रेगुलराइज़ेशन के साथ फिर से कोशिश करें.

    भले ही, "सबसे अच्छे" किसी भी ट्रायल में ओवरफ़िटिंग की समस्या न हो, लेकिन अगर यह समस्या किसी भी ट्रायल में होती है, तो अब भी समस्या हो सकती है. सबसे अच्छे ट्रायल को चुनने से, उन कॉन्फ़िगरेशन को हटाया जाता है जिनमें ओवरफ़िटिंग की समस्या होती है. साथ ही, उन कॉन्फ़िगरेशन को प्राथमिकता दी जाती है जिनमें यह समस्या नहीं होती. दूसरे शब्दों में कहें, तो सबसे अच्छा ट्रायल चुनने से, ज़्यादा रेगुलराइज़ेशन वाले कॉन्फ़िगरेशन को फ़ायदा मिलता है. हालांकि, ट्रेनिंग को बेहतर बनाने के लिए इस्तेमाल की जाने वाली कोई भी चीज़, रेगुलराइज़र के तौर पर काम कर सकती है. भले ही, उसका इस्तेमाल इस तरह से न किया गया हो. उदाहरण के लिए, कम लर्निंग रेट चुनने से ट्रेनिंग को नियमित किया जा सकता है. हालांकि, इससे ऑप्टिमाइज़ेशन की प्रोसेस धीमी हो जाती है. आम तौर पर, हम लर्निंग रेट को इस तरह से नहीं चुनते. ध्यान दें कि साइंटिफ़िक हाइपरपैरामीटर की हर सेटिंग के लिए "सबसे अच्छा" ट्रायल इस तरह से चुना जा सकता है कि वह कुछ साइंटिफ़िक या नॉइसेंस हाइपरपैरामीटर की "खराब" वैल्यू के पक्ष में हो.

  • क्या ट्रेनिंग के आखिर में, ट्रेनिंग या पुष्टि करने से जुड़ी गड़बड़ी में काफ़ी अंतर है? अगर ऐसा होता है, तो इससे इन दोनों में समस्या आ सकती है:

    • वैज्ञानिक हाइपरपैरामीटर की अलग-अलग वैल्यू की तुलना करने की सुविधा. ऐसा इसलिए होता है, क्योंकि हर ट्रायल "लकी" या "अनलकी" चरण पर अचानक खत्म हो जाता है.
    • प्रोडक्शन में सबसे अच्छे ट्रायल के नतीजे को फिर से जनरेट करने की आपकी क्षमता. ऐसा इसलिए, क्योंकि प्रोडक्शन मॉडल में "लकी" स्टेप, स्टडी में इस्तेमाल किए गए "लकी" स्टेप से अलग हो सकता है.

    एक चरण से दूसरे चरण के बीच अंतर होने की ये वजहें हो सकती हैं:

    • हर बैच के लिए, ट्रेनिंग सेट से उदाहरणों को रैंडम तरीके से सैंपल करने की वजह से बैच में अंतर होता है.
    • पुष्टि करने के लिए छोटे सेट
    • ट्रेनिंग के आखिर में, बहुत ज़्यादा लर्निंग रेट का इस्तेमाल करना.

    इन समस्याओं को ठीक करने के लिए, ये तरीके अपनाए जा सकते हैं:

    • बैच का साइज़ बढ़ाना.
    • पुष्टि करने के लिए ज़्यादा डेटा इकट्ठा किया जा रहा है.
    • लर्निंग रेट डेके का इस्तेमाल करना.
    • Polyak averaging का इस्तेमाल करना.
  • क्या ट्रेनिंग के आखिर में भी ट्रायल में सुधार हो रहा है? अगर ऐसा है, तो आप "कंप्यूट बाउंड" मोड में हैं. ऐसे में, ट्रेनिंग के चरणों की संख्या बढ़ाने या लर्निंग रेट शेड्यूल में बदलाव करने से आपको फ़ायदा मिल सकता है.

  • क्या ट्रेनिंग और पुष्टि करने वाले सेट पर परफ़ॉर्मेंस, ट्रेनिंग के आखिरी चरण से पहले ही बेहतर हो गई है? अगर ऐसा है, तो इसका मतलब है कि आप "कंप्यूटिंग की ज़रूरत नहीं है" मोड में हैं. साथ ही, आपके पास ट्रेनिंग के चरणों की संख्या कम करने का विकल्प है.

इस सूची के अलावा, नुकसान की दर के कर्व की जांच करके कई अन्य व्यवहारों का पता लगाया जा सकता है. उदाहरण के लिए, ट्रेनिंग के दौरान ट्रेनिंग लॉस में बढ़ोतरी होने का मतलब है कि ट्रेनिंग पाइपलाइन में कोई गड़बड़ी है.

आइसोलेशन प्लॉट की मदद से यह पता लगाना कि कोई बदलाव काम का है या नहीं

आइसोलेशन प्लॉट, जिसमें ImageNet पर ट्रेन किए गए ResNet-50 के लिए, वेट डिके की सबसे अच्छी वैल्यू की जांच की गई है. इस मामले में, वेट डिके ~0.00005 होने पर, पुष्टि करने में गड़बड़ी होने की दर सबसे कम होती है.

दूसरी इमेज: आइसोलेशन प्लॉट, जिसमें ImageNet पर ट्रेन किए गए ResNet-50 के लिए, वेट डिके की सबसे सही वैल्यू की जांच की गई है.

 

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

आइसोलेशन प्लॉट की मदद से, वैज्ञानिक हाइपरपैरामीटर की अलग-अलग वैल्यू के बीच आसानी से तुलना की जा सकती है. उदाहरण के लिए, इमेज 2 में मौजूद आइसोलेशन प्लॉट से पता चलता है कि वेट डिके की वह वैल्यू कौनसी है जो ImageNet पर ट्रेन किए गए ResNet-50 के किसी कॉन्फ़िगरेशन के लिए, सबसे अच्छी पुष्टि करने वाली परफ़ॉर्मेंस देती है.

अगर यह तय करना है कि वेट डिके को शामिल करना है या नहीं, तो इस प्लॉट के सबसे अच्छे पॉइंट की तुलना, वेट डिके के बिना बेसलाइन से करें. तुलना सही तरीके से करने के लिए, बेसलाइन के लर्निंग रेट को भी अच्छी तरह से ट्यून किया जाना चाहिए.

जब आपके पास (क्वासी)रैंडम सर्च से जनरेट किया गया डेटा हो और आपको आइसोलेशन प्लॉट के लिए लगातार हाइपरपैरामीटर पर विचार करना हो, तो बेसिक हाइपरपैरामीटर ऐक्सिस प्लॉट की x-ऐक्सिस वैल्यू को बकेट करके, आइसोलेशन प्लॉट का अनुमान लगाया जा सकता है. साथ ही, बकेट से तय किए गए हर वर्टिकल स्लाइस में सबसे अच्छा ट्रायल लिया जा सकता है.

सामान्य तौर पर काम के प्लॉट अपने-आप जनरेट करना

प्लॉट जनरेट करने में जितनी ज़्यादा मेहनत लगेगी, उन्हें उतनी ही कम बार देखा जाएगा. इसलिए, हमारा सुझाव है कि आप अपने इंफ़्रास्ट्रक्चर को इस तरह से सेट अप करें कि ज़्यादा से ज़्यादा प्लॉट अपने-आप जनरेट हो सकें. हमारा सुझाव है कि कम से कम, उन सभी हाइपरपैरामीटर के लिए बुनियादी हाइपरपैरामीटर ऐक्सिस प्लॉट अपने-आप जनरेट हों जिन्हें आपने एक्सपेरिमेंट में बदला है.

इसके अलावा, हमारा सुझाव है कि सभी ट्रायल के लिए, नुकसान की दर के कर्व अपने-आप जनरेट होने की सुविधा का इस्तेमाल करें. इसके अलावा, हमारा सुझाव है कि हर स्टडी के सबसे अच्छे कुछ ट्रायल ढूंढना और उनके लॉस कर्व की जांच करना जितना हो सके उतना आसान बनाएं.

इसमें कई अन्य काम के संभावित प्लॉट और विज़ुअलाइज़ेशन जोड़े जा सकते हैं. जेफ़री हिंटन के शब्दों में:

हर बार कुछ नया प्लॉट करने पर, आपको कुछ नया सीखने को मिलता है.

यह तय करना कि उम्मीदवार के बदलाव को स्वीकार करना है या नहीं

खास जानकारी: हमारे मॉडल या ट्रेनिंग की प्रक्रिया में बदलाव करने या नया हाइपरपैरामीटर कॉन्फ़िगरेशन अपनाने का फ़ैसला करते समय, अपने नतीजों में अंतर के अलग-अलग सोर्स पर ध्यान दें.

किसी मॉडल को बेहतर बनाने की कोशिश करते समय, ऐसा हो सकता है कि किसी बदलाव से, मौजूदा कॉन्फ़िगरेशन की तुलना में बेहतर पुष्टि से जुड़ी गड़बड़ी मिले. हालांकि, एक्सपेरिमेंट को दोहराने पर हो सकता है कि कोई फ़ायदा न मिले. अनुकूल नतीजे न मिलने की सबसे अहम वजहों को इन कैटगरी में बांटा जा सकता है:

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

हां, तेज़ी से काम करने वाले सांख्यिकीय टेस्ट का इस्तेमाल करके, पुष्टि करने वाले सीमित सेट पर अनुमानित पुष्टि से जुड़ी गड़बड़ियों की तुलना की जा सकती है. हालांकि, अक्सर ऐसा होता है कि सिर्फ़ ट्रायल के अंतर की वजह से, एक ही हाइपरपैरामीटर सेटिंग का इस्तेमाल करने वाले दो अलग-अलग ट्रेन किए गए मॉडल के बीच, आंकड़ों के हिसाब से काफ़ी अंतर आ जाता है.

जब हम हाइपरपैरामीटर स्पेस में किसी एक पॉइंट के लेवल से आगे बढ़कर नतीजे निकालने की कोशिश करते हैं, तो हमें स्टडी के अंतर के बारे में सबसे ज़्यादा चिंता होती है. स्टडी का वैरिएंस, ट्रायल की संख्या और सर्च स्पेस पर निर्भर करता है. हमने ऐसे मामले देखे हैं जिनमें स्टडी के वैरिएंस, ट्रायल के वैरिएंस से ज़्यादा हैं. साथ ही, ऐसे मामले भी देखे हैं जिनमें स्टडी के वैरिएंस, ट्रायल के वैरिएंस से बहुत कम हैं. इसलिए, किसी बदलाव को लागू करने से पहले, सबसे अच्छे ट्रायल को N बार चलाकर देखें. इससे, ट्रायल के नतीजों में होने वाले अंतर का पता चलेगा. आम तौर पर, पाइपलाइन में बड़े बदलावों के बाद, सिर्फ़ ट्रायल के अंतर को फिर से कैरक्टराइज़ करके काम चलाया जा सकता है. हालांकि, कुछ मामलों में आपको नए अनुमानों की ज़रूरत पड़ सकती है. अन्य ऐप्लिकेशन में, ट्रायल के अंतर की जानकारी देना बहुत महंगा होता है.

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

एक्सप्लोरेशन खत्म होने के बाद

खास जानकारी: बेज़ियन ऑप्टिमाइज़ेशन टूल, अच्छे सर्च स्पेस ढूंढने के बाद एक बेहतरीन विकल्प होते हैं. साथ ही, यह तय करने के बाद कि कौनसे हाइपरपैरामीटर ट्यून करने लायक हैं.

आखिरकार, आपकी प्राथमिकताएं ट्यूनिंग की समस्या के बारे में ज़्यादा जानने से हटकर, लॉन्च करने या इस्तेमाल करने के लिए सबसे अच्छा कॉन्फ़िगरेशन तैयार करने पर आ जाएंगी. उस समय, खोज के लिए एक बेहतर जगह होनी चाहिए. इसमें, सबसे अच्छे तरीके से देखे गए ट्रायल के आस-पास का स्थानीय इलाका शामिल होना चाहिए. साथ ही, इसके लिए सैंपल भी सही तरीके से लिए गए हों. एक्सप्लोरेशन के दौरान, आपको ट्यून करने के लिए सबसे ज़रूरी हाइपरपैरामीटर और उनकी सही रेंज का पता चल जाना चाहिए. इनका इस्तेमाल करके, ऑटोमेटेड ट्यूनिंग की फ़ाइनल स्टडी के लिए सर्च स्पेस बनाया जा सकता है. इसके लिए, ट्यूनिंग के लिए ज़्यादा से ज़्यादा बजट का इस्तेमाल किया जा सकता है.

अब आपको ट्यूनिंग की समस्या के बारे में ज़्यादा जानकारी नहीं चाहिए. इसलिए, क्वासी-रैंडम सर्च के कई फ़ायदे अब लागू नहीं होंगे. इसलिए, आपको बेज़ियन ऑप्टिमाइज़ेशन टूल का इस्तेमाल करना चाहिए, ताकि सबसे सही हाइपरपैरामीटर कॉन्फ़िगरेशन अपने-आप मिल जाए. Open-Source Vizier, एमएल मॉडल को ट्यून करने के लिए कई तरह के बेहतर एल्गोरिदम लागू करता है. इनमें बेज़ियन ऑप्टिमाइज़ेशन एल्गोरिदम भी शामिल हैं.

मान लें कि खोज के दायरे में डाइवर्जेंट पॉइंट की काफ़ी संख्या है. इसका मतलब है कि ऐसे पॉइंट जिनसे NaN ट्रेनिंग लॉस मिलता है या ट्रेनिंग लॉस, औसत से कई स्टैंडर्ड डेविएशन ज़्यादा होता है. ऐसे मामले में, हमारा सुझाव है कि आप ब्लैक-बॉक्स ऑप्टिमाइज़ेशन टूल का इस्तेमाल करें. ये टूल, अलग-अलग नतीजों वाले एक्सपेरिमेंट को सही तरीके से हैंडल करते हैं. (इस समस्या को हल करने का सबसे अच्छा तरीका जानने के लिए, बेज़ियन ऑप्टिमाइज़ेशन की मदद से अज्ञात कंस्ट्रेंट का इस्तेमाल करना लेख पढ़ें.) ओपन-सोर्स Vizier में, अलग-अलग पॉइंट को मार्क करने की सुविधा होती है. इसके लिए, वह एक्सपेरिमेंट को 'संभव नहीं है' के तौर पर मार्क करता है. हालांकि, यह Gelbart et al. के हमारे पसंदीदा तरीके का इस्तेमाल नहीं कर सकता. यह इस बात पर निर्भर करता है कि इसे कैसे कॉन्फ़िगर किया गया है.

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