سلام.
برای مساله ای که میگید رویکردهای مختلفی وجود داره. قبل از این که در مورد رویکردها توضیح بدم یه سری نکته در مورد مساله شما بگم.
نکته اول در مورد نرمالیزه یا استاندارد کردن خروجی هستش: تو مساله رگرسیون شما با توجه به جنس توابع هزینه حتما خروجی رو نرمالیزه کنید به یه بازه استاندارد. مثلا خروجی رگرسیون رو بین 0 تا یک نگاشت کنید (مثلا خروجی منهای 100 تقسیم بر 900).
نکته دوم: این که خروجی رگرسیون به جای 100 مقدار 200 رو پیشبینی کنه خطای نرم یک فاصله میشه 100 . این که به جای 1000 بگه 900 هم خطای نرم یک فاصله بازم میشه 100 . یعنی شبکه با جفت خطاها یکسان برخورد میکنه. در حالی که ممکنه برای خیلی از کاربردا خطای حالت دوم (اختلاف 900 با 1000) خطای کوچکتری در اصل باشه. برای رفع این مشکل میتونید کارای مختلفی انجام بدید. مثلا میتونید خطا رو به جای اختلاف مستقیم- اول خروجی رو تقسیم بر خروجی ایده آل بکنید بعد اختلاف رو حساب کنید. در واقع اگه خروجی شبکه p باشه و خروجی ایده آل رو t در نظر بگیرید میتونید عبارت زیر رو به عنوان loss در نظر بگیرید:
norm1((p-t)/t)
همچنین راه حل دوم اینه که بعد از نگاشت خروجی به بازه صفر تا یک به جای اختلاف بین خروجی و هدف از مقدار اختلاف بین رادیکال (ریشه دوم) خروجی استفاده کنید.
حالا میرسیم به سوال اصلی شما یعنی ترکیب loss های مختلف:
برای ترکیب loss خای مختلف رویکردهای مختلفی میشه متصور شد.
رویکرد اول: اول شبکه رو کامل (به صورت end to end) برای تسک recognition آموزش بدید. بعدش یک لایه FC به همراه رگرسیون (کل این دو لایه رو میگیم regression head) به لایه ماقبل آخر اضافه کنید و فقط این head مربوط به رگرسیون رو با loss رگرسیون ترین کنید.
رویکرد دوم: اول شبکه رو برای تسک recognition به صورت کامل و end to end آموزش بدید و بعدش با loss مربوط به رگرسیون شبکه رو دوباره به صورت end to end آموزش بدید. بعدش دوباره برای recognition آموزش بدید و بعدش دوباره برای regression آموزش بدید و به این ترتیب چند استپ ادامه بدید.
رویکرد سوم: ترکیب دو تا loss به یک loss با ضریب رگولارایزر. مثلا یک loss کلی به شکل زیر تعریف کنید:
Total_Loss = Classification_loss + Lambda * Regression_Loss
تو این رابطه lambda یه ضریبه که معمولا به صورت دستی و صحیح و خطلا تنظیم میشه و میزان اهمیت خطای رگرسیون رو نسبت کلسیفیکیشن مشخص میکنه. به طوری که اگه مقدار lambda زیاد باشه یعنی ترم مربوط به رگرسیون اهمیت بیشتری داره. میتونی lambda رو برای شروع یک در نظر بگیری و بعدش مقدار بهینه اش رو با صحیح و خطا بدست بیاری.
بحث کلی:
این تیپ مساءل معمولا تو حوزه object detection تو تصاویر وجود داره که علاوه بر تشخیص نوع جسم (طبقه بندی) باید مختصات جسم (رگرسیون) هم تخیمین زده بشه. برای این که با روشها و رویکردهای مختلف آشنا بشید میتونید مقالات روشهای زیر رو بخوندید:
faster rcnn:
https://arxiv.org/abs/1506.01497
yolo:
https://arxiv.org/abs/1506.02640
yolo-v2:
https://arxiv.org/abs/1612.08242