Deprecated: Function get_magic_quotes_gpc() is deprecated in /home/ustmbir/domains/deeplearning.ir/public_html/qa/qa-include/qa-base.php on line 1177
تخمین زدن یک سری اعداد گسسته پشت سر هم با استفاده از شبکه عصبی کانولوشنی یک مساله کلاس بندی است یا رگرسیون؟ - پرسش و پاسخ یادگیری عمیق
به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

با سلام
من یک سری تصاویر دارم که برچسب هر کدام یک عدد بین 0 تا 216 میتونه باشه. البته نه لزوما همه این اعداد استفاده شده باشند. مثلا در تصاویر آموزشی 0و 1و 2و 3 وجود ندارد و 4 موجود است و همینطور ممکن است برای 210 تا 215 هیچ تصویر معادلی وجود نداشته باشد.
با توجه به اینکه قائل شدن 217 کلاس برای حل مساله و با نگاه classification انرا حل کردن این مورد را به دنبال خواهد داشت که به طور مثال ما در train تصاویری برای کلاس 4 داریم اما برای کلاس 1 هیچ تصویری نداریم اما در تست ممکن است که یک تصویر برای کلاس 1 داشته باشیم و از طرفی این 217 کلاس یک مساله رشد را تعریف میکنند که در صورتی که امکانش بود این رشد با دقت بیشتر و به صورت پیوسته اتفاق میفته که ما discrete اش کردیم انگار، یعنی مثل cat و dog به عنوان دو کلاس مجزا نیستند بلکه رفته رفته در اثر رشد کلاس 1 به عدد 2 و در واقع به کلاس 2 با نگاه کلاس بندی میرسد، می توان آن را با رویکرد regression حل کرد؟
در صورتی که بخواهیم با رویکرد رگرسیون حلش کنیم باید بجای softmax در شبکه عصبی کانولوشنی از L2-squared norm استفاده کنیم؟
ممنونم

توسط (132 امتیاز)
سلام
توضیح واضح نیست. من یکسری برداشت کردم و بر اساس اونها مطالبی رو خدمت شما عرض میکنم
اولا برای کلاسها شما هر کلاسی دارید رو لحاظ میکنید مثلا عرض میکنم شما 100 شی(کلاس) دارید اما در آموزش چیزی که شما با اون مواجه هستید 20 کلاس هست مثلا شی 10 شی 11 12 13 بعد شی 30 32 40 و بعد به همین صورت تا 20 شی(کلاس) بشن. در زمان ترینینگ شما میتونید خیلی راحت 1 تا 20 رو استفاده کنید یعنی کلاس 0 اشاره به شی 10 کلاس 1 اشاره به شی 11 و الی اخر. و بعد از ترینینگ خودتون یک نگاشت انجام بدید (چون میدونید کلاس 0 شما به کدوم شی اشاره داشته و درنتیجه مشکلی ندارید) به اون 100 کلاس اگر نیازتون این باشه (مثلا بگید پیش بینی 1 مربوط به بیماری ایکس هست پیش بینی 19 ام مربوط به بیماری مثلا انفولانزا) .
در مورد مساله رشد که مطرح کردید این رو باید فرموله کنید. این رشد یه مفهوم سطح بالاست که شما با توجه به اون دارید خودتون تشخیص میدید اینو باید یکجور به شبکه بفهمونید. مثلا عرض میکنم . شما میگید رفته رفته یک کلاس از 1 میشه کلاس 2 . خب این مثل این میمونه که بگیم ما یک کلاس بچه داریم رفته رفته بچه بزرگ میشه اون میشه نوجوان بعد میشه بزرگسال. خب این خودش سه تا کلاس مجزاس. میشه اینطور بهش نگاه کرد که شما اول یک تشخیص کلی یا عمومی میدید بعد میتونید دقیق بشید ببینید مثلا بطور دقیق این جزو کدوم گروه بحساب میاد. مثلا همون نوجوان بحساب بیاریم یا جوان یا میانسال . اما این لازمه اش مشخص کردن از سمت شماست . یعنی یک حدی قرار بدید که آستانه تغییر مشخص باشه.کی بگیم کلاس 1 هست کی کلاس 2 کی کلاس 3 و شبکه با توجه به اون کارش رو شروع کنه.  
با توجه به این مساله ، کماکان شما با یک مساله دسته بندی مواجه هستید اما دسته بندی شما میتونه جزئی تر بشه . یعنی ابتدا یک دسته کلی هست و بعد زیر دسته های جزئی تر از اون دسته کلی باید تشخیص داده بشن.
نمیدونم منظور شما رو درست متوجه شدم یا نه .اگر نه بحث شما باید بیشتر باز بشه چون تنها خودتون اشراف کامل دارید و توضیح بیشتری باید داده بشه تا ما هم به درکی از کار برسیم تا بشه کمک و یا راهنمایی ولو حداقلی بکنیم .
خیلی ممنون
آقای مهندس پس من منظورم رو روشن تر بیان میکنم .
مساله تشخیص سن هست برای 0 تا 18 سالگی است. یا در واقع برای 0 تا 216 ماهگی. برچسب هر تصویر یکی از اعداد بین 0 تا 216 می باشد. اما با توجه به اینکه ما به علت کمبود دیتا خیلی از چند ماهگی ها را در دیتابیس نداریم یا انقد کم داریم که ممکن است در تست مثلا 152 ماهگی باشه ولی در ترین نباشه و یا کلا 12 و 13و 14 ماهگی در کل دیتابیس نباشه.  با توجه به روند رشد و مساله ای که گفتم من فک میکنم بهتر است به این مساله به چشم یک مساله رگرسیون نگاه کرد تا اینطوری در مواردی که در تست 152 ماهگی ظاهر میشه و ما در ترین چون چنین کلاسی رو نداشته ایم به مشکل بر نخورد و مجبور بشه محتمل ترین حالت یعنی نزدیکترین کلاس را که به عنوان مثال 156 ماهگی است تخمین بزنه با مساله رگرسیون بتونه یک عددی نزدیک به 152 تخمین بزنه نه با انقدر تفاوت که 156 ماهگی رو براش تخمین بزنه. اما نمیدونم درست فکر میکنم یا نه. اگه تونستم منظورمو برسونم لطف میکنید راهنمایی بفرمایید.
ممنون
سلام. اگه سن هست بله درسته این یه مساله رگراسیون هست.

1 پاسخ

+2 امتیاز

سلام
با توجه به اینکه ما دیتاهای شما رو ندیدیم نظر دادن قطعی خیلی سخته (البته می دیدیم هم تا آدم آزمایش نکنه سخته D:)
اما با توجه به تجربه های مشابه به نظرم نزدیک شدن به حل این مساله فقط از دید classification یا regression شاید نتیجه دلخواه رو نده، به خصوص که مساله ای که مطرح کردید جز مساله های سخت حساب میشه ، به خصوص الان که نیازه در حد ماه سن تشخیص داده بشه

حالا ما میگیم نه classification به یه softmax نه regression، پس کدومش؟ جفتش با هم یا طبقه بندی توی یه ساختار سلسله مراتبی
یعنی اینطوری که شما توی پایپ لاین سیستمتون اول بازه سنی رو تشخیص می دید. برای مثال هر 1 سال رو داده هاش رو به عنوان یک کلاس در نظر بگیریم که فقط مثاله و بسته به دیتاهاتون خودتون بهتر می تونید تصمیم بگیرید
بعد از اینکه بازه اول مشخص شد، می تونیم برای مشخص کردن ماه، یه رگرسیون استفاده کنیم، یا اینکه بگیم یه مرحله دیگه هم تشخیص رو ادامه میدیم. برای مثال اول مشخص کردیم چند سال، بعد مشخص کنیم توی کدوم 3 ماهه سال(یه مساله طبقه بندی 4 کلاسه داریم ) و الی آخر
توی این حالت ممکنه حتی دیگه نیازی به رگرسیون نباشه و با همون classification سلسله مراتبی نتیجه دلخواه رو بگیرید
برای این مدل کارهای، مقالات مرتبط با hierarchical softmax رو بخونید هم می تونه خیلی کمکتون کنه
کد زدنش هم به نسبت یه مدل معمولی کار چندان زیادتری نداره، و اینکه مشکل اسپارس بودن کلاسهای مختلف هم به دلیل اشتراکات بین کلاسها می تونه نسبت به یه softmax خیلی بزرگ، کاهش پیدا کنه
چون این مشکل به خصوص توی nlp و بحث vocab های خیلی بزرگ، یه مشکل خیلی شایع هستش و زیاد هم روش کار شده و هنوزم خیلی مورد توجه هست که می تونید ازشون استفاده کنید

توسط (1.6k امتیاز)
سلام
خیلی ممنون از توضیحات مفیدتون
به طبقه بندی با ساختار سلسله مراتبی(شروع با رده های سنی و سپس اختلاف یک سال و در نهایت اختلاف در حد ماه یا با شروع از یک سال و سپس با اختلاف یک ماه) که فکر میکنم، به مشکل نبود دیتا با برچسب های مربوط به خیلی از چند ماهگی ها برمیخورم به همین خاطر به حل شدن در قالب مساله رگرسیون فکر کردم. چون ممکن است همان طور که عرض کردم در بین تصاویر train تصویری با برچسب 14و15و16و17 ماهگی موجود نباشد اما در تصاویر تست تصویر با برچسب 16 ماهگی وجود دارد.
ایده ترکیب کلاس بندی و رگرشن ایده جالبی بود. ممنونم ازتون. یعنی بازم سلسه مراتبی، اول شبکه رو برای یه coarse classification  با اختلاف مثلاً یک سال (با برچسب گذاری های جدید) آموزش بدم و بعد شبکه رو با loss function دیگه ای برای هدف رگرسیون مجددا آموزش بدم و برای مقدار دهی اولیه شبکه از وزن های آموزش دیده قبلی استفاده کنم و یا حتی وزن های لایه اول رو فریز کنم یا نه منظورتون از ترکیب رگرسیون و کلاس بندی چیز دیگه ای بود؟ اگر منظورتون همین رویکرد هست میتونید بفرمایید از همون اول شبکه رو برای رگرسیون این داده ها آموزش دادن چه معایبی نسبت به این حالت دو مرحله ای داره؟
متشکرم
بله دقیقا همینطوره، این ایده کلی بود و بر اساس شرایط مساله خودتون باید تصمیم نهایی رو بگیرید
برای قسمت آموزش هم حتما لازم نیست که شبکه رو چندبار آموزش بدید. می تونید ساختار پیش بینی که در حقیقت شبیه یه درخته رو بسازید و شبکه رو یک بار آموزش بدید به این صورت که سیگنال خطا فقط از پایین درخت به شاخه های بالایی خودش انتقال داده میشه
همون قضیه softmax سلسه مراتبی رو در نظر بگیرید متوجه کارکرد دقیق این موضوع می شید
اما ایده آموزش سلسه مراتبی شبکه هم می تونه اجرا بشه و شاید نتیجه بهتری هم بده، اما واقعیتش این که کدوم از نوع های آموزش بهتر جواب می ده رو باید تست کنید و الان نمیشه قطعی تصمیم گرفت

در مورد معایب استفاده از رگرسیون از همون اول، بیشتر بحث سختی مساله اس. یعنی شما اینطوری با ساختار سلسله مراتبی دارید یه نوعی از prior رو وارد ساختار شبکه می کنید که معمولا به حل بهتر مساله کمک می کنه. این نوع از ایده توی ساختارهای جدیدی مثل yolo9000 هم استفاده شده. توی nlp هم چیزه جدیدی نیست
اما آیا مطمئینم که حتما نسبت به یه رگرسیون تنها بهتر جواب میده؟ اصلا این طور نیست و متاسفانه بازم به این میرسیم که تست می خواد D:
این بحثها بر اساس شهود و تجربه شخصی و نتیجه کارهای مقالاتیه که در موردش حرف زدیم و ممکنه به نتیجه رسیدن کارتون رو سریعتر کنه اما همه هم بگن این کار درسته، حداقل فعلا نمیشه گفت که پس 100% راه درست همینه
سلام
متشکرم از توضیحات بسیار خوبتون. خیلی لطف کردید که در مورد نحوه آموزش شبکه سلسه مراتبی با استفاده از چندین softmax توضیح دادید. خیلی ممنون میشم اگر براتون مقدور باشه  عناوین مقالات مهمی که در زمینه hierarchical softmax کار شده رو بفرمایید تا مستقیم برم سراغ اون مقلاتی که بیس این ایده رو توش خوب و روشن توضیح دادن.
مجدداً سپاسگزارم از وقتی که گذاشتید
...