چگونگي يادگيري شبكه:
پاسخ اين سؤال، آزمون و خطاست. اما اين كار به اين سادگيها هم نيست. به عنوان نمونه، بخشي از خروجي يك شبكه عصبي فرضي ساده از نوع Adaline به شكل كد زیر است.

همانطور كه در اين مثال ميبينيد، اين شبكه قبل از رسيدن به پاسخ صحيح، 190 (به خط بالا در شکل بالا توجه کنید) بار تلاش كرده است. اساسا برنامه Adaline دو مقدار را كه هركدام بين 1- و 1 هستند، مقايسه ميكند. اين مقادير به صورت تصادفي توليد و در يك فايل ذخيره ميشوند. كاري كه اين برنامه انجام ميدهد اين است كه اگر اولين عدد داده شده به آن كمتر از عدد دوم باشد، آنگاه خروجي آن 1 و در غير اينصورت 1- خواهد بود. به بيان فني، اين شبكه، وروديها و وزنهاي مربوط به هر يك از گرههاي شبكه (Nodes) را جمع ميكند.
سپس حاصل جمع را از طريق تابع انتقال (Transfer Function) به عنوان خروجي گره، برميگرداند. دادههايي نيز كه براي آموزش شبكه به آن داده ميشوند، پاسخهاي صحيح براي مسئله توليد ميكنند و شبكه خودش را ميآزمايد تا ببيند آيا به جواب صحيح رسيدهاست يا خير.
در مورد اين مثال، شبكه در هربار اجرا حدود شش پاسخ صحيح بدست آورده است، تا اينكه در صد و نودمين بار همه پاسخهاي صحيح را بهدست ميآورد. برنامه طوري نوشته شده است كه آنقدر ادامه دهد تا همه پاسخهاي صحيح را بهدست آورد و اين اتفاق در بار صد و نودم رخ ميدهد. بسيار خوب، اجازه بدهيد ببينيم چه اتفاقي در اينجا ميافتد. در واقع اين برنامه تابعي را اجرا ميكند كه قسمت اصلي آن به صورت كد زیر است.

اين كد مرتبا روي پيوندهاي مربوط به يك گره تكرار ميشود، مقدار ورودي وزندار را ميگيرد و حاصل جمع نهايي را به متغيري از نوع double به نام total اضافه ميكند. در اين مرحله، آنچه كه بايد بدانيد اين است كه مقدار nID با ثابت nodevalue كه در كلاس Values ذخيره شده برابر است و اين متغير، اولين مقدار در گره ورودي را (كه در اينجا با آرايه InputLinks و شاخص i ا رجاع داده شده است) ميگيرد(شکل زیر)

بخش مهم مقدار ورودي وزندار به شكل كد بالا است، كه به معني حاصلضرب مقدار گره در مقدار وزن پيوند است. مقدار وزن پيوند نيز در واقع اولين مقدار در پيوند است كه به صورت كد شکل زیر در تابع Constructor كلاس Adaline Link مقداردهي اوليه شده است.

اين مقدار يك عدد تصادفي بين 1- و 1 است. اين بدينمعناست كه اولين فعاليت شبكه براي رسيدن به پاسخ صحيح، چيزي بيش از يك حدس نيست. البته همانطور كه در چرخه بالا ميبينيد، تابع اجرا چرخه دستورات را تكرار ميكند و از مقدار وزن براي محاسبات استفاده ميكند و مجموع حاصل را به dTotal اضافه ميكند. متغير dTotal سپس از تابع انتقال Transfer Function عبور ميكند كه اين تابع نيز شامل كدهاي سادهاي است. (با توجه به شکل زیر)

در صورتي كه مقدار dTotal كوچكتر از صفر باشد، خروجي آن 1- و در صورتي كه اين مقدار بزرگتر از صفر باشد، خروجي آن 1 خواهد بود. بنابراين فرض كنيد كه در dTotal مقداري داريم و براساس مجموعه آموزشها پاسخ 1- است، اما شبكه 1 را بازميگرداند. پاسخ غلط است و برنامه يكي از خطوط نشان دادهشده در كد شکل 9 را چاپ ميكند كه ميگويد تاكنون يك عدد معين را ميگرفته است، اما اكنون بايد تابع آموزش را فراخواني كند؛ چراكه اين مورد اخير اشتباه از آب در آمده است.
تابع Learn از قواعد دلتا يا Widrow-Hoff استفاده ميكند كه از نظر برنامهنويسي به صورت كد شکل زیر است. در اين قسمت از كد، ابتدا مقدار خطاي گره مساوي حاصلضرب مقدار گره در عدد 0.2- قرارداده ميشود.

كد سپس روي همه پيوندهاي ورودي گره فعلي ميچرخد و مقدار وزن هر پيوند را مساوي مقدار dDelta قرار ميدهد كه خود حاصل نرخ يادگيري مقادير گرهها است و در هنگام تشكيل گره Adaline مساوي 45.0 قرارداده شده بود. البته شما در تعيين اين مقدار اوليه مختار هستيد. ميتوانيد آن را تغيير دهيد تا ببينيد چه تاثيري روي نرخ يادگيري برنامه ميگذارد. به هرحال اگر به حاصلضرب فوق برگرديم، ميبينيم كه نرخ يادگيري گره در مقدار ورودي پيوندها ضرب شده است و حاصلضرب نيز در مقدار خطاي گره كه در ابتداي كد مقداردهي شده بود ضرب شده است.(این یک مورد از شبکه عصبی ساده بود)
(ادامه دارد)

