গোলমাল লেবেল সহ শ্রেণিবিন্যাস?


14

আমি শ্রেণিবিন্যাসের জন্য একটি নিউরাল নেটওয়ার্ক প্রশিক্ষণের চেষ্টা করছি, তবে আমার কাছে থাকা লেবেলগুলি বরং শোরগোল রয়েছে (প্রায় 30% লেবেল ভুল)।

ক্রস-এনট্রপি ক্ষতি প্রকৃতপক্ষে কাজ করে, তবে আমি ভাবছিলাম যে এই ক্ষেত্রে আরও কার্যকর কোনও বিকল্প আছে কি? বা ক্রস-এনট্রপি ক্ষতি কি সর্বোত্তম?

আমি নিশ্চিত নই তবে আমি ক্রস-এনট্রপি ক্ষতি কিছুটা "ক্লিপিং" করার কথা ভাবছি, যেমন একটি ডেটা পয়েন্টের ক্ষতি হ'ল কিছু উপরের গণ্ডির চেয়ে বড় হবে না, তা কি কাজ করবে?

ধন্যবাদ!

আপডেট
লুকাসের উত্তর অনুসারে, সফটম্যাক্স ফাংশন এর পূর্বাভাস আউটপুট এবং ইনপুট জন্য ডেরিভেটিভসের জন্য নিম্নলিখিতটি পেয়েছি । সুতরাং আমার ধারণা মূলত এটি ডেরিভেটিভগুলিতে একটি শব্দ the মূল ক্রস-এনট্রপি ক্ষতির জন্য ডেরিভেটিভস: yz37N

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
দয়া করে আমাকে ভুল করুন কিনা আমাকে জানান। ধন্যবাদ!

আপডেট
আমি সবেমাত্র গুগলের একটি কাগজ পড়তে পেরেছিলাম যা লুকাশের উত্তরের মতো একই সূত্র প্রয়োগ করে তবে বিভিন্ন ব্যাখ্যা দিয়ে।

লেবেল স্মুথিংয়ের মাধ্যমে 7 নং বিভাগে মডেলকে নিয়মিতকরণ

এটি (ক্রস এনট্রপি ক্ষতি) তবে দুটি সমস্যার কারণ হতে পারে। প্রথমত, এটি অত্যধিক-ফিটনেস হতে পারে: যদি মডেল প্রতিটি প্রশিক্ষণের উদাহরণের জন্য গ্রাউন্ডথ্রুথ লেবেলে সম্পূর্ণ সম্ভাবনা নির্ধারণ করতে শেখে, তবে এটি সাধারণকরণের গ্যারান্টিযুক্ত নয়। দ্বিতীয়ত, এটি বৃহত্তম লগজিট এবং অন্য সকলের মধ্যে পার্থক্যকে বড় হতে উত্সাহ দেয় এবং এটি, সীমানা গ্রেডিয়েন্ট সাথে মিলিত হয়ে মডেলটিকে অভিযোজিত করার ক্ষমতা হ্রাস করে। স্বজ্ঞাতভাবে, এটি ঘটে কারণ মডেলটি তার পূর্বাভাস সম্পর্কে খুব আত্মবিশ্বাসী হয়ে ওঠে।l/zk

তবে ভবিষ্যদ্বাণীগুলিতে স্মুথ শব্দটি যুক্ত করার পরিবর্তে তারা এটিকে স্থল সত্যে যুক্ত করেছিলেন , যা সহায়ক হিসাবে প্রমাণিত হয়েছিল।

এখানে চিত্র বর্ণনা লিখুন

কে = 1000 ক্লাস নিয়ে আমাদের ইমেজনেট পরীক্ষায় আমরা ইউ (কে) = 1/1000 এবং = 0.1 ব্যবহার করেছি। আইএলএসভিআরসি 2012 এর জন্য, আমরা শীর্ষ -1 ত্রুটি এবং শীর্ষ -5 ত্রুটি উভয়ের জন্য প্রায় 0.2% পরম্পরায় একটি ধারাবাহিক উন্নতি পেয়েছি।ϵ


উত্তর:


10

এখানে সঠিক জিনিসটি হ'ল মডেলটি পরিবর্তন করা, ক্ষতি নয়। আপনার লক্ষ্যটি যথাসম্ভব যথাক্রমে যতগুলি ডেটা পয়েন্টকে শ্রেণিবদ্ধ করা হবে (যা ক্ষতিটি নির্ধারণ করে), তবে ডেটা সম্পর্কে আপনার অনুমানগুলি বদলে গেছে (যা একটি পরিসংখ্যানের মডেলটিতে এনকোডযুক্ত রয়েছে, এই ক্ষেত্রে নিউরাল নেটওয়ার্ক)।

নিউরাল নেটওয়ার্ক দ্বারা উত্পাদিত শ্রেণীর সম্ভাবনার একটি ভেক্টর Let যাক এবং ক্রস-এনট্রপি ক্ষতি হয়ে । স্পষ্টরূপে এই ধারণাটি গ্রহণ করার জন্য যে 30% লেবেল গোলমাল করছে (অভিন্ন র্যান্ডম হিসাবে ধরে নেওয়া হয়), আমরা উত্পাদন করতে আমাদের মডেলটি পরিবর্তন করতে পারি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)1/এনProb(y~=1|t)=0.7Prob(y=1|t)+0.3Prob(y=+1|t)1/N
দলা

0

আমি স্বীকার করেছি যে এটি একটি পরিসংখ্যান ফোরাম এবং প্রত্যাশা গাণিতিক ডেরাইভেশনগুলিতে ফোকাস, তবে যদি এটি সহায়ক হতে পারে এবং আপনি পাইথন ব্যবহার করছেন তবে শব্দের সাথে লেবেলযুক্ত শ্রেণিবিন্যাসের জন্য একটি প্যাকেজ রয়েছে cleanlab: https://github.com/ cgnorthcutt / ক্লিনল্যাব /

cleanlabপাইথন প্যাকেজ, pip install cleanlab, যার জন্য আমি একজন লেখক নই, খুঁজে বের করে ডেটাসেট এবং সমর্থন শ্রেণীবিন্যাস ত্রুটি লেবেল / সশব্দ লেবেল সহ শেখার। এটি সাইকিট-লার্ন, পাইটর্চ, টেনসরফ্লো, ফাস্টটেক্সট ইত্যাদির সাথে কাজ করে

গোলমাল লেবেল সহ শেখার জন্য।

# 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.