براي آشنايي با نحوه ي عملكرد يك شبكه ي عصبي مصنوعي از يك مثال كمك مي گيريم. مي خواهيم با يك 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/ پيوست شد.






پاسخ با نقل قول
Bookmarks