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

هر دانشجوی رشته‌های مهندسی حتما تا به حال نام زبان‌های برنامه‌نویسی مختلفی را نظیر متلب و گَمز شنیده است. این زبان‌های برنامه‌نویسی در بین رشته‌های مدیریتی و مهندسی طرفداران زیادی دارند و به همین دلیل نیز بسیاری از دانشجویان در تلاش هستند تا این زبان برنامه‌نویسی را فرا بگیرند. اما حال وب‌سایت متلب آنالیز این نیاز را برآورده ساخته است و آموزش‌های مختلفی در خصوص زبان برنامه‌نویسی متلب و گمز در این وب‌سایت منتشر می‌شوند. چندی پیش با ساختار کلی و آموزش مقدماتی متلب آشنا شدیم و مدتی بعد نیز به زبان گمز پرداختیم که فقدان محتوای آموزشی در این زبان نیز بین دانشجویان بسیار زیاد است. تاکنون ۴ مقاله آموزشی را نیز در خصوص شبکه‌های عصبی (متلب) منتشر کرده‌ایم که در این مقاله از متلب آنالیز تصمیم داریم به ادامه این مبحث بپردازیم و در این بخش روش‌های آموزش شبکه عصبی در متلب را بررسی خواهیم کرد. پس تا انتهای مقاله همراه ما باشید.

شبکه‌های پس‌انتشار

هر شبکه تک‌لایه از S نورون که تابعی غیرخطی در خروجی خود دارد و R ورودی تشکیل شده است و از طریق تصویر زیر نیز می‌توانید هرچه بیشتر با این ساختار آشنا شوید. البته باید توجه داشت که می‌توان برای شبکه‌های پس‌انتشار، لایه مخفی نیز در نظر گرفت که این کار باعث خواهد شد دقت در برازش داده‌ها افزایش یابد.

matlab-1

ایجاد شبکه پس‌انتشار

برای اینکه در زبان برنامه‌نویسی متلب بتوانید یک شبکه دو لایه ایجاد کنید باید دستور زیر را در محیط متلب تایپ نمایید:

;(‘net=newff([-1 2; 0 5],[3,1],{‘tansig’,’purelin’},’traingd

از دستور بالا می‌توان دریافت که در شبکه ما یک vector ورودی دارد که دارای دو عنصر است و مقادیر عنصر اول آن نیز در بازه -۱ و ۲ تغییر می‌کنند و مقادر عنصر دوم نیز در بازه ۰ تا ۵ تغییر می‌کند. همان‌طور که در کد بالا مشاهده می‌کنید، در لایه اول شاهد ۳ نورون و در لایه دوم شاهد ۱ نورون هستیم. باید توجه داشت که تابع tan-sigmoid تابع انتقال لایه اول است و تابع انتقال تابع دوم، تابعی خطی است. البته تابع traingd نیز در این دستور به چشم می‌خورد.

مقداردهی آغازین برای وزن‌ها

باید توجه داشت که قبل از ورود کامل به بخش شبکه‌های پس‌انتشار، باید مقداردهی بایاس و وزن‌ها صورت گیرد. البته با وجود اینکه دستور newff به‌صورت اتوماتیک وزن‌های شبکه را مقداردهی می‌کند، اما ممکن است در شرایطی خود برنامه‌نویس نیز بخواهد آن‌ها را مقداردهی کند. در این صورت وی باید به سراغ دستور init برود. این تابع یک شی را در شبکه به‌عنوان ورودی دریافت می‌کند و شی را که بایاس‌ها و وزن‌های آن مقداردهی شده‌اند باز می‌گرداند. از طریق دستور زیر می‌توانید این کار را انجام دهید.

;(net = init(net

شبیه‌سازی

برنامه‌نویسان باید توجه داشته باشند که از تابع Sim برای شبیه‌سازی استفاده می‌شود. وظیفه این تابع بدین صورت است که شبکه ورودی P و شی شبکه net را دریافت کرده و خروجی‌های آن شبکه را در متغیر a برمی‌گرداند. دستور زیر نحوه استفاده از این تابع را برای شبیه‌سازی شبکه‌ای که در بالا مورد بحث قرار گرفت به‌خوبی نشان می‌دهد.

;[P = [1;2

(A = sim(net,p

A =

۰٫۱۰۱۱-

آموزش شبکه

حال که بایاس و وزن‌های شبکه را مقداردهی کردیم، اکنون باید به سراغ آموزش شبکه خود برویم. شبکه امکان آموزش برای تخمین تابع، ارتباط الگو‌ها و دسته‌بندی الگو‌ها را دارد. البته باید بدین نکته نیز توجه داشت که آموزش یک شبکه نیازمند مجموعه‌ای از مثال‌ها در خصوص رفتار مناسب شبکه، ورودی‌های شبکه (P) و خروجی‌های متناظر (T) آن است. گفتنی است که آموزش وزن‌ها و بایاس در یک شبکه به صورت تکراری تنظیم می‌ِشود و دلیل این موضوع نیز برای کمینه شدن تابع کارایی شبکه net است. توجه داشته باشید که در شبکه‌های پس‌انتشار، تابع کارایی پیش‌فرض، تابع (mse) mean square error است.

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

روش (Batch Gradient Descent (traingd

آموزش تندترین شیب یا همان Batch Gradient Descent، از طریق تابع traingd است و در این روش وزن و بایاس‌ها در جهت گرادیان منفی تابع کارایی به‌روز رسانی می‌شوند. اگر برنامه‌نویس بخواهد شبکه را به روش Batch Gradient Descent آموزش دهد باید ابتدا trainFcn را در شبکه به traingd تغییر داده و سپس تابع train را فراخوانی کند. برای درک بیشتر، بهتر است که به دستور زیر توجه کنید؛ این دستور یک training set از ورودی‌های p و خروجی‌های t می‌سازد.

;[P = [-1  -۱  ۲  ۲;۰  ۵  ۰  ۵

;[T = [-1  -۱  ۱  ۱

حال باید از طریق دستور زیر، شبکه پس‌انتشار خود را بسازیم:

;(‘Net=newff (minmax(p) , [3 , 1] , {‘tansig’ , ‘purelin’ }, ‘traingd

اما باید در این بخش برخی از پارامتر‌های آموزش شبکه را تغییر دهیم. برای مثال، epochs نشان‌دهنده تعداد حالات عبور از روی دادگان است و goal خطای مورد نظر در هنگام آموزش را نشان می‌دهد. برای انجام این تغییرات باید به شکل زیر وارد عمل شد:

;Net . trainParam . show = 50

;Net . trainParam . Ir = 0.05

;Net . trainParam . epochs = 300

;Net . trainParam . goal = 50

حال باید شبکه آموزش داده شده را train کنیم که به شکل زیر خواهد بود.

matlab-2

اکنون باید شبکه خود را شبیه‌سازی کنیم و البته در این بین باید پاسخ آن به ورودی‌های موجود در دیتاست را نیز مورد بررسی قرار دهیم.

(A = sim(net,p

= A

۱٫۰۰۱۰-    ۰٫۹۹۸۹-      ۱٫۰۰۱۸       ۰٫۹۹۸۵

روش Batch Gradient Descent with Momentum

یکی دیگر از روش‌های آموزش شبکه، روش Batch Gradient Descent with Momentum است. کد زیر شبکه را دوباره تولید کرده و آن را با روش Batch Gradient Descent with Momentum آموزش می‌دهد.

matlab-3

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

نظرات خود را در خصوص مقالات با متلب آنالیز در میان بگذارید.