المتابعون للمدونة

الثلاثاء، 5 مارس 2013

برامج الذكاء الاصطناعي ودوت نت


س: هل يمكن عمل برامج الذكاء الاصطناعي بالدوت نت؟ 

ج: يمكن وصف لغات البرمجة المألوفة (ومنها دوت نت) بأنها لغات برمجة خطية Linear أو إجرائية Structural أو كائنية التوجه Object Oriented.

لكن هناك نوعا آخر من لغات البرمجة يعرف بلغات البرمجة المنطقية Logical أو لغات البرمجة التعريفية Declarative، وأشهرها هي لغة البرمجة Prolog.. وفي مثل هذه اللغات، يتم تقديم المعلومات في صورة حقائق Facts وقواعد Rules، ويكون دور لغة البرمجة هو استنتاج حقائق جديدة من هذه المعلومات.. لهذا تعتبر برولوج لغة ذكاء صناعي، وحين درستها في الكلية، كتبت بها برامج لحل بعض الفوازير الشهيرة، مثل فزورة الرجل الذي معه حمل برسيم وعنزة وذئب ويريد العبور بهما إلى الجانب الآخر من النهر باستخدام قارب لا يمكن أن يحمل فيه معه إلا شيئا واحدا فقط في كل مرة.. وبالفعل حصلت على كل الاحتمالات الممكنة للحل.

لكن هذا لا يعني أن لغات البرمجة التقليدية لا تستطيع التعامل مع برامج الذكاء الصناعي.. فالمشكلة ليست في لغة البرمجة، بل في تعريفك أنت للذكاء وكيف يمكن تمثيله.. ومن أشهر التقنيات في هذا المجال الشبكات العصبية Neural Networks وهي تستخدم لإنشاء برامج تكتسب الخبرة بطريقة تشبه تعليم البشر، وذلك عن طريق تقديم الكثير من الأمثلة للبرنامج وإخباره بالنتائج الصحيحة، كأن تقدم للبرنامج صورا عديدة لوجوه الرجال والنساء، وتطلب منه في كل مرة أن يخبرك هل هذا وجه رجل أم امرأة.. وفي طور التدريب، سيكون عليك أن تصحح له الإجابة ليعرف متى أصاب ومتى أخطأ.. وعلى حسب هذه المدخلات والمخرجات والتصويبات يقوم البرنامج بضبط معاملات الشبكة العصبية لتعطي أفضل تخمينات في كل مرة، إلى أن تصير أقرب ما يكون من الصواب، فيتم إنهاء طور التعلم، والبدء في استخدام البرنامج فعليا.

مشكلة هذه الطريقة أنها لا يمكن أن تقترب من الدقة إلا باستخدام شبكة عصبية معقدة كثيرة المعاملات ومتعددة المراحل، وتدريبها يحتاج إلى ملايين الأمثلة والتجارب.

وهناك طريقة أخرى أكثر فعالية من الشبكات العصبية، وهي استخدام الطرق الإحصائية لتمثيل النظم الذكية، وإن كانت الطرق الإحصائية لا تختلف كثيرا عن الشبكات العصبية من حيث الإجراءات المتبعة.. ففي هذه الطريقة يتم فحص عدد ضخم من العينات (كالصور أو الأصوات أو الجمل اللغوية)، وتحليلها رياضيا بواسطة معادلات معقدة، لتوصيف كل عينة بمجموعة من القيم الرياضية (تسمى Vectors)، ومن ثم محاولة إيجاد رابط ما يجمع كل هذه العينات معا من خلال تحليل القيم الممثلة لكل منها.. بعد هذا تتم مقارنة أي عينة جديدة بالنتائج التي حصلنا عليها من تحليل عينات الاختبار، حيث يمكن تحديد إن كانت هذه العينة الجديدة قريبة منها أم بعيدة عنها.. وتحقق هذه الطريقة الإحصائية نتائج جيدة في التعرف على الصور والأصوات وتحليل اللغات وما شابه.. ولعل جوجيل يستخدم هذه الطريقة في خاصية البحث عن الصور المشابهة، وذلك بتحليل ألوان كل صورة وتوزيع النقاط فيها إلى مجموعة من المتجهات Vectors، وعندما تطلب منه البحث عن صورة مشابهة، يقوم بتحليل الصورة الخاصة بك أيضا، ثم يبدأ بتطبيق بعض المعادلات عليها، ويبحث في قاعدة البيانات عن الصور التي لها نفس نتائج التحليل.. وهذا بالطبع يجعل عملية البحث أسرع، فهولا يبحث فعليا في الصور، بل في مجموعة أرقام تعبر عنها.. وهنا تكون المشكلة هي: ما هي أفضل وسيلة إحصائية لتحليل الصور لتكون عملية البحث أدق؟.. في مثل هذا ما زالت تكتب الأوراق العلمية وتقدم رسائل الدكتوراه :).

كما قلت: كل ما سبق يمكنك عمله بأي لغة من لغات دوت نت.. المهم هو: هل لديك المعرفة الكافية بالرياضيات والإحصاء وعلم النظم وطرق معالجة الصوت والصورة لكي تكتب البرامج المناسبة؟

بالتأكيد الأمر يحتاج إلى مطالعة العديد من المراجع المتخصصة في هذه المجالات، وليس مجرد كتابة بعض أوامر البرمجة.

هناك تعليقان (2):

  1. مشكلة لغات الـNET. و الـjava (و كل اللغات التي تُنتِج أكواداً مُدارة managed code) هي مشكلة سرعةٍ في المقام الأول، مثلاً: علي الرغم من أن بناء تطبيقٍ لمعالجة الصور الرقمية ممكنٌ باستخدام الـ#C و الـ++C، إلا أن الـ++C تتفوق في الأداء رغم خسارتها في السهولة و علو المستوي.
    الحل الوحيد لهذه المعضلة هو أن يكون هناك مُترجِم compiler للغات عالية المُستوي (مثل الـjava و اـ#C) يقوم بترجمة برامجها إلي الأصفار و الآحاد مباشرة، و ليس وجود مُفسِّر interpreter فقط حتي و إن كان كفؤاً و به تقنيات تحسينٍ متقدمة.

    ردحذف
  2. مرحبا م. وائل:
    لم تعد السرعة مشكلة حقيقية اليوم في ظل الأجهزة ذات المعالجات المتعددة والذاكرة التي تزيد عن 6 جيجا، وكروت الشاشة المتطورة التي تملك معالجات قوية خاصة بها.. هذا أصلا هو السبب في ارتفاع مستوى لغات البرمجة، وتقديمها كل تلك التسهيلات دون خوف من تدني الكفاءة..
    إضافة إلى هذا، WPF تتعامل مع الصوت والصورة بكفاءة أعلى لأنها مبنية على DirectX مباشرة، وتجيد التعامل مع كروت الشاشة.. وميكروسوفت بنت واجهة دوت نت 2012 بـ WPF ومنتجات أخرى لها.
    تظل المشكلة في البرمجة وليس في لغات البرمجة.. لديك الأدوات التي تنفذ بها، لكن ماذا تريد أن تفعل؟.. هذي هي التحديات الحقيقية في مواضيع الذكاء الصناعي كالتعرف على الكائنات والأصوات ومعالجة اللغات الطبيعية.
    تحياتي

    ردحذف

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر