تابع هزینه (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("Unnormalized Probabilities ",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("Normalized probabilities ", 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("negative log losss ",result)
Negative Log Loss [7.42091095 2.82091095 4.79091095 0.07091095]
یادآوری
همانطور که در آغاز متن نیز گفته شد: تابع هزینه (loss function, cost function, objective) نشاندهنده میزان نارضایتی ما از نتیجه به دست آمده است. بدین ترتیب هرچه مقدار عددی این تابع کمتر باشد به این معنی است که نارضایتی ما کمتر بوده پس سیستم عملکرد بهتری داشته است.
نکات تکمیلی:
«منظور از Vectorization (بردار سازی) در شبکه های عصبی چیست؟»