رفتن به مطلب

باهم شبکه های عصبی یادبگیریم


ارسال های توصیه شده

  • پاسخ 67
  • ایجاد شد
  • آخرین پاسخ

بهترین ارسال کنندگان این موضوع

بهترین ارسال کنندگان این موضوع

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

اگر نرم افزار متلب دراختیار ندارید برای تهیه آن می توانید به این سایت

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
مراجعه کنید یا دی.وی.دی اونو از بیرون خریداری کنید

روش کار به این صورته که ابتدا سعی می کنیم یه اشنایی کلی درمورد شبکه عصبی و کارکرد اون پیدا کنیم برای اینکار بیشتر روی مفاهیم عملی آن تاکید می کنیم تا مفاهیم تئوری .

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

 

توجه : شبکه های عصبی جزو مفاهیم و ابزارهایی هست که در رشته ها و شاخه های مختلف علوم فنی-مهندسی - اقتصاد- پزشکی- روانشناسی و جامعه شناسی کاربرد زیادی دارد و دوستان باید برحسب رشته و نیاز تحقیقاتی خود دنبال مطالب و مسایل حل شده با شبکه های عصبی باشند

  • Like 14
لینک به دیدگاه

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

باید خدمت این دوستان عرض کنم نرم افزار متلب جزو نرم افزارهایی هس که اکثر بچه های فنی -مهندسی با اون سروکار داشتن syntax دستورات اون خیلی گویا و کار کردن با انها خیلی سرراست و اسان هست

ازهمه مهم تر , شما samples و برنامه های زیادی روی نت میتونید پیدا کنید که با نرم افزار متلب پیاده سازی شده اند تقریبا برای هر نوع شبکه ای .حتی فیلم های اموزشی زیادی دراین رابطه توی نت وجود داره و قابل دسترسیه

 

پ. ن : شخصا هر مثال یا مطلب یا منبعی که پیدا کنم دراینجا به اشتراک خواهم گذارد.

  • Like 21
لینک به دیدگاه

شبکه عصبی یک طبقه بند الگوست به عبارت بهتر زمانی از شبکه عصبی برای حل مسایل استفاده می کنیم که بتوانیم آن مسئله را تاحد یک مسئله طبقه بندی الگوها ساده کنیم

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

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

  • Like 21
لینک به دیدگاه

شکل زیر ساختار یک شبکه عصبی ساده را نشان میدهد :

 

x2zyckmwoneshkpxc4w4.jpg

این شبکه از یک ورودی بنام P , یک نورون و خروجی نورون a تشکیل شده هست .

هر نورون از دو عنصر کلیدی بنام تابع انتقال F و وزن W تشکیل یافته است .به پارامتر b اصطلاحا بایاس (bias) گفته می شود . وقتی ورودی P به نورون اعمال می شود مقدارش ضربدر w شده حاصل با b جمع و حاصل انها به عنوان ورودی به تابع انتقال F داده می شود . بسته به تعریف تابع انتقال , تصویر هر ورودی به خروجی a مرتبط با تابع انتقال نگاشته می شود .

 

به دو پارامتر W و b , پارامترهای تنظیم کننده شبکه عصبی گفته میشود .

  • Like 18
لینک به دیدگاه

انواع مختلف توابع انتقال وجود دارد . درحدود 12 عدد (کاملا مطمئن نیستم )

در نرم افزار MATLAB جهت اشنایی با عملکرد هریک از توابع , در خط فرمان دستور nnd2n1 را تایپ و اینتر بزنید این یک demo از انواع توابع هست با تغییر هریک از پارامترهای قابل تنظیم b و W می توانید تغییرات و خروجی a را مشاهده کنید

با تایپ دستور فرمی به صورت زیر برایتان باز خواهد شد:

 

enfq1hyrapr3ooeq28el.jpg

  • Like 21
لینک به دیدگاه

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

 

به عنوان مثال می توان شبکه عصبی طراحی کرد که بتواند رخداد اختلاس در شبکه بانکی را کشف کند:ws3: اما نمی تواند دلیل بیاورد که چطور به این نتیجه رسیده است:vahidrk: ولی شبکه های بیزین دقیقا مرحله به مرحله برای شما دلیل می اوردند که بنا به این علت , این نتیجه استدلال شده است و...:w02:

  • Like 19
لینک به دیدگاه

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

  • Like 19
لینک به دیدگاه

هر شبکه عصبی می تواند دارای چندین لایه باشد و در هر لایه می تواند حاوی بیش از یک نورون باشد هر نورون تابع انتقال خاص خود را می تواند داشته باشد

برای اشنایی بیشتر با شبکه عصبی چن لایه ای و چند نورونی میتواند در خط فرمان دستور nnd2n2 را تایپ و اینتر بزنید تا demo موردنظر اجرا گردد

 

50qak2pbtfjl7w3uyfv.jpg

همانطور که درشکل بالا می بینید وزن اتصالی بین نورون شماره یک و ورودی شماره یک به صورت w(1,1) نشان داده شده است .

اگر بیش از یک لایه داشته باشیم از بالا نویسی استفاده می کنیم معمولا تعداد نورورن ها را با عدد S نمایش میدهند.

وقتی می نویسیم w n,m یعنی از لایه m اتصالی خارج به لایه n وارد میشود .

 

  • Like 17
لینک به دیدگاه

یک شبکه چند لایه ای کلا دارای سه بخش هست بخش ورودی (معمولا ورودی را لایه حساب نمی کنند ) بخش لایه های پنهان (ازنظر تئوری محدودیتی در تعداد ای لایه ها نیست ) و بخش لایه خروجی .

iopjxyz8w4yuchu07ky.jpg

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

بعدا یک مثال کاربردی بنام برآورد قیمت خانه (House Price Estimation-fit_house_demo) را بررسی خواهیم کرد .

  • Like 19
لینک به دیدگاه

منظور نحوه اعمال داده های ورودی به شبکه است دو نوع بردار ورودی داریم :

 

1- بردارهای ورودی همزمان : یعنی داده ها را یه دفعه و به صورت همزمان به شبکه اعمال کنیم .در این نوع بردارها ترتیب ورود داده ها مهم نیست

 

2- بردارهای ورودی تریبی : در این نوع از بردار, ترتیب زمانی اعمال داده ها به شبکه مهم است .

  • Like 13
لینک به دیدگاه

یک شبکه را ایستا می گویند که دران feedback و delay وجود نداشته باشد در این نوع از شبکه ها نحوه اعمال ورودی ها مهم نیست همه داده ها به صورت همزمان به شبکه اعمال می شوند.

 

یک مثال از شبیه سازی شبکه ایستا با بردارورودی همزمان :

 

شبکه زیر را می خواهیم شبیه سازی کنیم :

9k3mcltakibxjch2hp5.jpg

 

برای ایجاد چنین شبکه ای طبق شکل زیر عمل کنید :

wc1og7q5yzwug5kquzzd.jpg

 

همانطور که می بیند در قسمت خط فرمان نرم افزار MATLAB دستورات بالایی را تایپ کنید:

درخط اول داریم اعلام می کنیم که یک شبکه عصبی تک نورونی( پارامتر دوم تابع newlin) با دو ورودی (پارامتر اول تابع newlin) میخواهیم برای مشخص کردن نوع تابع انتقال از اسم تابع موردنظر استفاده می کنیم . تابع newlin تابع انتقال خطی را شبیه سازی می کند max و min مقدار هر ورودی را به صورت [1 3;1 3] مشخص می کنیم این پارمتر مشخص می کند که هریک از ورودی ها دارای کمترین مقدار یک و بیشترین مقدار سه هستند .

خط دوم به هریک از ورودی ها , وزن اختصاص میدهد به این معنی که ورودی اول دارای وزن یک و ورودی دوم دارای وزن دو هست . بایاس رو هم به صورت پیش فرض صفر نگه میداریم بردار P ورودی ها رو به شبکه اعمال می کند درواقع این بردار یک ماتریس دو در چهار هست . خط اخر بوسیله تابع sim , شبکه را شبیه سازی می کند و خروجی را به ما میدهد .

در این مثال باید به این نکته توجه کنیم که این شبکه هنوز وارد فاز یادگیری نشده است (یادگیری بعدا توضیح داده خواهد شد ).

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

تابع خطی به صورت زیر عمل می کند

w*p+b=x

F(x)=x

 

  • Like 9
لینک به دیدگاه

شبکه هایی که دارای feedback و delay باشند شبکه های پویا می گویند

 

یک مثال از شبیه سازی شبکه های پویا با بردار ورودی ترتیبی :

شبکه زیر را که یک شبکه با تاخیر است برای شبیه سازی شبکه های پویا درنظر بگیرید

j692a0fc09s0vn1galc.jpg

دستورات زیر را در خط فرمان نرم افزار MATLAB تایپ کنید .

 

pbm7biz7lkbtfq2ufd9.jpg

این شبکه نیز از تابع انتقال newlin (خطی ) استفاده می کند

به نحوه و فرمت وارد کردن داده توجه کنید برای اینکه به تابع اعلام کنیم ازچه نوع شبکه ای می خواهیم استفاده کنیم از دو پارامتر استفاده می کنیم یکی پارامتر تاخیر (delay) که در این جا سومین پارامتر در تابع newlin است ([0 1]) و دیگری فرمت وارد کردن داده هاست دراینجا از نماد {} برای مشخص کردن ترتیب استفاده می کنیم .

توجه کنید در صورتی که ترتیب ورود داده ها عوض شود نتایج نیز عوض خواهد شد .

  • Like 13
لینک به دیدگاه

1- اموزش گام به گام (incremental training )

دراین شیوه وزن ها و بایاس ها بعد از اعمال هر ورودی به روز می شوند

 

2- آموزش دسته ای (batch training )

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

  • Like 13
لینک به دیدگاه

ابتدا سراغ آموزش گام به گام برویم این شیوه معمولا در شبکه های پویا مانند *****های تطبیقی (adaptive filters) مورد استفاده قرار می گیرد هرچنداز این روش در شبکه های ایستا هم می شود استفاده کرد .

 

یک مثال

 

شبکه زیر را درنظر بگیرید

mfh5ilffypqndqx7qo2p.jpg

می خواهیم این شبکه رابرای تابع T=2p1+p2 به روش گام به گام اموزش دهیم برای اینکار از تابع adapt موجود در نرم افزار MATALB استفاده می کنیم ابتدا باید چن مثال به همراه جواب درست را به شبکه بدهیم به این شیوه یادگیری , یادگیری با ناظر می گویند . مثل این می ماند به بچه ای بخواهید عمل جمع را یادبدهید ابتدا کل جریان را برایش توضیح میدهید بعد چند تا مثال برایش حل می کنید بعد بهش یک مثال داده و ازش می خواهید حل کند اگر درست حل کرد که هیچ وگرنه سعی می کنید روش خود را کمی اصلاح کرده و به زبان بهتری عمل جمع را برایش توضیح داده و مثال های بیشتری برایش حل کنید مثال هایی که حالت های مختلف را در بربگیرد این شیوه را انقدر تکرار می کنید تا مطمئن شوید کودک , عمل جمع را یادگرفته است .

 

 

 

 

 

ابتدا ورودی ها و جواب را به شبکه می دهیم

برای شبیه سازی و اموزش شبکه به صورت زیر دستورات را وارد می کنیم

4ig4cxsrnky6zowr2s41.jpg

در دستور خط اول پارمتر اخری تابع newlin مربوط به نرخ و سرعت یادگیری شبکه هست که برابر صفر قرار داده شده است (بعدا در مورد الگوریتم یادگیری پشت صحنه صحبت خواهیم کرد ). بنابراین وقتی اخر خط دستور را تایپ و کلید اینتر را بزنیم خروجی بردار a برابر صفر خواهد بود برای دیدن خروجی a در سمت راست پنجره نرم افزار پنلی بنام workspace وجود دارد که دران می توان تمامی مولفه های شبکه را مشاهده کرد روی a کلیک کنید شکلی به صورت زیر مشاهده خواهد کرد .

mmrr3fcd3yzc46hby06p.jpg

 

حال سرعت یادگیری را برابر 0.1 تنظیم می کنیم و اموزش شبکه را اغاز می کنیم . برای اینکار در خط فرمان دستورات زیر در ادامه دستورات قبلی تایپ کنید

ef51nmnsfedto0p7h6wj.jpg

روی بردار e که بیانگر میزان خطا هست کلیک کنید (درهمان قسمت workspace قراردارد)

میزان خطا برابر مقدار زیر خواهد بود:

sxt6m14eef9fzxoq785.jpg

خطا از فرمول زیر بدست می اید :

e=t-a

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

اگر روی بردار a کلیک کنید مقادیر زیر را باید مشاهده کنید :

3m9on748zoms93ekch.jpg

 

می دونید چرا خروجی اول دارای مقدار صفر است درحالی که مقدار مورد انتظار و هدف ما چهار بود ؟

بخاطر این ست که شبکه درحال اموزش به روش گام به گام است بعد از اعمال اولین ورودی , شبکه هنوز در اغاز پروسه یادگیری است اما اعمال ورودی ها و داده های اموزشی دیگر کم کم میزان خطا کمتر شده و به صفر میل می کند

 

یک مسئله دیگری که باید در مورد این نوع اموزش در شبکه های ایستا باید ذکر کنیم این است که در شبکه های ایستا نحوه ورود داده ها مهم نیست چه به صورت همزمان باشد و چه به صورت ترتیبی , چون خود شبکه درهر صورت به صورت همزمان داده ها را به شبکه اعمال خواهد کرد اما وقتی پای اموزش شبکه به میان می اید قضیه فرق می کند در پروسه اموزش گام به گام باید داده ها را به صورت ترتیبی به شبکه ایستا اعمال کنیم همانطور که دیدید برای اینکار از فرمت ترتیبی ( رجوع کنید به خط دستور 4 )برای اعمال ورودی به شبکه استفاده کردیم

 

  • Like 11
لینک به دیدگاه

معمولا استفاده از این روش در شبکه های پویا , رایج تر از شبکه های ایستا ست . میخواهیم شبکه زیر را اموزش دهیم

j692a0fc09s0vn1galc.jpg

 

بردار وزن ها را برابر صفر قرارداده و سرعت یادگیری را هم برابر 0.1 تنظیم می کنیم . بازهم از تابع adapt برای اموزش گام به گام استفاده می کنیم .

دستورات زیر را در خط فرمان وارد می کنیم .

txc80pug98higv8nwoi.jpg

 

 

مشاهده میشود خروجی شبکه به صورت زیر است :

eqsf8h4sgy64ngdopjb3.jpg

و مقدار خطا به ازای هر ورودی :

hlq6vcrmfl28kwyjkhd.jpg

  • Like 8
لینک به دیدگاه

در اموزش گام به گام از تابع adapt برای اموزش شبکه استفاده کردیم اما اموزش دسته ای هم با تابع train و هم با تابع adapt انجام میشود اما بهتر است از تابع traint برای اموزش دسته ای استفاده کنیم .

fjede8en0pyjjvc87ogf.jpg

 

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

اجازه بدهید ببینیم مقدار وزن ها با یکبار اعمال ورودی ها چه مقداری را گرفته اند . برای اینکار از دستورات زیر استفاده می کنیم

bz61jphdth9yffi1vrcu.jpg

 

اگر از تابع train هم استفاده کنیم باز همین نتایج را خواهیم گرفت

  • Like 6
لینک به دیدگاه

درشبکه های پویا اموزش دسته ای فقط با train انجام میشود

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

uj92egqii554yoy8e605.jpg

دراینجا تعداد گذر (epochs ) را برابر یک قرار دادیم تا معادل با یک گذر از تابع adapt باشد می بینیم که باز همان نتایج را به مامی دهد .

یعنی خروجی بردار a تماما صفر خواهد شد

  • Like 5
لینک به دیدگاه

در ادامه با آموزش شبکه های پرسپترون باما همراه باشید

 

به قول سنجد برمی گردم حتمااااااااااااااااااااااااااااااااااااااااااااااا .........ععععععععععععععععععععععععععععععععععععععع:ws3:

  • Like 6
لینک به دیدگاه

سلام

امروز با اموزش شبکه های پرسپترون درخدمتون هستم

این بار برعکس پست های قبلی که زیاد به مفاهیم اولیه پرداخته بودم با دو مثال نسبتا کاربردی این شبکه ها را اموزش میدهم

با من همراه باشید :w16:

  • Like 8
لینک به دیدگاه

×
×
  • اضافه کردن...