बैच के सामान्यीकरण और ड्रॉपआउट का आदेश?


116

विशेष रूप से TensorFlow कार्यान्वयन के संबंध में मूल प्रश्न था। हालांकि, उत्तर सामान्य रूप से कार्यान्वयन के लिए हैं। यह सामान्य उत्तर TensorFlow के लिए सही उत्तर भी है।

TensorFlow (विशेष रूप से contrib.layers का उपयोग करके) में बैच के सामान्यीकरण और ड्रॉपआउट का उपयोग करते समय क्या मुझे ऑर्डर करने के बारे में चिंतित होने की आवश्यकता है?

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

इसके अलावा, क्या इन दोनों को एक साथ इस्तेमाल करने के दौरान अन्य नुकसान देखने को मिलेंगे? उदाहरण के लिए, मैं ऊपर करने के लिए सही क्रम में उन्हें उपयोग कर रहा हूँ संबंध में यह सोचते हैं (यह मानते हुए वहाँ है एक सही क्रम), वहाँ सकता है दोनों बैच सामान्य और कई क्रमिक परतों पर छोड़ने वालों का उपयोग कर के साथ समस्या हो सकता है? मुझे तुरंत इसके साथ कोई समस्या नहीं दिख रही है, लेकिन मुझे कुछ याद आ रहा है।

बहुत धन्यवाद!

अपडेट करें:

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

जवाबों:


143

में Ioffe और Szegedy 2015 , लेखकों का कहना है कि "हमें यह सुनिश्चित करना है कि किसी भी पैरामीटर मान के लिए, नेटवर्क हमेशा सक्रियण वांछित वितरण के साथ का उत्पादन करना चाहते हैं"। तो बैच नॉर्मलाइज़ेशन लेयर वास्तव में एक कन्वीनर लेयर / फुली कनेक्टेड लेयर के ठीक बाद डाला जाता है, लेकिन ReLu (या किसी अन्य प्रकार की) सक्रियण में फीड करने से पहले। देखें इस वीडियो को अधिक जानकारी के लिए समय के आसपास 53 मिनट पर।

जहां तक ​​ड्रॉपआउट जाता है, मेरा मानना ​​है कि एक्टिवेशन लेयर के बाद ड्रॉपआउट लागू किया जाता है। में छोड़ने वालों कागज आंकड़ा 3 बी, छोड़ने वालों कारक / संभावना मैट्रिक्स आर (एल) छिपा हुआ परत एल के लिए y (एल), जहां y (एल) को लागू करने के सक्रियण समारोह च के बाद परिणाम है पर यह करने के लिए लागू किया जाता है।

इसलिए सारांश में, बैच सामान्यीकरण और छोड़ने का उपयोग करने का क्रम है:

-> CONV / FC -> बैचनुमा -> ReLu (या अन्य सक्रियण) -> ड्रॉपआउट -> CONV / FC ->


63
ऐसा लगता है कि यहां तक ​​कि क्रिश्चियन सजीदी भी अब रेउलू (इसके पहले नहीं) के बाद बैचमैन को प्रदर्शन करना पसंद करते हैं । कर्स के लेखक एफ। चॉलेट का उद्धरण: "मैं यह जांचने के लिए वापस नहीं गया कि वे अपने मूल पेपर में क्या सुझाव दे रहे हैं, लेकिन मैं गारंटी दे सकता हूं कि ईसाई द्वारा लिखा गया हालिया कोड बीएन से पहले रिले लागू होता है। यह अभी भी कभी-कभी एक विषय है। बहस का हालांकि, " स्रोत
स्यूडोमार्विन

3
पूलिंग के बारे में क्या, जो बैटमोरम और सक्रियण के बीच में जाएगा?
शब्दफिरवाइज

5
सक्रियता के बाद बीएन के साथ सटीकता अधिक लग सकती है: github.com/cvjena/cnn-models/issues/3
Wordsforthewise

1
वीडियो को किसी तरह से हटा दिया गया है!
blitu12345

10
इस पत्र से पता चलता है कि आमतौर पर बीएन के साथ ड्रॉप आउट होने से बदतर परिणाम होते हैं जब तक कि कुछ बदलाव विचरण बदलाव के जोखिम से बचने के लिए नहीं किया जाता है।
हरमोज़

37

जैसा कि टिप्पणियों में कहा गया है, परतों के क्रम पर पढ़ने के लिए एक अद्भुत संसाधन यहां है । मैं टिप्पणियों के माध्यम से चला गया हूं और यह इंटरनेट पर मुझे मिले विषय पर सबसे अच्छा संसाधन है

मेरे 2 सेंट:

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

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

इसलिए मैं योजना 1 का सुझाव देता हूं (यह विचार में स्वीकृत उत्तर पर स्यूडोमरविन की टिप्पणी लेता है )

-> CONV / FC -> ReLu (या अन्य सक्रियण) -> ड्रॉपआउट -> बैचऑर्म -> CONV / FC

योजना 2 के विपरीत

-> CONV / FC -> बैचनॉर्म -> ReLu (या अन्य सक्रियण) -> स्वीकृत उत्तर में> ड्रॉपआउट -> CONV / FC ->

कृपया ध्यान दें कि इसका मतलब है कि स्कीम 2 के तहत नेटवर्क को स्कीम 1 के तहत नेटवर्क की तुलना में अधिक-फिटिंग दिखाना चाहिए, लेकिन ओपी ने कुछ परीक्षण किए जैसा कि प्रश्न में उल्लिखित है और वे स्कीम 2 का समर्थन करते हैं


बैचनॉर्म प्लेसमेंट पर प्रासंगिक रेडिट चर्चा: reddit.com/r/MachineLearning/comments/67gonq/…
saetch_g

3
लेकिन यह आपके बीएन आँकड़ों को खराब नहीं करेगा क्योंकि आप ड्रॉपआउट लागू होने के बाद उनकी गणना करेंगे, जो परीक्षण के समय नहीं होगा?
ज़कज

@ZakJ मुझे नहीं लगता। चूंकि हम बीएन प्रति यूनिट (प्रत्येक आंतरिक सुविधा के लिए) की गणना करते हैं और इसके अलावा ड्रॉपआउट के लिए क्षतिपूर्ति की जाती है।
उत्साह

@ZakJ सही है। : मोहम्मद आदेल का जवाब और इस पत्र यहाँ देखें arxiv.org/pdf/1801.05134.pdf । वास्तव में, बैच सामान्यीकरण परतें डेटा में कोवेरेट शिफ्ट का मुकाबला करना सीखती हैं जो अब ड्रॉपआउट नहीं होता है जब परीक्षण समय पर बंद हो जाता है।
skeller88

@ skeller88 मैंने पेपर पढ़ा। मेरे सिर के ऊपर मुझे लगता है कि अगर आपके पास ड्रॉपआउट से पहले बीएन है तो बीएन परत के इरादे को अनिवार्य रूप से खराब कर देता है क्योंकि बीएन का कार्य अगली परत को मानकीकृत डेटा प्रदान करना है।
मिलोमोनिंदर

12

आमतौर पर, बस ड्रॉप Dropout(जब आपके पास है BN):

  • "बीएन Dropoutकुछ मामलों की आवश्यकता को समाप्त करता है क्योंकि बीएन समान रूप से नियमितीकरण लाभ प्रदान करता है जैसे कि ड्रॉपआउट सहज रूप से"
  • "आर्किटेक्चर जैसे ResNet, DenseNet, आदि उपयोग नहीं कर रहे हैं Dropout

अधिक जानकारी के लिए इस पत्र [का उल्लेख विचरण शिफ्ट द्वारा छोड़ने वालों और बैच सामान्यीकरण के बीच बेसुरापन को समझना ] के रूप में पहले से ही टिप्पणी में @Haramoz द्वारा उल्लेख किया है।


एमएलपी के बारे में क्या यह उन्हें संयोजित करने के लिए उपयोगी है।
दीना ताकलीट

1
@DINATAKLIT जब आपके पास वास्तव में पर्याप्त प्रशिक्षण डेटा नहीं है, तो मेरी राय में, हाँ।
xtluo

@xtulo क्या आपका मतलब है कि यह काम एक बार उनके छोटे डाटेस्ट का है? जैसे अगर मैंने पढ़ा है कि बड़े डेटासेट के साथ बैच सामान्यीकरण बेहतर काम करता है! मैं थोड़ा उलझन में हूँ:!
दीना टाकिज

1
@DINATAKLIT अपनी पिछली टिप्पणी में what about MLPs is it useful to combine them, क्या आपका मतलब है Is it useful to combine Dropout and BN when using MLPs? इसके बारे में मेरी भावना यह है कि यह मुख्य रूप से आपके मॉडल के आकार और आपके पास प्रशिक्षण डेटा की मात्रा पर निर्भर करता है।
xtluo

@xtulo हाँ मेरा मतलब है कि यह Droupout और BN को संयोजित करने के लिए उपयोगी है, हाँ मैं आपके अंतिम उत्तर से सहमत हूँ।
दीना टाकिज

6

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

इस आशय का एक छोटा डेमो इस नोटबुक में पाया जा सकता है ।


3
यह प्रश्न का उत्तर कैसे देता है?
nbubis

1
पेपर 2 संभावित रणनीतियों की आपूर्ति करता है: - सभी बीएन परतों के बाद ड्रॉपआउट (केवल) लागू करें - ड्रॉपआउट को और अधिक विचरण-स्थिर रूप में बदलें
user3641187

@nbubis मुझे लगता है कि यह इसका परोक्ष रूप से जवाब देता है। यह उन्हें एक साथ उपयोग नहीं करने का सुझाव देता है ("ड्रॉपआउट और बैच नॉर्म (बीएन)" के बीच की असमानता बताते हैं)।
नेल्सनगॉन

3

बेहतर प्रदर्शन के लिए शोध पत्र के आधार पर हमें ड्रॉपआउट लगाने से पहले बीएन का उपयोग करना चाहिए


उत्तर पूर्ण स्टैक को संबोधित नहीं करता है, प्रश्न में पूछा गया है।
सलहिनाजद

2

सही क्रम है: रूपांतरण> सामान्यीकरण> सक्रियण> ड्रॉपआउट> पूलिंग


2

रूपांतरण - सक्रियण - ड्रॉपऑउट - बैचऑर्म - पूल -> टेस्ट_लॉस: ०.०४२६१३५५2४ Drop२० --२47५

रूपांतरण - सक्रियण - ड्रॉपऑउट - पूल - बैचऑनॉर्म -> टेस्ट_लॉस: 0.050065308809280396

रूपांतरण - सक्रियण - बैचऑर्म - पूल - ड्रॉपऑउट -> टेस्ट_लॉस: 0.04911309853856144

रूपांतरण - सक्रियण - बैचऑर्म - ड्रॉपऑउट - पूल - टेस्ट_लॉस: ०.०६9० ९ ६२२०४ ९ ३६५६५

रूपांतरण - बैचऑर्म - एक्टिवेशन - ड्रॉपऑउट - पूल -> टेस्ट_लॉस: ०.०३8688६15१५३०२४२४३६

रूपांतरण - बैचऑर्म - एक्टिवेशन - पूल - ड्रॉपऑउट -> टेस्ट_लॉस: ०.०४१२६० ९ ५०२६orm३१४ ९ १

रूपांतरण - बैचऑर्म - ड्रॉपऑट - सक्रियण - पूल -> टेस्ट_लॉस: ०.०५१४२५४६3१ormorm५६०orm२३

रूपांतरण - ड्रॉपऑउट - सक्रियण - बैचऑर्म - पूल -> टेस्ट_लॉस: 0.04827788099646568

रूपांतरण - ड्रॉपऑउट - सक्रियण - पूल - बैचऑन -> टेस्ट_लॉस: 0.04722036048769951

कन्वेंशन - ड्रॉपऑउट - बैचऑर्म - एक्टिवेशन - पूल -> टेस्ट_लॉस: 0.03238215297460556


एमएनआईएसटी डेटासेट (20 युग) को 2 कनवोल्यूशनल मॉड्यूल (नीचे देखें) के साथ प्रशिक्षित किया गया, जिसके बाद हर बार

model.add(Flatten())
model.add(layers.Dense(512, activation="elu"))
model.add(layers.Dense(10, activation="softmax"))

संकेंद्रित परतों का कर्नेल आकार (3,3), डिफ़ॉल्ट पैडिंग, सक्रियण है elu। पूलिंग पूल का मैक्सपूलिंग है (2,2)। हानि है categorical_crossentropyऔर आशावादी है adam

संबंधित ड्रॉपआउट संभावना क्रमशः है 0.2या 0.3है। फीचर मैप्स की मात्रा क्रमशः है 32या 64है।

संपादित करें: जब मैंने ड्रॉपआउट को गिरा दिया, जैसा कि कुछ जवाबों में सुझाया गया है, तो यह तेजी से परिवर्तित हो गया, लेकिन जब मैं बैचनॉर्म और ड्रॉपआउट का उपयोग करता हूं तो इससे भी सामान्यीकरण क्षमता थी ।


NNs के स्टोकेस्टिक प्रकृति के कारण यह सिर्फ एक प्रशिक्षण के साथ खेलने के लिए पर्याप्त नहीं है। जब आप लगभग 100 प्रशिक्षण करेंगे और औसत लेंगे - परिणाम अधिक सटीक होंगे।
GensaGames

0

ConV / FC - BN - सिग्मॉइड / टैन - ड्रॉपआउट। यदि एक्टिवेशन फंक रिलू है या नहीं, तो सामान्यीकरण और ड्रॉपआउट का क्रम आपके कार्य पर निर्भर करता है


0

मैंने https://stackoverflow.com/a/40295999/8625228 से जवाब और टिप्पणियों में अनुशंसित पत्रों को पढ़ा

Ioffe और Szegedy (2015) के दृष्टिकोण से, केवल नेटवर्क संरचना में BN का उपयोग करें। ली एट अल। (2018) सांख्यिकीय और प्रायोगिक विश्लेषण देते हैं, कि जब बीएन से पहले चिकित्सक ड्रॉपआउट का उपयोग करते हैं, तो एक बदलाव होता है। इस प्रकार, ली एट अल। (2018) सभी बीएन परतों के बाद ड्रॉपआउट लगाने की सलाह देते हैं।

Ioffe और Szegedy (2015) के दृष्टिकोण से, BN सक्रियण फ़ंक्शन के अंदर / पहले स्थित है । हालांकि, चेन एट अल। (2019) एक IC लेयर का उपयोग करें जो ड्रॉपआउट और BN और चेन एट अल को जोड़ती है। (2019) ReLU के बाद बीएन का उपयोग करने की सिफारिश करता है।

सुरक्षा पृष्ठभूमि पर, मैं केवल नेटवर्क में ड्रॉपआउट या बीएन का उपयोग करता हूं।

चेन, ग्वांगयोंग, पेंगफेई चेन, युजुन शि, चांग-यू हसिह, बेनबेन लियाओ और शेंगयु झांग। 2019. "गहरी तंत्रिका नेटवर्क के प्रशिक्षण में बैच के सामान्यीकरण और ड्रॉपआउट के उपयोग को पुनर्जीवित करना।" सीओआरआर एब्स / 1905.05928 http://arxiv.org/abs/1905.05928

Ioffe, सर्गेई, और ईसाई Szegedy। 2015. "बैच सामान्यीकरण: आंतरिक कोवरिएट शिफ्ट को कम करके गहन नेटवर्क प्रशिक्षण में तेजी लाना।" सीओआरआर एब्स / 1502.03167। http://arxiv.org/abs/1502.03167

ली, जियांग, शुओ चेन, शियाओलिन हू और जियान यांग। 2018. "वियरेन्स शिफ्ट द्वारा ड्रॉपआउट और बैच सामान्यीकरण के बीच की समझ को समझना।" सीओआरआर एब्स / 1801.05134। http://arxiv.org/abs/1801.05134

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