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

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

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

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

تابع xor در شبکه عصبی

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

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

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

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

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

همان‌طور که می‌بینید در اینجا ما با یک خطِ غیرِ‌مستقیم توانستیم این جدا‌سازی را انجام دهیم. این کار (کشیدنِ خطِ غیرِ مستقیم) توسطِ پرسپترونِ ساده قابل انجام نیست و نیاز به یک یا چند لایه‌ی مخفیِ میانی دارد تا تشخیص‌های پیچیده‌تری را برای ما انجام دهد. همان‌طور که گفتیم لایه‌های میانی یا همان لایه‌های مخفی می‌توانند بیش از ۱ لایه نیز باشند. با استفاده از پرسپترونِ چند لایه (multi layer perceptron) میتوان الگوهای پیچیده‌تری را یاد گرفت. در کل وظیفه‌ی لایه‌های مخفیِ میانی همین است که الگوهایی با درجه پیچیدگیِ بالاتری را یاد بگیرد. در دروس بعدی به نحوه‌ی یادگیری پرسپترون چند لایه نگاهی می‌اندازیم.

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

» پاسخی از وب سایت Stackexchange » دانشگاه مونترال » وب سایت DeepLearning » وب سایت Hiit

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

15 دیدگاه دربارهٔ «پرسپترون چند لایه (Multi Layer Perceptron) چیست؟»

  1. استاد واقعا عالی بود من واقعا چیزی در این مورد نمیدونستم ولی کاملا قابل فهم توضیح دادید ممنون، شاد و سلامت باشید

  2. سلام و تشکر بابت وقتی که اختصاص دادید

    ابتدای متن نوشته شده ” در درسِ اول دوره‌ی آموزشیِ داده‌کاوی” در صورتی که منظور درس دوم از مجموعه دوره آشنایی با شبکه های عصبی(Neural Networks) است . جهت تصحیح ارسال کردم

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

  3. سلام.اولا بگم که عالییییییییییییییییییی
    دوما کب بیشتر درباره پرسپترون چند لایه توضیح میدید؟
    ممنون

  4. سلام استاد
    ببخشید میخواستم بپرسم من یک سری اطلاعات دارم (حدود ۱۸ میلیون داده که از هر داده ۲۲ ویژگی استخراج کردم) این رو دادم به شبکه MLP (با مشخصات: ۲ تا لایه hidden که تعداد نورون هر کدوم رو ۵۰ در نظر گرفتم و تابع لایه hidden اول رو tansig و تابع لایه hidden دوم رو radbas گذاشتم و اینکه داده ها رو فقط به Train و Test دادم و به validation داده ای ندادم) اما پردازش رو خیلی کند داره انجام میده یعنی الان بعد گذشت ۲۵ روز، دقت طبقه بند به ۸۶.۷ % رسیده. میخواستم بپپرسم مشکلی در روش من و تنظیماتی که انجام دادم وجود داره که داره اینقدر طول میکشه یا به خاطر تعداد زیاد داده ها است چون اینطور که حساب کردم این کار باید بعد از ۲۶۰ روز دیگه تموم بشه که واقعا منطقی نیست. دست شما درد نکنه اگر بتونید به من کمک کنید که مشکل از کجاست (تشکر)

    1. سلام
      نمیشه گفت غیر طبیعی هست
      البته ممکنه با بررسی جزئیات بیشتر بتونید بهبود‌هایی رو انجام بدید
      ولی برای داده‌های حجیم معمولا از جی‌پی‌یو یه جای سی‌پی‌یو استفاده می‌کنند تا سرعت پردازش با ضریب بالایی بهبود پیدا کند

  5. یک شبکه عصبی از نوع چندلایه پیشرو طراحی نمایید )تعداد لایهها، تعداد نرونهای هر لایه، تابع فعالیت هر
    نورون، ضرایب ارتباطی نرونها در لایههای مختلف را مشخص کنید( طوری که فضای ویژگی دوبعدی را بصورت شکل زیر در دو کلاس هاشور
    خورده )داخل مربع( و بدون هاشور )خارج مربع( دستهبندی نماید. X1 = 1 , 2 X2= 1,2

  6. سلام وقت بخیر، برای مساله تخمین پارامتر به صورت یادگیری نظارت شده غیر از mlp یا rbf از چه شبکه ای میشه استفاده کرد ؟

  7. در یک شبکه پرسپترون کهmلایه ورودی وn لایه میانی و k خروجی مون باشه با چه مدلی میتونیم اون رو بسازیم؟

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

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