في مدونة اليوم سأعرض لكم برنامجا عمليا تطبيقيا عن البيانات وعلاقتها بالذكاء الإصطناعي. يوجد لدي مئة صورة تحوي وجوها (انظر الشكل الأول).
الشكل الأول
بعض هذه الوجوه هي وجوه بشرية وبعضها الآخر أفيتار Avatar (غير حقيقية). والهدف من هذا البرنامج أن نقوم بتصنيف الصورة هل هي وجها بشريا أم أفيتار. وهذا النوع من البرامج يسمى تصنيف Classification.
نبدأ بجمع الصور والحصول عليها في شكلها الأصلي (انظر الشكل الثاني).
وبعد أن تكون الصورة لدينا نقوم بعمل تمييز للوجه الذي في الصورة Face detection. وهنا يوجد عدة خوارزميات للقيام بهذه المهمة منها على سبيل المثال لا الحصر: PCA, LDA, KLT, Neural Nets… الخ. علما أن هذه الخوارزميات ليست حصرا على مشكلة تمييز الوجوه، أو مشكلة التمييز في الصور فقط بل تتعداها لكثير من أنواع التمييز وتعلم الآلة.
بعد أن استخدمنا KLT لتمييز الوجوه في الصور التي لدينا، قمنا بقص صور الوجوه فقط بحجم 100 في 37 بيكسل. ثم قمنا بإزالة الألوان من كل صورة والاحتفاظ بدرجات اللون الرمادي gray scale (انظر الشكل الثالث). وذلك لتوحيد المقاس وازالة تأثيرات الألوان على تمييز الصور وتقليل حجمها وكلها مهمة عند عمل أي برنامج ذكاء اصطناعي.
الشكل الثاني (الصورتين على اليسار بشرية والصورتين على اليمين أفيتار)
الشكل الثالث
الآن نقوم بوضع جميع الصور في مصفوفة مقاسها 100 في 3700 حيث أن كل صف يحوي معلومات صورة واحدة. ولأن لدينا 100 صورة فكان عندنا 100 صف في المصفوفة. دعونا نسمي هذه المصفوفة X. وفي مجال أبحاث الكمبيوتر نسميها مجموعة البيانات Data Set. طبعا صورة الوجه مخزنة في X عبارة عن أرقام بين الصفر و 265. وذلك يمثل لون كل بيكسل في الصورة.
الآن بما أن عدد الصور محدود لدينا فنقوم بشكل يدوي Manual بتصنيف الصور الى بشري وأفيتار. طبعا قد يقول قائل، مالفائدة إذا كنت سأقوم بتصنيف الصور بشكل يدوي؟ أين الذكاء في هذا؟ ولكن عند معرفة السبب يبطل العجب. نحن نقوم بتصنيف عدد 100 صورة بشكل يدوي لنقوم بتدريب البرنامج على هذه الصور، وعندما يتدرب على هذه الصور فإننا عندما ندخل عليه صورة جديدة لانعرف تصنيفها فإنه يقوم هو بتصنيفها بشكل تلقائي. فقد ندرب البرنامج على مئة صورة أو ألف صورة لكن يقوم هو بتصنيف ملايين الصور بشكل تلقائي. وهذا النوع من التدريب الذي نحتاج فيه لتصنيف مسبق لتدريب الخوارزمية يسمى Supervised Learning.
في هذا المثال التوضيحي البسيط قمنا باستخدام خوارزمية اسمها ReliefF باختيار عدد 30 بيكسل وجدنا أنها تستطيع أن تميز الصور بكفاءة عالية وهذه المرحلة تسمى Feature Selection. وفيها يتم اختيار خصائص الصورة التي تستطيع أن تعطينا أفضل النتائج عند التصنيف.
وفي نفس المرحلة قمنا بتقسيم الصور لدينا لمجموعتين المجموعة الأولى تحوي 90 صورة لتدريب الخوارزمية Training set والعشر الصور الباقية لاختبار النتائج Test Set. وكررنا ذلك عشر مرات كل مرة نغير صور التدريب، وهذا يسمى k-fold Cross Validation، و k=10 في هذه الحالة.
وبعد هذا التدريب على التصنيف باستخدام خوارزمية سهله جدا اسمها K-Nearest Neighbor أو KNN اختصارا، حصلنا على نموذج Model بسيط جدا يستطيع أن يصنف لنا الصورة بشكل دقيق جدا (في هذه الحالة نسبة الدقة 99%). الشكل الرابع يوضح الشكل النهائي للبرنامج.
الشكل الرابع (البرنامج، وتظهر النتيجة في المستطيل البرتقالي)
الآن نلخص علاقة البيانات بالذكاء الاصطناعي! البيانات تساعدنا في تدريب الآلة على اتخاذ القرار المناسب في الحالات الجديدة. فنحن قمنا بتدريب البرنامج على بيانات مئة صورة معروفة لدينا. ومن ثم قمنا بإعطاء البرنامج صورتين (الشكل الرابع) لنفس الشخص ولكن الأولى بشرية والأخرى أفيتار. وقام البرنامج بتصنيف الصورة الأولى أنها بشرية والثانية أنها أفيتار، بدون تدخل منا. وهي نفس الطريقة التي يعمل بها العقل البشري في تحديد شخصية الإنسان الذي يراه أمامه. أتمنى أن تكون اتضحت.
شكرا لك دكتور سالم ،
شكرا لك على ماتقدمه من معلومات قيمة وجميله
سؤالي لك دكتور هل هذه الخوارزميات يمكن أن تدخل في عالم الالكترونيات والميكرو كنترول
وعند تدريبها وإدخال لها البيانات المطلوبة تقوم بعمل اي شي جديد يطرأ عليها
شكرا لك مرة اخرى
العفو أخي أبو مشعل.. سؤالك جميل .. والجواب نعم بكل تأكيد.. وهناك مثلا
Arduino
لها مكتبة خاصة لتطبيق neural nets
اسم المكتبة Neuroduino
لكن لا أنصح بذلك لأن استخداماتها تستطيع أن تقوم بها باستخدام السوفت وير فقط بدون الحاجة لتطبيقها على هاردوير.. ويبقى الهاردوير اليوم لعمل الأمور الميكانيكية البحته..