27

मुझे समझ में नहीं आ रहा है कि क्यों ड्रॉपआउट इस तरह tensorflow में काम करता है। CS231n के ब्लॉग का कहना है "dropout is implemented by only keeping a neuron active with some probability p (a hyperparameter), or setting it to zero otherwise." इसके अलावा, आप चित्र (एक ही साइट से लिया) से देख सकते हैं कि, enter image description heretensorflow में tf.nn.dropout में इनपुट क्यों स्केल किया गया है?

tensorflow साइट से, With probability keep_prob, outputs the input element scaled up by 1/keep_prob, otherwise outputs 0.

अब, क्यों इनपुट तत्व 1/keep_prob द्वारा मापा जाता है? इनपुट तत्व को क्यों न रखें क्योंकि यह संभावना के साथ है और इसे 1/keep_prob के साथ स्केल नहीं करें?

उत्तर

40

यह स्केलिंग (keep_prob == 1.0 के साथ) (keep_prob < 1.0 के साथ) एक ही नेटवर्क और मूल्यांकन प्रशिक्षण के लिए इस्तेमाल किया जा सक्षम बनाता है। Dropout paper से:

विचार ड्रॉपआउट के बिना परीक्षण समय पर एक एकल तंत्रिका नेट का उपयोग करना है। इस नेटवर्क के वजन प्रशिक्षित वजन के स्केल-डाउन संस्करण हैं। एक इकाई के प्रशिक्षण के दौरान संभावना पी साथ बनाए रखा है, तो उस इकाई के बाहर जाने वाले भार परीक्षण समय में पी से गुणा कर रहे हैं के रूप में द्वारा वजन नीचे पैमाने पर करने के ऑप्स जोड़ने से चित्रा में दिखाया गया है 2.

बल्कि परीक्षण समय पर keep_prob, टेंसरफ्लो कार्यान्वयन प्रशिक्षण समय पर 1./keep_prob द्वारा वजन बढ़ाने के लिए एक सेशन जोड़ता है। प्रदर्शन पर प्रभाव नगण्य है, और कोड सरल है (क्योंकि हम एक ही ग्राफ का उपयोग करते हैं और keep_prob को tf.placeholder() के रूप में देखते हैं जिसे हम प्रशिक्षण या मूल्यांकन कर रहे हैं, इस पर निर्भर करते हुए एक अलग मूल्य खिलाया जाता है)।

+0

मुझे खेद है, मैं इस अवधारणा के लिए नया हूं। शायद मुझे कुछ याद आ रही है। क्या आप एक सरल स्पष्टीकरण दे सकते हैं? मेरा मतलब है क्यों 1/keep_prob? अगर मैं keep_prob बनाम 1/keep_prob का उपयोग करता हूं तो क्या अंतर होगा। बीटीडब्ल्यू, मैं आपकी व्याख्या से समझता हूं कि कोड सरल क्यों हो जाता है। –

+10

इसका लक्ष्य वज़न की अपेक्षित राशि को — रखना है और इसलिए 'keep_prob' पर ध्यान दिए बिना सक्रियताओं की अपेक्षित मान — है। यदि (ड्रॉपआउट करते समय) हम संभावना 'keep_prob' के साथ एक न्यूरॉन अक्षम करते हैं, तो हमें अन्य वजन को '1 से गुणा करने की आवश्यकता होती है।/keep_prob' इस मान को समान रखने के लिए (उम्मीद में)। अन्यथा, उदाहरण के लिए, गैर-रैखिकता 'keep_prob' के मान के आधार पर एक पूरी तरह से अलग परिणाम उत्पन्न करेगी। – mrry

1

मान लीजिए कि नेटवर्क n न्यूरॉन्स था और हम छोड़ने वालों की दर 1/2

प्रशिक्षण चरण, हम n/2 न्यूरॉन्स के साथ छोड़ दिया हो जाएगा लागू किया करते हैं। तो अगर आप आउटपुट x सभी न्यूरॉन्स के साथ आउटपुट की उम्मीद कर रहे थे, तो अब आप x/2 पर पहुंचेंगे। तो प्रत्येक बैच के लिए, नेटवर्क वजन को इस x/2

परीक्षण/अनुमान/सत्यापन चरण के अनुसार प्रशिक्षित किया जाता है, हम किसी भी ड्रॉपआउट को लागू नहीं करते हैं ताकि आउटपुट x हो। तो, इस मामले में, आउटपुट x के साथ होगा और x/2 नहीं होगा, जो आपको गलत परिणाम देगा। तो आप परीक्षण के दौरान x/2 को स्केल कर सकते हैं।

परीक्षण चरण के लिए विशिष्ट उपरोक्त स्केलिंग की बजाय। टेंस्फोर्लो की ड्रॉपआउट परत क्या करती है कि यह ड्रॉपआउट के बिना या बिना (प्रशिक्षण या परीक्षण) है, यह आउटपुट को स्केल करता है ताकि योग स्थिर हो।

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