2 :تعداد فایل پیوست
تاپیک مرجع شبکه ی عصبی مصنوعی (Artificial Neural Network)
شبكه ي عصبي مصنوعي نوعي شبيه سازي شبكه ي عصبي در مغز انسان است كه با پياده سازي آن روي يك سيستم قابل برنامه ريزي، آن سيستم داراي قدرت آموختن مي شود. اين ويژگي سبب مي شود ما با شبكه ي عصبي بتوانيم سيستم هايي را مدل كنيم كه اطلاعات چنداني پيرامون آن سيستم ها نداريم. به عنوان مثال تحليل ديناميكي يك ربات خاص به دليل پيچيدگي اش بسيار دشوار است. در نتيجه كنترل حركت اين ربات نيز پيچيده خواهد بود. لذا ما يك شبكه ي عصبي تعريف مي كنيم تا رفتار هاي حركت ربات را فرا گيرد كه بعد از اين فراگيري ما مي توانيم از اين شبكه ي عصبي جهت كنترل حركت آن ربات استفاده كنيم.
شبكه ي عصبي از تعداد زيادي سلول عصبي به نام نرون (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 از جمله ي مهم ترين توابع فعال سازي هستند كه هر كدام براي كاربرد خاصي مناسب هستند.
شبكه ي عصبي چندلايه
در شبكه هاي عصبي چند لايه، هر لايه شامل چند نرون است. يك لايه سيگنال هايي را از لايه قبلي خود دريافت كرد و آن سيگنال ها را با نرون هايي كه در لايه وجود دارند، پردازش مي كند و سيگنال هاي خروجي را به لايه ي بعدي مي فرستد.
تعداد لايه ي بيش تر الزاما“ به معني كارايي بهتر شبكه ي عصبي نيست. شبكه ي عصبي سه لايه جز بهينه ترين نوع شبكه هاي عصبي است كه لايه هاي ورودي، مخفي و خروجي را شامل مي شود. متاسفانه يكي از ضعف هاي شبكه ي عصبي، نبود راهكاري مشخص جهت تعيين معماري شبكه ي عصبي براي حل يك مسئله است.
3 :تعداد فایل پیوست
پاسخ: تاپیک مرجع شبکه ی عصبی مصنوعی (Artificial Neural Network)
براي آشنايي با نحوه ي عملكرد يك شبكه ي عصبي مصنوعي از يك مثال كمك مي گيريم. مي خواهيم با يك 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 + 2/(1 + e-x)
مقدار f(x) خروجي نرون خواهد بود. با توجه به خاصيت تابع، اين مقدار قطعا" بين -1 تا 1 است.
مشتق اين تابع تحريك نيز به شكل زير خواهد بود:
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 باشد و به همين شكل تا نرون آخر.
2 :تعداد فایل پیوست
شبکه ی هاپفیلد (Hopfield Network)
شبکه ی هاپفیلد یک شبکه ی عصبی بازگشتی (Recurrent) است که توسط جان هاپفیلد ابداع شد. این شبکه براساس مکانیزم حافظه ی انسان الگو های دودویی (Binary) را فرا می گیرد. سپس اگر نمونه ای به این شبکه عرضه شود، براساس یک روش یادگیری بدون نظارت (Unsupervised Learning)، نمونه به سمت نقطه ی کمینه ی محلی (یعنی الگویی که بیش ترین شباهت را با نمونه دارد) سوق پیدا می کند.
کد متلب مربوط به شبکه ی هاپفیلد از پیوست قابل دریافت است.
1 :تعداد فایل پیوست
فروکاهی داده با شبکه عصبی
آموزش پیوست شده به معرفی شبکه های عصبی ای می پردازد که می توان آن ها را معادل با تکنیک PCA جهت فروکاهی داده (Data Reduction) به کار برد.