تابع هزینه دسته بند سافت مکس (کلسیفیکشن چند کلاسی)

cross-entropy loss (Softmax) تابع تابع هزینه (loss function, cost function, objective) نشان‌دهنده میزان نارضایتی ما از نتیجه به دست آمده است. بدین ترتیب هرچه مقدار عددی این تابع کمتر باشد به این معنی است که نارضایتی ما کمتر بوده پس سیستم عملکرد بهتری داشته است.هدف ما در این برنامه، ارزیابی عملکرد سیستم پیاده‌سازی شده Softmax classifier برای تشخیص تصویر موردنظر با توجه به 4 کلاس قایق، هواپیما، خودرو و گربه است.تابع کلسیفایر سافت مکسستون "Scoring Function" نشان دهنده امتیازاتی است که سیستم با توجه به هر کلاس، تصویر موردنظر را ارزیابی کرده است. برای مثال احتمال اینکه تصویر مورد نظر به کلاس «قایق» تعلق داشته باشد 3.44- و به همین ترتیب امتیاز کلاس هواپیما 1.16 محاسبه شده است. این دو امتیاز به این معنی هستند که طبق نظر سیستم، احتمال اینکه تصویر موردنظر یک هواپیما باشد بیشتر از آن است که یک قایق باشد.فرمول کلی دسته بند سافت مکس (رگرسیون لجستیک چند کلاسی) به صورت زیر است که در ادامه مرحله به مرحله آن را پیاده‌سازی می‌کنیم.فرمو دسته بند سافت مکسستون دوم جدول “Unnormalized Probabilities” است که مقادیر آن نشان دهنده «احتمال‌ها به صورت غیرنرمال» هستند. برای محاسبه مقادیر این ستون کافی است صورت کسر ارایه شده در فرمول بالا را در نظر بگیریم.فرمول احتمال به صورت غیرنرمال در سافت مکسدر این فرمول e به معنی عدد اویلر (Euler's number) است که به صورت 2.71828 در نظر گرفته می‌شود. با استفاده از کتابخانه numpy این عدد به صورت خودکار فراخوانی می‌شود.به صورت خلاصه مقادیر ستون “Unnormalized Probabilities”حاصل عدد اویلر به توان اعداد ستون "Scoring Function" هستند.import numpy as np x = np.array([-3.44, 1.16, -0.81, 3.91]) numerator = np.exp(x) print(&quotUnnormalized Probabilities &quot,numerator)نتیجه اجرای این کد به صورت زیر است، که در ادامه مقادیر آن در ستون “Unnormalized Probabilities”نوشته شده‌اند.Unnormalized Probabilities [ 0.03206469 3.18993328 0.44485807 49.89895197]تابع سافت مکسدر ادامه برای محاسبه "Normalized Probabilities" ابتدا مقادیر ستون “Unnormalized Probabilities” را با یکدیگر جمع کرده و سپس هر یک از مقادیر ستون “Unnormalized Probabilities” را بر حاصل‌جمع به دست آمده تقسیم می‌کنیم.فرمول محاسبه احتمال نرمال سازی شده در تابع هزینه سافت مکسdenumerator_sum = np.sum(numerator) print(&quotNormalized probabilities &quot, numerator/denumerator_sum)نتیجه اجرای این کد به صورت زیر است، که در ادامه مقادیر آن در ستون “Normalized Probabilities” نوشته شده‌اند.Normalized probabilities [0.0005986 0.05955167 0.00830489 0.93154484]تابع هزینه در شبکه عصبیهمانطور که مشاهده می‌شود سیستم پیاده‌سازی شده توانسته است با 93.15% تصویر موردنظر را متعلق به کلاس «گربه» شناسایی کند.در پایان می‌توانیم با محاسبه منفی لگاریتم “Normalized Probabilities”، میزان Loss نهایی را محاسبه کنیم:تابع به دست آوردن هزینه در شبکه های عصبیresult = (np.log(numerator/denumerator_sum)) * (-1) print(&quotnegative log losss &quot,result)Negative Log Loss [7.42091095 2.82091095 4.79091095 0.07091095]یادآوریهمانطور که در آغاز متن نیز گفته شد: تابع هزینه (loss function, cost function, objective) نشان‌دهنده میزان نارضایتی ما از نتیجه به دست آمده است. بدین ترتیب هرچه مقدار عددی این تابع کمتر باشد به این معنی است که نارضایتی ما کمتر بوده پس سیستم عملکرد بهتری داشته است.نکات تکمیلی:اعداد ستون "Scoring Function" به صورت تصادفی ایجاد شده‌اند.دلیل استفاده از کتابخانه “numpy” قابلیت های بردارسازی (Vectorization) است که سرعت اجرای کد را در مقایسه با استفاده از حلقه for به صورت قابل ملاحظه‌ای افزایش می‌دهد. در این راستا مطالعه مطلب زیر را پیشنهاد می‌کنم: «منظور از Vectorization (بردار سازی) در شبکه های عصبی چیست؟»http://vrgl.ir/7sJDeبرای نوشتن این مطلب از لینک زیر به عنوان رفرنس علمی استفاده شده است:http://cs231n.github.io/linear-classify