क्या ओवरफ़िटिंग तब भी हो सकती है जब सत्यापन नुकसान अभी भी गिर रहा है?


12

मेरे पास केरस में एक कन्वेन्शनल + एलएसटीएम मॉडल है, यह (रेफ 1) के समान है, जिसका उपयोग मैं एक कागेल प्रतियोगिता के लिए कर रहा हूं। वास्तुकला नीचे दिखाया गया है। मैंने इसे 11000 नमूनों के अपने लेबल सेट पर प्रशिक्षित किया है (दो कक्षाएं, प्रारंभिक प्रचलन ~ 9: 1 है, इसलिए मैंने 20 युगों के विभाजन के साथ 50 युगों के लिए 1 के 1/1 अनुपात के लिए अपघटित कर दिया था) मैं बहुत अधिक हो रहा था थोड़ी देर के लिए लेकिन मुझे लगा कि यह शोर और ड्रॉपआउट परतों के साथ नियंत्रण में है।

मॉडल ऐसा लग रहा था कि यह आश्चर्यजनक रूप से प्रशिक्षण दे रहा था, अंत में प्रशिक्षण सेट की संपूर्णता पर 91% का स्कोर किया, लेकिन परीक्षण डेटा सेट, पूर्ण कचरा पर परीक्षण करने पर।

काल से हानि

युग द्वारा वैधता सटीकता

सूचना: सत्यापन सटीकता प्रशिक्षण सटीकता से अधिक है। यह "विशिष्ट" ओवरफिटिंग के विपरीत है।

मेरा अंतर्ज्ञान, छोटे-ईश सत्यापन विभाजन को देखते हुए, मॉडल अभी भी इनपुट सेट पर बहुत दृढ़ता से फिट होने और सामान्यीकरण खोने का प्रबंधन कर रहा है। अन्य सुराग यह है कि val_acc एसीसी से अधिक है, जो कि गड़बड़ लगती है। क्या यहाँ सबसे अधिक संभावना है?

यदि यह ओवरफिटिंग है, तो सत्यापन विभाजन को बढ़ाकर इसे कम कर देगा, या क्या मैं एक ही मुद्दे में चलाने जा रहा हूं, औसतन, प्रत्येक नमूना आधा कुल युगों को देखेगा?

आदर्श:

Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
convolution1d_19 (Convolution1D) (None, None, 64)      8256        convolution1d_input_16[0][0]     
____________________________________________________________________________________________________
maxpooling1d_18 (MaxPooling1D)   (None, None, 64)      0           convolution1d_19[0][0]           
____________________________________________________________________________________________________
batchnormalization_8 (BatchNormal(None, None, 64)      128         maxpooling1d_18[0][0]            
____________________________________________________________________________________________________
gaussiannoise_5 (GaussianNoise)  (None, None, 64)      0           batchnormalization_8[0][0]       
____________________________________________________________________________________________________
lstm_16 (LSTM)                   (None, 64)            33024       gaussiannoise_5[0][0]            
____________________________________________________________________________________________________
dropout_9 (Dropout)              (None, 64)            0           lstm_16[0][0]                    
____________________________________________________________________________________________________
batchnormalization_9 (BatchNormal(None, 64)            128         dropout_9[0][0]                  
____________________________________________________________________________________________________
dense_23 (Dense)                 (None, 64)            4160        batchnormalization_9[0][0]       
____________________________________________________________________________________________________
dropout_10 (Dropout)             (None, 64)            0           dense_23[0][0]                   
____________________________________________________________________________________________________
dense_24 (Dense)                 (None, 2)             130         dropout_10[0][0]                 
====================================================================================================
Total params: 45826

यहाँ मॉडल फिट करने के लिए कॉल है (वर्ग वजन आमतौर पर 1: 1 के आसपास है क्योंकि मैंने इनपुट को अपडाउन किया है):

class_weight= {0:1./(1-ones_rate), 1:1./ones_rate} # automatically balance based on class occurence
m2.fit(X_train, y_train, nb_epoch=50, batch_size=64, shuffle=True, class_weight=class_weight, validation_split=0.2 )

एसई का कुछ मूर्खतापूर्ण नियम है कि मैं 2 से अधिक लिंक पोस्ट नहीं कर सकता जब तक कि मेरा स्कोर अधिक न हो, इसलिए यहां उदाहरण दिया गया है कि आपकी रुचि क्या है: Ref 1: machinelearningmastery DOT com SLASH अनुक्रम-वर्गीकरण-lstm-recurrent-neural-नेटवर्क- अजगर-keras

जवाबों:


8

मुझे यकीन नहीं है कि सत्यापन सेट संतुलित है या नहीं। आपके पास एक गंभीर डेटा असंतुलन समस्या है। यदि आप अपने नेटवर्क को प्रशिक्षित करने के लिए प्रत्येक वर्ग से समान और बेतरतीब ढंग से नमूना लेते हैं, और फिर आपने जो नमूना लिया है उसका प्रतिशत आपके नेटवर्क को मान्य करने के लिए उपयोग किया जाता है, इसका मतलब है कि आप संतुलित डेटा सेट का उपयोग करके प्रशिक्षित और मान्य हैं। परीक्षण में आपने असंतुलित डेटाबेस का उपयोग किया। इसका अर्थ है कि आपके सत्यापन और परीक्षण सेट समतुल्य नहीं हैं। ऐसे मामले में आपके पास उच्च सत्यापन सटीकता और कम परीक्षण सटीकता हो सकती है। कृपया इस संदर्भ को देखें जो मुख्य रूप से DNN के लिए डेटा असंतुलन समस्या के बारे में बात करता है, आप जाँच सकते हैं कि वे प्रशिक्षण, सत्यापन और परीक्षण करने के लिए नमूना कैसे करते हैं https://pdfs.semanticscholar.org/69a6/8f9cf874nj2232f47808016c2736b90c35.pdf


1
सत्यापन सेट को प्रशिक्षण सेट के समान सेट से खींचा जाता है। मुझे 100% यकीन नहीं है, लेकिन मेरा मानना ​​है कि केरस ने फेरबदल और प्रशिक्षण से पहले सत्यापन में कटौती की है (यानी यदि आप इसे अनशेडल्ड डेटा खिलाते हैं, तो सत्यापन आपके वितरण के हिस्से से अलग हो जाता है)। इसलिए मैंने कैरस पास करने से पहले मैन्युअल रूप से संतुलन और फेरबदल किया। केवल मुद्दा यह हो सकता है कि मैं 1 का दोहराव कर रहा हूं और गाऊसी शोर जोड़ रहा हूं, जो ओवरफिट को बढ़ा सकता है।
DeusXMachina

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

5

यदि आपका प्रशिक्षण नुकसान आपके सत्यापन हानि के अंतर्गत आता है, तो आप ओवरफिट कर रहे हैं , भले ही सत्यापन अभी भी गिर रहा हो।

यह संकेत है कि आपका नेटवर्क ट्रेन सेट में पैटर्न सीख रहा है जो सत्यापन एक में लागू नहीं हैं


मैं समझता हूं कि प्रशिक्षण हानि सत्यापन हानि से कम है - यह प्रशिक्षण सेट के लिए सिर्फ ओवरफिटिंग है। लेकिन सत्यापन सटीकता प्रशिक्षण सटीकता से अधिक है । यह अजीब हिस्सा है!
DeusXMachina

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