AMD>INTEL (11-05-14), baharan1989 (01-09-13), fahima (23-11-14), M A H R A D (29-03-12), M3RS4D 50062 (19-01-15), MARINE (18-02-14), Rezasam1 (29-03-12), Shahryar (30-03-12)
شبكه ي عصبي مصنوعي نوعي شبيه سازي شبكه ي عصبي در مغز انسان است كه با پياده سازي آن روي يك سيستم قابل برنامه ريزي، آن سيستم داراي قدرت آموختن مي شود. اين ويژگي سبب مي شود ما با شبكه ي عصبي بتوانيم سيستم هايي را مدل كنيم كه اطلاعات چنداني پيرامون آن سيستم ها نداريم. به عنوان مثال تحليل ديناميكي يك ربات خاص به دليل پيچيدگي اش بسيار دشوار است. در نتيجه كنترل حركت اين ربات نيز پيچيده خواهد بود. لذا ما يك شبكه ي عصبي تعريف مي كنيم تا رفتار هاي حركت ربات را فرا گيرد كه بعد از اين فراگيري ما مي توانيم از اين شبكه ي عصبي جهت كنترل حركت آن ربات استفاده كنيم.
شبكه ي عصبي از تعداد زيادي سلول عصبي به نام نرون (Neuron) تشكيل شده است. هر نرون سيگنال هايي را از نرون هاي مختلف دريافت كرده و با تقويت يا تضعيف آن ها سيگنال، يك سيگنال را به عنوان خروجي توليد مي كند و آن را به سوي نرون هاي بعدي مي فرستد.
شبيه سازي يك نرون در ANN به اين صورت است:
- نرون هر سيگنال ورودي خود را كه به صورت يك عدد است، در عدد مخصوصي مربوط به همان ورودي به نام وزن (Weight) ضرب مي كند:
ai -> wi x ai
- نرون حاصل ضرب تمام ورودي ها در وزنشان را با هم جمع مي كند:
w1 x a1 + w2 x a2 + … + wn x an
- نرون ممكن است حاصل جمع را با يك ورودي داخلي به نام باياس (Bias) جمع كند:
w1 x a1 + w2 x a2 + … + wn x an + b
- در نهايت حاصل جمع فوق به عنوان ورودي وارد تابع تحريك يا فعال سازي مي شود تا سيگنال خروجي توليد شود.
توابع تحريك (Activation Functions) وظيفه ي نگاشت حاصل جمع به يك بازه ي دلخواه (برد تابع) را بر عهده دارند. به عنوان مثال برد تابع Sigmoid Bipolar، (-1,1) است و خروجي تابع در اين بازه محدود مي شود. مدل يك نرون را در زير ملاحظه مي كنيد:
انتخاب تابع تحريك بستگي به نوع مسئله دارد. توابع Sigmoid، Gaussian و Linear از جمله ي مهم ترين توابع فعال سازي هستند كه هر كدام براي كاربرد خاصي مناسب هستند.
شبكه ي عصبي چندلايه
در شبكه هاي عصبي چند لايه، هر لايه شامل چند نرون است. يك لايه سيگنال هايي را از لايه قبلي خود دريافت كرد و آن سيگنال ها را با نرون هايي كه در لايه وجود دارند، پردازش مي كند و سيگنال هاي خروجي را به لايه ي بعدي مي فرستد.
تعداد لايه ي بيش تر الزاما“ به معني كارايي بهتر شبكه ي عصبي نيست. شبكه ي عصبي سه لايه جز بهينه ترين نوع شبكه هاي عصبي است كه لايه هاي ورودي، مخفي و خروجي را شامل مي شود. متاسفانه يكي از ضعف هاي شبكه ي عصبي، نبود راهكاري مشخص جهت تعيين معماري شبكه ي عصبي براي حل يك مسئله است.
AMD>INTEL (11-05-14), baharan1989 (01-09-13), fahima (23-11-14), M A H R A D (29-03-12), M3RS4D 50062 (19-01-15), MARINE (18-02-14), Rezasam1 (29-03-12), Shahryar (30-03-12)
وجود نرون ها در شبكه يه عصبي به شبكه قابليت يادگيري نمي دهد بلكه بايد از يك الگوريتم يادگيري جهت آموزش (Training) شبكه ي عصبي استفاده كرد.
- يادگيري نظارتي يا Supervised
در اين روش تعدادي ورودي و خروجي صحيح به شبكه ي عصبي داده مي شوند تا شبكه آموزش ببيند. شبكه با دريافت ورودي ها، خروجي ها را توليد مي كند و خروجي هاي توليدي را با خروجي هاي صحيح مقايسه مي كند. شبكه مي تواند با قوانيني مثل Delta Rule مقدار خطا را محاسبه كرده و بر اساس خطاي به دست آمده وزن هاي جديد را به دست آورد.
به عنوان مثال در يك شبكه ي عصبي براي تخمين يك تابع تعدادي نقطه به صورت زوج (x, f(x)) را براي آموزش در اختيار شبكه ي عصبي قرار مي دهيم و آموزش را شروع مي كنيم. در اين مثال x ها ورودي و f(x) ها خروجي محسوب مي شوند. شبكه با دريافت يك x يك تقريب از تابع را براي آن ارايه مي كند و اين مقدار را با f(x) مقايسه كرده تا خطا را بيابد. آن گاه بر اساس ميزان خطا، وزن هاي جديد محاسبه مي شوند و اين بار تقريب براي مبناي وزن هاي جديد اجرا مي شود. اين روند تا آن جا ادامه مي يابد تا شبكه تا حد لازم به مقدار واقعي نزديك شود. در نهايت اين شبكه قادر است براي هر x دلخواهي (نه الزاما“ x هايي كه براي آموزش به شبكه داده شده بود) يك مقدار تقربي از f(x) را ارايه كند.
بديهي است كه هر چه تعداد نقاط براي آموزش و گام هاي يادگيري بيش تر باشند، همگرايي شبكه (converge) بهتر خواهد بود.
در اين نوع يادگيري شبكه بر اساس حالات محيط دستوراتي را روي محيط اعمال كرده و نتيجه را مشاهده مي كند. محيط بر اساس ميزان خوب بودن يا بد بودن تصميم، به شبكه پاداش مي دهد و يا آن را مجازات مي كند. آن گاه شبكه با ثبت كنش خودش و واكنش محيط سعي مي كند تا پاداش بيش تري بگيرد و كم تر مجازات شود. با ادامه ي اين روند يادگيري در نهايت شبكه رفتار بهينه اي پيدا مي كند.
Reinforcement كابرد گسترده اي در كنترل ربات ها و تطبيق رفتار آن ها با محيط دارد. از جمله الگوريتم هاي متداول در اين روش، استفاده از Q-Learning است.
- يادگيري غير نظارتي يا Unsupervised
در اين روش داده هايي جهت نظارت بر يادگيري وجود ندارد بلكه شبكه خود الگو هاي يادگيري را خلق مي كند و تكنيك ها را فرا مي گيرد. پياده سازي يك شبكه ي Unsupervised در مقايسه با روش Supervised به مراتب دشوار تر است اما همگرايي آن سريع تر و انعطاف يادگيري آن بيش تر است.
در ادامه آموزش خود را تنها به يادگيري نظارتي محدود مي كنيم ولي منابع آموزش ساير يادگيري ها نيز براي مطالعه ي بيش تر قرار داده خواهد شد.
آخرین ویرایش توسط ravegoat در تاریخ 19-03-13 انجام شده است علت: افزودن پيوند به داخل
AMD>INTEL (11-05-14), baharan1989 (01-09-13), M A H R A D (29-03-12), MARINE (18-02-14), Rezasam1 (29-03-12), Shahryar (30-03-12)
براي آشنايي با نحوه ي عملكرد يك شبكه ي عصبي مصنوعي از يك مثال كمك مي گيريم. مي خواهيم با يك Neural Net يك نرم افزار تشخيص دست خط (OCR) بسيار ساده طراحي كنيم. كاربر فضايي به اندازه ي 10x10 پيكسل در اختيار دارد كه مي تواند كاركتر مورد نظر خود را در آن وارد كند. هر يك از اين پيكسل ها مي توانند سفيد و يا سياه باشند. در واقع از چينش اين پيكسل هاي سياه و سفيد در كنار هم، كاركتر ورودي شكل مي گيرد. براي ساده سازي محاسبات قصد داريم از فضاي دو قطبي (Bipolar) استفاده كنيم كه در اين صورت هر پيكسل سياه معادل عدد 1 وهر پيكسل سفيد معادل عدد -1 خواهد بود (در حالت Unipolar، مقدار معادل پيكسل سفيد 0 مي شد.)
اين 100 پيكسل ورودي هاي نرون هاي ما خواهند بود. براي سادگي كار ما تنها از 6 نرون استفاده مي كنيم كه هر نرون وظيفه ي تشخيص يك حرف را بر عهده خواهد داشت؛ نرون اول براي حرف A ، نرون دوم براي حرف B و به همين ترتيب تا نرون ششم براي حرف F . هر كدام از اين 100 پيكسل كه در واقع يا 1 هستند و يا -1 در 100 وزن (Weight) متفاوت ضرب مي شوند. چون 6 نرون داريم در مجموع 600 وزن خواهيم داشت. مقادير اوليه ي تمام وزن ها را در ابتدا 0 در نظر مي گيريم. همان طور كه در پست اول توضيح داده شد، در هر نرون مقادير تمام پيكسل ها در وزن هاي نظيرشان ضرب مي شود و نهايت اعداد حاصله با هم جمع مي گردند. حاصل جمع اين اعداد خود ورودي تابع تحريك (x) خواهد بود. تابع تحريك ما در اين مثال Sigmoid Bipolar است:
مقدار f(x) خروجي نرون خواهد بود. با توجه به خاصيت تابع، اين مقدار قطعا" بين -1 تا 1 است.
f(x) = -1 + 2/(1 + e-x)
مشتق اين تابع تحريك نيز به شكل زير خواهد بود:
f'(x) = 0.5 * (1 + f(x) * (1 - f(x))
آموزش شبكه ي عصبي
براي آموزش شبكه ي عصبي بايد چندين بار كاركتري را در ورودي شبكه ي عصبي ترسيم كنيم و به شبكه ي عصبي بگوييم كه اين مقدار ورودي فرضا" كاركتر A است. اين دقيقا" مفهوم يادگيري Supervised است. اين كار آن قدر بايد تكرار شود تا شبكه به اندازه ي كافي رشد كند و به جواب مطلوب همگرا گردد. براي آموزش شبكه ي عصبي در اين مثال از الگوريتم Delta Rule استفاده مي كنيم. فرض كنيم كه كاربر كاركتر زير را وارد كرد و به شبكه ي عصبي گفته شده كه اين كاركتر حرف F است:
الگوريتم Delta Rule طبق يك رابطه ي رياضي مقدار تمامي وزن ها را طي فرآيند يادگيري اصلاح مي كند و در نهايت سبب مي شود كه ANN پاسخ مطلوب را به ما ارايه دهد:
كه:
wij (new) = wij (old) + k * (tj - yj)*f'(xj) * ai
- wij (new) مقدار جديد وزن پيكسل i ام و نرون j ام
- wij (old) مقدار قديمي وزن پيكسل i ام و نرون j ام
- k نزخ يادگيري (Learning Rate)
- tj خروجي مطلوب نرون j ام
- yj خروجي نرون j ام
- f'(xj) مشتق تابع تحريك براي نرون j ام
- ai مقدار پيكسل i ام
با توجه به مثال:
مقدار i عددي بين 1 تا 100 است چون 100 پيكسل داريم.
مقدار j عددي بين 1 تا 6 است چون 6 نرون داريم.
نرخ يادگيري عددي بين 0 تا 1 است. هر چه اين مقدار كم تر باشد، همگرايي شبكه كند تر خواهد بود ولي اگر مقدار آن خيلي بزرگ باشد (نزديك به 1) شبكه جوابي نوساني خواهد داشت. مقدار زير 0.1 براي آن در OCR مطلوب است.
خروجي مطلوب براي هر نرون متفاوت است. چون قرار است كه F پاسخ درست شبكه باشد، خروجي نرون هاي 1 تا 5 مقدار -1 خواهد بود ولي براي خروجي 6 ام كه مربوط به حرف F است، خروجي مطلوب 1 است.
خروجي هر نرون در واقع مقدار y = f(x) است كه f تابع تحريك ما است. چون تابع تحريك را Bipolar Sigmoid انتخاب كرديم، خروجي نرون بين -1 تا 1 است. هر چه خروجي به 1 نزديك تر باشد، نشان مي دهد ورودي آن نرون را بيش تر تحريك كرده است و هر چه خروجي به -1 نزديك تر شود، نشان مي دهد كه ورودي آن نرون را كم تر تحريك مي كند.
مشتق تابع تحريك Bipolar Sigmoid نيز در ابتداي پست آورده شده است.
در نهايت شبكه ي عصبي ما با دريافت 100 ورودي 6 خروجي به ما ارايه مي دهد. همان طور كه اشاره شد مقدار هر كدام از اينن خروجي ها بين -1 تا 1 است. طبق معماري در نظر گرفته شده اگر مقدار خروجي نرون اول از بقيه بيش تر باشد با احتمال قوي تري كاركتر ورودي حرف A است. اگر مقدار خروجي نرون دوم از بقيه بيش تر باشد، احتمال مي رود كه كاركتر ورودي حرف B باشد و به همين شكل تا نرون آخر.
سورس VB.NET مثال فوق بر گرفته شده از http://www.alexandria.nu/ai/neural_net_demo/ پيوست شد.
AMD>INTEL (11-05-14), baharan1989 (01-09-13), M A H R A D (11-05-14), M3RS4D 50062 (19-01-15), MARINE (18-02-14), Moein (01-04-12), Rezasam1 (01-04-12), sh.j.20 (19-01-15)
از ظهور ايده ي شبكه ي عصبي مصنوعي تا كنون الگوريتم ها و معماري هاي متنوعي در اين زمينه ارايه شده است تا كارايي شبكه ي عصبي را در حل مسايل مختلف به حداكثر برساند. كتابخانه هايي شبكه ي عصبي نظير NeuronDotNet اين امكان را فراهم مي كنند كه تحت فناوري برنامه نويسي .NET بتوانيم از شبكه ي عصبي جهت حل مسايل فراوان استفاده كنيم بدون آن كه درگير پيچيدگي هاي نظريه هاي نو در اين زمينه شويم.
همان طور كه اشاره شد معماري ها و الگو هاي يادگيري مختلفي براي شبكه ي عصبي وجود دارد از جمله يادگيري Reinforcement و Unsupervised . يادگيري تقويتي در مسايلي كه نياز داريم سيستم نسبت به محيط واكنش لحظه اي نشان دهد كاربرد دارد. به هم دليل از اين نوع يادگيري به طور گسترده در نظريه ي كنترل و نظريه ي بازي ها استفاده مي شود. به علاوه يادگيري تقويتي اين امكان را فراهم مي كند تا بتوانيم در فضا هاي پيوسته نظير فضاي زمان از آن بهره ببريم. براي آشنايي بيش تر با اين موارد مي توانيد به مقالات موجود در پيوست مراجعه كنيد.
AMD>INTEL (11-05-14), baharan1989 (01-09-13), designme (01-04-12), M A H R A D (11-05-14), M3RS4D 50062 (19-01-15), Moein (01-04-12), Rezasam1 (01-04-12), sh.j.20 (19-01-15)
شبکه ی هاپفیلد یک شبکه ی عصبی بازگشتی (Recurrent) است که توسط جان هاپفیلد ابداع شد. این شبکه براساس مکانیزم حافظه ی انسان الگو های دودویی (Binary) را فرا می گیرد. سپس اگر نمونه ای به این شبکه عرضه شود، براساس یک روش یادگیری بدون نظارت (Unsupervised Learning)، نمونه به سمت نقطه ی کمینه ی محلی (یعنی الگویی که بیش ترین شباهت را با نمونه دارد) سوق پیدا می کند.
کد متلب مربوط به شبکه ی هاپفیلد از پیوست قابل دریافت است.
*MoJtAbA* (11-05-14), AMD>INTEL (11-05-14), fahima (23-11-14), M A H R A D (11-05-14), M3RS4D 50062 (19-01-15), nima_hl (11-05-14), Rezasam1 (13-05-15), sh.j.20 (19-01-15)
ALOPEX مخفف عبارت ALgorithm Of Pattern EXtraction بوده که یک الگوریتم یادگیری براساس فرآیند های تصادفی است و سعی دارد برخلاف الگوریتم هایی نظیر پس انتشار خطا (Backpropagation) به جای میل کردن به نقطه ی کمینه ی محلی، نقطه ی کمینه ی مطلق را بیابد. مقاله ی پیوست شده نحوه ی به کارگیری این روش را همراه با الگوریتم تبرید شبیه سازی شده (Simulated Annealing) جهت آموزش شبکه های Feed-Forward و Recurrent شرح داده است.
*MoJtAbA* (13-05-14), M A H R A D (13-05-14), M3RS4D 50062 (19-01-15), nima_hl (13-05-14), Rezasam1 (13-05-15), sh.j.20 (19-01-15), Shahryar (17-05-14)
الگوریتم یادگیری Hebbian یک الگوریتم یادگیری بدون نظارت است که اساس آن این گونه شکل گرفته است که وزن بین دو نرون که مدام یکدیگر را تحریک می کنند باید تقویت شود. برای اطلاعات بیش تر می توانید فایل پیوست را مطالعه بفرمایید.
طبق درخواست دوستان مدل سازی، شبیه سازی و تحلیل یادگیری Spiking Neural Network در نرم افزار MATLAB پیوست شده که امیدوارم مفید باشه. همچنین یه جعبه ابزار خوب در این زمینه nSTAT هستش که دیدنش خالی از لطف نیست.
آرمین برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
*MoJtAbA* (17-05-14), AMD>INTEL (17-05-14), M A H R A D (26-05-14), M3RS4D 50062 (19-01-15), mit67 (15-06-14), nima_hl (18-05-14), Rezasam1 (13-05-15), sh.j.20 (17-01-15), ایناز (19-01-15)
آموزش پیوست شده به معرفی شبکه های عصبی ای می پردازد که می توان آن ها را معادل با تکنیک PCA جهت فروکاهی داده (Data Reduction) به کار برد.
*MoJtAbA* (26-05-14), AMD>INTEL (26-06-14), M A H R A D (26-05-14), M3RS4D 50062 (19-01-15), mit67 (15-06-14), Rezasam1 (13-05-15)
شبکه های رقابتی یا Competitive Networks شبکه هایی هستند که در آن ها براساس یک روش یادگیری بدون نظارت، نرون ها با یکدیگر رقابت می کنند تا پاسخ مناسبی را نسبت به ورودی شبکه از خود نشان دهند. در نهایت نرون با خروجی بزرگ تر ماهیت ورودی را تعیین خواهد کرد. در پیوست مجموعه ای اسلاید پیرامون شبکه های رقابتی قرار داده شده که موارد زیر شامل می شود:
- Hamming Network
- Competitive Layer
- Self-Organizing Feature Map یا Kohonen Map
- Vector Quantization
همچنین نمونه سورس متلب شبکه ی همینگ و Compet در این مجموعه قرار گرفته شده است.
*MoJtAbA* (27-06-14), AMD>INTEL (26-06-14), fahima (23-11-14), M A H R A D (26-06-14), M3RS4D 50062 (19-01-15), MoSi 1 (27-06-14), nima_hl (26-06-14), Rezasam1 (13-05-15)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks