Autoencoders सार्थक विशेषताएं नहीं सीख सकते हैं


24

मेरे पास इन दोनों के रूप में 50,000 चित्र हैं:

डेटा उदाहरण डेटा उदाहरण 2

वे डेटा के ग्राफ़ को दर्शाते हैं। मैं इन छवियों से सुविधाओं को निकालना चाहता था, इसलिए मैंने थीनो (deeplearning.net) द्वारा प्रदान किए गए ऑटोकेन कोड का उपयोग किया।

समस्या यह है कि, इन ऑटोसेनोडर्स को कोई भी विशेषता नहीं लगती है। मैंने आरबीएम की कोशिश की है और यह वही है।

एमएनआईएसटी डेटासेट अच्छी सुविधाएँ प्रदान करता है, लेकिन मेरा डेटा किसी भी उपज के लिए नहीं लगता है। मैं नीचे दिए गए उदाहरण संलग्न करता हूं:

MNIST पर बनाए गए फ़िल्टर:

छानने का यंत्र

मेरे डेटा पर प्रशिक्षण द्वारा बनाए गए फ़िल्टर:

मेरे डेटा से फ़िल्टर

मैंने छिपी हुई परत के आकार और प्रशिक्षण युगों के कई अलग-अलग क्रमांकन का उपयोग किया है लेकिन परिणाम हमेशा समान होते हैं।

यह काम क्यों नहीं करता है? Autoencoders इन छवियों से विशेषताएं क्यों नहीं निकाल सकते हैं?

संपादित करें:

किसी के लिए भी ऐसी ही समस्या है। समाधान वास्तव में सरल था और कारण वास्तव में गूंगा था। मैं सिर्फ आरजीबी एन्कोडिंग से पिक्सेल मान को 0-1 में फ्लोट करने के लिए फिर से बेचना भूल गया।

Rescaling मानों ने समस्या को हल किया।

जवाबों:


15

तंत्रिका नेटवर्क को डीबग करना आमतौर पर हाइपरपरमेटर्स को ट्विक करना, सीखा फिल्टर की कल्पना करना, और महत्वपूर्ण मीट्रिक प्लॉट करना शामिल है। क्या आप साझा कर सकते हैं कि आपके द्वारा उपयोग किए जा रहे हाइपरपरमेटर्स क्या हैं?

  • आपके बैच का आकार क्या है?
  • आपकी सीखने की दर क्या है?
  • आप किस प्रकार के ऑटोएन्कोडर का उपयोग कर रहे हैं?
  • क्या आपने एक Denoising Autoencoder का उपयोग करने की कोशिश की है? (आपने किन भ्रष्टाचार मूल्यों की कोशिश की है?)
  • कितनी छिपी हुई परतें और किस आकार की?
  • आपकी इनपुट छवियों के आयाम क्या हैं?

प्रशिक्षण लॉग का विश्लेषण भी उपयोगी है। युग (एक्स-एक्सिस) के एक फ़ंक्शन के रूप में अपने पुनर्निर्माण के नुकसान (वाई-अक्ष) का एक ग्राफ प्लॉट करें। क्या आपका पुनर्निर्माण नुकसान अभिसरण या विचलन कर रहा है?

यहां मानव लिंग वर्गीकरण के लिए एक ऑटोएन्कोडर का एक उदाहरण दिया गया है जो कि विचलन कर रहा था, 1500 युगों के बाद बंद कर दिया गया था, हाइपरपरमेटर्स को ट्यून किया गया था (इस मामले में सीखने की दर में कमी), और उसी वजन के साथ फिर से शुरू हुआ जो डायवर्जन कर रहे थे और अंततः रूपांतरित हो गए।

यहाँ एक है जो अभिसरण कर रहा है: (हम यह चाहते हैं)

वेनिला "असंबंधित" एक समस्या में भाग सकता है जहां वे बस पहचान मानचित्रण सीखते हैं। यही कारण है कि समुदाय ने डेनोइजिंग, स्पार्स और कॉन्ट्रैक्टिव फ्लेवर का निर्माण किया है।

क्या आप अपने डेटा का एक छोटा सबसेट यहाँ पोस्ट कर सकते हैं? मैं अपने एक ऑटोएन्कोडर्स से आपको परिणाम दिखाने के लिए तैयार हूं।

एक तरफ ध्यान दें: आप अपने आप से पूछना चाहते हैं कि आप पहले ग्राफ़ की छवियों का उपयोग क्यों कर रहे हैं जब उन ग्राफ़ को आसानी से डेटा के वेक्टर के रूप में दर्शाया जा सकता है। अर्थात,

[0, 13, 15, 11, 2, 9, 6, 5]

यदि आप ऊपर जैसी समस्या का सुधार करने में सक्षम हैं, तो आप अनिवार्य रूप से अपने ऑटो-एनकोडर के जीवन को आसान बना रहे हैं। इससे पहले यह सीखने की जरूरत नहीं है कि छवियों को कैसे देखा जाए, इससे पहले कि वह जनरेटिंग वितरण को सीखने की कोशिश कर सके।

उत्तर का पालन करें (डेटा दिया गया है)

यहां 1000 छिपी हुई यूनिट, सिंगल लेयर डेनोइजिंग ऑटोकेनडर के फिल्टर हैं। ध्यान दें कि कुछ फिल्टर यादृच्छिक रूप से प्रतीत होते हैं। ऐसा इसलिए है क्योंकि मैंने इतनी जल्दी प्रशिक्षण रोक दिया और नेटवर्क के पास उन फ़िल्टर को सीखने का समय नहीं था।

यहाँ हाइपरपरमीटर हैं जिन्हें मैंने इसके साथ प्रशिक्षित किया है:

batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2

मैंने 58 वें युग के बाद पूर्व प्रशिक्षण बंद कर दिया क्योंकि यहाँ पोस्ट करने के लिए फ़िल्टर पर्याप्त रूप से अच्छे थे। अगर मैं तुम होते, तो मैं एक 1000x1000x1000 आर्किटेक्चर के साथ पूर्ण 3-लेयर स्टैक्ड डेनोइज़िंग ऑटोकेनडोर को शुरू करने के लिए प्रशिक्षित करता।

यहाँ ठीक ट्यूनिंग कदम से परिणाम हैं:

validation error 24.15 percent
test error 24.15 percent

इसलिए पहली नज़र में, यह मौका से बेहतर लगता है, हालांकि, जब हम दो लेबल के बीच डेटा टूटने को देखते हैं तो हम देखते हैं कि इसका ठीक उसी प्रतिशत (75.85% लाभदायक और 24.15% लाभहीन) है। तो इसका मतलब है कि नेटवर्क ने संकेत की परवाह किए बिना "लाभदायक" का जवाब देना सीख लिया है। मैं शायद इसे लंबे समय के लिए एक बड़े जाल के साथ प्रशिक्षित करता हूं कि क्या होता है। इसके अलावा, ऐसा लगता है कि यह डेटा किसी प्रकार के अंतर्निहित वित्तीय डेटासेट से उत्पन्न हुआ है। मेरा सुझाव है कि आप ऊपर बताए अनुसार वैक्टर में अपनी समस्या के सुधार के बाद आवर्तक तंत्रिका नेटवर्क में देखेंगे। RNN इस तरह के समय डेटा में पाया जाता है कि कुछ अस्थायी निर्भरता पर कब्जा करने में मदद कर सकते हैं। उम्मीद है की यह मदद करेगा।


मेरे बैच का आकार 20 है। सीखने की दर 0.1 पर निर्धारित है। मैंने कोई लाभ नहीं करने के लिए संकुचनशील और ख़ुदकुशी करने की कोशिश की है। मैं एक छिपी हुई परत का उपयोग करता हूं। मैंने 50 से 1000 न्यूरॉन्स तक सब कुछ आज़माया है। मैं छवियों को 25x25 पर पुनर्विक्रय करता हूं - इसलिए वे mnist से भी छोटे हैं। इस लायक के लिए, मैं इस संग्रह में अपने सभी डेटा को संलग्न करता हूं: क्या आप मुझे अपने ऑटोचेनर्स और इस डेटा के परिणाम दिखा सकते हैं?
b93dh44

संग्रह: Mega.co.nz/…
b93dh44

ठीक है, मैंने उस डेटा के साथ एक नेटवर्क को प्रशिक्षित किया है। उत्तर में संपादित देखें।
सबलाबा

यह वास्तव में दिलचस्प लग रहा है। क्या आप अपना कोड पोस्ट कर सकते हैं? मैं वास्तव में इसकी सराहना करूंगा। मुझे लगता है कि मेरे पास मेरे कोड में कुछ बग हो सकते हैं जो नेटवर्क को प्रशिक्षण से रोकता है। मैंने देखा कि तुम ठीक ट्यूनिंग चरण है? मुझे लगता है कि मेरे ऑटोइन्कोडर केवल बिना किसी परिमित के प्रीट्रिन करते हैं। क्या आप मुझे अपना समाधान दिखा सकते हैं, अगर आपको कोई आपत्ति नहीं है?
b93dh44

मेरा कोड पोस्ट नहीं किया जा सकता क्योंकि यह मेरी कंपनी है, लेकिन मैं आपको इस ट्यूटोरियल की ओर संकेत कर सकता हूं, जिसमें एक Denoising Autoencoder बनाने के लिए उदाहरण कोड है: deeplearning.net/tutorial/dA.html । हाइपरपरमीटर सलाह के सभी उस कोड के लिए पकड़ लेंगे।
सबलाबा

3

मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिनिधि नहीं है, इसलिए मैं इसका उत्तर दूंगा। मैं सटीक कारण नहीं जानता, हालांकि:

  1. निचले बाएं क्षेत्र में पैटर्न आपके दूसरे उदाहरण के समान दिखता है, और दाएं निचले कोने में पैटर्न आपके पहले उदाहरण के समान लगता है, जब बारीकी से निरीक्षण किया जाता है। सवाल यह है कि आपके स्रोत डेटा में कितनी विविधता है? यदि सभी ५० ००० छवियां एक ही पैटर्न के रूपांतर हैं, तो ये ३ सार्थक फीचर मानचित्र जो हम देखते हैं, ऑटोकेनोडर के लिए आपके सभी डेटा को समझाने और पुनर्निर्माण करने के लिए काफी पर्याप्त हो सकते हैं।

  2. दूसरा, आप पुनर्निर्माण त्रुटि और वास्तविक पुनर्निर्माण छवियों को देखना चाह सकते हैं। कितने अच्छे परिणाम हैं? यदि पुनर्निर्माण त्रुटि कम है, तो आपके पास एक ओवरफिट हो सकता है, शायद नीचे वर्णित रिसनों के कारण (या हो सकता है कि इन 3 पैटर्नों का संयोजन रुचि में सभी डेटा का वर्णन करने के लिए बस पर्याप्त हो)। अन्यथा, Autoencoder सिर्फ यह नहीं सीख सकता है कि आपके डेटा का पुनर्निर्माण कैसे किया जाए और आपको बड़े autoencoder या बेहतर प्रशिक्षण एल्गोरिथ्म की आवश्यकता है।


1. मुझे लगता है कि इस डेटा में बहुत विविधता है। इन 50,000 ग्राफ़ों में से प्रत्येक थोड़ा अलग है। मुझे लगता है कि यह असंभव है कि ऑटोएन्कोडर सिर्फ 3 फिल्टर के आधार पर उन सभी को फिर से संगठित कर सके। 2. पुनर्निर्माण त्रुटि का अनुमान लगाने के लिए कोई सुझाव? मैं जिस कोड का उपयोग कर रहा हूं वह त्रुटि प्रदान करता है लेकिन यह वास्तव में बड़ी संख्या है जो मुझे ज्यादा नहीं बताती है। क्या मुझे इनपुट या साइज़ की छुपी हुई परतों के पुनर्निर्माण की त्रुटि की तुलना करनी चाहिए?
b93dh44
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.