तंत्रिका नेटवर्क में बैच आकार क्या है?


174

मैं Python Keras packageतंत्रिका नेटवर्क के लिए उपयोग कर रहा हूं । यही कड़ी है । Is batch_sizeपरीक्षण नमूनों की संख्या के बराबर है? विकिपीडिया से हमारे पास यह जानकारी है:

हालांकि, अन्य मामलों में, सम-ग्रेडिएंट का मूल्यांकन करने के लिए सभी समन कार्यों से ग्रेडिएंट के महंगे मूल्यांकन की आवश्यकता हो सकती है। जब प्रशिक्षण सेट बहुत बड़ा होता है और कोई सरल सूत्र मौजूद नहीं होता है, तो ग्रेडिएंट के योगों का मूल्यांकन करना बहुत महंगा हो जाता है, क्योंकि ग्रेडिएंट के मूल्यांकन के लिए सभी समन कार्यों के ग्रेडिएटर्स का मूल्यांकन करने की आवश्यकता होती है। प्रत्येक पुनरावृत्ति पर कम्प्यूटेशनल लागत को कम करने के लिए, स्टोचैस्टिक ग्रेडिएंट डिसेंट सैंपल, हर कदम पर समन फ़ंक्शन का एक सबसेट है। यह बड़े पैमाने पर मशीन सीखने की समस्याओं के मामले में बहुत प्रभावी है।

उपरोक्त जानकारी परीक्षण डेटा का वर्णन कर रही है? क्या यह batch_sizeकेरस में समान है (क्रमिक अद्यतन के नमूनों की संख्या)?


3
यह देखने के लिए अच्छा है। classour.oursera.org/ml-005/lecture/preview पाठ्यक्रम, विशेष रूप से आपके लिए सप्ताह में 4-6 + 10. तंत्रिका नेटवर्क सीखने के लिए इतना मूल्यवान संसाधन नहीं हो सकता है।
404pio

जवाबों:


228

बैच का आकार नमूने है कि नेटवर्क के माध्यम से प्रचारित किया जाएगा की संख्या को परिभाषित करता है।

उदाहरण के लिए, मान लें कि आपके पास 1050 प्रशिक्षण नमूने हैं और आप batch_size100 के बराबर सेट करना चाहते हैं । एल्गोरिथ्म पहले 100 नमूने लेता है (1 से 100 वें तक) प्रशिक्षण डाटासेट से और नेटवर्क को प्रशिक्षित करता है। अगला, यह दूसरे 100 नमूने लेता है (101 वें से 200 वें तक) और फिर से नेटवर्क को प्रशिक्षित करता है। हम इस प्रक्रिया को तब तक कर सकते हैं जब तक कि हमने नेटवर्क के माध्यम से सभी नमूनों का प्रचार नहीं कर लिया। नमूने के अंतिम सेट के साथ समस्या हो सकती है। हमारे उदाहरण में, हमने 1050 का उपयोग किया है जो शेष के बिना 100 से विभाज्य नहीं है। सबसे सरल उपाय केवल अंतिम 50 नमूने प्राप्त करना और नेटवर्क को प्रशिक्षित करना है।

बैच आकार का उपयोग करने के लाभ <सभी नमूनों की संख्या:

  • इसके लिए कम मेमोरी की आवश्यकता होती है। चूंकि आप कम नमूनों का उपयोग करके नेटवर्क को प्रशिक्षित करते हैं, इसलिए समग्र प्रशिक्षण प्रक्रिया में कम मेमोरी की आवश्यकता होती है। यह विशेष रूप से महत्वपूर्ण है यदि आप अपने मशीन की मेमोरी में पूरे डेटासेट को फिट करने में सक्षम नहीं हैं।

  • आमतौर पर नेटवर्क मिनी-बैचों के साथ तेजी से प्रशिक्षित होते हैं। ऐसा इसलिए है क्योंकि हम प्रत्येक प्रसार के बाद वजन को अपडेट करते हैं। हमारे उदाहरण में हमने 11 बैचों का प्रचार किया है (उनमें से 10 में 100 नमूने थे और 1 में 50 नमूने थे) और उनमें से प्रत्येक के बाद हमने अपने नेटवर्क के मापदंडों को अपडेट किया है। यदि हमने प्रचार के दौरान सभी नमूनों का उपयोग किया है तो हम नेटवर्क के पैरामीटर के लिए केवल 1 अपडेट करेंगे।

बैच आकार का उपयोग करने के नुकसान <सभी नमूनों की संख्या:

  • बैच जितना छोटा होगा ढाल का अनुमान उतना ही कम होगा। नीचे दिए गए आंकड़े में, आप देख सकते हैं कि मिनी-बैच ढाल (हरा रंग) की दिशा पूर्ण बैच ढाल (नीले रंग) की दिशा की तुलना में बहुत अधिक उतार-चढ़ाव करती है।

विभिन्न बैच सेटअपों के लिए धीरे-धीरे दिशा-निर्देश

स्टोचस्टिक सिर्फ batch_size1 के बराबर एक मिनी-बैच है । उस स्थिति में, ढाल एक मिनी-बैच ढाल की तुलना में अपनी दिशा को और भी अधिक बार बदल देता है।


उत्तर देने के लिए आपका शुक्रिया। क्या आप साथ काम करते हैं Keras? वैसे भी इस पैकेज में परीक्षण डेटा सेट करने के लिए?
user2991243

3
नहीं, मैंने नहीं किया। यह तंत्रिका नेटवर्क में लोकप्रिय तकनीक है और इस शब्दावली को आप विभिन्न पुस्तकालयों, पुस्तकों और लेखों में देख सकते हैं। क्या आप चाहते हैं कि परीक्षण के बाद हर युग में परीक्षण डेटा त्रुटि हो या प्रशिक्षण के बाद मॉडल को सत्यापित करें?
itdxer

हाँ। यह सच है। इसी तरह की संरचना हमारे पास है, MATLABलेकिन मुझे यहां केवल ट्रेन और सत्यापन डेटा-सेट मिले। मुझे लगता है कि इस पैकेज में सत्यापन डेटा-सेट परीक्षण डेटा के समान है, लेकिन शुरुआती रोक नहीं है इसलिए हमारे पास कोई वास्तविक सत्यापन डेटा नहीं है।
user2991243

1
नेटवर्क भी तेजी से परिवर्तित होता है क्योंकि अपडेट की संख्या काफी अधिक है। मिनी बैच का आकार सेट करना एक तरह की कला है, बहुत छोटी है और आप अपने सीखने को बहुत अधिक कठिन बना देते हैं, तेजी से लेकिन अविश्वसनीय मॉडल में परिवर्तित हो जाएंगे, बहुत बड़ा और यह स्मृति में फिट नहीं होगा और अभी भी उम्र लेगा।
रामललो

1
आमतौर पर जब लोग कहते हैं कि ऑनलाइन सीखने का मतलब है batch_size=1। ऑनलाइन सीखने के पीछे विचार यह है कि उदाहरण देखते ही आप अपने मॉडल को अपडेट करते हैं। बड़े बैच आकार के साथ इसका मतलब है कि पहले आप अपडेट करने से पहले कई नमूनों के माध्यम से देख रहे हैं। RNN में बैच के आकार के अलग-अलग अर्थ हो सकते हैं। आमतौर पर, प्रशिक्षण अनुक्रम को निश्चित आकार की विंडो में विभाजित करना आम है (जैसे 10 शब्द)। इस मामले में प्रशिक्षण के दौरान इन खिड़कियों में से 100 का मतलब होगा कि आपके पास है batch_size=100
itdxer

151

तंत्रिका नेटवर्क शब्दावली में:

  • एक युग = एक फ़ॉरवर्ड पास और सभी प्रशिक्षण उदाहरणों में से एक बैकवर्ड पास
  • बैच आकार = एक फॉरवर्ड / बैकवर्ड पास में प्रशिक्षण उदाहरणों की संख्या। बैच आकार जितना अधिक होगा, आपको उतनी ही अधिक मेमोरी स्पेस की आवश्यकता होगी।
  • की संख्या पुनरावृत्तियों = गुजरता की संख्या, प्रत्येक पास का उपयोग कर [बैच आकार] उदाहरण की संख्या। स्पष्ट होने के लिए, एक पास = एक फॉरवर्ड पास + एक बैकवर्ड पास (हम फॉरवर्ड पास और बैकवर्ड पास को दो अलग-अलग पास के रूप में नहीं गिनते हैं)।

उदाहरण: यदि आपके पास 1000 प्रशिक्षण उदाहरण हैं, और आपके बैच का आकार 500 है, तो 1 युग पूरा करने के लिए 2 पुनरावृत्तियां लेंगे।

FYI करें: ट्रेडऑफ़ बैच आकार बनाम पुनरावृत्तियों की संख्या एक तंत्रिका नेटवर्क को प्रशिक्षित करने के लिए


लेकिन उदाहरण के [बैच आकार] संख्याओं का उपयोग करने और प्रत्येक उदाहरण पर नेटवर्क को प्रशिक्षित करने और अगले [बैच आकार] संख्या उदाहरणों के साथ आगे बढ़ने के बीच अंतर क्या है। चूंकि आप नेटवर्क के माध्यम से एक उदाहरण देते हैं और SGD लागू करते हैं और अगला उदाहरण लेते हैं और इसलिए इस पर कोई फ़र्क नहीं पड़ेगा यदि बैच का आकार 10 या 1000 या 100000 है। [बैच आकार] के बाद उदाहरणों की संख्याओं का अगला उदाहरण किया जाता है अगले बैच का अनुसरण करेंगे यह केवल एक फर्क पड़ता है अगर [बैच आकार] उदाहरणों की संख्या नेटवर्क की [संख्या] बार गुजरेगी और फिर अगले [बैच आकार] उदाहरणों के साथ आगे बढ़ेगी।
एरहार्ड डिनोबल

एक महत्वपूर्ण अंतर यह है कि सीखने के चरण (एक कदम) को हर बैच के लिए एक बार लागू किया जाता है, जबकि आपको एक युग बनाने के लिए सभी बैचों के माध्यम से साइकिल चलाना होगा। तो अंतर केवल स्मृति में ही नहीं एल्गोरिथम भी है: बड़े बैचों का मतलब है कि आप अधिक नमूनों पर ग्रेडिएंट को औसत करते हैं।
मज्जा

युग और पुनरावृत्तियों में क्या अंतर है?
गोल्डनाम

1
@Goldname 1 युग में सभी प्रशिक्षण उदाहरण शामिल हैं जबकि 1 पुनरावृत्ति में केवल [बैच आकार] प्रशिक्षण उदाहरणों की संख्या शामिल है।
फ्रेंक डर्नोनकोर्ट

3

सीपीयू एक ऑप्टिमाइज़ेशन समस्या के साथ हल करते समय, आप कुछ इनपुट डेटा पर एक एल्गोरिथ्म लागू करते हैं। इन पुनरावृत्तियों में से प्रत्येक में आप आमतौर पर डेटा पर कुछ गणना करते हुए अपनी समस्या का एक मीट्रिक अपडेट करते हैं। अब जब आपके डेटा का आकार बड़ा है तो इसे हर पुनरावृत्ति को पूरा करने के लिए काफी समय की आवश्यकता हो सकती है, और बहुत सारे संसाधनों का उपभोग कर सकता है। तो कभी-कभी आप समय और कम्प्यूटेशनल संसाधनों को बचाने के लिए डेटा के एक हिस्से पर इन पुनरावृत्त गणनाओं को लागू करना चुनते हैं। यह भाग बैच_साइज है और प्रक्रिया को (न्यूरल नेटवर्क लिंगो में) बैच डाटा प्रोसेसिंग कहा जाता है। जब आप अपने सभी डेटा पर अपनी गणना लागू करते हैं, तो आप ऑनलाइन डेटा प्रोसेसिंग करते हैं। मुझे लगता है कि शब्दावली 60 के दशक से आती है, और पहले भी। क्या किसी को याद है? बल्लेबाजी डॉस फाइलें? लेकिन निश्चित रूप से इस अवधारणा का उपयोग करने के लिए एक धागा या डेटा के हिस्से का मतलब है।


2

मॉडल (कार्यात्मक एपीआई) पृष्ठ में फ़ंक्शन के Kerasतहत बैच आकार के बारे में प्रलेखन पाया जा सकता हैfit

batch_size: पूर्णांक या कोई नहीं। क्रमिक अद्यतन प्रति नमूनों की संख्या। अनिर्दिष्ट होने पर, बैच_साइज़ डिफ़ॉल्ट रूप से 32 हो जाएगा।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.