تابع ضرر (Loss Function) در شبکه عصبی چیست و چه کاربردی دارد؟

مدرس: مسعود کاویانی

تا اینجا در دوره‌ی آشنایی با شبکه‌های عصبی، به این نتیجه رسیدیم که شبکه‌ی عصبی به دنبال یک سری وزن‌ها (W) و انحراف (b) هست تا بتواند خطوطی مرزی بین انواع مختلف (مثلا پراید و اتوبوس) رسم کرده و به وسیله‌ی آن‌ها، تفاوت‌ها را یادگرفته و درک کند. این کار با استفاده از قانونِ ضرب و توابعِ فعال‌سازی انجام می‌شد. در این درس آرام آرامْ به سمت آموزش در شبکه‌ی عصبی می‌رویم. این نکته را بدانیم که پایه‌ی آموزش در شبکه‌های عصبی بر اساسِ تابع ضرر است.

تابعِ ضرر (loss function) یا تابعِ هزینه (cost function) در واقع میزان خطا در هر بار اجرای شبکه‌ی عصبی را برای داده‌های آموزشی نمایش می‌دهد. بیایید یک بار دیگر به شکلِ زیر نگاه کنیم. این شکل در دروس گذشته بسیار مورد استفاده بود:

 

اجازه بدهید این بار به نحوی دیگر به این جدول نگاه کنیم. همان‌طور که در درسِ طبقه‌بندی با یکدیگر مرور کردیم، این جدولِ بالا در واقع داده‌های آموزشیِ ما است. داده‌هایی که می‌خواهیم به طبقه‌بند (در اینجا شبکه‌ی عصبی) بدهیم و از شبکه‌ی عصبی انتظار داریم که از روی این داده‌ها، تفاوتِ پراید و اتوبوس را یاد بگیرد. همان‌طور که در دروسِ قبلیِ دوره‌ی شبکه‌ی عصبی گفتیم، یادگیری در شبکه‌ی عصبی به وسیله‌ی وزن (W) و انحراف (b) صورت می‌گیرد. در واقع وظیفه‌ی شبکه‌ی عصبی، یادگیری مقدارِ درستِ وزن‌ها و انحرافات در شبکه است به گونه‌ای که بتواند مثلاً پراید و اتوبوس را از یکدیگر تفکیک کند.

در شبکه‌های عصبی این کار با تکرار (iterate) انجام می‌شود. به گونه‌ای که چندین بار داده‌هایی مانندِ جدول بالا، به الگوریتم داده شده و هر بار الگوریتم باید مقدار وزن و بایاس خود را آپدیت کند. در اولین بار اجرای الگوریتم شبکه عصبی، این الگوریتم یک سری مقدار وزن و انحراف اولیه را به بُردارهای وزن‌ها (W) و انحراف (b) می‌دهد تا این بُردارها یک سری مقدار اولیه داشته باشند. سپس در هر بار اجرا، شبکه‌ی عصبی خطای خود را محاسبه کرده و توسطِ آن مقادیرِ خطا، وزن‌ها و انحراف را به هنگام (update) می‌کند. این محاسبه‌ی خطا باید توسطِ تابع هزینه یا تابع ضرر حساب شود. در واقع شبکه با مشاهده مقدارِ ضرری که در هر بار اجرا داشته است، یاد می‌گیرد که چه مقدار بایستی وزن‌ها و انحراف را به هنگام (update) کند.

اجازه بدهید در قالب همان مثال بالا، تابع ضرر را توضیح دهیم. فرض کنید در ابتدا یک سری اعداد اولیه به صورت تصادفی به وزن‌ها و انحراف‌ها داده شده است. این وزن‌ها و انحراف باعث می‌شود که شبکه‌ی عصبی یک تصمیم در مورد هر کدام از ماشین‌های جدول بالا بگیرد. تصویر زیر را نگاه کنید (فرض کنید در دورِ اول از اجرای شبکه‌ی عصبی، شبکه با توجه به وزن‌ها و انحراف به خروجی زیر می‌رسد):

همان طور که میبینید، در دور اول، شبکه توانسته است ۴ تا از ۷ ماشین را درست پیش‌بینی کند (که می‌توان گفت بر اساس شانس بوده است). حال شبکه می‌تواند بفهد که مقدار خطایش ۳ از ۷ است. یعنی ۳ تا از ۷ ماشین را غلط ارزیابی کرده است. اگر از دروسِ قبل یادتان باشد، گفتیم اگر خروجیِ شبکه ۰ بود پراید و اگر خروجی شبکه ۱ بود یعنی منظور شبکه‌ی عصبی اتوبوس است. حال با یک فرمولِ ساده می‌توانیم خطا را حساب کنیم. فرمول مانند شکل زیر است:

به تصویرِ بالا با دقت نگاه کنید. در بسیاری از مقالات و دروس شبکه‌ی عصبی، مقدارِ واقعی را برابر y، و مقداری که شبکه تشخیص داده است را ´y می نامند. اگر این دو مقدار را برای هر کدام از نمونه‌ها از هم دیگر کم کنیم و قدر مطلق بگیریم، خروجی برای هر کدام از نمونه‌ها مقدارِ اختلاف بین تشخیص شبکه و مقدار واقعی را بیان می‌کند. حال این مقادیر اختلاف را با یکدیگر جمع می‌کنیم تا مقدار کلیِ اختلاف به دست بیاید. مثلا در اینجا عدد ۳ به دست آمده است. هر چقدر این عدد نهایی بالاتر باشد به این معنی است که شبکه‌ی عصبی خطای بیشتری در آن دور (iteration) دارد. یعنی باید وزن‌ها و انحراف را به مقداری بیشتری به هنگام‌سازی (update) کند. با هر بار به هنگام‌سازیِ وزن‌ها و انحراف، یک دور تمام شده و دورِ بعد شروع می‌شود. با تغییراتِ مختلفی که شبکه‌ی عصبی در وزن‌ها و انحراف می‌دهد در واقع به دنبال پیدا کردنِ مقدارِ بهینه برای وزن‌ها و انحراف است تا بتواند مرزهای مختلف را بین طبقه‌های متفاوت مثل پراید یا اتوبوس پیدا کند. در واقع کارِ اصلیِ شبکه‌ی عصبی کم کردنِ مقدارِ تابعِ ضرر تا حد ممکن است. طبیعتاً ایده آل برای شبکه‌ی عصبی مقدار ۰ است (یعنی بدون خطا) ولی در دروسِ بعدی می‌بینیم که این کار (به صفر رساندن مقدارِ تابعِ ضرر) در دنیای واقعی، غیر قابلِ اجرا است.

منابع این بحث و اطلاعات بیشتر

» وب سایت NeuralNetworkAndDeepLearningK

در صورت تمایل به یادگیری بیشتر، منابع بالا در نظر گرفته شده است. می توانید با خواندن این منابع، به یادگیری خود در این زمینه عمق ببخشید

9 دیدگاه دربارهٔ «تابع ضرر (Loss Function) در شبکه عصبی چیست و چه کاربردی دارد؟»

  1. سلام
    مطالب رو خیلی خوب و کاربردی و ساده میگید. به قول یه دانشمندی کسی که نتونه یه مطلب رو ساده بیان کنه اصلا خودش اونو نفهمیده.
    ممنون میشم در مورد ضریب همبستگی داده های آموزشی و داده های تست مطلب بزارید.

  2. و اینکه بفرمایید راهی هست که الگوریتم وزن ها و بایاس اولیه رو بهتر اننتخاب کنه و در نهایت شبکه زودتر همگرا بشه>

  3. واقعا آموزش های بی نظیری دارید، من خیلی از آموزش هاتون استفاده کردم برای ارائه های دانشگاهیم. از اونجایی که در کنار درس مدیریت سایتی هم برعهده دارم، میدونم تعریف و نظرگذاشتن چقدر میتونه انرژی مثبت به نویسنده مطلب بده :)))
    این کامنتو ارسال میکنم که شاید انگیزه مثبتی بشه و با قدرت بیشتر راهتون رو ادامه بدید. به امید روزی که مباحث رو در قالب ویدیو ارائه بدید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *