प्रशिक्षण त्रुटि से कम त्रुटि?


57

मुझे इस मुद्दे के बारे में यहां और यहां दो प्रश्न मिले लेकिन अभी तक कोई स्पष्ट उत्तर या स्पष्टीकरण नहीं है। मैं उसी समस्या को लागू करता हूं जहां सत्यापन त्रुटि मेरे रूपांतरण तंत्रिका नेटवर्क में प्रशिक्षण त्रुटि से कम है। इसका क्या मतलब है?


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

डेटा में फेरबदल करें
user0

हम इससे क्या वास्ता रखते हैं? हां, इसका निर्माण ड्रॉपआउट और बैटचनॉर्म लेयर्स के साथ घने नेटवर्क से होता है। [ ( यहाँ छवि विवरण दर्ज करें ] ( i.stack.imgur.com/KX1Fz.png )
श्रीनाथ

जवाबों:


69

आपकी वास्तविक कार्यप्रणाली (जैसे क्रॉस-वैधीकरण विधि, प्रदर्शन मीट्रिक, डेटा विभाजन विधि, आदि) को जाने बिना कुछ निश्चित होना मुश्किल है।

आम तौर पर हालांकि, प्रशिक्षण त्रुटि लगभग हमेशा आपकी सत्यापन त्रुटि को कम करती है । हालांकि यह सत्यापन त्रुटि के लिए प्रशिक्षण से कम होना संभव है। आप इसके दो तरीके सोच सकते हैं:

  1. आपके प्रशिक्षण सेट में सीखने के लिए कई 'कठिन' मामले थे
  2. आपके सत्यापन सेट में भविष्यवाणी करने के लिए ज्यादातर 'आसान' मामले थे

इसलिए यह महत्वपूर्ण है कि आप वास्तव में अपने मॉडल प्रशिक्षण पद्धति का मूल्यांकन करें। यदि आप प्रशिक्षण के लिए अपने डेटा को ठीक से विभाजित नहीं करते हैं, तो आपके परिणाम भ्रामक होंगे, यदि केवल गलत नहीं हैं, तो निष्कर्ष।

मुझे लगता है कि चार अलग-अलग श्रेणियों में मॉडल मूल्यांकन:

  1. अंडरफिटिंग - मान्यता और प्रशिक्षण त्रुटि उच्च

  2. ओवरफिटिंग - सत्यापन त्रुटि अधिक है, प्रशिक्षण त्रुटि कम है

  3. अच्छा फिट - प्रशिक्षण त्रुटि की तुलना में कम त्रुटि, उच्चतर

  4. अज्ञात फिट - मान्यता त्रुटि कम, प्रशिक्षण त्रुटि 'उच्च'

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

संपादित करें

पिछले अजगर अजगर प्रश्न के लिए ओपी के संदर्भ को संबोधित करने के लिए

इससे पता चलता है कि आपके पास क्रॉस-मान्यता की आवश्यकता नहीं होने के लिए पर्याप्त डेटा है और बस आपके प्रशिक्षण, सत्यापन और डेटा सबसेट का परीक्षण करना है। अब, यदि आप लेज़ेन ट्यूटोरियल को देखते हैं तो आप देख सकते हैं कि पृष्ठ के शीर्ष पर वही व्यवहार देखा जाता है। मुझे यह विश्वास करना मुश्किल होगा कि लेखक ऐसे परिणाम पोस्ट करेंगे यदि यह अजीब था, लेकिन केवल यह मानने के बजाय कि वे सही हैं, आइए आगे देखते हैं। हमारे यहां सबसे अधिक रुचि का खंड प्रशिक्षण पाश अनुभाग में है, नीचे से ऊपर आप देखेंगे कि नुकसान पैरामीटर की गणना कैसे की जाती है।

प्रशिक्षण नुकसान से अधिक गणना की जाती है पूरे प्रशिक्षण डाटासेट । इसी तरह, सत्यापन हानि की गणना पूरे सत्यापन डेटासेट पर की जाती है । प्रशिक्षण सेट आमतौर पर सत्यापन (80-20) के रूप में कम से कम 4 गुना बड़ा है। यह देखते हुए कि त्रुटि सभी नमूनों पर गणना की जाती है, आप सत्यापन सेट के नुकसान की माप लगभग 4X तक की उम्मीद कर सकते हैं। हालाँकि, आप देखेंगे कि प्रशिक्षण की हानि और सत्यापन हानि एक दूसरे के पास आ रहे हैं क्योंकि प्रशिक्षण जारी है। यह जानबूझकर किया जाता है जैसे कि आपकी प्रशिक्षण त्रुटि आपकी सत्यापन त्रुटि से कम होने लगती है, जिसे आप अपने मॉडल से अधिक करना शुरू कर देंगे !!!

मुझे उम्मीद है कि यह इन त्रुटियों को स्पष्ट करता है।


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

@cdeterman धन्यवाद। मैं RMSE का उपयोग प्रदर्शन मीट्रिक के रूप में करता हूं। मैंने अपने डेटा को परीक्षण के लिए 20% और प्रशिक्षण और सत्यापन के लिए 80% में विभाजित किया है (सत्यापन त्रुटि की गणना करने के लिए प्रशिक्षण डेटा का 20% क्रॉस वैध है)। वास्तव में, सत्यापन त्रुटि कम है, प्रशिक्षण त्रुटि की तुलना में थोड़ा कम है। परीक्षण त्रुटि प्रशिक्षण और सत्यापन त्रुटियों से अधिक है। हम एक ऐसी ही हस्तलिपि पहचान के लिए MNISTdataset में मामला पा सकते हैं stats.stackexchange.com/questions/178371/...
Bido

@ Bido मेरे सबसे हाल के संपादन पते पर सवाल उठाता है?
cdeterman 17

@cdeterman धन्यवाद। मैंने अभी देखा है कि आपने अपना उत्तर संपादित कर लिया है। यह स्पष्ट और सहायक है।
बिदो

महान व्याख्या, अगर आप कुछ रेखांकन जोड़ सकते हैं - यह सबसे अच्छा एक संभव होगा
तारास मत्स्यक

109

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


12
कितना सरल, समझदार जवाब!
रजब २४५

4
हाँ, इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए।
सिमरन

2
मैंने अपनी ड्रॉपआउट परत को हटा दिया, लेकिन फिर भी शुरू में प्रशिक्षण हानि की तुलना में सत्यापन हानि कम देखी गई! (मैं परतों पर किसी भी नियमितीकरण को निर्दिष्ट नहीं कर रहा हूँ, या तो!)
योशिय्याह योडर

मेरे केस के साथ फिट बैठता है। बहुत सारे ड्रॉपआउट का उपयोग करना।
एन्ड्रे क्रिस्टोफर एंडरसन

@JosiahYoder - क्या आपके पास इस पर साझा करने के लिए कुछ और है? मेरे पास 1650 इनपुट फीचर्स हैं। जब मैं नेटवर्क को छोटा रखता हूं (1650, 50, 1) ड्रॉपआउट या कोई ड्रॉपआउट नहीं, प्रारंभिक युगों में प्रशिक्षण त्रुटि सत्यापन त्रुटि से अधिक है। जब मैं बड़े नेटवर्क (1650, 1200, 800, 100 ..... के आसपास 10 परतों के साथ 100 सेलु सक्रियण) का उपयोग करता हूं, तो उच्च सत्यापन सटीकता का अजीब पैटर्न कुछ हद तक कम हो जाता है।
मिलोमिंदरबिंदर

19

मेरे पास @ DK के उत्तर पर टिप्पणी करने के लिए पर्याप्त अंक नहीं हैं, लेकिन यह अब केरस के प्रलेखन पर पूछे जाने वाले प्रश्न के रूप में उत्तर दिया गया है:

“प्रशिक्षण हानि परीक्षण के नुकसान से बहुत अधिक क्यों है?

एक केरस मॉडल में दो मोड होते हैं: प्रशिक्षण और परीक्षण। नियमितीकरण तंत्र, जैसे ड्रॉपआउट और एल 1 / एल 2 वजन नियमितीकरण, परीक्षण के समय बंद कर दिए जाते हैं।

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


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

क्या आपका प्रशिक्षण देव डेटा का प्रतिनिधि है?
dter

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

आपका उत्तर प्रशिक्षण हानि के सत्यापन नुकसान से अधिक होने के बारे में बात नहीं करता है जो कि पूछा गया सवाल है। आप प्रशिक्षण नुकसान और परीक्षण नुकसान पर अधिक ध्यान केंद्रित कर रहे हैं
enjal

6

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


1
धन्यवाद @ Mans007, यह मेरे साथ हुआ था और मैं केर का उपयोग कर रहा था। बैच-मानक परतें इसका कारण थीं।
रोई बहूमी

4

एक और संभावना जो किसी तरह @cdeterman और @DK के उत्तर को जोड़ती है, यदि आप कुछ डेटा वृद्धि तंत्र का उपयोग कर रहे हैं। सटीक डेटा वृद्धि आमतौर पर केवल प्रशिक्षण सेट पर की जाती है और सत्यापन सेट (ड्रॉपआउट नियमितीकरण के लिए) पर नहीं होती है, और इससे प्रशिक्षण सेट में उन लोगों की तुलना में "आसान" मामलों वाले सत्यापन सेट हो सकते हैं।


2

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


0

@cdeterman और @DK की अच्छी व्याख्या है। मैं एक और कारण चाहूंगा - data leakage। आपके ट्रेन-डेटा का कुछ हिस्सा परीक्षण-डेटा के साथ "बारीकी से संबंधित" है।

संभावित उदाहरण: कल्पना करें कि आपके पास 1000 कुत्तों और 1000 बिल्लियों के साथ 500 प्रति पालतू जानवर हैं (कुछ मालिक बहुत ही समान स्थितियों में अपने पालतू जानवरों की तस्वीरें लेना पसंद करते हैं), पृष्ठभूमि पर कहते हैं। इसलिए यदि आप 70/30 स्प्लिट रैंडम करते हैं, तो आपको टेस्ट डेटा में ट्रेन डेटा का डेटा लीक होगा।


0

सीधे शब्दों में कहें, यदि प्रशिक्षण हानि और सत्यापन हानि की गणना सही ढंग से की जाती है, तो प्रशिक्षण हानि को सत्यापन हानि से अधिक होना असंभव है। इसका कारण यह है कि बैक-प्रसार DIRECTLY प्रशिक्षण सेट पर गणना की गई त्रुटि को कम कर देता है और केवल सत्यापन सेट पर गणना की गई त्रुटि को कम करता है (गारंटी भी नहीं!)।

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


0

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


0

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

1.) प्रशिक्षण की त्रुटि पूरे युग के दौरान औसतन होती है, बल्कि सभी एक बार युग के अंत में होती है, लेकिन सत्यापन त्रुटि केवल युग के अंत में होती है। ध्यान दें कि सत्यापन त्रुटि में पूरी तरह से अपडेट होने का लाभ है, जबकि प्रशिक्षण त्रुटि में कम अपडेट के साथ त्रुटि गणना शामिल है। बेशक, asymptotically यह प्रभाव आम तौर पर गायब हो जाना चाहिए।

2.) बैच अपडेट होने से पहले प्रशिक्षण त्रुटि की गणना की जाती है। स्टोकेस्टिक ग्रेडिएंट आधारित विधि में, कुछ शोर ढाल है। जबकि एक पहाड़ी पर चढ़ रहा है, वहाँ एक उच्च संभावना है कि सभी प्रशिक्षण नमूनों पर गणना की गई वैश्विक हानि कम हो रही है। हालांकि, जब कोई मोड के बहुत करीब पहुंच जाता है, तो आपके बैच में नमूनों के संबंध में अद्यतन दिशा नकारात्मक होगी । लेकिन जब से हम एक मोड के आसपास उछल रहे हैं, इसका मतलब है कि औसतन हमें एक ऐसी दिशा चुननी चाहिए जो नमूनों के संबंध में सकारात्मक होबैच के। अब, अगर हम दिए गए बैच में नमूनों के संबंध में अद्यतन करने वाले हैं, तो इसका मतलब है कि उन्हें संभावित रूप से कई बैच अपडेट द्वारा धक्का दिया गया है, जिसमें वे शामिल नहीं थे, अपडेट से पहले उनके नुकसान की गणना करके, यह तब है जब स्टोकेस्टिक तरीकों ने आपके डेटासेट में अन्य नमूनों के पक्ष में मापदंडों को सबसे अधिक धकेल दिया है, इस प्रकार हमें अपेक्षित नुकसान में एक छोटे से ऊपर वाला पूर्वाग्रह दे रहा है।

ध्यान दें कि asymptotically, का प्रभाव (1) चला जाता है, (2) नहीं! नीचे मैं दिखाता हूं कि केरस दोनों (1) और (2) करते दिखाई देते हैं।

(1) यह दिखाते हुए कि युग में प्रत्येक बैच पर मेट्रिक्स औसत हैं, बजाय एक बार अंत में। बहुत पहले के युग में val_accuracy के पक्ष में val_accuracy के इन-सैंपल सटीकता में बहुत बड़ा अंतर देखें। ऐसा इसलिए है क्योंकि बहुत कम बैच अपडेट के साथ कुछ इन-सैंपल एरर की गणना की जाती है।

>>> model.fit(Xtrn, Xtrn, epochs = 3, batch_size = 100, 
...                 validation_data = (Xtst, Xtst))
Train on 46580 samples, validate on 1000 samples
Epoch 1/3
46580/46580 [==============================] - 8s 176us/sample 
- loss: 0.2320 - accuracy: 0.9216 
- val_loss: 0.1581 - val_accuracy: 0.9636
Epoch 2/3
46580/46580 [==============================] - 8s 165us/sample 
- loss: 0.1487 - accuracy: 0.9662 
- val_loss: 0.1545 - val_accuracy: 0.9677
Epoch 3/3
46580/46580 [==============================] - 8s 165us/sample 
- loss: 0.1471 - accuracy: 0.9687 
- val_loss: 0.1424 - val_accuracy: 0.9699
<tensorflow.python.keras.callbacks.History object at 0x17070d080>

(2) त्रुटि दिखाना प्रत्येक बैच के लिए अद्यतन करने से पहले गणना की जाती है । ध्यान दें कि युगांतर 1 के लिए, जब हम उपयोग करते हैं batch_size = nRows(यानी, एक बैच में सभी डेटा), इन-नमूना त्रुटि epoch 1 के लिए लगभग 0.5 (यादृच्छिक अनुमान) है, फिर भी सत्यापन त्रुटि 0.82 है। इसलिए, बैच अद्यतन के पहले इन-सैंपल त्रुटि की गणना की गई थी , जबकि सत्यापन त्रुटि बैच अद्यतन के बाद गणना की गई थी ।

>>> model.fit(Xtrn, Xtrn, epochs = 3, batch_size = nRows, 
...                 validation_data = (Xtst, Xtst))
Train on 46580 samples, validate on 1000 samples
Epoch 1/3
46580/46580 [==============================] - 9s 201us/sample 
- loss: 0.7126 - accuracy: 0.5088 
- val_loss: 0.5779 - val_accuracy: 0.8191
Epoch 2/3
46580/46580 [==============================] - 6s 136us/sample 
- loss: 0.5770 - accuracy: 0.8211 
- val_loss: 0.4940 - val_accuracy: 0.8249
Epoch 3/3
46580/46580 [==============================] - 6s 120us/sample 
- loss: 0.4921 - accuracy: 0.8268 
- val_loss: 0.4502 - val_accuracy: 0.8249
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.