जनरेटर

GAN का जनरेटर हिस्सा, डिस्करिमिनेटर से मिले सुझावों को शामिल करके, नकली डेटा बनाना सीखता है. यह डिस्करिमिनेटर को अपने आउटपुट को असली के तौर पर बांटने के लिए सिखाता है.

जनरेटर ट्रेनिंग के लिए, जनरेटर और डिस्क्रिमिनेटर के बीच ज़्यादा इंटिग्रेशन की ज़रूरत होती है, जबकि डिस्क्रिमिनेटर ट्रेनिंग के लिए ऐसा ज़रूरी नहीं होता. जीएएन के उस हिस्से में जनरेटर को ट्रेनिंग दी जाती है जिसमें ये शामिल हैं:

  • रैंडम इनपुट
  • जनरेटर नेटवर्क, जो रैंडम इनपुट को डेटा इंस्टेंस में बदलता है
  • डिस्क्रीमिनेटर नेटवर्क, जो जनरेट किए गए डेटा को अलग-अलग कैटगरी में बांटता है
  • डिस्क्रिमिनेटर आउटपुट
  • जनरेटर लॉस, जो जनरेटर को तब दंडित करता है, जब वह डिस्करिमिनेटर को गुमराह नहीं कर पाता

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

पहली इमेज: जनरेटर ट्रेनिंग में बैकप्रोपगेशन.

रैंडम इनपुट

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

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

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

जनरेटर को ट्रेन करने के लिए डिसक्रिमिनेटर का इस्तेमाल करना

किसी न्यूरल नेट को ट्रेन करने के लिए, हम नेट के वेट में बदलाव करते हैं, ताकि उसके आउटपुट में गड़बड़ी या नुकसान को कम किया जा सके. हालांकि, हमारे जीएएन में जनरेटर, सीधे तौर पर उस नुकसान से नहीं जुड़ा है जिस पर हम असर डालने की कोशिश कर रहे हैं. जनरेटर, डिस्करिमिनेटर नेट में फ़ीड करता है और डिस्करिमिनेटर वह आउटपुट जनरेट करता है जिस पर हम असर डालने की कोशिश कर रहे हैं. जनरेटर लॉस, जनरेटर को उस सैंपल के लिए दंडित करता है जिसे डिस्करिमिनेटर नेटवर्क नकली के तौर पर लेबल करता है.

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

साथ ही, हम नहीं चाहते कि जनरेटर ट्रेनिंग के दौरान, डिस्करिमिनेटर बदले. किसी चलती हुई ऑब्जेक्ट को टारगेट करने की कोशिश करने पर, जनरेटर के लिए मुश्किल समस्या और भी मुश्किल हो जाएगी.

इसलिए, हम जनरेटर को इस तरीके से ट्रेन करते हैं:

  1. रैंडम नॉइज़ का सैंपल.
  2. सैंपल किए गए रैंडम नॉइज़ से जनरेटर आउटपुट बनाएं.
  3. जनरेटर के आउटपुट के लिए, "असल" या "नकली" के तौर पर पहचान करने वाला डिस्क्रेमिनेटर पाएं.
  4. डिस्करिमिनेटर क्लासिफ़िकेशन से होने वाली हानियों का हिसाब लगाना.
  5. ग्रेडिएंट पाने के लिए, डिस्क्रिमिनेटर और जनरेटर, दोनों के ज़रिए बैकप्रोपगेट करें.
  6. सिर्फ़ जनरेटर वेट बदलने के लिए, ग्रेडिएंट का इस्तेमाल करें.

यह जनरेटर ट्रेनिंग का एक चरण है. अगले सेक्शन में, हम देखेंगे कि जनरेटर और डिस्करिमिनेटर, दोनों की ट्रेनिंग को कैसे जॉग किया जा सकता है.