بسم الله الرحمن الرحيم
في الحقيقة لقد لفت نظري هذا الموضوع وأحببت أن أشارك فيه، خاصة بعد ما لاحظت وجود بعض الخلط في المفاهيم البرمجية، لذلك أرجو أن تسمحوا لي بإضافة بعض الملاحظات:
- كما تفضل الأخ أسامة فإنه يوجد فرق كبير بين كلمة Logarithm و Algorithm، وما دمنا نقصد الثانية في حديثنا هنا فالأولى أن نستخدم اللفظ العربي الأصيل الذي تم اشتقاق هذا المصطلح منه وهو الخوارزم أو الخوارزمية، نسبة للعالم العربي المبدع محمد بن موسى الخوارزمي الذي كان أول من أرسى قواعد هذا العلم الهام، وبالمناسبة كثير من الكلمات الإنجليزية التي تبدأ بالحرفين AL تكون مشتقة من كلمات عربية، وللأسف الشديد يعاد ترجمتها مرة أخرى فتتحرف ويفقد الأصل العربي، مثل: Alcohol وهي مشتقة من الكلمة العربية الغول، ولكن للأسف درج استخدام اللفظ المحرف وهو الكحول، ونفس الشيئ ينطبق على كلمات أخرى مثل: Alchemy و Algebra وغيرها.
- الخوارزمية هي ببساطة مجموعة من القواعد والخطوات التي تشرح عمل معين، لذلك فعندما يصف شخص معين طريقة متاجرته بأنها تعمل على المتوسطات فهو لم يضع خوارزمية، أما عندما يقول أنه يقوم بالشراء عندما يقطع المتوسط السريع المتوسط البطيئ باتجاه الأعلى، ثم يقوم بتحريك الوقف بعد عدد من النقاط، ويستمر بالصفقة حتى حدوث تقاطع معاكس أو تفعل الليميت، فإنه بهذا الوصف يكون قد وضع خوارزمية لمتاجرته. وبشكل عام يعتبر الوصف الخوارزمي هو الخطوة الأصعب في كتابة أي برنامج، أما كتابة الكود نفسه فهو عملية سهلة جداً إذا توفر وصف خوارزمي كامل وصحيح سواءاً كان ذلك بالكلام العادي Pseudo code أو بمخططات الإنسياب Flow charts.
- موضوع الذكاء الصناعي يعتبر من الموضوعات المتشعبة والكبيرة، ولا يمكن تغظيته في مقالة بسيطة، لذلك سأقتصر في حديثي عن التقنية التي ذكرت هنا وهي الشبكات العصبية الصناعية Artificial Neural Networks والتي يتم اختصارها بالمصطلح ANN أو NN.
- الشبكات العصبية هي ببساطة نموذج برمجي لمحاكاة عمل الخلايا العصبية في الدماغ، هذا النوع من البرامج مفيد في حل المسائل التي تكون فيها العلاقة بين المتغيرات غير معروفة، كما أنها تفيد في استخراج الحلول التي لا تترابط مع بعضها بعلاقات خطية، وهذه ميزة مهمة جداً لهذه التقنية الواعدة.
- لن أطيل كثيراً ولكن ما أريد قوله أن هذه التقنية ليست سحراً، لذلك فليس من الضروري أن تعطي الشبكة حلولاً صحيحة إذا لم تتوفر علاقة مباشرة بين متغيرات الإدخال، أو تم حجب هذه العلاقة بتشويش من متغيرات أخرى، لذلك فإن الإنتقاء الدقيق لمتغيرات الإدخال، وهيكلية الشبكة، وطريقة التدريب، ضروري جداً من أجل استخراج حلول صحيحة.
- بشكل عام يمكن برمجة الشبكات الصناعية وتدريبها بأية لغة برمجة عامة الأغراض، وليس من الضروري أبداً استخدام لغات خاصة مثل: Lisp أو Prolog، وبرأيي أن لغات منصة العمل .Net أصبحت تتفوق بشكل كبير عن اللغات الأخرى حتى بالميزات الخاصة بالذكاء الاصطناعي مثل معالجة القوائم أو العودية.
- يوجد 3 خطوات أساسية لاستخدام الشبكات العصبية: بناء الشبكة – التدريب – المحاكاة، يتم بناء الشبكة مرة واحدة فقط في البداية حيث يتم تحديد الهيكلية الخاصة بالشبكة Network Architecture وبناء العقد وتحديد الأوزان الابتدائية، بعد ذلك ندخل في المرحلة الثانية وهي تدريب الشبكة وهذه المرحلة هي أكثر مرحلة تحتاج للقدرة الحسابية وقد يحتاج تدريب بعض الشبكات المعقدة لعدة أيام أو أسابيع، ولذلك فنحن بحاجة للغة برمجة سريعة من أجل انجاز هذه المرحلة وهذا ما يفسر استخدام Better لغة C++ من أجل تدريب شبكته العصبية، أما المرحلة الأخيرة وهي المحاكاة فهي لا تحتاج لقدرة برمجية كبيرة ويمكن تنفيذها بلغة MQ4، حيث يتم نقل الأوزان ومحاكاة الشبكة.
- أخيراً يجب أن أذكر أنه ليس من الضروري أبداً بناء الشبكة العصبية من الصفر بل الأسهل هو استخدام برامج مساعدة، وأشهر هذه البرامج: -Statistica -- Matlab -- Cortex - NeuroShell -- BrainMaket -- Wealth_Lab.
تمنياتي للجميع بدوام التوفيق..