AliFallahi
AliFallahi
خواندن ۳ دقیقه·۵ سال پیش

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

cross-entropy loss (Softmax) تابع
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

پایتوننامپایشبکه عصبیتابع هزینهتابع سافت مکس
آنچنان رفتم كه خود می خواستم
شاید از این پست‌ها خوشتان بیاید