एआई की मूल बातें

ग्रेडिएंट डिसेंट क्या है?

mm
Unite.AI को Google पर अपने पसंदीदा स्रोतों में जोड़ें

ग्रेडिएंट डिसेंट क्या है?

यदि आप यह जानते हैं कि न्यूरल नेटवर्क को कैसे प्रशिक्षित किया जाता है, तो आपने शायद “ग्रेडिएंट डिसेंट” शब्द के बारे में पहले ही सुना होगा। ग्रेडिएंट डिसेंट न्यूरल नेटवर्क के प्रदर्शन को अनुकूलित करने का प्राथमिक तरीका है, नेटवर्क के नुकसान/त्रुटि दर को कम करता है। हालांकि, ग्रेडिएंट डिसेंट को समझना मशीन लर्निंग के लिए नए लोगों के लिए थोड़ा मुश्किल हो सकता है, और यह लेख आपको यह समझने का प्रयास करेगा कि ग्रेडिएंट डिसेंट कैसे काम करता है।

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

ग्रेडिएंट्स क्या हैं?

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

एक खड़ी ढाल का अर्थ है कि त्रुटि में बड़ी कमी हो रही है और मॉडल तेजी से सीख रहा है, जबकि यदि ढाल शून्य है तो मॉडल एक पठार पर है और सीख नहीं रहा है। हम ढाल के नीचे की ओर जाकर त्रुटि को कम कर सकते हैं और ग्रेडिएंट की गणना करके हमारे मॉडल के लिए एक दिशा (नेटवर्क के पैरामीटर में परिवर्तन) निर्धारित कर सकते हैं।

आइए थोड़ा मेटाफर बदलें और पहाड़ियों और घाटियों की एक श्रृंखला की कल्पना करें। हम घाटी के तल पर पहुंचना चाहते हैं और नुकसान के निम्नतम बिंदु का प्रतिनिधित्व करने वाले हिस्से को ढूंढना चाहते हैं। जब हम पहाड़ी के शीर्ष पर शुरू करते हैं, तो हम पहाड़ी के नीचे की ओर बड़े कदम उठा सकते हैं और आश्वस्त रह सकते हैं कि हम घाटी के निम्नतम बिंदु की ओर जा रहे हैं।

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

अब जब हम जानते हैं कि ग्रेडिएंट्स हमें बताते हैं कि किस दिशा में जाना है (कौन से स係को अपडेट करना है) और हमारे कदम कितने बड़े होने चाहिए (स係को कितना अपडेट करना है), तो हम ग्रेडिएंट की गणना को देख सकते हैं।

ग्रेडिएंट्स और ग्रेडिएंट डिसेंट की गणना

ग्रेडिएंट डिसेंट उच्च नुकसान वाले बिंदु से शुरू होता है और कई पुनरावृत्तियों के माध्यम से, निम्नतम नुकसान की दिशा में कदम उठाता है, इष्टतम वजन कॉन्फ़िगरेशन को खोजने का प्रयास करता है। फोटो: Роман Сузи via विकिमीडिया कॉमन्स, सीसी बाय एसए 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

ग्रेडिएंट डिसेंट करने के लिए, ग्रेडिएंट्स को पहले गणना करना होगा। ग्रेडिएंट की गणना करने के लिए, हमें नुकसान/लागत फ़ंक्शन की आवश्यकता है। हम लागत फ़ंक्शन का उपयोग व्युत्पन्न को निर्धारित करने के लिए करेंगे। कैलकुलस में, व्युत्पन्न केवल एक फ़ंक्शन के एक बिंदु पर ढाल को संदर्भित करता है, इसलिए हम वास्तव में केवल नुकसान फ़ंक्शन के आधार पर ढाल की गणना कर रहे हैं। हम नुकसान को गुणांकों को लागत फ़ंक्शन के माध्यम से चलाकर निर्धारित करते हैं। यदि हम नुकसान फ़ंक्शन को “f” के रूप में दर्शाते हैं, तो हम यह कह सकते हैं कि नुकसान की गणना के लिए समीकरण इस प्रकार है (हम केवल गुणांकों को हमारे चुने हुए लागत फ़ंक्शन के माध्यम से चला रहे हैं):

नुकसान = फ़(गुणांक)

फिर हम व्युत्पन्न की गणना करते हैं, या ढाल का निर्धारण करते हैं। नुकसान का व्युत्पन्न प्राप्त करना हमें बताएगा कि ढाल की दिशा क्या है, जो हमें अपने गुणांकों को समायोजित करने के लिए उचित संकेत देगा। हम इस दिशा को “डेल्टा” के रूप में दर्शाएंगे।

डेल्टा = व्युत्पन्न_फ़ंक्शन(नुकसान)

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

गुणांक = गुणांक – (अल्फा * डेल्टा)

फिर हम इस प्रक्रिया को तब तक दोहराते हैं जब तक कि नेटवर्क निम्नतम नुकसान के बिंदु के आसपास संकलित न हो जाए, जो शून्य के करीब होना चाहिए।

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

इसके विपरीत, यदि सीखने की दर बहुत छोटी है, तो नेटवर्क को इष्टतम वजन पर संकलित होने में असाधारण रूप से लंबा समय लग सकता है।

ग्रेडिएंट डिसेंट के प्रकार

अब जब हम जानते हैं कि ग्रेडिएंट डिसेंट कैसे काम करता है, तो आइए ग्रेडिएंट डिसेंट के कुछ अलग-अलग प्रकार देखें।

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

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

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

ब्लॉगर और प्रोग्रामर जिनकी विशेषज्ञता मैशीन लर्निंग और डीप लर्निंग विषयों में है। डैनियल दूसरों को सामाजिक कल्याण के लिए एआई की शक्ति का उपयोग करने में मदद करना चाहता है।