مثالی از برنامهنویسی شیءگرا در شبکههای عصبی و هوش مصنوعی | |||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||
برای اینکه بتوانیم این کار را دقیقاً در برنامه خود شبیهسازی کنیم، لازم است یک کلاس مانند شکل 1 قسمت اول طراحی کنیم که ضمن داشتن مشخصههای خاص، یک خروجی داشته باشد. البته همانطور که در قسمت دوم نیز مشاهده میکنید (شکل 1)، هر نورون میتواند داری چندین ورودی نیز باشد. همانطور که در شکل 1 مشاهده میکنید، نورونها به صورت گروهی لایهبندی میشوند.
حال که تقریباً با کار یک لایه عصبی آشنا شدید، میتوانیم شبکههای پیچیدهتر را مورد بررسی قرار دهیم. برای این کار حداقل به سه گروه از نورونهایی که در شکل 2 میبینید، نیاز داریم. همانطور که در شکل 3 مشاهده میکنید، این شبکه دارای سه لایه است. لایه 1 یا لایه بالایی این شبکه که در حقیقت لایه ورودی است، پارامترهای پالس را تنظیم میکند و این مقادیر را همراه سیگنال یا پالس به لایههای بعدی پاس میدهد، ولی نورونهای لایه 3 یا لایه خروجی که در پایینترین سطح شبکه قرار دارد، هیچ سیگنالی را به لایه دیگری نمیفرستند و در واقع فقط خروجی دارند.
حال قسمت اصلی کار شبکه فرا میرسد؛ یعنی آموختن به شبکه عصبی. ب رای اینکه به شبکه عصبی موجود توانایی آموختن بدهیم، بعد از اینکه سیگنال از لایه اول شبکه به لایه پایینی شبکه میرود، باید اطلاعات هر نورون را که روی سیگنال ما اثر میگذارد، بروزآوری و اصلاح کنیم. این رویه را به اصطلاح BP یا Back Propagation میگویند. در حقیقت با این کار یعنی مقایسه خروجیای که خودمان محاسبه کردهایم با خروجی شبکه، میتوانیم مقدار اشتباهاتی که شبکه ما انجام میدهد را به دست آوریم. مثلاً تصور کنید که در یک سلول نورون در لایه آخر شبکه یا لایه خروجی اشتباهی داریم، هر نورون در واقع رکورد تمامی نورونهایی که سیگنال از آن عبور میکند را نگهداری مینماید و میداند که کدام یک از نورونهای قبلی یا به اصطلاح نورونهای والد باعث این اشتباه میشوند. همچنین میدانیم که هر کدام از این نورونهای شبکه یک مقدار اشتباه را محاسبه کردهاند و از این طریق شبکه ما میتواند یاد بگیرد و اگر مقدار دیگری نیز به آن داده شد، میتواند توانایی محاسبه داشته باشد.
در کدهای این کلاس میبینید که دو مقدار Private به نامهای Mywight و MyDelta نوع double و جود دارد. کار اصلی این کلاس، دادن و گرفتن مقادیر نورون است و در واقع تغییرات در ورودی نورونها و وزن آنها را نگهداری میکند. حال میتوانیم یک اینترفیس برای خود نورون درست کنیم. از آن جایی که هر نورون هم مشخصات سیگنال و هم Receptor را دارد، باید از دو اینترفیسی که قبلاً در شکل های 5 و 4 توضیح داده شد، استفاده کند. همچنین هر نورون چیزی مانند یک ورودی دیگر نیز دارد که به آن Bias میگوییم. اضافه براین، باید دو متد برای انجام کار در شبکه درست کنیم: یکی برای انجام Pulse و دیگری برای یادگیری نورون. کدهای شکل 7 تمامی این اینترفیس را مشخص کرده است.
اکنون که با اینترفیسهای این شبکه ساده آشنا شدید، نوبت به ساختن اجزای اصلی برنامه میرسد. اولین کاری که باید در این قسمت انجام دهیم، ساختن کلاس اصلی نورون است که باید آن را بر اساس اینترفیسهایی که ساختهایم، درست کنیم. شکل 8 ساختار اصلی این کلاس را نشان میدهد.
اگر کمی به کدهای شکل 9 و متد Pulse دقت کنید، متوجه میشوید که این متد جمع هر ورودی یا هر خروجی که به نورون داده میشود را دریافت میکند و در Weight مربوطه که در دایرکتوری است ضرب میکند و آخرین خروجی آخرین را به متد Sigmoid انتقال میدهد و در نتیجه خروجی آخر ما عددی بین 0 و 1 خواهد بود. حال دو کلاس مهم از این شبکه باقیمانده است: اولین کلاس، کلاس اصلی شبکه یا NeuralNet است و دیگریNeuralLayer، کلاس لایههای شبکه ما است. این دو کلاس در شکل 10 به صورت مشخص نشان داده شده است، اما نکته بسیار مهم این است که کلاس NuralLayer در حقیقت مسئول نگهداری نورونهای انتقالدهنده یا فراخوانکننده متد Pulse است.
در این کلاس از فهرست نورونها استفاده شده است و این کلاس در اصل نورونها را در خود جا میدهد. در این کلاس دو متد که هیچ مقدار برگشتی ندارند، به نامهای Pulse و ApplyLearning وجود دارد. این متدها در حقیقت کار فرستادن پالس و یادگیری لایهها را به عهده دارند. کدهای شکل 11 این دو متد را نشان میدهد.
متد BackProgation یکی دیگر از متدهای این کلاس است. این متد ابتدا خطاهای خروجی نورونها را با محاسبه اختلاف عددی بین مقدار مورد انتظار ما و خروجی نورونها محاسبه میکند و وقتی که خروجی همه نورونها بروز گردید، این متد خطاهای نورونهای پنهان را نیز محاسبه میکند.
وقتی این متد توسط برنامه انجام شد، برنامه با استفاده از متد، ()Train و با استفاده از خروجیهای قبلی میتواند توانایی یادگیری داشته باشد.
کل 13 روند اجرایی برنامه را نشان میدهد. میتوانید سورس کدهای این برنامه را از قسمت دریافت فایل سایت ماهنامه شبکه دریافت کنید و قدم به قدم و با استفاده از راهنماییهایی که در آن نوشته شده است، تغییراتی در کدها انجام دهید و اولین برنامه هوش مصنوعی خود را بنوسید. منابع: |
سلام
مرسی که به من سر زدید
اسم وبلاگ منو سفر به جاودانگی بزارید
مطالبتون خیلی جالبه
میشه بگید رشته تحصیلیتون چی
مرسی
بای
سلام
وبلاگ عالی داری و مطالب خوبی توش هست
اما یه مشکل داره خیلی دیر لود میشه به نظر من از تعداد پست هاش یه خورده کم کن
امید وارم موفق باشی به من سر بزن خوشحال می شم
مقاله عالی بود مرسی
وبلاگ خوب و مفیدی داری موفق باشی