एक ऑटोएन्कोडर क्या है?
मैं एक छात्र हूं और मशीन लर्निंग का अध्ययन कर रहा हूं। मैं डीप जेनेरेटिव मॉडल और विशेष रूप से ऑटोएन्कोडर्स और वैरिएबल ऑटोएन्कोडर्स (VAE) पर ध्यान केंद्रित कर रहा हूं ।
मैं अवधारणा को समझने की कोशिश कर रहा हूं, लेकिन मुझे कुछ समस्याएं हो रही हैं।
अब तक, मैं समझ चुका हूं कि एक ऑटोएन्कोडर एक इनपुट लेता है, उदाहरण के लिए एक छवि, और इस छवि को एक अव्यक्त स्थान में कम करना चाहता है , जिसमें एन्कोडिंग के संचालन के साथ डेटासेट की अंतर्निहित विशेषताएं शामिल होनी चाहिए , फिर एक ऑपरेशन के साथ। डिकोडिंग के कारण , यह उस छवि को समेट लेता है, जो एन्कोडिंग भाग के कारण कुछ जानकारी खो चुकी है।
इसके बाद, एक हानि फ़ंक्शन के साथ, यह अव्यक्त स्थान को फिर से संगठित करता है और इसलिए अव्यक्त सुविधाओं को प्राप्त करता है।
वीएई के बारे में, यह एक संभाव्य दृष्टिकोण का उपयोग करता है, इसलिए हमें एक गौसियन के मेन्ड एव कोवरियन को सीखना होगा।
अब तक यही मैंने समझा है।
मेरे पास वास्तव में स्पष्ट नहीं है कि हम ऑटोएन्कोडर्स और वीएई के साथ क्या सीखने की कोशिश कर रहे हैं?
मैंने ऐसे उदाहरण देखे हैं जहाँ एक छवि एक गैर मुस्कुराते हुए एक मुस्कुराते हुए चेहरे पर, या एक काले और सफेद छवि से एक रंगीन छवि तक जाती है।
लेकिन मैं मुख्य अवधारणा को नहीं समझता, जो यह है: एक ऑटोएन्कोडर क्या करता है?
मैं यहां कुछ स्रोतों को जोड़ता हूं, जहां मैंने अध्ययन किया है ताकि उन्हें कौन देख सके:
- https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
- https://www.youtube.com/watch?v=yFBFl1cLYx8
- https://www.youtube.com/watch?v=9zKuYvjFFS8
जवाब
ऑटो-एनकोडर क्या करता है?
सरलतम ऑटो-एनकोडर एक उच्च-आयामी छवि (जैसे, 100K पिक्सल) को एक निम्न-आयामी प्रतिनिधित्व (मान, लंबाई 10 का वेक्टर) के रूप में लेता है और फिर मूल छवि को फिर से संगठित करने के लिए केवल 10 सुविधाओं का उपयोग करता है । आप मनुष्यों के साथ एक समानता की कल्पना कर सकते हैं: मैं किसी को देखता हूं, उनका वर्णन करता हूं ("लंबा, काले बालों वाला, ...") फिर जब मैं भूल गया कि वे क्या दिखते हैं, तो मैं केवल अपने नोट्स का उपयोग करके उन्हें स्केच करने की कोशिश करता हूं।
हम क्या सीखने की कोशिश कर रहे हैं?
दूसरे शब्दों में, परेशान क्यों? कुछ कारण:
- आयामीता में कमी: 100K पिक्सेल की तुलना में 10 सुविधाएँ बहुत अधिक सुविधाजनक हैं। उदाहरण के लिए, मैं 10-आयामी अंतरिक्ष में क्लस्टरिंग करके वर्गीकरण कर सकता हूं (जबकि 100K-आयामी अंतरिक्ष में क्लस्टरिंग करना अचूक होगा)।
- शब्दार्थ अर्थ: यदि सब ठीक हो जाता है, तो 10 विशेषताओं में से प्रत्येक में कुछ स्पष्ट "स्पष्टीकरण" होगा - उदाहरण के लिए, एक मूल्य को ट्विक करने से विषय को पुराना लगेगा (हालांकि यह सामान्य रूप से इतना सरल नहीं है)। पिक्सेल मूल्यों के विपरीत, जो अनुवाद, रोटेशन, आदि से प्रभावित होते हैं।
- अपवाद मान्यता: अगर मैं कुत्तों पर अपने ऑटो-एनकोडर को प्रशिक्षित करता हूं, तो यह सामान्य रूप से कुत्तों की अच्छी एन्कोडिंग और डिकोडिंग चित्रों को करना चाहिए। लेकिन अगर मैं एक बिल्ली डाल देता हूं, तो यह शायद एक भयानक काम करेगा - जिसे मैं बता सकता हूं क्योंकि आउटपुट में इनपुट जैसा कुछ नहीं दिखता है। इसलिए, ऐसे स्थानों की तलाश करना जहां एक ऑटो-एनकोडर एक बुरा काम करता है, विसंगतियों की तलाश करने का एक सामान्य तरीका है।
मैंने ऐसे उदाहरण देखे हैं जहां एक छवि एक गैर-मुस्कुराते हुए मुस्कुराते हुए चेहरे से, या एक काले और सफेद छवि से एक रंगीन छवि तक जाती है।
ऑटो-एनकोडर के कई अलग-अलग प्रकार हैं। जो मैंने ऊपर वर्णित किया है वह सबसे सरल प्रकार है। एक अन्य सामान्य प्रकार एक "denoising" ऑटो-एनकोडर है - मूल छवि को फिर से संगठित करने के बजाय, लक्ष्य एक ऐसी छवि का निर्माण करना है जो मूल छवि से संबंधित है, लेकिन अलग है।
इसका क्लासिक उदाहरण निंदा कर रहा है (इसलिए नाम): आप एक साफ छवि ले सकते हैं, शोर का एक गुच्छा जोड़ सकते हैं, इसे एक ऑटो-एनकोडर के माध्यम से चला सकते हैं, और फिर स्वच्छ छवि बनाने के लिए ऑटो-एनकोडर को पुरस्कृत कर सकते हैं । तो, इनपुट (शोर छवि) वास्तव में वांछित आउटपुट (स्वच्छ छवि) से अलग है। आपके द्वारा दिए गए उदाहरण समान हैं।
इस प्रकार के ऑटो-एनकोडर को डिजाइन करने में चुनौती आम तौर पर नुकसान है - आपको ऑटो-एनकोडर को यह बताने के लिए कुछ तंत्र की आवश्यकता है कि यह सही काम किया या नहीं।
वीएई के बारे में, यह एक संभाव्य दृष्टिकोण का उपयोग करता है, इसलिए हमें एक गॉसियन का मतलब और सहसंयोजक सीखना होगा।
एक वीएई ऑटो-एनकोडर का तीसरा प्रकार है। यह थोड़ा विशेष है क्योंकि यह गणितीय रूप से अच्छी तरह से आधारित है; कोई तदर्थ मेट्रिक्स की जरूरत नहीं है। गणित यहाँ से गुजरना बहुत जटिल है, लेकिन प्रमुख विचार ये हैं कि:
- हम चाहते हैं कि अव्यक्त स्थान निरंतर हो। अव्यक्त स्थान के प्रत्येक कोने को प्रत्येक वर्ग को सौंपने के बजाय, हम चाहते हैं कि अव्यक्त स्थान एक अच्छी तरह से परिभाषित, निरंतर आकार (यानी, गौसियन) हो। यह अच्छा है क्योंकि यह अव्यक्त स्थान को अर्थपूर्ण रूप से सार्थक होने के लिए मजबूर करता है।
- चित्रों और अव्यक्त स्थानों के बीच मानचित्रण नियतात्मक के बजाय संभाव्य होना चाहिए। ऐसा इसलिए है क्योंकि एक ही विषय कई छवियों का उत्पादन कर सकता है।
तो, वर्कफ़्लो यह है:
- आप पहले की तरह अपनी छवि से शुरू करते हैं
- पहले की तरह, आपका एनकोडर एक वेक्टर निर्धारित करता है (कहते हैं, लंबाई 200)।
- लेकिन वह वेक्टर एक अव्यक्त स्थान नहीं है। इसके बजाय, आप अव्यक्त स्थान को परिभाषित करने के लिए उस वेक्टर का उपयोग मापदंडों के रूप में करते हैं। उदाहरण के लिए, हो सकता है कि आप 100-आयामी गाऊसी होने के लिए अपने अव्यक्त स्थान को चुनें। 100-आयामी गाऊसी को प्रत्येक आयाम में एक माध्य और एक मानक विचलन की आवश्यकता होगी - यह वही है जिसके लिए आप अपनी लंबाई -200 वेक्टर का उपयोग करते हैं।
- अब आपके पास संभावना वितरण है। आप इस वितरण से एक बिंदु का नमूना लेते हैं। यह अव्यक्त स्थान में आपकी छवि का प्रतिनिधित्व करता है।
- पहले की तरह, आपका डिकोडर इस वेक्टर को एक नए "आउटपुट" (जैसे कि 200K की एक वेक्टर) में बदल देगा।
- लेकिन, यह "आउटपुट" आपकी आउटपुट छवि नहीं है। इसके बजाय, आप 100K-आयामी गाऊसी को परिभाषित करने के लिए इन 200K मापदंडों का उपयोग करते हैं। फिर आप इस वितरण से एक बिंदु का नमूना लेते हैं - वह है आपकी आउटपुट छवि।
बेशक, गॉसियन के बारे में कुछ खास नहीं है, आप बस कुछ अन्य पैरामीट्रिक वितरण का आसानी से उपयोग कर सकते हैं। व्यवहार में, लोग आमतौर पर गाऊसी का उपयोग करते हैं।
यह कभी-कभी अन्य ऑटो-एनकोडर की तुलना में बेहतर परिणाम देता है। इसके अलावा, आपको कभी-कभी दिलचस्प परिणाम मिलते हैं जब आप अपने अव्यक्त स्थान में कक्षाओं के बीच देखते हैं। क्लस्टर केंद्र से अव्यक्त स्थान में एक छवि की दूरी कभी-कभी अनिश्चितता से संबंधित होती है।
इसके अलावा, वहाँ एक अच्छी संपत्ति है कि इन उच्च आयामी गाऊसी एक कठोर गणितीय अर्थ में संभाव्यता वितरण हैं । वे इस संभावना को अनुमानित करते हैं कि एक दी गई छवि किसी दिए गए वर्ग की है। तो, वहाँ कुछ सोचा है कि VAE गहरी शिक्षा के "हाथ लहराते" से उबरने में सक्षम हो जाएगा और सब कुछ वापस एक फर्म बेयेशियन संभाव्य ग्राउंडिंग पर डाल देगा। लेकिन निश्चित रूप से, यह केवल एक सन्निकटन है, और सन्निकटन में बहुत गहरे तंत्रिका नेटवर्क शामिल हैं, इसलिए इस समय अभी भी बहुत सारे हाथ लहराते हैं।
वैसे, मैं साक्षात्कार के दौरान इस प्रश्न का उपयोग करना पसंद करता हूं - एक आश्चर्यजनक संख्या में लोग VAEs के साथ अनुभव करने का दावा करते हैं लेकिन वास्तव में यह महसूस नहीं करते हैं कि VAE "नियमित" एई से अलग हैं।
ऑटोएन्कोडर्स के बारे में सोचने का एक आसान तरीका है: कितनी अच्छी तरह से इन्फ्राटामन का एक प्रिटिकेलर पाइस अपने रेड्यूड या अन्यवेस कंप्रेस्ड रिप्रसेंटन को फिर से संगठित कर सकता है। यदि आपने इसे अभी तक बनाया है, तो इसका मतलब है कि आपने अपने मूल 103 अक्षरों में से केवल 92 का उपयोग करके पिछले वाक्य को फिर से बनाया है।
अधिक विशेष रूप से, ऑटोएन्कोडर्स तंत्रिका नेटवर्क हैं जो एक असुरक्षित तरीके से कुशल डेटा कोडिंग सीखने के लिए प्रशिक्षित होते हैं। उद्देश्य किसी दिए गए डेटासेट के प्रतिनिधित्व को सीखना है, शोर जैसे "महत्वपूर्ण नहीं" संकेतों को अनदेखा करने के लिए नेटवर्क को प्रशिक्षित करके। आमतौर पर AE को आयामीता में कमी के लिए माना जाता है।
व्यावहारिक रूप से, एई
- प्रारंभ में एक अव्यक्त-स्थान प्रतिनिधित्व में इनपुट डेटा को संपीड़ित करता है
- इस अव्यक्त-स्थान प्रतिनिधित्व से आउटपुट को पुन: बनाता है
- इनपुट और आउटपुट के बीच अंतर की गणना करता है जिसे पुनर्निर्माण नुकसान के रूप में परिभाषित किया गया है।
इस प्रशिक्षण पाश में, AE इस पुनर्निर्माण नुकसान को कम करता है ताकि आउटपुट इनपुट के समान हो सके।
Autoencoders पर विचार करते समय मैंने जो एक तरीका उपयोगी पाया है वह निम्न परिणाम है: जबकि PCA जैसे तरीके इनपुट स्पेस में अधिकतम भिन्नता के अक्षों की पहचान करते हैं, ऑटोएन्कोडर में गैर-रैखिक सक्रियण कार्यों की शुरूआत अधिकतम के अक्षों की पहचान के लिए अनुमति देता है अंतरिक्ष के एक (संभावित) गैर-रेखीय परिवर्तन में एम्बेडेड विविधता।
एक उदाहरण के रूप में ,
निरीक्षण करें कि गैर-रैखिक सक्रियण कार्यों को अनुपस्थित करें, एक ऑटोकेनडर अनिवार्य रूप से पीसीए के बराबर हो जाता है - आधार में परिवर्तन तक। एक उपयोगी अभ्यास यह हो सकता है पर विचार करने के लिए क्यों है।