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