अक्सर पूछे जाने वाले सवाल

ऑप्टिमाइज़ेशन से जुड़ी गड़बड़ियों को कैसे ठीक किया जा सकता है और इनके असर को कैसे कम किया जा सकता है?

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

इस ग्राफ़ में, Standard WideResNet की तुलना Stride 1x1 WideResNet से की गई है.
            y-ऐक्सिस पर टेस्ट की गड़बड़ी की दर और x-ऐक्सिस पर सीखने की बुनियादी दर दिखाई गई है.
            स्टैंडर्ड WideResNet में, बेस लर्निंग रेट बढ़ने पर TestErrorRate में धीरे-धीरे गिरावट आती है. इसके उलट, Stride WideResNet में, बेस लर्निंग रेट बढ़ने पर काफ़ी उतार-चढ़ाव होता है.
चौथी इमेज. WideResnet में, किसी एक रेसिड्युअल ब्लॉक में स्ट्राइड बदलने (2x2 -> 1x1) से ट्रेनिंग में अस्थिरता आती है.

 

चौथी इमेज के बारे में यहां दी गई जानकारी पर ध्यान दें:

  • स्ट्राइड बदलने से, कम लर्निंग रेट पर परफ़ॉर्मेंस में गिरावट नहीं आती है.
  • अस्थिरता की वजह से, अब ज़्यादा लर्निंग रेट पर मॉडल को ठीक से ट्रेन नहीं किया जा सकता.
  • लर्निंग रेट वार्मअप के 1,000 चरणों को लागू करने से, अस्थिरता की इस समस्या को हल किया जा सकता है. इससे 0.1 के ज़्यादा से ज़्यादा लर्निंग रेट पर, ट्रेनिंग को स्थिर किया जा सकता है.

अस्थिर वर्कलोड की पहचान करना

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

  • शुरुआत में या ट्रेनिंग के शुरुआती चरण में अस्थिरता.
  • ट्रेनिंग के बीच में अचानक अस्थिरता.

अपने वर्कलोड में स्टेबिलिटी से जुड़ी समस्याओं का पता लगाने के लिए, यह तरीका अपनाएं:

  • लर्निंग रेट स्वीप करें और सबसे सही लर्निंग रेट lr* ढूंढें.
  • lr* से ठीक ऊपर की लर्निंग रेट के लिए, ट्रेनिंग लॉस कर्व प्लॉट करें.
  • अगर लर्निंग रेट > lr* पर लॉस में अस्थिरता दिखती है (ट्रेनिंग के दौरान लॉस कम होने के बजाय बढ़ता है), तो अस्थिरता को ठीक करने से आम तौर पर ट्रेनिंग बेहतर होती है.

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

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

इसकी जांच करने के लिए, lr = 2 * current best का इस्तेमाल करके, सिर्फ़ ~500 चरणों के लिए ट्रेनिंग दी जा सकती है. हालांकि, हर चरण का आकलन करें.

दो ग्राफ़: दोनों ग्राफ़ के लिए x-ऐक्सिस, ग्लोबल स्टेप है. दोनों ग्राफ़ के लिए y-ऐक्सिस, ट्रेनिंग लॉस है. दोनों ग्राफ़ में, (2,2) के कन्वर्ज़न स्ट्राइड की तुलना (1,1) के कन्वर्ज़न स्ट्राइड से की गई है. पहले ग्राफ़ में, हर 1,000 चरणों के बाद के आकलन दिखाए गए हैं. पहले ग्राफ़ में, दोनों Conv Strides में ग्लोबल स्टेप ज़्यादा होने की वजह से, धीरे-धीरे और स्थिर रूप से गिरावट दिखती है. दूसरे ग्राफ़ में, पहले 25 चरणों में बार-बार होने वाले आकलन दिखाए गए हैं. इस दूसरे ग्राफ़ में, (2,2) के Conv Stride से पता चलता है कि शुरुआती कुछ ग्लोबल चरणों में, ट्रेनिंग के दौरान होने वाले नुकसान में काफ़ी उतार-चढ़ाव होता है. हालांकि, 20 ग्लोबल चरणों के बाद, यह लगातार कम हो जाता है. (1,1) के Conv Stride में, पहले ग्लोबल स्टेप के बाद भी Train Loss लगातार कम होता है.
पांचवीं इमेज. ट्रेनिंग की शुरुआत में, बार-बार आकलन करने की वैल्यू. अगर आपको लगता है कि मॉडल को ट्रेनिंग देने की शुरुआत में, वह ठीक से काम नहीं कर रहा है, तो यह विकल्प आपके लिए फ़ायदेमंद है.

 

सामान्य अस्थिरता पैटर्न को ठीक करने के संभावित तरीके

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

  • लर्निंग रेट वार्मअप लागू करें. यह शुरुआती ट्रेनिंग के दौरान होने वाली अस्थिरता के लिए सबसे अच्छा है.
  • ग्रेडिएंट क्लिपिंग लागू करें. यह ट्रेनिंग की शुरुआत और बीच में होने वाली अस्थिरता को कम करने में मदद करता है. साथ ही, यह कुछ ऐसी समस्याओं को ठीक कर सकता है जिन्हें वार्मअप ठीक नहीं कर सकता.
  • कोई नया ऑप्टिमाइज़र आज़माएं. कभी-कभी Adam, उन समस्याओं को ठीक कर सकता है जिन्हें Momentum ठीक नहीं कर सकता. इस पर अभी रिसर्च चल रही है.
  • पक्का करें कि आपने अपने मॉडल आर्किटेक्चर के लिए, सबसे सही तरीके और सबसे सही इनिशियलाइज़ेशन का इस्तेमाल किया हो. इसके लिए, यहां दिए गए उदाहरण देखें. अगर मॉडल में पहले से रेसिड्यूअल कनेक्शन और नॉर्मलाइज़ेशन शामिल नहीं हैं, तो उन्हें जोड़ें.
  • रेज़िडुअल से पहले, आखिरी ऑपरेशन के तौर पर नॉर्मलाइज़ करें. उदाहरण के लिए: x + Norm(f(x)). ध्यान दें कि Norm(x + f(x)) से समस्याएं हो सकती हैं.
  • रेज़िडुअल ब्रांच को 0 पर सेट करके देखें. (देखें: ReZero is All You Need: Fast Convergence at Large Depth.)
  • लर्निंग रेट कम करें. यह आखिरी विकल्प है.

लर्निंग रेट वार्मअप

एक ही एक्सपेरिमेंट को दिखाने वाले दो ग्राफ़. पहले ग्राफ़ में, x-ऐक्सिस ग्लोबल स्टेप और y-ऐक्सिस ट्रेनिंग लॉस है. लर्निंग रेट वार्मअप नंबर कम होने पर, ट्रेनिंग लॉस बहुत ज़्यादा अस्थिर था.
            लर्निंग रेट वार्मअप की ज़्यादा संख्याओं के साथ, ट्रेनिंग लॉस ज़्यादा स्थिर था.
छठी इमेज. वार्मअप की अवधि के दौरान अस्थिरता का उदाहरण (हॉरिजॉन्टल ऐक्सिस के लॉग स्केल पर ध्यान दें). इस मामले में, ट्रेनिंग को बेहतर बनाने के लिए 40 हज़ार चरणों का वॉर्मअप ज़रूरी था.

लर्निंग रेट वार्मअप की सुविधा कब लागू करनी चाहिए

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

 

ट्रेनिंग सेट (y-ऐक्सिस) पर क्रॉस-एंट्रॉपी लॉस का ग्राफ़ बनाम
            ग्लोबल स्टेप (x-ऐक्सिस). शुरुआती ग्लोबल चरणों में, लॉस बहुत तेज़ी से कम होता है. इसके बाद, 10,000 चरणों के आस-पास नुकसान काफ़ी बढ़ जाता है. इसके बाद,
            करीब 15,000 चरणों के बाद, नुकसान धीरे-धीरे कम हो जाता है.
सातवीं इमेज (b). इस इमेज में, लर्निंग रेट के साथ ट्रेन किए गए मॉडल का ट्रेनिंग लॉस दिखाया गया है. इसमें आपको अस्थिरता दिख रही है.

 

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

आंकड़ा 7b में दिखाया गया है कि इस पीक से पांच गुना या 10 गुना ज़्यादा लर्निंग रेट के साथ ट्रेन किए गए मॉडल के ट्रेनिंग लॉस की जांच करके, इसकी पुष्टि कैसे की जा सकती है. अगर इस प्लॉट में, लगातार गिरावट के बाद अचानक बढ़ोतरी दिखती है (जैसे, ऊपर दिए गए डायग्राम में ~10 हज़ारवें चरण पर), तो हो सकता है कि मॉडल में ऑप्टिमाइज़ेशन की समस्या हो.

लर्निंग रेट वार्मअप को लागू करने का तरीका

इस इमेज में, 76619वें चरण (y-ऐक्सिस) पर पुष्टि करने के दौरान हुए नुकसान का ग्राफ़ दिखाया गया है. इसमें x-ऐक्सिस पर लर्निंग की बुनियादी दर दिखाई गई है. इस ग्राफ़ में, WMT14 EN-De पर LayerNorm Transformer की चार अलग-अलग स्थितियों के नतीजों की तुलना की गई है. लर्निंग रेट वार्मअप की वजह से, कम लर्निंग रेट पर पुष्टि करने के दौरान होने वाले नुकसान में कमी आई.
आठवीं इमेज. ट्रेनिंग के दौरान होने वाली गड़बड़ियों को ठीक करने में, लर्निंग रेट वार्मअप का फ़ायदेमंद असर.

 

मान लें कि unstable_base_learning_rate वह लर्निंग रेट है जिस पर मॉडल, ऊपर दी गई प्रोसेस का इस्तेमाल करके अस्थिर हो जाता है.

वार्मअप में, लर्निंग रेट के शेड्यूल को पहले से जोड़ना शामिल होता है. इससे लर्निंग रेट, 0 से बढ़कर कुछ स्थिर base_learning_rate तक पहुंच जाता है. यह unstable_base_learning_rate से कम से कम एक ऑर्डर ऑफ़ मैग्नीट्यूड ज़्यादा होता है. डिफ़ॉल्ट रूप से, 10x unstable_base_learning_rate वाला base_learning_rate इस्तेमाल किया जाएगा. हालांकि, ध्यान दें कि इस पूरी प्रक्रिया को 100 बार unstable_base_learning_rate तक दोहराया जा सकता है. शेड्यूल इस तरह है:

  • warmup_steps के दौरान, लर्निंग रेट को 0 से base_learning_rate तक बढ़ाएं.
  • post_warmup_steps के लिए, एक जैसी दर पर ट्रेनिंग दें.

आपका लक्ष्य, warmup_steps की सबसे कम संख्या का पता लगाना है. इससे आपको warmup_steps की तुलना में, सीखने की ज़्यादा दरें ऐक्सेस करने में मदद मिलती है.unstable_base_learning_rate इसलिए, हर base_learning_rate के लिए, आपको warmup_steps और post_warmup_steps को ट्यून करना होगा. आम तौर पर, post_warmup_steps को 2*warmup_steps के तौर पर सेट करना ठीक होता है.

वार्मअप को, मौजूदा डेके शेड्यूल से अलग से ट्यून किया जा सकता है. warmup_steps को कुछ अलग-अलग ऑर्डर ऑफ़ मैग्नीट्यूड पर स्वीप किया जाना चाहिए. उदाहरण के लिए, एक स्टडी में [10, 1000, 10,000, 100,000] को आज़माया जा सकता है. सबसे बड़ा पॉइंट, max_train_steps के 10% से ज़्यादा नहीं होना चाहिए.

जब base_learning_rate में ट्रेनिंग को प्रभावित न करने वाला warmup_steps सेट हो जाता है, तो इसे बेसलाइन मॉडल पर लागू किया जाना चाहिए. असल में, इस शेड्यूल को मौजूदा शेड्यूल से पहले जोड़ें. साथ ही, इस एक्सपेरिमेंट की तुलना बेसलाइन से करने के लिए, ऊपर बताए गए सबसे सही चेकपॉइंट का इस्तेमाल करें. उदाहरण के लिए, अगर हमारे पास मूल रूप से 10,000 max_train_steps थे और हमने 1,000 चरणों के लिए warmup_steps किया, तो ट्रेनिंग की नई प्रोसेस को कुल 11,000 चरणों के लिए चलना चाहिए.

अगर ट्रेनिंग को स्थिर बनाने के लिए, लंबे warmup_steps की ज़रूरत है (>5% of max_train_steps), तो आपको max_train_steps को बढ़ाना पड़ सकता है, ताकि इस अंतर को पूरा किया जा सके.

वर्कलोड की पूरी रेंज में, कोई "सामान्य" वैल्यू नहीं होती. कुछ मॉडल के लिए सिर्फ़ 100 चरणों की ज़रूरत होती है, जबकि अन्य (खास तौर पर ट्रांसफ़ॉर्मर) के लिए 40 हज़ार से ज़्यादा चरणों की ज़रूरत हो सकती है.

ग्रेडिएंट क्लिपिंग

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

 

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

  • शुरुआती ट्रेनिंग में अस्थिरता (शुरुआत में बड़ा ग्रेडिएंट नॉर्म)
  • ट्रेनिंग के दौरान अचानक ग्रेडिएंट बढ़ जाना.

कभी-कभी, वार्मअप की अवधि बढ़ाने से, उन समस्याओं को ठीक किया जा सकता है जिन्हें क्लिप करने से ठीक नहीं किया जा सकता. ज़्यादा जानकारी के लिए, लर्निंग रेट वार्मअप देखें.

🤖 वार्मअप के दौरान क्लिप करने के बारे में क्या ख़याल है?

क्लिप करने के लिए सबसे सही थ्रेशोल्ड, "सामान्य" ग्रेडिएंट नॉर्म से थोड़ा ऊपर होते हैं.

यहां ग्रेडिएंट क्लिपिंग करने का एक उदाहरण दिया गया है:

  • अगर ग्रेडिएंट $\left | g \right |$ का नॉर्म, ग्रेडिएंट क्लिपिंग थ्रेशोल्ड $\lambda$ से ज़्यादा है, तो ${g}'= \lambda \times \frac{g}{\left | g \right |}$ लागू करें. यहाँ ${g}'$ नया ग्रेडिएंट है.

ट्रेनिंग के दौरान, अनक्लिप्ड ग्रेडिएंट नॉर्म को लॉग करें. डिफ़ॉल्ट रूप से जनरेट करें:

  • ग्रेडिएंट नॉर्म बनाम स्टेप का प्लॉट
  • सभी चरणों में इकट्ठा किए गए ग्रेडिएंट नॉर्म का हिस्टोग्राम

ग्रेडिएंट के नॉर्म के 90वें पर्सेंटाइल के आधार पर, ग्रेडिएंट क्लिपिंग थ्रेशोल्ड चुनें. थ्रेशोल्ड, वर्कलोड पर निर्भर करता है. हालांकि, 90% से शुरुआत करना सही है. अगर 90% से काम नहीं बनता है, तो इस थ्रेशोल्ड को बदला जा सकता है.

🤖 क्या कोई अडैप्टिव रणनीति अपनाई जा सकती है?

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

ग्रेडिएंट क्लिपिंग को बहुत ज़्यादा इस्तेमाल करने का मतलब है कि >50% अपडेट क्लिप किए जा रहे हैं. यह लर्निंग रेट को कम करने का एक अजीब तरीका है. अगर आपको लगता है कि क्लिपिंग का इस्तेमाल बहुत ज़्यादा किया जा रहा है, तो आपको लर्निंग रेट को कम कर देना चाहिए.

लर्निंग रेट और अन्य ऑप्टिमाइज़ेशन पैरामीटर को हाइपरपैरामीटर क्यों कहा जाता है? ये किसी भी पिछले डिस्ट्रिब्यूशन के पैरामीटर नहीं हैं.

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

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

बैच के साइज़ को सीधे तौर पर, पुष्टि करने के लिए इस्तेमाल किए गए डेटासेट की परफ़ॉर्मेंस को बेहतर बनाने के लिए क्यों नहीं ट्यून किया जाना चाहिए?

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

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

इन सभी इफ़ेक्ट को ध्यान में रखने के बाद, इस बात का कोई ठोस सबूत नहीं मिलता कि बैच साइज़ से, पुष्टि करने की सबसे अच्छी परफ़ॉर्मेंस पर असर पड़ता है. ज़्यादा जानकारी के लिए, Shallue et al. 2018 देखें.

ऑप्टिमाइज़ेशन के सभी लोकप्रिय एल्गोरिदम के लिए, अपडेट से जुड़े नियम क्या हैं?

इस सेक्शन में, ऑप्टिमाइज़ेशन के कई लोकप्रिय एल्गोरिदम के लिए अपडेट के नियम दिए गए हैं.

स्टोकेस्टिक ग्रेडिएंट डिसेंट (एसजीडी)

\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]

यहां $\eta_t$, चरण $t$ पर लर्निंग रेट है.

दिलचस्पी बढ़ाना

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]

यहां $\eta_t$, चरण $t$ पर लर्निंग रेट है और $\gamma$ मोमेंटम कोएफ़िशिएंट है.

नेस्तेरोव

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]

यहां $\eta_t$, चरण $t$ पर लर्निंग रेट है और $\gamma$ मोमेंटम कोएफ़िशिएंट है.

RMSProp

\[v_0 = 1 \text{, } m_0 = 0\]

\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]

\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - m_{t+1}\]

ADAM

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]

NADAM

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]