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

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

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

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

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

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

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

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

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

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

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

پاسخ دهید

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