شبکه عصبی در متلب — از صفر تا صد
شبکههای عصبی (Neural Networks) شبکههایی از سلولهای عصبی (نورون یا پیياخته یا عصب) مغز هستند. مغز انسان میلیاردها نورون و تریلیونها ارتباط بین آنها دارد. این نورونها مدام در حال پردازش و ارسال اطلاعات به نورونهای دیگر هستند. در این آموزش، با پیادهسازی شبکه عصبی در متلب برای تقریب توابع و سیستمها آشنا میشویم. برای آشنایی بیشتر با مفاهیم و تعاریف شبکههای عصبی میتوانید آموزشهای «شبکههای عصبی مصنوعی» و «ساخت شبکه عصبی» را مطالعه کنید.
در سال ۱۹۰۹، «سانتیاگو رامون کاخال» (Santiago Ramon y Cajal) کشف کرد که مغز از تعداد زیادی نورون متصل به هم تشکیل شده که پیامهای بسیار ساده تحریکی (Excitatory) و مهاری (Inhibitory) را برای یکدیگر ارسال میکنند و تهییج (Excitation) آنها با همین پیامهای ساده بهروز میشود. یک نورون سه بخش اصلی دارد: جسم سلولی، آکسون یا آسه (Axon) که پیامها را ارسال میکند و دندریت یا دارینه (Dendrite) که پیامها را دریافت میکند. جسم سلولی ساختار سلول را تشکیل میدهد. آکسون یک رشته منشعب است که پیامهای نورون را به بیرون منتقل میکند. دندریتها انشعابهای بیشتری دارند و سیگنال سلولهای عصبی دیگر را دریافت میکنند.
خلاصهای از پیشرفت علمی در زمینه شبکههای عصبی به شرح زیر است:
- در سال ۱۹۴۳، مککولوخ (McCulloch) و پیتس (Pitts) اولین مدل ریاضی نورونها را پیشنهاد کردند و نشان دادند که چگونه میتوان شبکههای نورنمانند را تحلیل و محاسبه کرد.
- نخستین ایدههای یادگیری با شبکههای عصبی را هِب (Hebb) در کتابی با عنوان «سازماندهی رفتار» در سال ۱۹۴۹ ارائه کرد.
- در سال ۱۹۵۱، ادموندز (Edmonds) و مینسکی (Minsky) ماشین یادگیری خود را با بهرهگیری از ایده هب ساختند.
- نقطه مهم آغاز یادگیری شبکه نرون را میتوان کار روزنبلات (Rosenblatt) در سال ۱۹۶۲ دانست. روزنبلات دستهای از شبکههای یادگیری نورونمانند ساده را ساخت که شبکه عصبی پرسپترون (Perceptron Neural Network) نامیده شد.
- جان هاپفیلد (John Hopfield) در مقاله مهمی که در سال ۱۹۸۲ منتشر کرد، یک معماری برای شبکه عصبی با نام شبکه هاپفیلد ارائه کرد. از این شبکه عصبی میتوان برای حل مسائل بهینهسازی مانند مسئله فروشنده دورهگرد استفاده کرد.
- یک شبکه عصبی مهم که بسیار مورد استفاده قرار میگیرد، با یادگیری پسانتشار خطا (Backpropagation) یا BP است. شبکه عصبی پسانتشار خطا را اولین بار، وربوس (Werbos) در سال ۱۹۷۴ و پس از او روملهارت و همکارانش (Rumelhart et al) در سال ۱۹۸۶ ارائه کردند. کتاب آنها، با عنوان «پردازش توزیع شده موازی» (Parallel Distributed Processing)، چشمانداز گستردهای از رویکردهای شبکه عصبی را بیان کردند.
- شبکههای عصبی با توابع پایه شعاعی (Radial Basis Functions) یا شبکههاب عصبی RBF در سال ۱۹۸۸ معرفی شدند و به دلیل قابلیت تعمیم و ساختار سادهشان که از انجام محاسبات طولانی و غیرضروری جلوگیری میکرد، نسبت به شبکههای پیشخور (Feed-forward Network) یا MFNها توجه زیادی را به خود جلب کردند. تحقیقات مربوط به قضایای تقریب جامع (Universal Approximation) نشان دادند که هر تابع غیرخطی را میتوان روی یک مجموعه فشرده (Compact Set) و با دقت دلخواه با شبکه عصبی RBF تقریب زد. همچنین تحقیقات گستردهای درباره کنترل عصبی RBF سیستمهای غیرخطی انجام شده که در حال حاضر نیز ادامه دارد.
در ادامه، مدل ریاضی یک شبکه ساده RBF و پیادهسازی آن در متلب را بیان میکنیم.
یک شبکه عصبی ساده RBF
شبکههای عصبی RBF سه لایه دارند: لایه ورودی (Input Layer)، لایه پنهان یا مخفی (Hidden Layer) و لایه خروجی (Output Layer). نورونهای لایه مخفی با یک تابع پایه شعاعی (RBF) فعال (تحریک) میشوند. لایه مخفی از آرایهای از واحدهای محاسباتی تشکیل شده که گرههای مخفی (Hidden Nodes) نامیده میشوند. هر گره مخفی شامل یک بردار مرکزی است که یک بردار پارامتری با طولی مشابه با بردار ورودی است. فاصله اقلیدسی بین بردار مرکز و بردار ورودی شبکه به صورت تعریف میشود.
شکل ۲ مدل شبکه عصبی سادهای را نشان میدهد. در این شکل، ورودیها یا همان نورونهای ورودی تا هستند. وزنها نیز تا هستند که در هریک از ورودیها ضرب میشوند.
عنصر دیگر این شبکه عصبی تابع جمع است که حاصلضرب ورودیها در وزنها را جمع میکند. بخش دیگر این شبکه، تابع فعالسازی است. و در نهایت، خروجی بخش آخر این شبکه را تشکیل میدهد.
الگوریتم این شبکه عصبی را میتوان به صورت زیر توصیف کرد:
که در آن، و است. مقدار نیز بایاس است.
تابع فعالساز معمولاً به یکی از این سه صورت است:
۱. مقدار آستانه (Threshold Value):
تابع آستانه در شکل زیر داده شده است.
۲. تابع خطی:
برای مثال، با انتخاب ، و تابع خطی به صورت شکل ۴ خواهد بود.
۳. تابع غیرخطی:
توابع سیگموئید (Sigmoid) و گوسی (Gaussian) در شبکههای عصبی بسیار مورد استفاده قرار میگیرند. سیگموئید به صورت زیر تعریف میشود:
به عنوان مثال، با انتخاب شکل این تابع به صورت زیر خواهد بود.
طراحی و شبیهسازی شبکه عصبی در متلب
شبکه عصبی تابع پایه شعاعی (RBF) یک شبکه عصبی چندلایه است. شبکه عصبی RBF از سه لایه با واحدهای (نورونهای) پردازنده تشکیل میشود (در سادهترین حالت).
شبکه عصبی RBF
ساختار یک شبکه عصبی RBF سه لایه در شکل ۶ نشان داده شده است.
در شبکه عصبی RBF بردار ورودی است. فرض میکنیم نورون در لایه مخفی وجود داشته باشد، و بردار تابع پایه شعاعی در لایه مخفی و تابع گوسی نورون در لایه مخفی باشد، و داشته باشیم:
که در آن، مختصات نقطه مرکزی تابع گوسی نورون برای اُمین ورودی است. همچنین، در بردار مقدار طول تابع گوسی را برای نورون نشان میدهد.
این کدی در مطالب بالا توضیح داده شده تابع شعاعی با مقادیر توزیع یکنواخت هستش. بهتر بود کد با آموزش پارامتر های تابع گوسی هم بگین