एडम ऑप्टिमाइज़र के साथ प्रशिक्षण हानि बनाम पुनरावृत्तियों में स्पाइक्स की व्याख्या


16

मैं i) SGD और ii) एडम ऑप्टिमाइज़र का उपयोग करके एक तंत्रिका नेटवर्क को प्रशिक्षित कर रहा हूं। सामान्य SGD का उपयोग करते समय, मुझे एक चिकनी प्रशिक्षण हानि बनाम पुनरावृत्ति वक्र मिलता है जैसा कि नीचे देखा गया है (लाल एक)। हालांकि, जब मैंने एडम ऑप्टिमाइज़र का उपयोग किया, तो प्रशिक्षण हानि वक्र में कुछ स्पाइक्स हैं। इन स्पाइक्स की व्याख्या क्या है?

मॉडल विवरण:

14 इनपुट नोड्स -> 2 छिपी हुई परतें (100 -> 40 इकाइयां) -> 4 आउटपुट इकाइयां

मैं एडम के लिए डिफ़ॉल्ट पैरामीटर का उपयोग कर रहा beta_1 = 0.9, beta_2 = 0.999, epsilon = 1e-8और एक batch_size = 32

i) आदम के साथ SGD ii)SGD के साथ आदम के साथ


भविष्य के नोटिस के लिए, अपनी प्रारंभिक सीखने की दर को कम करने से एडम में
बोल्ड

जवाबों:


12

एडम ( batch_size=32) में स्पाइक्स मिनी बैच ग्रैडिएंट डिसेंट का एक अपरिहार्य परिणाम है । कुछ मिनी-बैचों के पास 'मौके से' अनुकूलन के लिए अशुभ डेटा है, उन स्पाइक्स को प्रेरित करना जो आप एडम का उपयोग करके अपने लागत फ़ंक्शन में देखते हैं। यदि आप स्टोकेस्टिक ग्रेडिएंट डिसेंट (उसी का उपयोग करके batch_size=1) का प्रयास करते हैं, तो आप देखेंगे कि लागत फ़ंक्शन में और भी अधिक स्पाइक्स हैं। वही (पूर्ण) बैच जीडी में नहीं होता है क्योंकि यह सभी प्रशिक्षण डेटा (यानी बैच आकार आपके प्रशिक्षण सेट की कार्डिनैलिटी के बराबर है) का उपयोग करता है। जैसा कि आपके पहले ग्राफिक में लागत नीरस रूप से सुचारू रूप से घट रही है ऐसा लगता है कि शीर्षक ( i) विद डब्ल्यूडब्ल्यूडी गलत है और आप (पूर्ण) बैच ग्रैडिएंट डिसेंट का उपयोग कर रहे हैं।

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

लागत कार्य


2
'SGD ... सभी प्रशिक्षण डेटा का उपयोग करता है' क्या आप इसके बारे में सुनिश्चित हैं? इसका मतलब है कि सभी डेटा को आगे फीड करने के बाद वेट अपडेट किया जाता है, लेकिन इसे फुल-बैच जीडी कहा जाता है, sgd नहीं। स्टोचैस्टिक का अर्थ है मिनीबच
एलेक्स

मेरी गलती को इंगित करने के लिए @Alex को धन्यवाद, मैंने पहले ही इसे ठीक कर लिया और आगे की जानकारी के लिए संदर्भ के साथ उत्तर में सुधार किया।
13

@xboard - नहीं, मैं पहले एक के लिए मिनी-बैच ढाल वंश का उपयोग कर रहा हूं।
अब्दुल फ़ातिर

8

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

  • घटाने पर निर्भर। Loglikelihood- नुकसान को क्लिप करने की आवश्यकता है, यदि नहीं, तो यह log(0)डेटासेट में खराब भविष्यवाणियों / आउटलेयर के पास का मूल्यांकन कर सकता है , जिससे धमाकेदार ग्रेडिएंट का विस्फोट हो सकता है। अधिकांश पैकेज (मशाल, टेंसरफ़्लो आदि) अपने नुकसान के लिए प्रति डिफ़ॉल्ट क्लिपिंग को लागू करते हैं।
  • डेटासेट में आउटलेयर।
  • छोटे बैचसाइज़ और बड़े एप्सिलॉन ( हाइपरपरमेटर) के साथ बैचेनॉर्म । रूप में बैटचर्म के साथ , फिर छोटे और आप उच्च परिमाण प्राप्त कर सकते हैंϵy=(xu)/(s+ϵ)sϵy
  • एक युग में अंतिम बैच छोटा हो सकता है यदि डेटासेट बैचवाइज द्वारा अविभाज्य है। मशाल डटालोडर में एक झंडा होता है drop_last। छोटा बैचसाइज = उच्च विचरण

अब आप इसे एडम के साथ क्यों नहीं देख रहे हैं और डब्ल्यूडब्ल्यूई के साथ नहीं? स्पष्ट रूप से आप आदम के साथ कम नुकसान पर पहुँच गए। जैसा कि पहले उल्लेख किया गया था, यदि 99.9% डेटासेट में कुछ अवलोकन के अलावा एक बिंदु पर ऑप्टिमा होता है, तो यह हो सकता है कि अवलोकन "NO" चिल्ला रहा हो और स्थानीय मिनीमा से कूदते हुए जब एक बैच में यादृच्छिक रूप से चुना गया हो। यदि आप इसे हर स्तर पर देखते हैं dataset_size//batch_size+1, तो शायद यह अंतिम बैचसाइज़ के छोटे होने के कारण है। मुझे यकीन है कि अगर आप इसे कम नुकसान तक पहुँचने देते हैं तो आपको भी एसआईसीसी स्पाइक दिखाई देगा।

बोनस: गति-ऑप्टिमाइज़र (एडम) के साथ आपका वास्तव में तेजी से घटने का मतलब यह हो सकता है कि कुछ परत (इनपुट परत; आउटपुट परत?) को प्रारंभिक स्तर से बाहर (बड़े / छोटे वजन के लिए) किया जाता है।

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