شبیه سازی شبکه عصبی مصنوعی در Labview و نرم افزار متلب

شبکه عصبی مصنوعی در اصل تلاشی برای شبیه سازی مغز است. هنگامی که کاربر ورودی ها (مثلا p1، p2 و p3) و خروجی های مورد انتظار مربوطه (مثلا t1، t2 و t3) را در برنامه وارد می کند، برنامه سیستم را آموزش می دهد و خروجی نهایی را به دست می دهد. وزن نهایی برای بدست آوردن خروجی مورد انتظار نهایی محاسبه می شود. این برنامه تلاشی برای درک اصول اولیه شبکه عصبی مصنوعی و نحوه استفاده از آن برای کاربردهای بیشتر است.

نمودار بلوک ورودی
شکل 1. نمودار بلوک ورودی
نشانگر نقطه محدودیت
شکل 2. نشانگر نقطه محدودیت

شبکه های عصبی مصنوعی

هنگامی که یک شبکه تشخیص جنسیت با تصویری از یک مرد یا زن در گره ورودی آن ارائه می شود، باید یک گره خروجی را روی 0.0 در صورتی که تصویر یک مرد را نشان می دهد یا 1.0 را برای یک زن اعمال کند. به این ترتیب، شبکه دانش خود را به دنیای خارج منتقل می‌کند. نظریه شبکه عصبی حول این ایده می‌چرخد که برخی از ویژگی‌های کلیدی نورون‌های بیولوژیکی را می‌توان استخراج کرد و در شبیه‌سازی‌ها اعمال نمود، بنابراین یک مغز شبیه‌سازی شده (و بسیار ساده‌شده) ایجاد کرد. اولین چیزی که باید درک کرد این است که اجزای یک شبکه عصبی مصنوعی تلاشی برای بازسازی پتانسیل محاسباتی مغز است. با این حال، دومین نکته مهمی که باید درک کرد این است که هیچ کس هرگز ادعا نکرده است که چیزی به پیچیدگی یک مغز واقعی شبیه سازی کرده است. در حالی که تخمین زده می شود که مغز انسان بین ده تا صد میلیارد نورون دارد، یک شبکه عصبی مصنوعی معمولی احتمالاً بیش از هزار نورون مصنوعی هم ندارد.

در تئوری، یک نورون مصنوعی (که اغلب «گره» نامیده می‌شود) تمام عناصر مهم یک نورون بیولوژیکی را دارا است. گره ها به یکدیگر متصل هستند و قدرت این اتصالات معمولاً با یک مقدار عددی بین -1.0 (برای حداکثر مهار) و +1.0 (برای حداکثر تحریک) اختصاص داده می شود. همه مقادیر بین این دو قابل قبول هستند و مقادیر بزرگتر نشان دهنده قدرت اتصال قوی تر است. تابع انتقال در نورون‌های مصنوعی، چه در شبیه‌سازی کامپیوتری و چه در ریزتراشه‌های واقعی که به هم متصل شده‌اند، معمولاً دقیقاً در طراحی گره تعبیه شده است.

یک تابع انتقال (همچنین به عنوان تابع شبکه شناخته می شود) یک نمایش ریاضی، از نظر فرکانس مکانی یا زمانی، از رابطه بین ورودی و خروجی یک سیستم خطی با زمان ثابت است.

شاید مهم ترین تفاوت بین شبکه های عصبی مصنوعی و بیولوژیکی سازماندهی آنها باشد. در حالی که بسیاری از انواع شبکه های عصبی مصنوعی وجود دارد، اکثر آنها بر اساس ساختار اولیه یکسانی سازماندهی شده اند. سه جزء برای این سازمان وجود دارد: مجموعه ای از گره های ورودی، یک یا چند لایه از گره های "پنهان" و مجموعه ای از گره های خروجی. گره های ورودی اطلاعات را می پذیرند و شبیه اندام های حسی هستند. چه اطلاعات به شکل یک تصویر دیجیتالی، یک سری از ارزش سهام یا هر شکل دیگری باشد که بتوان آن را به صورت عددی بیان کرد، این جایی است که شبکه داده های اولیه خود را دریافت می کند. اطلاعات به عنوان مقادیر فعال سازی ارائه می شود، یعنی به هر گره یک عدد داده می شود. اعداد بالاتر نشان دهنده فعال سازی بیشتر است.

پنل جلویی برنامه LabVIEW برای تغذیه ورودی ها
شکل 3. پنل جلویی برنامه LabVIEW برای تغذیه ورودی ها
ماتریس انتقال
شکل 4. ماتریس انتقال

کارکرد شبکه های عصبی مصنوعی دقیقاً مانند نورون‌های انسانی است، با این تفاوت که نورون‌های مصنوعی به جای اینکه سطح فعال‌سازی خود را با تحریک بیشتر - همانطور که نورون‌های بیولوژیکی انجام می‌دهند - نشان دهند، با ارسال این مقدار فعال‌سازی به گره‌های متصل، فعال‌سازی را نشان می‌دهند. پس از دریافت این فعال سازی اولیه، اطلاعات از طریق شبکه منتقل می شود. نقاط قوت اتصال، شرایط مهار/تحریک و توابع انتقال تعیین می‌کنند که چه مقدار از فعال‌سازی اولیه به گره بعدی منتقل می‌شود.

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

اگر یک شبکه به درستی آموزش داده شود، این خروجی باید ورودی را به نحوی معنادار منعکس کند. به عنوان مثال، هنگامی که یک شبکه تشخیص جنسیت با تصویری از یک مرد یا زن در گره ورودی خود ارائه می شود، باید یک گره خروجی را روی 0.0 تنظیم کند اگر تصویر یک مرد را نشان می دهد یا 1.0 را برای یک زن به نمایش بگذارد. به این ترتیب شبکه دانش خود را به دنیای خارج منتقل می کند.

پیشنهاد میکنم مقاله "معرفی بهترین کتاب های آموزش متلب" مطالعه کنید.

فرآیند یادگیری چگونه است؟

با توضیح اینکه نقاط قوت اتصال، نقاط عطف دانش در معماری شبکه های عصبی هستند، جای تعجب نیست که یادگیری در شبکه های عصبی در درجه اول فرآیندی برای تنظیم نقاط قوت اتصال است. در شبکه‌های عصبی از نوع توصیف‌شده تاکنون، محبوب‌ترین روش یادگیری «پرسپترون» نام دارد که یک الگوریتم پایه برای یادگیری نظریه شبکه‌های عصبی است.

پرسپترون نوعی شبکه عصبی مصنوعی است که در سال 1957 در آزمایشگاه هوانوردی کورنل توسط فرانک روزنبلات اختراع شد. می توان آن را به عنوان ساده ترین نوع شبکه عصبی مشاهده کرد که یک طبقه بندی خطی دارد. پرسپترون یک طبقه‌بندی کننده باینری است که ورودی خود "x" (بردار با ارزش واقعی) را به مقدار خروجی "f(x)" (یک مقدار باینری منفرد) تبدیل می‌کند.

4 1

که در آن «w» بردار وزن‌های با ارزش واقعی، ضرب نقطه‌ای «w.x» (که در اینجا مجموع وزنی را محاسبه می‌کند) و مقدار «b» (یک عبارت ثابت که به هیچ مقدار ورودی بستگی ندارد) است.

مقدار "f(x)" (0 یا 1) برای طبقه بندی "x" به عنوان یک نمونه مثبت یا منفی، در مورد طبقه بندی باینری استفاده می شود. اگر b منفی باشد، ترکیب وزنی ورودی ها باید مقدار مثبتی بزرگتر از |b| ایجاد کند. از نظر فضایی، سوگیری موقعیت مرز تصمیم را تغییر می دهد. اگر مجموعه یادگیری به صورت خطی قابل جداسازی نباشد، الگوریتم یادگیری پرسپترون خاتمه نمی یابد.

نمودار بلوک مرحله 1 یادگیری
شکل 5. نمودار بلوک مرحله 1 یادگیری
نمودار بلوک مرحله 2 یادگیری
شکل 6. نمودار بلوک مرحله 2 یادگیری

پیشنهاد میکنم مقاله "20 ایده برتر برای پروژه متلب" مطالعه کنید.

در شکل 1، p1 و p2 ورودی های سیستم هستند. اینها در LabVIEW پیاده سازی شده اند. سپس ورودی ها با مقادیر مناسبی مانند w1,1 و w1,2 وزن می شوند. اکنون ورودی‌های «p» و «w» ضرب شده و همه حاصل‌ها (p×w) اضافه می‌شوند. از آنجایی که مقادیر به دست آمده پس از این مرحله اعداد واقعی تصادفی هستند، باید به یک عدد باینری تبدیل شوند. این با استفاده از توابع محدودیت سخت (به شکل 2 مراجعه کنید) مانند گام واحد یا تابع علامت به دست می آید. پس از چند بار تکرار، اوزان نهایی به دست می آید.

در شکل های 1 و 2، "b" نشان دهنده بایاس، "n" تعداد انواع ورودی ها، "R" عدد واقعی، و "S" تابع مرحله واحد برای تبدیل عدد واقعی به 1 و 0 است. Rx1 و Sx1 نشان دهنده ضرب هستند.

وزن نهایی برای بدست آوردن خروجی نهایی با استفاده از MATLAB محاسبه می شود.

توضیحات در مورد بلوک LabVIEW

LabVIEW یک محیط برنامه نویسی گرافیکی است که به شما امکان می دهد یک سیستم پردازش دیجیتال را در زمان کوتاه تری نسبت به محیط های برنامه نویسی مبتنی بر متن طراحی و تجزیه و تحلیل کنید. برنامه های گرافیکی LabVIEW ابزار مجازی نامیده می شوند.

دیاگرام جریان ترکیبی برنامه های LabVIEW و MATLAB
شکل 7. دیاگرام جریان ترکیبی برنامه های LabVIEW و MATLAB

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

یک ابزار مجازی از دو جزء اصلی تشکیل شده است: یک پانل جلویی و یک بلوک دیاگرام. پنل جلویی رابط کاربری یک برنامه را فراهم می کند، در حالی که بلوک دیاگرام کد گرافیکی آن را در خود جای داده است. بلوک دیاگرام شامل نمادهای ترمینال، گره ها، سیم ها و ساختارها است. آیکون های ترمینال رابط هایی هستند که از طریق آنها داده ها بین پنل جلویی و بلوک دیاگرام رد و بدل می شود. یک ابزار مجازی با عقب و جلو رفتن بین پانل جلویی و بلوک دیاگرام، قرار دادن ورودی/خروجی ها در پانل جلویی و بلوک های ساختمانی روی بلوک دیاگرام طراحی می شود.

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

ماتریس انتقال واقعی برای جابجایی ماتریس دارای عدد واقعی استفاده می شود.

ماتریس ورودی به بلوک هدایت می شود و انتقال ماتریس خروجی در خط نارنجی به دست می آید. خطاها، در صورت وجود، در خط آبی قابل مشاهده هستند (به شکل 4 مراجعه کنید).

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

تغذیه ورودی ها و مقدار دهی اولیه وزن ها در مرحله اول بلوک انجام می شود (شکل 5). یعنی اولین تکرار در این مرحله انجام می شود. کل ورودی‌های محاسبه و وزن از مرحله اول اکنون به مرحله دوم (شکل 6) برای پردازش بیشتر برای آموزش سیستم وارد می‌شوند. تکرارها تکمیل شده و اوزان نهایی در مرحله دوم به دست می آید.

الگوریتم یادگیری

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

الگوریتم یادگیری که نشان می‌دهیم در تمام نورون‌های خروجی یکسان است. بنابراین هر آنچه در ادامه می آید به یک نورون منفرد اعمال می شود.

ابتدا چند متغیر را تعریف می کنیم:

y = f(Z) خروجی پرسپترون برای بردار ورودی "Z" را نشان می دهد.

"b"= سوگیری یا بایاس، که در مثال زیر 0 در نظر گرفته شده است.

D = {(x1, d1), …, (xs, ds)} مجموعه آموزشی نمونه های 's' است که 'xj' بردار ورودی n بعدی و 'dj' مقدار خروجی مورد نظر پرسپترون است. برای آن ورودی مقادیر گره ها را به صورت زیر نشان می دهیم:

xj, i = مقدار گره jth از بردار ورودی آموزش j

xj، 0 =1

وزن ها با wi نمایش داده می شوند که مقدار jth در بردار وزن است تا در مقدار گره ورودی i ضرب شود.

یک بعد اضافی، با شاخص n+1، می تواند به همه بردارهای ورودی اضافه شود، با xj، n+1 = 1، در این صورت wn+1 جایگزین عبارت بایاس می شود. برای نشان دادن وابستگی زمانی «w»، از wi(t) استفاده می کنیم که وزن i در زمان t است.

α = نرخ یادگیری، که در آن 0<α≤1

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

وزن‌های مناسبی به ورودی‌ها اعمال می‌شود و مجموع وزنی حاصل به تابعی ارسال می‌شود که خروجی «y» را تولید می‌کند.

مراحل یادگیری الگوریتم. با متغیرهای تعریف شده در بالا، خروجی را به صورت زیر محاسبه می کنیم:

ابتدا خروجی واقعی را با استفاده از تابع محاسبه کنید:

8

دوم، وزن ها را به صورت زیر تطبیق دهید:

wi(t+1) = wi(t)+α(dj–yj(t))xj,i برای همه گره ها 0≤i≤n.

حالا به صورت زیر عمل کنید:

  1. وزن های w1, w2, w3, w4 و threshold را مقداردهی اولیه کنید که به صورت داخلی در برنامه انجام شده است. توجه داشته باشید که وزن‌ها ممکن است با تنظیم هر گره وزنی wi(0) روی 0 یا یک مقدار تصادفی کوچک مقداردهی اولیه شوند.
  2. برای هر نمونه 'j' در مجموعه آموزشی ما 'D'، مراحل زیر را روی ورودی xj (در برنامه LabVIEW، ورودی‌ها p1، p2، ​​p3 و p4) و خروجی dj مورد نظر (در برنامه t1، t2، t3 و t4) انجام دهید.
  3. وزن ها پس از شبیه سازی برنامه برای 5000 تکرار و به دست آمدن وزن نهایی به روز می شوند که مجموعه ای مناسب از معادله را برای عملکرد به دست می دهد.

مرحله 2 تکرار می شود تا زمانی که خطای تکرار dj-yj(t) کمتر از آستانه خطای تعیین شده توسط کاربر γ باشد، یا تعداد تکرارهای از پیش تعیین شده تکمیل شود. این خطا با کم کردن خروجی به دست آمده از طریق تکرار از خروجی مورد نظر محاسبه می شود. این کار باید در هر دو مرحله LabVIEW به عنوان بلوک جمع کننده و تفریق انجام شود (به شکل 5 و 6 مراجعه کنید).

در برنامه LabVIEW (شکل 3) دو مرحله وجود دارد که وظیفه آموزش سیستم و یادگیری سیستم را بر عهده دارد. اول از همه، کاربر مقدار را وارد می کند. این مقدار به مرحله یک داده می شود، که یک تکرار را کامل می کند و تمام وظایف را همانطور که در بالا توضیح داده شد انجام می دهد. اکنون خروجی مرحله اول و وزن به روز شده آن به همراه ورودی های کاربر p1، p2، ​​p3 و p4 به ورودی مرحله دوم تبدیل می شود و به این ترتیب 4999 تکرار باقی مانده انجام می شود.

لازم به ذکر است که برای به دست آوردن خروجی صحیح، باید تعداد دفعات تکرار را به درستی انتخاب کرد. پس از اثبات وزن‌ها، ورودی‌ها و آستانه، LabVIEW با کلیک کردن روی دکمه «فلش» شبیه‌سازی می‌شود. پس از 5000 تکرار، وزن های نهایی به روز می شوند.

با ورودی‌های p1، p2 و p3 وارد LabVIEW، وزن‌های نهایی (w) را به صورت -5384.2، 2884.4، 2692.95 و 9615 دریافت خواهید کرد. نمودار جریان کامل برنامه در شکل 7 نشان داده شده است.

4. وزنه های نهایی به برنامه متلب داده می شود تا خروجی مورد نظر به دست آید. در اینجا شما خروجی را به صورت h = -1 دریافت می کنید.

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

مراحل تست

  1. نسخه ارزیابی LabVIEW و MATLAB 10.0 را در سیستم خود نصب کنید. LabVIEW را می توان از وب سایت National Instruments دانلود کرد.
  2. LabVIEW را از دسکتاپ راه اندازی کنید.
  3. گزینه Blank IV را انتخاب کرده و برنامه LabVIEW (Perp.vi) را باز کنید.
  4. ورودی های بین 2 و -2 را وارد کنید. همه ابعاد باید ماتریس 4×1 باشد. مطمئن شوید که حتی به هیچ نقطه ورود داده ای به غیر از چهار نقطه ستون در پانل جلویی LabVIEW دست نزنید. ابعاد ماتریس باید مطابقت داشته باشد. اگر روی نقطه ورودی کلیک کنید، رنگ آن به سفید تغییر می کند که اندازه ماتریس را 5 می کند. بنابراین اندازه داده ها ناسازگار خواهد بود.
  5. نرخ یادگیری 0.1 تا 0.2 را وارد کنید. برای اجرای برنامه روی فلش (→) در نوار منو کلیک کنید.
  6. وزن های نهایی درست در زیر صفحه نمایش داده می شود. این مقادیر را در کد متلب (perceptronopbipolar.m) وارد کرده و برنامه را اجرا کنید تا خروجی مورد نظر h = -1 به دست آید.

برای دانلود منبع کد برای شبیه سازی شبکه عصبی مصنوعی در لبویو و نرم افزار متلب اینجا کلیک کنید

پروژه ای برای انجام داری؟

تخصص انجام پروژه داری؟

دیدگاه خود را بیان کنید

1000 کاراکتر باقیمانده است