شبکه عصبی در متلب — از صفر تا صد

۶۴۲۲ بازدید
آخرین به‌روزرسانی: ۲۴ اردیبهشت ۱۴۰۲
زمان مطالعه: ۱۴ دقیقه
دانلود PDF مقاله
شبکه عصبی در متلب — از صفر تا صدشبکه عصبی در متلب — از صفر تا صد

شبکه‌های عصبی (Neural Networks) شبکه‌هایی از سلول‌های عصبی (نورون یا پی‌ياخته یا عصب) مغز هستند. مغز انسان میلیاردها نورون و تریلیون‌ها ارتباط بین آن‌ها دارد. این نورون‌ها مدام در حال پردازش و ارسال اطلاعات به نورون‌های دیگر هستند. در این آموزش، با پیاده‌سازی شبکه عصبی در متلب برای تقریب توابع و سیستم‌ها آشنا می‌شویم. برای آشنایی بیشتر با مفاهیم و تعاریف شبکه‌های عصبی می‌توانید آموز‌ش‌های «شبکه‌های عصبی مصنوعی» و «ساخت شبکه عصبی» را مطالعه کنید.

997696

در سال ۱۹۰۹، «سانتیاگو رامون کاخال» (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) نامیده می‌شوند. هر گره مخفی شامل یک بردار cc مرکزی است که یک بردار پارامتری با طولی مشابه با بردار ورودی xx است. فاصله اقلیدسی بین بردار مرکز و بردار ورودی xx شبکه به صورت x(t)cj(t) ||x (t) - c_j (t) || تعریف می‌شود.

شکل ۲ مدل شبکه عصبی ساده‌ای را نشان می‌دهد. در این شکل، ورودی‌ها یا همان نورون‌های ورودی x1x_1 تا xnx_n هستند. وزن‌ها نیز w1 w _1 تا wn w _ n هستند که در هریک از ورودی‌ها ضرب می‌شوند.

عنصر دیگر این شبکه عصبی تابع جمع NetiNet _ i است که حاصل‌ضرب ورودی‌ها در وزن‌ها را جمع می‌کند. بخش دیگر این شبکه، تابع فعال‌سازی ff است. و در نهایت، خروجی بخش آخر این شبکه را تشکیل می‌دهد.

الگوریتم این شبکه عصبی را می‌توان به صورت زیر توصیف کرد:

Neti=iwijxj+bi  \large Net _ i = \sum _i w _ {i j } x_j + b _ i 

ui=f(Neti) \large u _ i = f ( Net _ i )

yi=g(ui)=h(Neti) \large y _ i =g ( u _ i ) = h ( N e t _ i )

که در آن، g(ui)=ui g ( u _ i ) = u _ i و yi=f(Neti) y _ i = f ( Net _ i ) است. مقدار bib_i نیز بایاس است.

یک مدل شبکه عصبی ساده
شکل ۲: یک مدل شبکه عصبی ساده

تابع فعال‌ساز f(Neti) f ( Net _i ) معمولاً به یکی از این سه صورت است:‌

۱. مقدار آستانه (Threshold Value):

f(Neti)={1Neti>00Neti0 \large f ( N e t _ i ) = \begin {cases} \begin{matrix} 1 & Net _ i > 0 \\ 0 & N et _ i \le 0 \end {matrix} \end {cases}

تابع آستانه در شکل زیر داده شده است.

تابع آستانه
شکل ۳: تابع آستانه

۲. تابع خطی:

f(Neti)={0NetiNeti0kNetiNeti0<Neti<Neti1fmaxNetiNeti1 \large f ( N e t _ i ) = \begin {cases} \begin{matrix} 0 & Net _ i \le Net_{i0} \\ k N e t _i & Net _ {i0} < Net_i < N e t _ {i1} \\ f _ { m a x } & N e t _ i \ge N e t _ { i 1 } \end {matrix} \end {cases}

برای مثال، با انتخاب Neti0=30 Net _ {i 0 } = 30 ، Neti1=70 N e t _ {i 1 } = 70 و fmax=5.0 f _ { ma x } = 5.0 تابع خطی به صورت شکل ۴ خواهد بود.

تابع خطی
شکل ۴: تابع خطی

۳. تابع غیرخطی:

توابع سیگموئید (Sigmoid) و گوسی (Gaussian)‌ در شبکه‌های عصبی بسیار مورد استفاده قرار می‌گیرند. سیگموئید به صورت زیر تعریف می‌شود:

f(Neti)=11+eNetiT \large f ( Net _ i ) = \frac { 1 } { 1 + e ^ - \frac { Net _ i } { T } }

به عنوان مثال، با انتخاب T=1.0 T = 1.0 شکل این تابع به صورت زیر خواهد بود.

تابع سیگموئید
شکل ۵: تابع سیگموئید

طراحی و شبیه‌سازی شبکه عصبی در متلب

شبکه عصبی تابع پایه شعاعی (RBF) یک شبکه عصبی چندلایه است. شبکه عصبی RBF از سه لایه با واحدهای (نورون‌های) پردازنده تشکیل می‌شود (در ساده‌ترین حالت).

شبکه عصبی RBF

ساختار یک شبکه عصبی RBF سه لایه در شکل ۶ نشان داده شده است.

ساختار شبکه عصبی RBF
شکل ۶: ساختار شبکه عصبی RBF

در شبکه عصبی RBF بردار ورودی x=[xi]T \mathbf{x} = [x _ i ] ^ T است. فرض می‌کنیم mm نورون در لایه مخفی وجود داشته باشد، و بردار تابع پایه شعاعی در لایه مخفی h=[hj]T \mathbf{h} = [h _j]^ T و hjh _ j تابع گوسی نورون jj‌ در لایه مخفی باشد، و داشته باشیم:

hj=exp(xcj22bj2) \large h _ j = \text {exp} \left( - \frac { ||x - c _ j|| ^ 2} {2 b _ j ^ 2 } \right )

که در آن، c=[cij] =[c11c1mcn1cnm] c = [c _ { i j } ]  = \begin {bmatrix} c _ { 11} & \cdots & c _ { 1 m } \\ \vdots & \cdots & \vdots \\ c _ { n 1 } & \cdots & c _ {n m } \end {bmatrix} مختصات نقطه مرکزی تابع گوسی نورون jj برای iiاُمین ورودی است. همچنین، در بردار b=[b1,,bm]T \mathbf{b} = [b_1, \cdots, b _ m ] ^ T مقدار bj b _ j طول تابع گوسی را برای نورون jj نشان می‌دهد.

بر اساس رای ۲۹ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Intelligent Control Design and MATLAB Simulation
۱ دیدگاه برای «شبکه عصبی در متلب — از صفر تا صد»

این کدی در مطالب بالا توضیح داده شده تابع شعاعی با مقادیر توزیع یکنواخت هستش. بهتر بود کد با آموزش پارامتر های تابع گوسی هم بگین

نظر شما چیست؟

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