تولباكس شبكه عصبي در متلب

۱ بازديد


 
 ماشين حساب
مغز آدمي يقينا پيچيده ترين سيستمي ست كه تا كنون با آن مواجه شده ايم. ولي اين در حالي است كه اين سيستم پيچيده نه ابعاد بزرگي دارد و نه مانند كامپيتر ها اجزاي بي شماري دارد . پس چرا پيجيده ترين است؟ اين پيچيدگي بخاطر نوع اتصالات بين اجزاي آن (سلول هاي مغز انسان ) است. اين در حالي است كه تحقيقات نشان مي دهد كه واحد هاي سازنده ي مغز از نظر سرعت يك ميليون بار كند تر از ترانزيستور هاي CPU  هستند ولي در عين حال بعضي از فرايند هايي كه در مغز رخ مي دهد را بوسيله ي هيچ پردازنده ي ساخت بشر نمي توان انجام داد. اگر اين نوع اتصالات اجزاي مغز را نداشته باشيم عملكرد مغز در حد يه سيستم معمولي مي شود. حال اگر بتوانيم سيستمي طراحي كنيم كه عملكرد مغز را شبيه سازي كند قطعا به تحول عظيمي دست يافته ايم. در اين نوشته ضمن ارايه تعريف شبكه عصبي و شبكه ي عصبي مصنوعي ، از تلاش هايي كه در زمينه ي شبيه سازي اين امر صورت گرفته مواردي را ذكر كرده و ضمن بررسي كابرد هاي شبكه ي عصبي به ارايه مثال هايي در اين باره مي پردازيم . در آخر برخي توابع استفاده شده در اين تولباكس متلب را توضيح داده و يك مساله ي واقعي را با آن حل نموده و خروجي ها را تحليل مي نماييم .
  ماشين حساب
تعريف كلي شبكه عصبي :
واحد تشكيل دهنده سيستم عصبي نورون است
هر نورون (يا بعبارتي سلول عصبي) يك جسم سلولي دارد كه از آن شاخه هايي بيرون مي آيد. به بلند ترين شاخه ي خروجي آكسون مي گويند. آسكون ها با كنار هم قرار گرفتنشان باعث تشكيل رشته ي عصبي مي شوند. به طور كلي شاخه ها و رشته هايي كه از نورون بيرون آمده اند دو نوع هستند : دندريت و آكسون ها. دندريت پيام ها را ميگيرد و به جسم سلولي مي برد. آكسون هم پيام عصبي را از جسم سلولي تا پايانه هاي آكسون هدايت مي كند.  دستگاه عصبي با ارتباط بين ميليون ها نورون كار ها و وظايف خود را پيش مي برد. در مغز ما حدود  نورون وجود دارد كه هر كدام از آن ها با   نورون ديگر در ارتباط است. سرعت سويچ كردن بين نورون ها حدود  ثانيه است كه در مقايسه با كامپيوتر ها  ( ) خيلي كم است
image1
در جانور هاي پرسلولي براي هماهنگي بين سلول ها و انئپدام هاي بدن ، سيستم عصبي (Nervousn Sustem) با ساختاري كه دارد ايجاد شده است.
 
تعريف شبكه عصبي مصنوعي :
سيستمي است كه با الهام گرفتن از عملكرد مغز سعي دارد عملكردي شبيه آن را اجرا نمايد. اين سيستم داده ها با استفاده از پردازنده هاي بسيار كوچك و زيادي كه در آن به صورت شبكه اي موازي و به هم پيوسته است پردازش مي كند تا جواب مساله بدست بيايد. در اين جا شبكه عصبي را شبيه سازي مي كنيم. نورون را مانند ساختمان داده اي در نظر ميگيريم و با ايجاد ليست هاي پيوندي بين نورون ها الگوريتم آموزش درست مي شود. حال اين الگوريتم را تعريف مي كنيم. الگوريتم آموزش از سيستم عصبي انسان ايده گرفته است كه مثلا وقتي سلول لامسه مي سوزند از آن به بعد مي فهمد كه سمت اجسام داغ نبايد برود.
در شبكه عصبي نورون ها در دو حال هستند . فعال (۱) يا غير فعال (۲) و به هر يال (سيناپس) يك وزن اختصاص مي دهيم. اگر وزن مثبت باشد گره بعدي اگر غير فعال باشد فعال مي شود. و اگر منفي باشد يال فعال بعدي را غير فعال مي كند. براي يادگيري ، سيستم شبكه عصبي وزن سيناپس ها را تغيير مي دهد كه بتواند با تحريك هاي ورودي (داده هاي مساله) جريان خروجي مناسب توليد كند. در اين حالت شبكه عصبي برنامه ريزي نشده است بلكه با تنطيم وزن هاي ورودي هر نورون عصبي ياد ميگيرد مساله را حل نمايد.
شبكه ي عصبي به اين صورت كار مي كند كه ابتدا يك گره را به طور تصادفي انتخاب ميكنيم. اگر حد اقل يكي از گره هاي همسايه ي آن فعال باشد آنگاه جمع وزن يال هاي منتهي به آن گره ها را محاسبه مي كنيم. اگر جمع اين وزن ها مثبت باشد گره فعال مي شود در غير اين صورت غير فعال باقي مي ماند. حال يك گره ديگر را به تصادف انتخاب مي كنيم و اين روند را ادامه مي دهيم تا شبكه پايدار شود.
تز اصلي هاپفيلد : از هر حالت شروع و با هر وزني از يال‌ها كه آغاز كنيم، شبكه در آخر به حالت پايدار مي رسد. 
 
مزيت شبكه عصبي بر كامپيوتر هاي معمولي
اين دو يعني شبكه عصبي نسبت به كامپيوتر هاي معمولي يك فرق بسيار عمده دارد كه باعث مزيت داشتن شبكه عصبي مي شود. در كامپيوتر از يك مسير الگوريتمي و با استفاده از دستور العمل هاي داده شده مي خواهيم مساله اي را حل كنيم و اگر مراحل كار از قبل براي ما مشخص نباشد قادر به حل مساله نيستيم. در كامپيوتر ما صرفا قادر به حل مسائلي هستيم كه آن ها را درك ميكنيم و مي دانيم كه چگونه حل مي شود. ولي حالت ايده آل اين است كه سيستمي داشته باشيم كه حتي مسائلي كه ما دقيقا نميدانيم چگونه حل مي شود را هم حل كند .
شبكه عصبي مصنوعي مشابه كاري كه در مغز صورت مي پذيرد را انجام مي دهد و پردازش مي كند. آن ها از تعداد بسيار زيادي سلول عصبي كه بهم پيوسته هستند و به صورت موازي با هم كار مي كنند براي حل يك مساله مشخص استفاده مي شود. شبكه عصبي را مانند كامپيوتر نمي توان براي يك وظيفه خاص برنامه ريزي كرد بلكه با توجه به مثال هايي كه به آن داديم كار مي كند. ولي بايد مثال هاي مناسبي در اختيار آن قرار دهيم و گر نه اين شبكه ممكن است اشتباه كار كند. امتياز اصلي شبكه عصبي اين است كه خودش مي فهمد كه يك مساله را چگونه بايد حل كند. بر خلاف كلامپيوتر كه عملكرد آن قابل پيش گويي است و اگر اشتباهي از آن سر بزند يا مربوط به اشتباهات نرم فزاري است يا سخت افزاري ، در شبكه عصبي عملكرد غير قابل پيش بيني است.
 
فرايندي براي تبديل input ها به output  ها :
در شبكه عصبي يك يا چند ورودي و به همچنين تعدادي خروجي خواهيم داشت. مساله اصلي پاسخ به اين سوال است كه طي چه فرايندي ميتوانيم از input ها به output ها برسيم.
مثلا در بازار سهام ما ورودي هايي مثل نقدينگي شركت ، تعداد پرسنل ، تورم ساليانه و سياست هاي دولت وجود داشته و در نهايت سوددهي شركت را بعنوان خروجي در نظر ميگيريم. همان طور كه مشخص است با فرمولي رياضي مانند    نمي توانيم از ورودي ها به خروجي برسيم.  براي اين مدل هاي مفهومي – علمي از شبكه هاي عصبي كمك مي گيريم.
در شبكه ي عصبي اگر بتوانيم به طور مثال ۵ سال اخير بازار بورس را بررسي كنيم و فرآيند تبديل شاخص هاي ورودي به خروجي آموزش ببينند آنگاه مي توانيم سال بعد آن را پيش بيني كنيم.
 
كاربرد هاي شبكه عصبي :
از كاربرد هاي شبكه عصبي ميتوان به موارد زير اشاره كرد :
كاربرد در زمان بندي معاملات سهامكاربرد شبكه عصبي مصنوعي در حسابرسيكاربرد در آناليز كيفيت كامپيوتركابرد در تخمين ريسك وامكاربرد در تشخيص دست نوشته‌ها. . . 
كاربرد در حسابرسي :
فرآيند هاي حسابداري همواره در حال تغييرند و براي ما هميشه اين سوال مطرح مي شود كه فناوري اطلاعات چطور بر حسابرسي و مهارت هاي آن تاثير مي گذارد. حسابرس ها با كمك فناوري اطلاعات و يافته هاي جديد آن در حيطه هايي مثل نظارت و كنترل عمليات شركت صاحب كار مي توانند موفقيت بيشتري كسب كنند. شبكه ي عصبي يكي از امكانات جديدي است كه در اين حوزه جديد مطرح مي شود. براي ارزيابي ريسك ، كشف اشتباعات با اهميت و تداوم فعاليت از شبكه هاي عصبي مصنوعي استفاده مي شود.
 
شبكه عصبي چگونه كار مي كند؟
حال در ادامه با چند مثال ساده بررسي مي كنيم كه شبكه ي عصبي چگونه كار مي كند
دو دسته داده داريم (قرمز و آبي) كه بعنوان خروجي اي كه از ورودي هاي   و  بدست مي آيد مطرح مي شود. در ادامه قرمز را ۱ در نظر گرفته و به همين ترتيب به رنگ آبي عدد ۱ را نسبت مي دهيم.
1
حال مي خواهيم فرايندي را پيدا كنيم و آموزش بدهيم كه اين دو دسته رنگ را از هم تفكيك كند.
مطابق شكل خطي را در نظر ميگيريم. معادله ي خط عبارت است از:
39
كه W ضريبي از  است و C  هم مقدار ثابت معادله خط است. حال  قسمت هايي كه معادله بالاي صفر هست نقطه هاي قرمز را نشان مي دهد
40
به همين ترتيب قسمت هايي كه معادله كمتر از صفر است نقطه هاي آبي را به ما مي دهد.
41
به كمك اين خط و معادله ي آن مي توانيم اين دو رنگ را از هم تفكيك كنيم.
در شبكه ي عصبي هم درست رويه اي مشابه اين موضوع را شاهد هستيم. شبكه ي عصبي ساده اي مطابق شكل زير را در نظر ميگيريم
2
به هر x وزني به نام  W نسبت مي دهيم
حال يك شبكه ي عصبي خواهيم داشت كه تابع اگر بيشتر از صفر باشد مقدار قرمز گرفته و به آن عدد ۱ نسبت مي دهيم. اگر هم كمتر از صفر باش مقدار آبي مي گيرد و به آن عدد ۱ را نسبت مي دهيم..
يعني با توجه به معادله اي كه در اختيار داريم ورودي ها را مي دهيم . آنگاه چك مي كند كه با معادله ي خط چه وضعيتي دارد. اگر از صفر بزرگتر باشد به آن عدد ۱ را نسبت مي دهيم و اگر هم كمتر از صفر بود به آن عدد ۰ را نسبت مي دهيم.
پس به طور كلي در شبكه هاي عصبي :
3
پس شبكه ي عصبي :
42
به عدد ثابتي كه به فرمول اضافه مي شود باياس مي گوييم.
 
وظيفه شبكه :
كار شبكه ي عصبي اين است كه اين وزن ها و باياس را طوري پيدا كرده و تغيير بدهد كه خروجي حاصله از شبكه ي عصبي نسبت به مقدار واقعي كمترين خطا را داشته باشد.
پس وظيفه ي شبكه عصبي به اختصار عبارت است از :
بهينه كردن وزن ورودي ها و باياس
آنچه تا كنون بررسي كرده ايم شكل كلي نورون و شبكه ي عصبي تك لايه است. حال براي فهم بيشتر شبكه عصبي چند لايه پرسپترون بهتر است با برسسي چندين مثال ساده پله به پله ببينيم چرا و چگونه همچين شبكه اي تشكيل مي شود.
خب تركيب هاي  ساده و باينري رو در نظر مي گيريم :
تركيب عطفي AND4
43
خب در اين تركيب عطفي صرفا در مواردي كه هم  و هم  برابر با يك باشد نتيجه ي خروجي يك خواهد بود. با توجه به مقدار ورودي ها و خروجي هايي كه داريم ميتوانيم نموداري را مطابق شكل زير رسم كنيم :
5
ما با خط  x1+x2=1/5  توانستيم كه نقاط خروجي را به دو دسته ي آبي و قرمز تفكيك كنيم.
 
تركيب فصلي OR6
44
در اين تركيب فصلي در مواردي كه حد اقل يا  يا  برابر با يك باشد نتيجه ي خروجي يك خواهد بود. با توجه به مقدار ورودي ها و خروجي هايي كه داريم ميتوانيم نموداري را مطابق شكل زير رسم كنيم :
7
ما با خط x1+x2=0/5  توانستيم كه نقاط خروجي را به دو دسته ي آبي و قرمز تفكيك كنيم.
 
XOR8
45
در اين جا در مواردي كه هر دوي  و  مشابه باشن باشند نتيجه ۰ حاصل مي شود ولي اگر مقدار اين دو متفاوت باشد نتيجه حاصله ۱ خواهد بود. با توجه به مقدار ورودي ها و خروجي هايي كه داريم ميتوانيم نموداري را مطابق شكل زير رسم كنيم :
9
همان طور كه مشاهده ميكنيد نمي توانيم با يك خط نقطه ها را تفكيك كنيم و مجبور هستيم از دو خط استفاده كنيم.. حال براي اينكه بتوانيم همچنان با يك خط حائل اين نقاط را از هم تفكيك كنيم نموداري مطابق شكل زير را در نظر مي گيريم. در يك سمت نمودار از تركيب عطفي AND و در طرف ديگر نمودار از تركيب فصلي OR استفاده ميكنيم. براي مقادير ورودي ابتدا با تركيب هاي فصلي و عفطي نتيجه را بدست آورده و سپس در نمودار رسم مي كنيم.
10
همان طور كه در شكل مي بينيم در اين حالت توانستيم نقاط را با خط OR-AND-0/5=0 از هم تفكيك كنيم. معادله را به صورت زير هم مي توانيم بنويسيم :
46
كه به ترتيب :
47
كه اين اتفاق همان پرسپترون چند لايه (MLP)  است.
11
در شبكه ي عصبي تك لايه مانند مثال هاي ساده AND و OR تنها يك نورون كافي بود. ولي در شبكه ي عصبي چند لايه پرسپترون از چند لايه از نورون ها براي بدست آوردن خروجي ها استفاده مي كنيم.
در اين مثال ابتدا بوسيله ي  و  مي توانيم تركسي هاي عطفي و فصلي را بدست آورده و با كمك آنها شبكه ي چند لايه مان را بسازيم.
پس شبكه ي عصبي به طور كلي مطابق شكل زير است :
12
ما در ساختار كلي شبكه عصبي يك سري ورودي داريم. يك سري لايه هاي مياني پنهان و يك سري خروجي داريم.  بايد توجه داشت كه در نرم افزار متلب رو لايه Hidden و Input را بعنوان لايه ي پنهان مي شناسيم.
پس به صورت فورمولي خواهيم داشت :
48
ميزان خطا هم از فورمول زير به دست مي آيد :
42
تولباكس شبكه عصبي :
حال در محيط متلب ، داده هايي را تعريف كرده و با در نظر گرفتن Target   ، داده ها را آموزش مي دهيم و در آخر نمودار ها و اطلاعاتي كه از آن به دست مي ايد را ببرسي ميكنيم و خروجي ها را تحليل مي كنيم.
13
ورودي ها به شكل زير در صفحه ظاهر مي شود :
14
سپس تابع هدف را تعريف مي كنيم. در اين مثال ميخواهيم عملكرد cosd(input) را با داده ها آموزش ببينيم :
15
خروجي هاي واقعي به صورت زير در مي آيد :
16
الان داده ها و تابع هدف را تعريف كرده ايم. نوبت آن است كه كار با تولباكس متلب را شروع كنيم :
17
در ادامه كار با تولباكس را مرحله به مرحله جلو رفته و در هر بخش توضحاتي ارائه خواهم داد
18
به مرحله ي بعد رفته  تا ورودي ها و خروجي ها را مشخص كنيم :
19
خب در اين جا ورودي ها و تابع هدفي كه از قبل تعريف كرده ايم را به سيستم مي دهيم. در اين جا بايد به عبارتي كه در سمت راست نوشته شده است توجه كنيم. الان در اين مساله ۳۶۰ تا نمونه كه هر كدام يك پارامتر دارد را مورد بررسي قرار مي دهيم. اگر ماتريس ما متفاوت بود در سمت راست تغييرات لازم را انجام مي دهيم. (در مثال بعدي بيشتر به اين موضوع مي پردازيم.)
به مرحله ي بعد مي رويم :
20
داده ها در شبكه ي عصبي به سه دسته تقسيم مي شود :
Training : اين داده ها در اختيار شبكه براي يادگيري است. به طور مثال ما ۷۰ تا سوال به سيستم مي دهيم براي اينكه درس را ياد بگيرد. (۷۰% داده ها به طور مثال)Validation : شبكه ي عصبي با توجه به آموزش هايي كه مي بيند خودش را با Valid چك مي كند كه آموزش چقدر به داده هاي واقعي نزديك است. و اگر آموزش ما ايرادي دارد اصلاح كند(مثلا  ۱۵% داده ها)
Testing : سنگ محك اصلي كه متوجه شويم نتيجه ي حاصله از شبكه ي عصبي چقدر به نتيجه ي واقعي شبيه است ( مثلا ۱۵ % داده ها)در مرحله ي بعد تعداد نورون هاي مخفي را تعيين مي كنيم :
21
در اين جا بايد توجه داشت كه تعداد لايه هاي خروجي همان تعداد خروجي هاي ما است كه در اين جا يك خروجي داريم. به طور مثال در مثال بعدي ما سه خروجي داريم لذا سه لايه خروجي خواهيم داشت.
به مرحله بعد مي رويم :
22
حال داده ها را آموزش مي دهيم و منتظر خروجي ها مي مانيم
23
در سمت راست ستون نمونه ها تعداد هر نوع نمونه را نمايش داده است. در ستون دوم (MSE) ميانگين مربعات خطا ها را خواهيم داشت و در ستون آخر هم ميزان رگرسيون را داريم.
در اين تولباكس بدليل اينكه نميتوان آموزش را تا ابد ادامه داد ، مواردي مشخص شده است كه اگر هر كدام از آن ها عملي شود اجراي آموزش متوقف مي شود :
شرط هاي توقف :
Epoch (تكرار) : مثلا بعد از ۱۰۰ بار تكرار متوقف شودTime (زمان) : محدوديت زماني داشته باشيمPerformance (عملكرد شبكه) : اگر بتوانيم ميزان خطا و اختلاف بين نتيجه اي كه از شبكه عصبي مي گيريم با نتيجه واقعي از يك مقداري كمتر كنيم اجرا متوقف مي شود.Gradiant (گراديان) : ميزان مشتق موجود در شبكه عصبيMu : شاخص هاي الگوريتم بهينه سازي كه مورد استفاده قرار گرفته است.Validation Checks (عدم بهبود) : اگر شبكه ي ما به طور مثال در ۶ تكرار متوالي خروجي را بهبود ندهد متوقف مي شود .حال خروجي را مشاهده مي كنيم :
24
همان طور كه مشاهده مي شود رنگ سبز نشان دهنده ي اين است كه عامل آخر يعني شش دور با عدم بهبود باعث شده اجراي آموزش متوقف شود. در قسمت بالايي هم مواردي را مشاهده مي كنيم كه به اين ترتيب تعريف مي شود :
Data Division : نحوه ي تقسيم داده است. مثلا اينكه از ميان ۳۶۰ داده اي كه داريم ، كدام ۷۰% آن را بعنوان داده هاي آموزشي انتخاب كنيم. اگر داده ها را بطور ساده از يك سمت داده ها انتخاب كنيم كارايي پايين مي آيد. پس بهتر است كه به طور رندوم انتخاب شود.Training : در اين بخش الگوريتمي كه براي آموزش دادن استفاده شده است را مشاهده مي كنيم.Performance : در اين جا شاخص محاسبه عملكرد شبكه آمده است . ميانگين مربعات خطا (MSE)  شاخصي براي اين كار است.Derivative : محاسبه ي مشتق شبكه عصبي 
بررسي نمودار ها :
حال نمودار هايي كه اين تولباكس بعنوان خروجي مي دهيم را بررسي مي كنيم :
Performance :25
نمودار ما در يك سو تعداد تكرار ها را نشان مي دهد و در يك سوي ديگه ميانگين مربعات خطا را. در قسمت مشخص شده ي سبز رنگ ، ما ۶ تكرار بدون بهبود را شاهد هستيم كه باعث توقف فرايند آموزش شده است.
Training State :26
در اين نمودار مقدار خطا ها را مشاده ميكنيم. اگر در ۶ بار پياپي بهبود نداشته باشيم و همين طور صعودي بالا برود متوقف مي شود.. در تكرار ۱۲۱ تا ۱۲۶ ما در شش بار متوالي عدم بهبود را شاهد هستيم.
Error Histogram :27
در اين نمودار ميزان تعلق هر دسته از داده ها به ازاي خطا هاي مختلف مورد بررسي قرار مي گيرد.
Regresson :28
Fit :29
در اين بخش خروجي شبكه عصبي و واقعي را روي هم مي اندازد و اگر اين دو بر هم منطبق باشد دال بر كيفيت خوب شبكه عصبي است
حال شبكه را بعنوان يك Object با نام net ذخيره مي كنيم و با ذكر يك مثال نتيجه ي اين آموزش شبكه عصبي را با نتيجه ي واقعي مقايسه مي كنيم :
كوسينوس ۶۰ درجه :
30
نتيجه ي حاصله از شبكه عصبي :
31
همانطور كه مشاهده مي كنيد نتيجه ي حاصله تنها يك هزارم متفاوت است كه اين نشان دهنده ي موفقيت شبكه ي عصبي مان است.
 
تغيير در تعداد ورودي ها و خروجي ها :
اكنون حالتي را بررسي مي كنيم كه نمونه هاي ورودي دو پارامتري باشد و در تابع هدف هم چندين خروجي تعريف مي كنيم. حال داده هاي ورودي را در دو رديف ۱۸۰ تايي به سيستم مي دهيم :
32
كه خروجي بدين شكل مي باشد :
33
 
آنگاه توابع خروجي را به طور مثال اينطور در نظر مي گيريم :
34
كه خروجي و نتايج واقعي به صورت زير در مي آيد :
35
در اين حالت هم مراحلي كاملا مشابه حالت قبلي را شاهد هستيم تنها با يك تفاوت!
در بخشي كه داده هاي ورودي و خروجي را به تولباكس معرفي مي كنيم از آن جايي كه حالت پيش فرض نرم افزار به جاي اينكه براي ما ۱۸۰ نمونه ي دو پارامتري دريافت كند ، بر عكس دو نمونه ي ۱۸۰ پارامتري دريافت كرده است . همين طور براي خروجي هم به اشتباه سه نمونه ي ۱۸۰ پارامتري را دريافت كرده است.
36
تيك مربوطه را جابجا كرده و ماتريس را در جهت درست معرفي مي كنيم.
در باقي مسير درست مشابه حالت قبل عمل مي كنيم و شبكه را آموزش مي دهيم. در اين حالت براي توقف آموزش ، ابتدا محدوديتي كه بابت گراديان داشته ايم مانع ادامه ي آموزش و حصول نتيجه شده است :
37
 
توابع تعريف شده در تولباكس شبكه عصبي :
براي بررسي توابع موجود در اين تولباكس ابتدا مجددا يكي از انواع اين شبكه عصبي (پرسپترون) را معرفي ميكنيم و در مورد آن توابع و تعارف مربوطه را ارايه خواهيم داد. و در آخر به مثال هايي از آن اشاره خواهيم كرد . خروجي توابع را بررسي مي كنيم.
 
پرسپترون (Perceptron) :
يك نوع شبكه عصبي مصنوعي است كه در سال ۱۹۵۷ در لابراتور كرنل آروتيكال به وسيله فرانك روزولت ابداع شد. مي‌توان آن را ساده ترين نوع شبكه عصبي هايي در نظر گرفت.
يك شبكه پرسپترون از يك لايه شامل S پرسپترون كه به R ورودي از طريق وزن هاي  وصل شده است تشكيل مي شود كه  نشان دهنده ي وزن لينك ورودي j ام به پرسپترون i ام است. از آن جايي كه الگوريتم يادگيري قادر به يادگيري يك لايه مي باشد در اين جا نيز تنها يك لايه داريم .
براي ساخت يك شبكه پرسپترون دستور زير استفاده ميگردد:newp(P,S)
كه P يك ماتريس با ابعاد R*2 است كه R تعداد ورودي هاست و هر سطر آن شامل حد پايين و بالاي ورودي مي باشد . S نيز تعداد نورون ها را نشان مي دهد .
در پرسپترون ها به طور پيش فرض از تابع پله (hardlim) استفاده مي شود. در تابع پله اگر ورودي به يك آستانه مشخص رسيده باشه خروجي ۱ را نشان مي دهد و در غير اين صورت خروجي ۰ مي شود .
38
دستور زير يك شبكه پرسپترون با يك ورودي كه مقادير ۰ و ۲ را شامل مي شود را ايجاد مي كند . تعداد نورون ها را نيز يك در نظر ميگيريم :P=[0 2];
S=1;
net = newp(P,S);
براي مشاهده شبكه ساخته شده از دستور زير ميتوان استفاده كرد :inputweights = net.inputweights{1,1}
كه با اجراي آن خروجي زير مشاهده ميشود :
inputweights  =
delays: 0
initFcn: ‘initzero’
learn: 1
learnFcn: ‘learnp’
learnParam[] :
size [1  ۱] :
userdata: [1×1 struct]
weightFcn: ‘dotprod’
تابع يادگيري پرسپترون به صورت پيش فرض تابع learnnp مي باشد.هم چنين تابعي كه مقادير آغازين را مقداردهي مي كند initzero نام دارد. كه مقدار اوليه وزن ها را برابر صفر قرار مي دهد .براي محسابه ي ورودي hardlim از تابع dotprod استفاده مي كنيم.باياس : افزودن باياس موجب ميشود تا استفاده از شبكه پرسپترون با سهولت بيشتري انجام شود. براي اينكه براي يادگيري باياس نيازي به استفاده از قانون ديگري نداشته باشيم باياس را بصورت يك ورودي با مقدار ثابت ۱ در نظر گرفته و وزن را به آن اختصاص ميدهيم.50با اجراي دستورات زير مي توان مقدار دهي اوليه باياس ها را مشاهده كرد :
biases = net.biases{1}
كه خروجي زير را توليد مي كند :
biases  =
initFcn: ‘initzero’
learn: 1
learnFcn: ‘learnp’
learnParam[] :
size: 1
userdata: [1×1 struct]
همانطور كه مشاهده مي شود مقادير اوليه باياسها نيز صفر  قرار داده شده اند .
 
مقدار دهي آغازين پارامترها :با استفاده از تابع init مي توان شبكه را به مقدار هاي اوليه برگرداند. مثلا شبكه اي با دو ورودي و يك نورون ساخته ايم :
net = newp([-2,2;-2 2],1);
حال وزن هاي آنرا با استفاده از دستور زير چك ميكنيم:
wts=net.IW{1,1};
كه خروجي آن به شكل زير خواهد بود :
wts =
           ۰   ۰
براي بررسي باياس نيز از دستور زير استفاده ميكنيم:
bias=net.b{1};
كه خروجي آن عبارت  است از:
bias =
           ۰
حال وزنهاي شبكه را تغيير ميدهيم:
net.IW{1,1}=[3,4];
net.b{1}=5;
اكنون با چك كردن دوباره وزن ها خواهيم ديد كه وزن ها نغيير نموده اند. براي مقدار دهي اوليه وزنها ميتوان از دستور init استفاده كنيم :
net=init(net);
با بررسي وزنهاي شبكه داريم:
wts =
          ۰   ۰
bias =
          ۰
يادگيري پرسپترون :وزنهاي يك شبكه پرسپترون از طريق الگوريتم تندترين شيب در مراحل مختلف بروز ميشوند تا زماني كه به وزنهاي مناسب براي شبكه دست پيدا كنيم. تابع train اين حلقه از عمليات را اجرا مي نمايد، ورودي را دريافت مينمايد، خروجي و خطا را محاسبه مينمايد و وزن هاي شبكه را بروز مي نمايد .
اكنون به مثال ارائه شده در  قسمت  هاي  قبل برميگرديم. شبكه پرسپترون ساخته شده با دستور زير را در نظر بگيريد:
net = newp([-2,2;-2 2],1);
حال فرض كنيد اين شبكه  قرار است پاسخ مناسبي به نقطه زير دهد:
p=[2,2];
كه خروجي اين نقطه به صورت  زير در نظر گرفته ميشود:
t=[0];
اكنون مقدار epochs * را برابر با يك در نظر ميگيريم. به گونه اي كه شبكه تنها يك بار از روي مجموعه داده ما عبور كند
net.trainParam.epochs=1;
* Epochs : در الگوريتم آموزش به يك فرايند با يك سري كار ها روي بردار هاي آموزشي گفته مي شود.
سپس با استداده از دستور train شبكه را آموزش مي دهيم :
net=train(net,p,t);
با انجام اين دستور وزن هاي جديد به شكل زير خواهند بود:
net.IW{1,1}
ans=
         -۲   -۲
net.b{1}
ans=
        -۱
حال فرض كنيد چندين ورودي داريم و مي خواهيم روي كل مجموعه داده هاي موجود عمليات  آموزش را انجام دهيم. بدين منظور با تعريف ورودي و خروجي به شكل زير ادامه مي دهيم:
p =[[2;2] [1;-2] [-2;2] [-1;1]];
t =[0 1 0 1];
حال شبكه را آموزش مي دهيم:
net =train(net,p,t);
وزن هاي جديد به همراه باياس عبارتند از :
w =
       -۳    -۱
b =
       ۰
 
اكنون ميتوان شبكه را پس از آموزش شبيه سازي نمود:
a = sim(net,p)
a =
[۰] [۰] [۱] [۱]
همانطور كه مشاهده مي شود مقادير بدست آمده با مقادير اصبلي متفاوت مي باشند. براي رفع اين مشكل بايد تعداد epochs را افزايش داد :
net.trainParam.epochs=4;
با آموزش دوباره شبكه خروجي زير توليد مي شود:
TRAINC, Epoch 0/20
TRAINC, Epoch 3/20
TRAINC, Performance goal met.
اين خروجي نشان ميدهد كه خطاي نهايي صفر شده است. با شبيه سازي شبكه داريم:
a = sim(net,p)
a =
[۰] [۱] [۰] [۱]
 
با همين الگوريتم و الگوريتم هاي مشابه در ساليان اخير از شبكه عصبي مصنوعي براي شبيه سازي عملكرد مغز استفاده هاي بسياري صورت گرفته است . به طور مثال در يكي از جديد ترين دستاورد هاي بشر در ماه March سال ۲۰۱۶ شركت Google  در بخش DeepMind توانستند توسط هوش مصنوعي خود قهرمان جهان را در بازي GO  شطرنج چيني كه قدمتي بيش از ۲۵۰۰ سال دارد با نتيجه ۴ به ۱ شكست دهند كه اين دستاورد بزرگي براي هوش مصنوعي بو

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در مونوبلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.