نحوه یادگیری پس انتشار خطا (Back Propagation) در شبکه های عصبی

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

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

همان‌طور که گفتیم پایه‌ی یادگیری در شبکه‌های عصبی تکرار است. یکی از روش‌های بسیار پرکاربرد برای تکرار در شبکه‌های عصبی روشِ پسْ انتشارِ خطا (back propagation of error) است. در این روش، در هر دور (یعنی در هر تکرار) دو مرحله خواهیم داشت. مرحله‌ی اول حرکت رو به جلو (feed forward) است که همان‌طور که در درس‌های گذشته گفتیم، با ضربِ داده‌های ورودی در وزن‌ها و سپس جمع آن با انحراف انجام می‌شود. سرانجام در همان مرحله‌ی اول به یک خروجی می‌رسیم که احتمالاً با خروجیِ واقعی تفاوت دارد. اینجاست که توسط تابع ضرر مشخص می‌کنیم که مرحله‌ی feed forward چه مقدار خطایی داشته است. (که این مباحث، در دروسِ قبلی این دوره آموزش داده شد)

حال که فهمیدیم الگوریتم با توجه به وزن‌ها و انحراف‌ها چه مقدار خطایی دارد، به مرحله‌ی دوم در یک تکرار می‌رویم. در این مرحله می‌توانیم به عقب بازگشته و وزن‌ها و انحراف‌ها را به‌هنگام‌سازی کنیم. یعنی وزن‌ها و انحراف‌ها را به شکلی تغییر دهیم تا در تکرارِ بعدی نتیجه‌ای نزدیک‌تر به خروجیِ واقعی و با خطای کم‌تر را تولید کنند. این تکرار (feed forward و back propagation) آنقدر انجام می‌شود تا خروجیِ شبکه برای تمامیِ داده‌های آموزشی، مثلا داده‌های پراید و اتوبوس، به نزدیک‌ترین مقدارِ واقعیِ خود (یعنی مقداری که توسط داده‌های آموزشی در اختیار داریم) برسد. به این ترتیب الگوریتم یاد گرفته و از این به بعد می‌تواند با مشاهده‌ی ویژگی‌های یک داده، مثلاً ویژگی‌های یک پرایدِ جدید که تا حالا ندیده است، مشخص کند که این ماشین یک پراید است.

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

ولی برای سادگی تصویر زیر را نگاه کنید، در این تصویر ما ۱۰ مرتبه، یعنی در ۱۰ دور، شبکه را آزمایش کرده‌ایم و به ۱۰ خطای مختلف رسیده ایم. در تصویر زیر فقط یک خطا با اسم w1 داریم و میانگین خطا را با توجه به هر کدام از دورها و خطا، در ستون آخر مشاهده می‌کنید:

در تصویر بالا، ما برای سادگی فقط یک وزن w1 را مورد بررسی قرار دادیم. همان طور که در جدول مشاهده می‌کنید، با تغییر در یک وزن، خطای کلیِ شبکه‌ی عصبی می‌تواند کم و زیاد شود. در نمودارِ سمت راست، w1 را با توجه به خطاهای شبکه رسم کرده و نقاط مختلف را به یکدیگر اتصال داده‌ایم. همان‌طور که مشاهده می‌کنید کمترین میزانِ خطا در وزن ۱.۵ و بعد از آن وزن ۳ اتفاق افتاده است. در واقع شبکه‌ی عصبی به دنبال پیدا کردنِ وزن‌هایی است که بتواند خطا را تا حد ممکن کاهش دهد. یعنی در مثالِ تصویرِ بالا اگر شبکه‌ی عصبی بتواند عددی نزدیک به ۳ یا ۱.۵ را پیدا کند، می‌توان گفت که خوب عمل کرده است و خطای خود را تا جایی که می‌توانسته کمینه (minimum) کرده است.

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

ممکن است این بحث در ابتدا کمی پیچیده به نظر برسد ولی آرام آرام و با مطالعه‌ی دروس قبلی و بعدی احتمالاً می‌توانید این مبحث را درک کنید.

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

» وب سایت Neural Network And Deep Learning

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

19 دیدگاه دربارهٔ «نحوه یادگیری پس انتشار خطا (Back Propagation) در شبکه های عصبی»

  1. سلام
    ممنون از اینکه مباحث را به این خوبی بیان میکنید و یادگیری رو برای ما دانشجوها آسون میکنید.
    خوشحالم که با سایت شما آشنا شدم.
    موفق و پیروز باشید.

  2. سلام ممنون از مطالب مفیدی که در اختیار قرار میدید.
    در رابطه با کدنویسی شبکه های پس انتشار در نرم افزار متلب می تونید راهنمایی کنید؟
    با تشکر

  3. سلام. وقتتون بخیر
    برای شاخه شبکه های عصبی ، چه کتابی رو پیشنهاد میدید که هم مطالب رو بصورت عالی و روان بیان کرده باشه و هم ترجمه شده باشه؟

  4. بسیار خوب و روان توضیح میدید، لطفا همه مباحث یادگیری ماشین رو همینطور عالی توضیح بدید. از لطف شما سپاسگزارم

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

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