उच्च हानि मूल्य के बावजूद अच्छी सटीकता


15

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

मेरे पास इन मूल्यों पर प्रशिक्षण और मान्यता है: 0.4011 - एसीसी: 0.8224 - val_loss: 0.4577 - val_acc: 0.7826 । एनएन को लागू करने का यह मेरा पहला प्रयास है, और मैंने मशीन लर्निंग से संपर्क किया है, इसलिए मैं इन परिणामों का सही मूल्यांकन नहीं कर पा रहा हूं।


3
क्या आप प्रशिक्षण सेट या सत्यापन पर भी उच्च हानि मूल्य का निरीक्षण करते हैं? प्रशिक्षण सेट और सत्यापन सेट की तुलना करते समय सटीकता या हानि में एक बड़ी गिरावट है? कुछ आंकड़े मददगार होंगे
ह्यूज

जवाबों:


20

मैंने एक ऐसे ही मुद्दे का अनुभव किया है।

मैंने अपने तंत्रिका नेटवर्क बाइनरी क्लासिफायरियर को क्रॉस एन्ट्रापी लॉस के साथ प्रशिक्षित किया है। यहाँ युग के कार्य के रूप में क्रॉस एन्ट्रापी का परिणाम है। रेड ट्रेनिंग सेट के लिए है और ब्लू टेस्ट सेट के लिए है।

युग के एक समारोह के रूप में क्रॉस एन्ट्रॉपी।

सटीकता दिखाते हुए, मुझे एपॉच 50 की तुलना में एपोक 1000 के लिए एक बेहतर सटीकता प्राप्त करने के लिए आश्चर्य था, यहां तक ​​कि परीक्षण सेट के लिए भी!

युग के कार्य के रूप में सटीकता

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

सामान्य तौर पर, पैरामीटर जहां क्रॉस एन्ट्रापी न्यूनतम है, वह पैरामीटर नहीं है जहां सटीकता अधिकतम है। हालांकि, हम क्रॉस एन्ट्रापी और सटीकता के बीच कुछ संबंधों की उम्मीद कर सकते हैं।

[निम्नलिखित में, मुझे लगता है कि आप जानते हैं कि क्रॉस एन्ट्रॉपी क्या है, हम इसे मॉडल को प्रशिक्षित करने के लिए सटीकता के बजाय इसका उपयोग क्यों करते हैं, आदि यदि नहीं, तो कृपया इसे पहले पढ़ें: क्रॉस एन्ट्रोपी स्कोर की व्याख्या कैसे करें? ]

चित्रण 1 यह दिखाने के लिए कि पैरामीटर जहां क्रॉस एन्ट्रापी न्यूनतम है, वह पैरामीटर नहीं है जहां सटीकता अधिकतम है, और क्यों समझना है।

यहाँ मेरा नमूना डेटा है। मेरे 5 अंक हैं, और उदाहरण के लिए इनपुट -1 में आउटपुट 0 है। 5 अंकों का नमूना

क्रॉस एन्ट्रापी। क्रॉस एन्ट्रॉपी को कम करने के बाद, मैं 0.6 की सटीकता प्राप्त करता हूं। 0 और 1 के बीच कटौती x = 0.52 पर की जाती है। 5 मानों के लिए, मुझे क्रमशः: 0.14, 0.30, 1.07, 0.97, 0.43 का क्रॉस एन्ट्रोपी प्राप्त होता है।

शुद्धता। एक ग्रिड पर सटीकता को अधिकतम करने के बाद, मैं 0.8 के लिए कई अलग-अलग मापदंडों को प्राप्त करता हूं। कट एक्स = -0.1 का चयन करके इसे सीधे दिखाया जा सकता है। ठीक है, आप सेटों को काटने के लिए x = 0.95 भी चुन सकते हैं।

पहले मामले में, क्रॉस एन्ट्रॉपी बड़ी है। दरअसल, चौथा बिंदु कट से बहुत दूर है, इसलिए एक बड़ा क्रॉस एन्ट्रापी है। अर्थात्, मुझे क्रमशः: 0.01, 0.31, 0.47, 5.01, 0.004 का क्रॉस एन्ट्रॉपी प्राप्त होता है।

दूसरे मामले में, क्रॉस एन्ट्रापी बहुत बड़ी है। उस मामले में, तीसरा बिंदु कट से बहुत दूर है, इसलिए एक बड़ा क्रॉस एन्ट्रापी है। मुझे क्रमशः: 5e-5, 2e-3, 4.81, 0.6, 0.6 का क्रॉस एन्ट्रोपी प्राप्त होता है।

छोटे डेटा उदाहरण

n=100=0.3=0.5 । मैंने एक बीज को बड़े प्रभाव के लिए चुना, लेकिन कई बीज एक संबंधित व्यवहार को जन्म देते हैं।

मध्यम सेट

=0.3

n=10000=1 तथा =0। अब, हम सटीकता और क्रॉस एन्ट्रॉपी के बीच एक मजबूत संबंध का निरीक्षण कर सकते हैं।

काफी बड़ा डेटा

मुझे लगता है कि अगर मॉडल में पर्याप्त क्षमता है (सही मॉडल को शामिल करने के लिए पर्याप्त है), और यदि डेटा बड़ा है (यानी नमूना आकार अनंत तक जाता है), तो सटीकता के अधिकतम होने पर क्रॉस एंट्रोपी न्यूनतम हो सकती है, कम से कम लॉजिस्टिक मॉडल के लिए । मेरे पास इसका कोई प्रमाण नहीं है, यदि किसी का संदर्भ है, तो कृपया साझा करें।

ग्रंथ सूची: क्रॉस एंट्रोपी और सटीकता को जोड़ने वाला विषय दिलचस्प और जटिल है, लेकिन मुझे इससे निपटने वाले लेख नहीं मिल सकते हैं ... सटीकता का अध्ययन करना दिलचस्प है क्योंकि अनुचित स्कोरिंग नियम होने के बावजूद, हर कोई इसका अर्थ समझ सकता है।

नोट: सबसे पहले, मैं इस वेबसाइट पर एक उत्तर ढूंढना चाहूंगा, सटीकता और क्रॉस एन्ट्रॉपी के बीच संबंधों के साथ काम करने वाले पोस्ट कई हैं, लेकिन कुछ उत्तरों के साथ, देखें: क्रॉसिंग-एंट्रिप और क्रॉस-एंट्रॉपियों का परीक्षण बहुत अलग-अलग सटीकता में होता है ; सत्यापन हानि कम हो रही है, लेकिन सत्यापन सटीकता बिगड़ती जा रही है ; स्पष्ट पार एन्ट्रापी नुकसान समारोह पर संदेह ; प्रतिशत के रूप में लॉग-नुकसान की व्याख्या ...


बहुत अच्छे चित्र। इन दृष्टांतों से प्रेरित होकर, मैं 2 संभावित कारणों से निष्कर्ष निकालता हूं। 1. मॉडल भविष्यवाणी के लिए आवश्यक सुविधाओं को निकालने के लिए बहुत सरल है। आपके चित्रण 1 में, यह कई गुना समस्या है और 100% सटीकता प्राप्त करने के लिए एक और परत की आवश्यकता है।
डायनेशेंग

1

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

निम्नलिखित उदाहरण में मैं एक बहुत ही साधारण डेटासेट का उपयोग करता हूं जिसमें परीक्षण डेटा में एक रूपरेखा है। 2 कक्षाएं "शून्य" और "एक" हैं।

यहां बताया गया है कि डेटासेट कैसा दिखता है:

यहाँ छवि विवरण दर्ज करें

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

मैं इस डेटासेट पर एक छिपे हुए तंत्रिका नेटवर्क को प्रशिक्षित करता हूं, आप परिणाम देख सकते हैं:

यहाँ छवि विवरण दर्ज करें

नुकसान बढ़ने लगता है, लेकिन फिर भी सटीकता में वृद्धि जारी है।

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

यहाँ छवि विवरण दर्ज करें

बोनस: डेटा और मॉडल के लिए कोड

import tensorflow.keras as keras
import numpy as np

np.random.seed(0)
x_train_2 = np.hstack([1/2+1/2*np.random.uniform(size=10), 1/2-1.5*np.random.uniform(size=10)])
y_train_2 = np.array([0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1])
x_test_2 = np.hstack([1/2+1/2*np.random.uniform(size=10), 1/2-1.5*np.random.uniform(size=10)])
y_test_2 = np.array([0,0,0,1,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1])

keras.backend.clear_session()
m = keras.models.Sequential([
    keras.layers.Input((1,)),
    keras.layers.Dense(3, activation="relu"),
    keras.layers.Dense(1, activation="sigmoid")
])
m.compile(
    optimizer=keras.optimizers.Adam(lr=0.05), loss="binary_crossentropy", metrics=["accuracy"])
history = m.fit(x_train_2, y_train_2, validation_data=(x_test_2, y_test_2), batch_size=20, epochs=300, verbose=0)

टी एल; डॉ

आपका नुकसान कुछ बाहरी लोगों द्वारा अपहृत किया जा सकता है, अपने सत्यापन सेट के अलग-अलग नमूनों पर अपने नुकसान फ़ंक्शन के वितरण की जांच करें। यदि माध्य के चारों ओर मानों का समूह है तो आप ओवरफिट कर रहे हैं। यदि कम बहुसंख्यक समूह के ऊपर कुछ मूल्य बहुत अधिक हैं तो आपका नुकसान आउटलेर्स से प्रभावित हो रहा है :)


-1

अहस्तात बहुत अच्छा चित्रण देता है।

इन दृष्टांतों से प्रेरित होकर, मैं 2 संभावित कारणों से निष्कर्ष निकालता हूं। 1. मॉडल भविष्यवाणी के लिए आवश्यक सुविधाओं को निकालने के लिए बहुत सरल है। आपके चित्रण 1 में, यह कई गुना समस्या है और 100% सटीकता प्राप्त करने के लिए एक और परत की आवश्यकता है। 2. डेटा में बहुत अधिक शोर लेबल है (चित्र 1 और 3 की तुलना करें)

उदाहरण 2 के लिए, यह बताता है कि हम मॉडल पर बहुत अधिक L1 / L2 नियमितीकरण क्यों नहीं जोड़ सकते हैं।

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