कैसे एक तंत्रिका नेटवर्क में आदानों को बदलने और उपयोगी आउटपुट निकालने के लिए?


9

इसलिए मैं तंत्रिका नेटवर्क को समझने की कोशिश कर रहा हूं जब से मैं मशीन सीखने पर एडम गेइटी के ब्लॉग पर आया हूं । मैंने इस विषय पर जितना पढ़ा है उतना ही पढ़ सकता हूं (कि मैं समझ सकता हूं) और मेरा मानना ​​है कि मैं सभी व्यापक अवधारणाओं और कुछ कामकाज (गणित में बहुत कमजोर होने के बावजूद), न्यूरॉन्स, सिनेप्स, वेट, लागत कार्यों, बैकपैगैशन को समझता हूं आदि। हालांकि, मैं यह पता लगाने में सक्षम नहीं हूं कि वास्तविक दुनिया की समस्याओं को एक तंत्रिका नेटवर्क समाधान में कैसे अनुवाद किया जाए।

इस मामले में, एडम जिट्जी एक उदाहरण उपयोग के रूप में देता है, एक घर की कीमत भविष्यवाणी प्रणाली जहां एक डेटा सेट है जिसमें बेडरूम , वर्ग की संख्या शामिल है पैरों , पड़ोस और बिक्री मूल्य आप एक घर के मूल्य की भविष्यवाणी करने में सक्षम होने के लिए एक तंत्रिका नेटवर्क को प्रशिक्षित कर सकते हैं। हालांकि वह वास्तव में कोड में एक संभावित समाधान को लागू करने से कम रोकता है। निकटतम वह एक उदाहरण के माध्यम से प्राप्त करता है, यह दर्शाता है कि आप किस तरह से वज़न लागू करेंगे

def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
  price = 0

  # a little pinch of this
  price += num_of_bedrooms * 1.0

  # and a big pinch of that
  price += sqft * 1.0

  # maybe a handful of this
  price += neighborhood * 1.0

  # and finally, just a little extra salt for good measure
  price += 1.0

  return price 

अन्य संसाधन मैथ्स पर अधिक ध्यान केंद्रित करने लगते हैं और एकमात्र मूल कोड उदाहरण जो मुझे मिल सकता है कि मैं समझता हूं (यानी कि कुछ सभी गायन नहीं है, सभी नृत्य छवि वर्गीकरण कोडबेस) एक कार्यान्वयन है जो एक तंत्रिका नेटवर्क को एक XOR बनाता है। गेट जो केवल 1 और 0 में डील करता है।

इसलिए मेरी जानकारी में एक अंतर है कि मैं बस पुल नहीं कर सकता। अगर हम घर की कीमत की भविष्यवाणी की समस्या पर लौटते हैं , तो एक तंत्रिका नेटवर्क में फीड करने के लिए डेटा कैसे उपयुक्त है? उदाहरण के लिए:

  • बेडरूम की संख्या: 3
  • वर्ग। पैर: 2000
  • आस - पड़ोस: Normaltown
  • बिक्री मूल्य: $ 250,000

क्या आप सिर्फ तंत्रिका नेटवर्क में सीधे 3 और 2000 फ़ीड कर सकते हैं क्योंकि वे संख्याएं हैं? या क्या आपको उन्हें किसी और चीज़ में बदलने की ज़रूरत है? इसी तरह नॉर्मलटाउन मूल्य के बारे में क्या है , यह एक स्ट्रिंग है, आप इसे कैसे मूल्य के रूप में अनुवाद करने के बारे में जाते हैं जिसे एक तंत्रिका नेटवर्क समझ सकता है? क्या आप केवल एक इंडेक्स की तरह एक नंबर चुन सकते हैं, जब तक कि यह पूरे डेटा के अनुरूप हो?

तंत्रिका नेटवर्क के अधिकांश उदाहरणों में मैंने देखा है कि परतों के बीच गुजरने वाली संख्याएं 0 से 1 या -1 से 1. हैं। इसलिए प्रसंस्करण के अंत में, आप आउटपुट मूल्य को $ 185,000 की तरह उपयोग करने योग्य चीज़ में कैसे बदल सकते हैं ?

मुझे पता है कि घर की कीमत की भविष्यवाणी का उदाहरण शायद एक विशेष रूप से उपयोगी समस्या नहीं है, जो कि केवल तीन डेटा बिंदुओं के लिए बड़े पैमाने पर निगरानी की गई है। लेकिन मुझे लगता है कि अगर मैं इस बाधा से पार पा सकता हूं और एक अत्यंत बुनियादी ऐप लिख सकता हूं, जो छद्म वास्तविक जीवन के डेटा का उपयोग करने वाली ट्रेनें हैं और एक छद्म वास्तविक जीवन का उत्तर देता है, तो मैं इससे पीछे हट गया हूं और किक करने में सक्षम हूं आगे और मशीन सीखने में तल्लीन करना।

जवाबों:


10

यह एक अच्छा सवाल है जिसे मैंने पहली बार एएनएन कोड करने की कोशिश करते समय खुद से कुश्ती की थी।

नीचे एक अच्छा सामान्य-उद्देश्य समाधान है, और यह वह है जिसे मैंने अपने कोड में कार्यान्वित किया है ताकि अच्छी तरह से व्यवहार किए गए संख्यात्मक डेटा की भविष्यवाणी करने की कोशिश की जा सके। यदि आपका डेटा अच्छी तरह से व्यवहार नहीं किया गया है (यानी आउटलेर्स से भरा हुआ है) तो आपको इनपुट और आउटपुट को सामान्य करने के लिए अधिक काम करने की आवश्यकता हो सकती है। अधिक उन्नत तरीकों में से कुछ यहाँ वर्णित हैं

नोट: मैं मान लूंगा कि आप अपने सक्रियण फ़ंक्शन के रूप में f (x) = tanh (x) का उपयोग कर रहे हैं। यदि आप नहीं हैं, तो आपको इसे पढ़ने के बाद अपने डेटा को सामान्य करने के तरीके के बारे में तर्क करने में सक्षम होना चाहिए।

इनपुट डेटा कैसे तैयार करें:

मूल विचार यह है कि आप चाहते हैं कि जिन इनपुट इनपुटों को फीड किया जा रहा है, वे न्यूरॉन की सक्रियता में एक महत्वपूर्ण भिन्नता से परिलक्षित हों। तन (एक्स) एक्टियावेशन फ़ंक्शन के व्युत्पन्न के एक भूखंड को देखकर, आप देखेंगे कि महत्वपूर्ण ढलान का क्षेत्र मूल से एक या दो की दूरी के भीतर है। इसका मतलब यह है कि क्या सक्रियण फ़ंक्शन का इनपुट 2000 या 3000 है (एक्स के मान जिसके लिए व्युत्पन्न लापरवाही से छोटा है), सक्रियण का आउटपुट लगभग समान होगा ... इसलिए आपके न्यूरॉन की स्थिति के बीच अंतर से स्वतंत्र होगा 2000 और 3000, और आपका नेटवर्क कभी भी उस सीमा में मूल्यों से कोई भविष्य कहनेवाला शक्ति उत्पन्न नहीं करेगा।

इसलिए यदि आप घर के वर्ग फुटेज को न्यूरॉन में इनपुट करना चाहते हैं, तो आपको वर्ग फुटेज को सामान्य करने की आवश्यकता है ताकि नेटवर्क 2000 और 3000 के बीच का अंतर बता सके। ऐसा करने का एक तरीका ताकि आपके सभी महत्वपूर्ण बदलाव न्यूरॉन्स द्वारा डेटा को 'नोट' किया जाता है , इनपुट को z- स्कोर-सामान्य करना है

  • अपने सभी वर्ग फुटेज मान (अपने प्रशिक्षण सेट से) इकट्ठा करें और माध्य और मानक विचलन की गणना करें। माध्य और मानक विचलन को स्टोर करें --- परीक्षण करते समय आपको नए वर्ग फुटेज मानों को सामान्य करने के लिए इस जानकारी की आवश्यकता होगी।

  • माध्य को घटाकर और फिर मानक विचलन (सभी संचालन तत्व-वार पाठ्यक्रम) द्वारा परिणाम को विभाजित करके वर्ग फुटेज मूल्यों के वेक्टर को सामान्य करें । माध्य केंद्र पर आपके डेटा को मूल रूप से घटाते हुए, और मानक विचलन द्वारा विभाजित करना सुनिश्चित करता है कि इसका अधिकांश भाग -1 और 1 के बीच है, जहां न्यूरॉन का आउटपुट इसके इनपुट के प्रति सबसे अधिक संवेदनशील है। इसे z- स्कोर सामान्यीकरण कहा जाता है क्योंकि प्रत्येक इनपुट मान को इसके z- स्कोर से बदल दिया जाता है ।

  • प्रत्येक इनपुट चर के लिए उपरोक्त करें।

अब, जब आप प्रत्येक इनपुट मान को एक न्यूरॉन के माध्यम से रखते हैं, तो न्यूरॉन का आउटपुट -1 और 1 के बीच एक सक्रियण होता है (तन (x) की छवि को देखें)। चूंकि यह पहले से ही सक्रियण फ़ंक्शन की 'संवेदनशील' श्रेणी में है, इसलिए आपको पहली छिपी हुई परत को भेजने से पहले इनपुट-लेयर न्यूरॉन्स के आउटपुट को बदलने के बारे में चिंता करने की आवश्यकता नहीं है। बस किसी भी छिपे हुए परत न्यूरॉन्स को सीधे पिछली परत के आउटपुट दें --- वे उन्हें ठीक से संभाल पाएंगे।

जब आप अंतिम परत (आउटपुट न्यूरॉन (एस)) तक पहुंचते हैं, तो आपको जो मिलता है, वह -1 और 1. के बीच फिर से एक और सक्रियण होता है। आपको इस प्रश्न को घर के लिए एक मूल्य में वापस बदलना होगा , क्या उस मूल्य का उपयोग किया जाएगा एक परीक्षण सेट में एक भविष्यवाणी या प्रशिक्षण के दौरान त्रुटि की गणना करने के लिए। हालाँकि, आप ऐसा करते हैं, आपको बस सुसंगत होना है और प्रशिक्षण और परीक्षण में समान de-normalization प्रक्रिया का उपयोग करना है। इसके बारे में सोचने का एक तरीका यह है: जब आउटपुट न्यूरॉन (एस) 1 लौटाता है, तो इसका मतलब है कि नेटवर्क अपनी भविष्यवाणी के रूप में अधिकतम संभव घर मूल्य लौटा रहा है । नेटवर्क द्वारा अनुमानित अधिकतम मूल्य क्या होना चाहिए? यहाँ सही दृष्टिकोण बस आपके आवेदन पर निर्भर करता है। यह जो मैंने किया है:

  • [/ / प्रत्येक] आउटपुट चर के माध्य की गणना करें और इसे स्टोर करें।
  • मतलब से आउटपुट चर के अधिकतम विचलन की गणना करें। अजगर:MaxDev = max([abs(DataPoint-numpy.mean(TrainingData)) for DataPoint in TrainingData])
  • जब नेटवर्क -1 और 1 के बीच आउटपुट देता है, तो आउटपुट को गुणा करके MaxDevइसे माध्य में जोड़ें।

दो सामान्य त्वरित जाँचें जिन्हें आप देख सकते हैं कि आपकी सामान्यीकरण-रेनोवेशन स्कीम उपयुक्त है (ये आवश्यक हैं, लेकिन शायद पर्याप्त परिस्थितियाँ नहीं हैं):

  1. यदि सभी इनपुट मान औसत हैं (जैसे कि बेडरूम का औसत संख्या, औसत वर्ग। फ़ेफ़ेट, आदि), तो नेटवर्क का आउटपुट आउटपुट चर (जैसे घर का मूल्य) के औसत के बराबर है? (यह होना चाहिए।)
  2. यदि सभी इनपुट मान असामान्य रूप से उच्च / निम्न हैं, तो क्या नेटवर्क का आउटपुट असामान्य रूप से उच्च / निम्न है? (यह केवल तभी काम करता है जब सभी इनपुट सकारात्मक रूप से आउटपुट से संबंधित हों ... यदि उनमें से कुछ विपरीत रूप से संबंधित हैं, तो आपको थोड़ा और सोचना होगा)।

गौर करें कि यहां प्रस्तुत योजना इन दो स्थितियों को संतुष्ट करती है।

ध्यान दें कि यह योजना आपके नेटवर्क को आपके प्रशिक्षण डेटा सेट में घर के मूल्यों की सीमा के भीतर केवल घर के मूल्यों की भविष्यवाणी करने की अनुमति देगी । आवेदन के आधार पर, यह व्यवहार वांछनीय या अवांछनीय हो सकता है।

उदाहरण के लिए: आप नकारात्मक घर मूल्यों का अनुमान लगाने के लिए अपने नेटवर्क के लिए असंभव बनाना चाहते हैं। इस बारे में सोचें कि आप यह कैसे करेंगे। आउटपुट को डी-सामान्य करें ताकि -1 को 0 पर मैप किया जा सके।

यदि आप उन मूल्यों पर कोई सीमा निर्धारित नहीं करना चाहते हैं जो आपके नेटवर्क की भविष्यवाणी कर सकते हैं, तो आप एक फ़ंक्शन के माध्यम से नेटवर्क के आउटपुट को चला सकते हैं जो [-1,1] रेंज को सभी वास्तविक नंबरों पर मैप करता है ... जैसे कि आर्कटन् (x)! जब तक आप ऐसा करते हैं प्रशिक्षण के दौरान आपका नेटवर्क इसे समायोजित करने के लिए अपने वजन को समायोजित करेगा।

मुझे आशा है कि यह मददगार था। अगर आपको कोई शंका हो तो मुझे बतायें। मेरा एएनएन मॉड्यूल, पायथन में है, इसलिए मुझे भाषा-विशिष्ट सलाह मिल सकती है।


यह बहुत उपयोगी था! हर ब्लॉग / ट्यूटोरियल जो मुझे आता है, इस प्रक्रिया का वर्णन करने से बचने के लिए लगता है (लगभग जानबूझकर), लेकिन हाँ यह सब समझ में आता है। मुझे ठीक से पचने में थोड़ा समय लगेगा लेकिन अगर मेरे कोई सवाल होंगे तो मैं वापस आ जाऊंगा। बहुत आभारी!
डेविड

तो कुछ सवाल। अगर मेरे एस.के. फीट प्रशिक्षण डेटा {2000, 800, 850, 550, 2000} था, तो {1900, 1500, 600} के लिए मेरा z- स्कोर इनपुट होगा (यदि मैंने सही गणना की है) {1.0496, 0.4134, -1.0177}। तो उन मूल्यों में से एक है> 1 और एक <-1 है, मैं उन लोगों के साथ क्या करूंगा? उन्हें इनपुट लेयर नोड्स में इनपुट करें चाहे वे 1 या -1 को राउंड करें? जब वे ५५० - २००० की सीमा के भीतर हैं, तो १ ९ ०० और ६०० क्यों उन मूल्यों का उत्पादन करते हैं? क्या यह केवल डेटा की एक चाल है क्योंकि इतना छोटा डेटा सेट है?
डेविड

आउटपुट लेयर रेनडलाइज़ेशन के संबंध में, क्या मेरे पास यह सही ढंग से है कि आप आउटपुट को न्यूनतम और अधिकतम मानों में बदल देंगे? तो अगर न्यूनतम मूल्य था0andthemaximum100 और आउटपुट शून्य था (-1 से 1 मानकर) तब $ 50 के रूप में अनुवाद होगा?
डेविड

याद रखें कि आदानों को कड़ाई से 1 और -1 के बीच रखने की जरूरत नहीं है। इनपुट के लिए आपको बस इतना ही चाहिए कि ज्यादातर डेटा उसी रेंज में है। एक मूल्य से अधिक या एक से कम का मतलब है कि बिंदु मतलब से दूर एक से अधिक मानक विचलन है, इसलिए यह बिंदु डेटा के उच्च अंत के करीब है। आपके डेटा के लिए [-1, 1] के बाहर जाना थोड़ा दुर्लभ होना चाहिए, इसके लिए और भी दुर्लभ [-2, 2] के बाहर जाना और अत्यंत दुर्लभ [-3, 3] के बाहर जाना। Tanh (x) को देखें और आप देखेंगे कि संवेदनशील रेंज सिर्फ -1 और 1 के बीच ही नहीं है, बल्कि इससे थोड़ा आगे निकल जाता है।
मार्को बकीओव

आउटपुट डिनॉर्मलाइजेशन के बारे में, कि न्यूनतम-अधिकतम डिमोनेटाइजेशन वही है जो मैंने अपने कार्यान्वयन में किया था, और आपकी व्याख्या सही है, लेकिन आपको ऐसा करने की आवश्यकता नहीं है। आप इसे ऐसा बना सकते हैं कि 1 अधिकतम घर के मूल्य से दोगुना से मेल खाता है - इस तरह से आपका नेटवर्क उस घर के मूल्यों का अनुमान लगाने में सक्षम होगा जो आपने उसे प्रशिक्षित किया था।
मार्को बाकियो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.