2016-09-25 15 views
29

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

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

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

आपको बहुत धन्यवाद!

अद्यतन:

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

उत्तर

32

Ioffe and Szegedy 2015 में, लेखक कहते हैं कि "हम यह सुनिश्चित करना चाहते हैं कि किसी भी पैरामीटर मानों के लिए, नेटवर्क हमेशा वांछित वितरण के साथ सक्रियण उत्पन्न करता है"। तो बैच सामान्यीकरण परत वास्तव में एक Conv परत/पूरी तरह से कनेक्ट परत के बाद सही है, लेकिन ReLu (या किसी अन्य प्रकार के) सक्रियण में खिलाने से पहले। अधिक जानकारी के लिए लगभग 53 मिनट में this video देखें।

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

तो सारांश में, बैच सामान्य और छोड़ने वालों का उपयोग करने का आदेश है:

-> CONV/एफसी -> BatchNorm -> Relu (या अन्य सक्रियण) -> छोड़ने वालों -> CONV/एफसी ->

+5

ऐसा लगता है कि यहां तक ​​कि ईसाई Szegedy अब भी ReLU बैच नॉर्म _after_ प्रदर्शन करने के लिए पसंद करता है (इससे पहले नहीं)। केरास के लेखक एफ। कोलेट द्वारा उद्धरण: "मैं यह जांचने के लिए वापस नहीं गया हूं कि वे अपने मूल पत्र में क्या सुझाव दे रहे हैं, लेकिन मैं गारंटी दे सकता हूं कि ईसाई द्वारा लिखे गए हालिया कोड बीएन से पहले relu लागू होता है। यह अभी भी कभी-कभी विषय है बहस का, यद्यपि। " [स्रोत] (https://github.com/fchollet/keras/issues/1802#issuecomment-187966878) – pseudomarvin

+0

@pseudomarvin के समान थ्रेड से, आरएलयू के पहले और बाद में बैच सामान्यीकरण रखने से कुछ परिणाम यहां दिए गए हैं। इन परिणामों में पाया गया कि * के बाद * रेएलयू बेहतर है: [परिणाम] (https://github.com/ducha-aiki/caffenet-benchmark/blob/master/batchnorm.md#bn----before-or-after -relu) – golmschenk

+0

पूलिंग के बारे में क्या, क्या यह बैचनोर्म और सक्रियण के बीच में होगा? – wordsforthewise

संबंधित मुद्दे