پرسپترون چند لایه(Multi Layer Perceptron) چیست؟

در درس اول دوره آموزشی داده کاوی دیدیم که با یک پرسپترون میتوان خطی رسم کرد که تفاوت پراید و اتوبوس را تشخیص دهد. در واقع برای تشخیص پراید و اتوبوس به برای یک کامپیوتر، ویژگی های آن ها را به برداردها و ابعاد ریاضی تبدیل کرده و به الگوریتم های داده کاوی و یادگیری ماشین می دهیم. حال فرض کنید که مسئله ما به راحتی تفاوت پراید و اتوبوس نباشد. مسايل پیچیده تر را دیگر نمیتوان با یک پرسپترون ساده حل کرد.

اجازه بدهید یک مثال کلاسیک در این حوزه بزنیم. مسئله تشخیص تابع XOR به وسیله کامپیوتر. گر چه میدانیم که XOR را میتوان با نوشتن یک سری کد ساده در کامپیوتر تشخیص دهیم ولی خاصیت غیر خطی این تابع باعث شده است که از الگوریتم یادگیری ماشین و داده کاوی بخواهیم که تابع XOR را به صورت خودکار تشخیص دهد. برای این کار، مانند مثال پراید و اتوبوس بایستی یک سری ویژگی و یک برچسب برای هر نمونه بسازیم. تصویر زیر را نگاه کنید:

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

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

همان طور که میبینید، در این تصویر هم تفاوت بین سگ و گربه را نمیتوان با یک خط مستقیم رسم کرد. پس نمیتوانیم از پرسپرتون ساده استفاده کنیم. چون پرسپرتون ساده فقط میتواست یک تفیک خطی از مسئله را برای ما نمایش دهد.

برای حل این دست مسائل معماری های چند لایه برای شبکه های عصبی مطرح شد. برای این کار نیاز داریم که لایه های مخفی را وارد سیستم کنیم. در درس اول یک شبکه عصبی بسیار ساده را دیدیم که فقط یک لایه ورودی و یک لایه خروجی داشت. اما حالا میخواهیم لایه های دیگر را نیز به شبکه اضافه کنیم تا مسائل پیچیده تری را یاد بگیرد. به شکل زیر نگاه کنید:

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

همان طور که میبینید در اینجا ما با یک خط غیر مستقیم توانستیم این جدا سازی را انجام دهیم. این کار(کشیدن خط غیر مستقیم) توسط پرسپترون ساده قابل انجام نیست و نیاز به یک یا چند لایه مخفی میانی دارد تا تشخیص های پیچیده تری را برای ما انجام دهد. همان طور که گفتیم لایه های میانی یا همان لایه های مخفی میتوانند بیش از ۱لایه نیز باشند. با استفاده از پرسپترون چند لایه(Multi Layer Perceptron) میتوان الگوهای پیچیده تری را یاد گرفت. در کل کار لایه های مخفی میانی همین است که الگوهای با درجه پیچیدگی بالاتری را یاد گرفته و بعدا حدس بزنند. در دروس بعدی به نحوه یادگیری پرسپترون چند لایه نگاهی می اندازیم.

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

» پاسخی از وب سایت Stackexchange

» دانشگاه مونترال

» وب سایت DeepLearning

» وب سایت Hiit

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

پاسخ دهید

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