मैंने समय-समय पर डिबगिंग विस्फोटों और इसी तरह के व्यवहार के लिए पागल राशि खर्च की है। आपका जवाब नुकसान फ़ंक्शन, डेटा, वास्तुकला आदि पर निर्भर करेगा। इसके सैकड़ों कारण हैं। मैं कुछ का नाम लूंगा।
- घटाने पर निर्भर। Loglikelihood- नुकसान को क्लिप करने की आवश्यकता है, यदि नहीं, तो यह
log(0)
डेटासेट में खराब भविष्यवाणियों / आउटलेयर के पास का मूल्यांकन कर सकता है , जिससे धमाकेदार ग्रेडिएंट का विस्फोट हो सकता है। अधिकांश पैकेज (मशाल, टेंसरफ़्लो आदि) अपने नुकसान के लिए प्रति डिफ़ॉल्ट क्लिपिंग को लागू करते हैं।
- डेटासेट में आउटलेयर।
- छोटे बैचसाइज़ और बड़े एप्सिलॉन ( हाइपरपरमेटर) के साथ बैचेनॉर्म । रूप में बैटचर्म के साथ , फिर छोटे और आप उच्च परिमाण प्राप्त कर सकते हैंϵy=(x−u)/(s+ϵ)sϵy
- एक युग में अंतिम बैच छोटा हो सकता है यदि डेटासेट बैचवाइज द्वारा अविभाज्य है। मशाल डटालोडर में एक झंडा होता है
drop_last
। छोटा बैचसाइज = उच्च विचरण
अब आप इसे एडम के साथ क्यों नहीं देख रहे हैं और डब्ल्यूडब्ल्यूई के साथ नहीं? स्पष्ट रूप से आप आदम के साथ कम नुकसान पर पहुँच गए। जैसा कि पहले उल्लेख किया गया था, यदि 99.9% डेटासेट में कुछ अवलोकन के अलावा एक बिंदु पर ऑप्टिमा होता है, तो यह हो सकता है कि अवलोकन "NO" चिल्ला रहा हो और स्थानीय मिनीमा से कूदते हुए जब एक बैच में यादृच्छिक रूप से चुना गया हो। यदि आप इसे हर स्तर पर देखते हैं dataset_size//batch_size+1
, तो शायद यह अंतिम बैचसाइज़ के छोटे होने के कारण है। मुझे यकीन है कि अगर आप इसे कम नुकसान तक पहुँचने देते हैं तो आपको भी एसआईसीसी स्पाइक दिखाई देगा।
बोनस: गति-ऑप्टिमाइज़र (एडम) के साथ आपका वास्तव में तेजी से घटने का मतलब यह हो सकता है कि कुछ परत (इनपुट परत; आउटपुट परत?) को प्रारंभिक स्तर से बाहर (बड़े / छोटे वजन के लिए) किया जाता है।