নিউরাল নেটওয়ার্কগুলিতে মাল্টি-ক্লাস, মাল্টি-লেবেল শ্রেণিবদ্ধকরণের জন্য কী ক্ষতির কাজ?


64

আমি একটি নিউরাল নেটওয়ার্ককে এন-ক্লাসে কয়েকটি সামগ্রীর শ্রেণিভুক্ত করার প্রশিক্ষণ দিচ্ছি। প্রতিটি বস্তু একই সাথে একাধিক শ্রেণীর (বহু-শ্রেণীর, মাল্টি-লেবেল) অন্তর্ভুক্ত থাকতে পারে।

আমি পড়েছি যে বহু-শ্রেণীর সমস্যার জন্য সাধারণত সফটম্যাক্স এবং শ্রেণীবদ্ধ ক্রস এনট্রপিকে এমসির পরিবর্তে ক্ষতির ফাংশন হিসাবে ব্যবহার করার পরামর্শ দেওয়া হয় এবং কেন আমি কম-বেশি বুঝতে পারি।

আমার মাল্টি-লেবেলের সমস্যার জন্য অবশ্যই অবশ্যই সফটম্যাক্স ব্যবহার করা বোধগম্য হবে না কারণ প্রতিটি শ্রেণীর সম্ভাবনা অন্যটির থেকে স্বতন্ত্র হওয়া উচিত। সুতরাং আমার চূড়ান্ত স্তরটি কেবল সিগময়েড ইউনিট যা প্রতিটি ক্লাসের জন্য তাদের ইনপুটগুলি সম্ভাব্যতার পরিসীমা ০.১ এ স্কোয়াশ করে।

এখন আমি নিশ্চিত নই যে এর জন্য আমার কী ক্ষয় ফাংশনটি ব্যবহার করা উচিত। শ্রেণীবদ্ধ ক্রসসেন্ট্রোপির সংজ্ঞাটি দেখে আমি বিশ্বাস করি যে এটি এই সমস্যার ক্ষেত্রে ভালভাবে প্রয়োগ হবে না কারণ এটি কেবলমাত্র 1 টি হওয়া উচিত এবং অন্যদের উপেক্ষা করে নিউরনের আউটপুটকে বিবেচনা করবে।

বাইনারি ক্রস এনট্রপি শোনায় এটি আরও ভাল ফিট হবে তবে আমি কেবল এটি কখনও একক আউটপুট নিউরনের সাথে বাইনারি শ্রেণিবিন্যাস সমস্যার জন্য উল্লিখিত দেখতে পাই।

আমি পাইথন ও কেরাসকে প্রশিক্ষণের জন্য ব্যবহার করছি যদি এটি গুরুত্বপূর্ণ হয়।


1
আমি বিশ্বাস করি যে সফটম্যাক্স হ'ল "সিগময়েড ইউনিট যা প্রতিটি শ্রেণীর জন্য তাদের ইনপুটগুলি সম্ভাব্যতার পরিসীমা ০.১ এ স্কোয়াশ করে"।
হংক ওওই

আপনি আপনার ক্ষতি ফাংশন হিসাবে সফটম্যাক্স ব্যবহার করতে পারেন এবং তারপরে আপনার ডেটা মাল্টিলেবল করতে সম্ভাব্যতা ব্যবহার করতে পারেন।
বলবোয়া

উত্তর:


30

আপনি যদি কেরাস ব্যবহার করছেন তবে আপনার ব্যয় ফাংশনে কেবলমাত্র আপনার আউটপুট স্তরে সিগময়েড এবং বাইনারি_ক্রস্রসট্রপি রাখুন।

আপনি যদি টেনসরফ্লো ব্যবহার করে থাকেন তবে সিগময়েড_ক্রস_এন্ট্রপি_বিহীন_লগিট ব্যবহার করতে পারেন । তবে আমার ক্ষেত্রে এই প্রত্যক্ষ ক্ষতির কাজটি রূপান্তরকারী ছিল না। সুতরাং আমি স্পষ্টত সিগময়েড ক্রস এন্ট্রপি ক্ষতি । আপনি এই উদাহরণে নিজের মতো করে নিতে পারেন(yln(sigmoid(logits))+(1y)ln(1sigmoid(logits)))

সিগময়েড, সফটম্যাক্সের বিপরীতে n_ around এর আশেপাশে সম্ভাব্যতা বিতরণ আউটপুট হিসাবে দেয় না, তবে স্বাধীন সম্ভাবনা।nclasses

যদি গড়পড়তা কোনও সারিতে কম লেবেল বরাদ্দ করা হয় তবে আপনি সফটম্যাক্স_ক্রস_এন্ট্রপি_উইথ_লগিটগুলি ব্যবহার করতে পারেন কারণ ক্লাসগুলি পারস্পরিক একচেটিয়া থাকাকালীন তাদের সম্ভাবনা থাকা দরকার না। যা প্রয়োজন তা হ'ল লেবেলের প্রতিটি সারি একটি বৈধ সম্ভাব্যতা বন্টন। যদি সেগুলি না হয় তবে গ্রেডিয়েন্টের গণনাটি ভুল হবে।


প্রিয় অলোক, আপনি কীভাবে ওপিকে এই ফাংশনটি ব্যবহার করতে পারবেন এবং কেন তা বোঝা যায় তা ব্যাখ্যা করতে পারেন? আপনি এই সফরে দেখবেন , লিঙ্কে কেবল উত্তরগুলি সাইটে উত্সাহিত করা হয় না।
এন্টোইন ভার্নেট


1
যখন ক্রস এনট্রপি ব্যবহার করে নিজস্ব খরচ ফাংশন লিখতে করা বাঞ্ছনীয় নয় - এটি করতে সাংখ্যিক স্থায়িত্ব বিষয় সাপেক্ষে হতে। আলোচনার জন্য github.com/tensorflow/tensorflow/issues/2462 দেখুন ।
kbrose

একটি জিনিস মাল্টিলেবল, অন্য জিনিস মাল্টিলেবল মাল্টিক্লাস। সিগময়েড আপনার আউটপুটকে 0 এবং 1 এর মধ্যে স্কোয়াশ করে তবে ওপিতে একাধিক ক্লাস থাকে তাই আউটপুটগুলিকে উদাহরণ 0 - 10 হওয়া উচিত So সুতরাং আউটপুটগুলি দেখতে হবে: [0,5,2,3,1] <--- এটি সিগময়েড নয় আছে।
মিমোরালিয়া

কস্ট ফাংশনে ব্যবহারের আগে কি আমি tf.round (লগইটস) করা উচিত বা আমি সরাসরি লুকানো স্তর থেকে tf.nn.sigmoid এ লগইটগুলি ব্যবহার করতে পারি ....?
সন্ন্যাসী

9

আপডেট (18/04/18): পুরানো উত্তরটি এখনও আমার মডেলটিতে কার্যকর প্রমাণিত হয়েছে। কৌশলটি হ'ল পার্টিশন ফাংশন এবং ডিস্ট্রিবিউশনকে আলাদাভাবে মডেল করা, এভাবে সফটম্যাক্সের শক্তিটি কাজে লাগানো।

আপনার পর্যবেক্ষণ ভেক্টর বিবেচনা ধারণ লেবেলগুলি। (1 যদি নমুনা আমি লেবেল এম অন্তর্ভুক্ত থাকে, অন্যথায় 0)। সুতরাং উদ্দেশ্যটি হ'ল ম্যাট্রিক্সকে প্রতি-নমুনা পদ্ধতিতে মডেল করা। সুতরাং মডেল মূল্যায়ন করে । দুটি সম্পত্তি অর্জনের জন্য প্রসারিত করার বিবেচনা করুন :ymyim=δimF(yi,xi)=logP(yi|xi)yim=ZP(ym)

  1. বিতরণ ফাংশন:mP(ym)=1
  2. পার্টিশন ফাংশন: লেবেলের সংখ্যা অনুমান করেZ

তারপরে এটি দুটি আলাদাভাবে মডেলিংয়ের বিষয়। বিতরণ ফাংশনটি একটি সফটম্যাক্স স্তর সহ সেরা মডেল করা হয় , এবং পার্টিশন ফাংশনটি একটি রৈখিক ইউনিট দিয়ে মডেল করা যায় ( বাস্তবে আমি এটি হিসাবে ক্লিপ করেছিলাম । পোইসন ইউনিটের মতো আরও পরিশীলিত মডেলিং সম্ভবত আরও ভাল কাজ করবে) work তারপরে আপনি বিতরণ লোকস (ডিস্ট্রিবিউশনের কেএল এবং পার্টিশনে এমএসই) প্রয়োগ করতে বা তাদের পণ্যের উপর নীচের ক্ষতি চেষ্টা করতে পারেন।max(0.01,output)

ব্যবহারিক ক্ষেত্রে, অপটিমাইজারের পছন্দটিও একটি বিশাল পার্থক্য করে। অনুষঙ্গ পদ্ধতির সাথে আমার অভিজ্ঞতা হ'ল এটি অ্যাডাডেল্টার অধীনে সবচেয়ে ভাল কাজ করে (অ্যাডাগ্রেড আমার পক্ষে কাজ করে না, আরএমএসপ্রপ এখনও চেষ্টা করে দেখেনি, এসজিডির পারফরম্যান্সগুলি প্যারামিটার সাপেক্ষে)।

সিগময়েড সম্পর্কে পার্শ্ব মন্তব্য : আমি অবশ্যই সিগময়েড + ক্রসসেন্টরোপি চেষ্টা করেছি এবং এটি কার্যকর হয়নি। মডেলটি কেবল পূর্বাভাস দিতে ঝোঁক , এবং বিতরণ কার্যের বিভিন্নতা ক্যাপচার করতে ব্যর্থ হয়েছিল। (ওরফে, এটি কোনওভাবে পার্টিশনের মডেলিংয়ের জন্য বেশ কার্যকর এবং এর পিছনে গণিতের কারণও থাকতে পারে)Z

আপডেট : (এলোমেলো ভাবে) মনে হচ্ছে ডিরিচলেট প্রক্রিয়াটি লেবেলের সংখ্যার আগে কিছু সংযুক্তির অনুমতি দেবে?

আপডেট : পরীক্ষার মাধ্যমে, পরিবর্তিত কেএল-ডাইভারজেন্স এখনও মাল্টি-লেবেল আউটপুট না দিয়ে বহু-শ্রেণীর আউটপুট দিতে ঝোঁক।


(পুরানো উত্তর)

সিগময়েড ক্রস-এন্ট্রপির সাথে আমার অভিজ্ঞতা খুব সুখকর ছিল না। এই মুহুর্তে আমি একটি পরিবর্তিত কেএল-ডাইভারজেন্সটি ব্যবহার করছি। এটি রূপ নেয়

Loss(P,Q)=x|P(x)Q(x)||logP(x)Q(x)|=x|(P(x)Q(x))logP(x)Q(x)|
যেখানে হ'ল ছদ্ম-বিতরণ এবং হ'ল পূর্বাভাসিত ছদ্ম-বিতরণ (তবে ফাংশনটি আসলে প্রতিসম হয় তাই এটি আসলে কোনও ব্যাপার নয়)P(x)Q(x)

এগুলি সাধারণ না হওয়ার জন্য সিউডো-বিতরণ বলে। সুতরাং আপনার যদি নির্দিষ্ট নমুনার জন্য 2 টি লেবেল থাকে তবে আপনার থাকতে পারে।xP(x)=2

কেরাস প্ররোচনা

def abs_KL_div(y_true, y_pred):
    y_true = K.clip(y_true, K.epsilon(), None)
    y_pred = K.clip(y_pred, K.epsilon(), None)
    return K.sum( K.abs( (y_true- y_pred) * (K.log(y_true / y_pred))), axis=-1)

আমার বিশেষ ডেটা সেটটি উপর, adamতুলনায় অনেক ভাল ছিলrmsprop
দয়া

আপনি যদি প্রশিক্ষণের জন্য এ জাতীয় ক্ষতি ব্যবহার করেন তবে পরীক্ষার পর্যায়ে এটি কীভাবে করবেন? পূর্বাভাসের জন্য সফটম্যাক্স ব্যবহার করুন, তবে মাল্টি-লেবেল শ্রেণি নির্ধারণের জন্য কীভাবে প্রান্তিক নির্বাচন করবেন?
karl_TUM

1

আমি এখনও কেরাস ব্যবহার করিনি। উদাহরণস্বরূপ ক্যাফে নেওয়া, আপনি SigmoidCrossEntropyLossLayerমাল্টি-লেবেল সমস্যার জন্য ব্যবহার করতে পারেন ।


1
কেন এটি একটি ভাল পদ্ধতির ব্যাখ্যা করার জন্য যত্নশীল?
ফায়ারব্যাগ

0

প্রকৃতপক্ষে টেনসরফ্লোতে আপনি এখনও sigmoid_cross_entropy_meanলোকসানের গণনা ফাংশনটি মাল্টি-লেবেলে ব্যবহার করতে পারেন , আমি এটির খুব নিশ্চিত


ডকুমেন্টেশনের জন্য আমাদের একটি লিঙ্ক দিন
ইভিলিন

0

আমি এখানে নবাগত কিন্তু আমি এই প্রশ্নটি দিয়ে একটি শট দেওয়ার চেষ্টা করব। আমি আপনার মতো একই জিনিসটি অনুসন্ধান করছিলাম এবং অবশেষে আমি খুব ভাল কেরাস মাল্টি-ক্লাস শ্রেণিবদ্ধকরণ টিউটোরিয়ালটি পেয়েছি @ http://machinelearningmastery.com/m Multi-class-classifications-tutorial-keras-दीप- বিজ্ঞান- লাইব্রেরি / ।

এই টিউটোরিয়ালটির লেখক শ্রেণীবদ্ধ ক্রস এনট্রপি লোকসান ফাংশনটি ব্যবহার করে এবং এমন অন্যান্য থ্রেড রয়েছে যা আপনাকে @ এখানে সমাধান খুঁজে পেতে সহায়তা করতে পারে ।


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