शोर लेबल के साथ वर्गीकरण?


14

मैं वर्गीकरण के लिए एक तंत्रिका नेटवर्क को प्रशिक्षित करने की कोशिश कर रहा हूं, लेकिन मेरे पास जो लेबल हैं वे शोरगुल हैं (लगभग 30% लेबल गलत हैं)।

क्रॉस-एन्ट्रापी नुकसान वास्तव में काम करता है, लेकिन मैं सोच रहा था कि क्या इस मामले में कोई विकल्प अधिक प्रभावी है? या क्रॉस-एन्ट्रापी नुकसान इष्टतम है?

मुझे यकीन नहीं है, लेकिन मैं क्रॉस-एन्ट्रापी नुकसान को कुछ "कतरन" के बारे में सोच रहा हूं, जैसे कि एक डेटा बिंदु के लिए नुकसान कुछ ऊपरी बाध्य से अधिक नहीं होगा, क्या यह काम करेगा?

धन्यवाद!

अपडेट
लुकास के उत्तर के अनुसार, मुझे भविष्यवाणी आउटपुट और सॉफ्टमैक्स फ़ंक्शन इनपुट के लिए डेरिवेटिव के लिए निम्नलिखित मिला । इसलिए मुझे लगता है कि यह अनिवार्य रूप से डेरिवेटिव में एक स्मूथिंग शब्द जोड़ रहा है । मूल क्रॉस-एन्ट्रापी नुकसान के लिए डेरिवेटिव: z yz पीमैं=0.3/एन+0.7yमैंएल=-Σटीमैंलॉग इन करें(पीमैं)एल37N

pi=0.3/N+0.7yi
l=tilog(pi)
एल
lyi=tilog(pi)pipiyi=0.7tipi=ti37N+yi
lzi=0.7jtjpjyjzi=yijtjyj37N+yjtiyi37N+yi
lyi=tiyi
lzi=yiti
कृपया मुझे बताएं कि क्या मैं गलत हूं। धन्यवाद!

अपडेट
मैं अभी Google द्वारा एक पेपर पढ़ने के लिए हुआ है जो लुकास के उत्तर में एक ही फार्मूला लागू करता है लेकिन विभिन्न व्याख्याओं के साथ।

लेबल चिकनाई के माध्यम से धारा 7 मॉडल नियमितीकरण में

यह (क्रॉस एन्ट्रापी लॉस), हालांकि, दो समस्याएं पैदा कर सकता है। सबसे पहले, इसका परिणाम ओवर-फिटिंग हो सकता है: यदि मॉडल प्रत्येक प्रशिक्षण उदाहरण के लिए ग्राउंडट्रूट लेबल के लिए पूर्ण संभावना असाइन करना सीखता है, तो इसे सामान्यीकृत करने की गारंटी नहीं है। दूसरा, यह सबसे बड़े लॉजिट और अन्य सभी के बीच अंतर को बड़ा बनने के लिए प्रोत्साहित करता है, और यह, सीमाबद्ध ढाल , मॉडल की अनुकूलन क्षमता को कम करता है। सहज रूप से, ऐसा इसलिए होता है क्योंकि मॉडल अपनी भविष्यवाणियों के बारे में बहुत आश्वस्त हो जाता है।l/zk

लेकिन भविष्यवाणियों में स्मूथिंग शब्द जोड़ने के बजाय, उन्होंने इसे जमीनी सच्चाई से जोड़ दिया, जो मददगार साबित हुआ।

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

K = 1000 कक्षाओं के साथ हमारे ImageNet प्रयोगों में, हमने यू (k) = 1/1000 और = 0.1 का उपयोग किया। ILSVRC 2012 के लिए, हमने शीर्ष -1 त्रुटि और शीर्ष -5 त्रुटि दोनों के लिए लगभग 0.2% निरपेक्ष सुधार पाया है।ϵ


3
इस विषय पर कई काम हैं - github.com/subeeshvasu/Awesome-Learning-with-Label-Noise
guest_anonym

जवाबों:


10

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

Let तंत्रिका नेटवर्क और द्वारा उत्पादित वर्ग संभावनाओं का एक वेक्टर हो सकता है लेबल लिए क्रॉस-एन्ट्रापी नुकसान हो । स्पष्ट रूप से इस धारणा को ध्यान में रखना कि 30% लेबल शोर हैं (समान रूप से यादृच्छिक माना जाता है), हम उत्पादन करने के लिए अपने मॉडल को बदल सकते हैं( y टी , पी टी ) y टीpt(yt,pt)yt

p~t=0.3/N+0.7pt

इसके बजाय और अनुकूलित करें

t(yt,0.3/N+0.7pt),

जहाँ वर्गों की संख्या है। यह वास्तव में आपके अंतर्ज्ञान के अनुसार कुछ व्यवहार करेगा, नुकसान को सीमित करने के लिए सीमित करेगा।N


p~t0.3/N+0.7ptp~tProb(y~=+1|t)=0.7Prob(y=+1|t)+0.3Prob(y=1|t)Prob(y~=1|t)=0.7Prob(y=1|t)+0.3Prob(y=+1|t)1/N

0

मैं मानता हूं कि यह एक सांख्यिकी फोरम है और उम्मीद गणितीय व्युत्पत्तियों पर ध्यान केंद्रित करने की है, लेकिन अगर यह मददगार हो सकती है और आप पायथन का उपयोग कर रहे हैं, तो शोर लेबल के साथ वर्गीकरण के लिए एक पैकेज है cleanlab: https://github.com/ cgnorthcutt / cleanlab /

cleanlabअजगर पैकेज, pip install cleanlabजिसके लिए मैं एक लेखक हूँ, पाता डेटासेट और समर्थन करता है वर्गीकरण में त्रुटियों लेबल / शोर लेबल के साथ सीखने। यह scikit-learn, PyTorch, Tensorflow, FastText, आदि के साथ काम करता है।

शोर लेबल के साथ सीखने के लिए।

# Code taken from https://github.com/cgnorthcutt/cleanlab
from cleanlab.classification import LearningWithNoisyLabels
from sklearn.linear_model import LogisticRegression

# Learning with noisy labels in 3 lines of code.

# Wrap around any classifier. Works with sklearn/pyTorch/Tensorflow/FastText/etc.
lnl = LearningWithNoisyLabels(clf=LogisticRegression())
lnl.fit(X = X_train_data, s = train_noisy_labels)
# Estimate the predictions you would have gotten by training with *no* label errors.
predicted_test_labels = lnl.predict(X_test)

अपने डेटासेट में लेबल त्रुटियों को खोजने के लिए।

from cleanlab.latent_estimation import estimate_cv_predicted_probabilities

# Find the indices of label errors in 2 lines of code.

probabilities = estimate_cv_predicted_probabilities(
    X_train_data, 
    train_noisy_labels, 
    clf=LogisticRegression(),
)
label_error_indices = get_noise_indices(
    s = train_noisy_labels, 
    psx = probabilities, 
)

FastText (NLP) और PyTorch (MNIST AlexNet) के साथ कुछ उदाहरण ।

प्रलेखन: https://l7.curtisnorthcutt.com/cleanlab-python-package

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