مترجممقالات

6 خطوات لكتابة أي خوارزمية لتعلم الآلة من الصفر

خوارزمية Perceptron كمثال للدراسة

الكاتب: John Sullivan   ترجمة: يحيى خوجه   مراجعة: هيا الداوود

[للمقال الأصلي بالإنجليزي اضغط هنا]

كتابة خوارزمية من الصفر تجربة مرضية و قيّمة قد تتيح لك لحظة إلهام تقول فيها: “أها!” حين تفهم بوضوح ماذا يحدث خلف الكواليس.

هل معنى ذلك أنك إذا استعملت خوارزمية من قبل باستعمال مكتبة scikit-learn أن كتابتها من الصفر سيكون سهلاً؟ بالطبع لا.

بعض الخوارزميات أكثر تعقيداً من غيرها و لذلك أبدأ بمثال بسيط مثل خوارزمية Perceptron ذات الطبقة الواحدة.

سوف أشرح لكم منهجية ذات 6 خطوات لكتابة الخوارزميات من الصفر، وسأشرحها باستعمال Perceptron كمثال حي. يمكن استعمال نفس هذه المنهجية ببساطة لخوارزميات أخرى في تعلم الآلة.

صورة 1: معمارية بسيطة لخوارزمية Percpetron تحتوي على طبقة واحدة فقط

الخطوة الأولى: افهم أساسيات الخوارزمية

هذه الخطوة تعود لما ذكرته سابقاً: إن لم تكن تفهم الأساسيات فلا تكتب الخوارزمية من الصفر. على الأقل يجب أن تستطيع إجابة الأسئلة التالية:

  • ما هي الخوارزمية؟
  • ما هي الاستعمالات الشائعة لهذه الخوارزمية؟
  • متى لا يمكن استعمال هذه الخوارزمية؟

لنقم بإجابة هذه الأسئلة لمثال Perceptron:

  • Perceptron أحادي الطبقة هو أبسط شبكة عصبية و تستعمل بالعادة في التصنيف الثنائي (1 أو 0, “نعم” أم “لا”)
  • هو مصنف خطي و لذلك يمكن استعماله فقط عندما يكون حد القرار خطي أيضاً. بعض الإستعمالات البسيطة تشمل تحليل الرأي (إيجابي أم سلبي) أو تنبؤ التخلف عن سداد قرض (سوف يتخلف المقترض عن السداد أم لن يتخلف). في كلا الحالتين حد القرار يجب أن يكون خطياً.
  • إذا كان حد القرار غير خطي لن تتمكن من استعمال Perceptron و يجب حينها استعمال خوارزمية أخرى.

صورة 2:حد قرار غير خطي (يمين) و حد قرار خطي (يسار)

الخطوة الثانية: احصل على موارد تعليمية مختلفة

بعد أن تفهم أساسيات الخوارزمية، تبدأ مرحلة البحث. أقترح عليك البحث عن موارد تعليمية متعددة فبعض الناس تتعلم بشكل أفضل من الكتب الدراسية و البعض الآخر يتعلم بشكل أفضل من خلال مشاهدة فيديوهات حول الموضوع. شخصياً أفضل التنوع و استخدام عدة مصادر لأنه بالنسبة للتفاصيل الرياضية أجد أن الكتب أفضل مصدر بينما أفضل قراءة مقالة في مدونة أو مشاهدة فيديو على يوتيوب للجوانب التطبيقية.

بالنسبة لـ Perceptron، هذه بعض المصادر الجيدة

صورة 3: صورة أحد الكتب المقترحة

الخطوة الثالثة: قسّم الخوارزمية إلى أجزاء

الآن بما أنك جمعت: مصادر تعليمية مختلفة، حان وقت التعلم. خذ ورقة و قلم رصاص. بدلاً من أن تقرأ فصل في كتاب أو مقالة بالكامل، ابدأ بالتصفح بحثاً عن العناوين الرئيسية و بعض المعلومات المهمة. لخص الخوارزمية على هيئة رؤوس أقلام.

بعد مروري على المصادر التي اخترناها لخوارزمية Perceptron، هذا تلخيص للخوارزمية كرؤوس أقلام

  • ابدأ باستهلال الأوزان
  • اضرب الأوزان بالمدخلات ثم أجمعها
  • قارن النتيجة بالحد (threshold) لحساب المخرج (1 أم 0)
  • حدث الأوزان
  • كرر الخطوات

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

صورة 4: مثال لمذكرات تلخص خطوة ضرب الأوزان بالمدخلات ثم جمعها

الخطوة الرابعة: ابدأ بمثال بسيط

بعد أن شكلت ملخصي عن الخوارزمية، حان الآن وقت البرمجة. قبل البدء في مسألة معقدة، أود البدء بمثال بسيط. تمثل بوابة ناند (NAND gate) مجموعة بيانات بسيطة و مثالية لإختبار Perceptron. إذا كان لدينا مدخلين و قيمة كلاً منهما صحيحة (1) سيكون المخرج خاطيء (0) و أي مدخلات غير ذلك ستجعل المخرج صحيح (1). هذا مثال لشكل مجموعة البيانات:

صورة 5: جدول الصدق لبوابة ناند يشكل مصدر مثالي لبيانات بسيطة لـ Perceptron

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

هذا مثال من البرنامج بلغة بايثون لعملية الضرب الداخلي في الخوارزمية التي لخصتها في الخطوة الثالثة

صورة 6: مثال لاختبار تطبيق عملية الضرب الداخلي في بايثون باستخدام مكتبة numpy

الخطوة الخامسة: تحقق بالمقارنة مع تطبيق موثوق للخوارزمية

بما أننا كتبنا برنامج الخوارزمية و اختبرناه باستعمال مجموعة بيانات بسيطةـ حان الوقت لاختبار البرنامج على مجموعة بيانات أضخم. للتأكد من أن برنامجنا يعمل بطريقة صحيحة على مجموعة البيانات الأكبر و الأكثر تعقيداً، علينا اختباره بالمقارنة مع تطبيق موثوق للخوارزمية. بالنسبة لـ Perceptron يمكننا استعمال تطبيقه في مكتبة sci-kit learn.

لاختبار برنامجي سأقوم بمقارنة الأوزان. إذا كانت برمجتي للخوارزمية صحيحةـ من المفترض أن تكون الأوزان من برنامجي مطابقة للأوزان من تطبيق Perceptron في مكتبة sci-kit learn.

صورة 7: مثال لكيفية مقارنة تطبيقي للخوارزمية الPerceptron مع تطبيقها في مكتبة sci-kit learn

في البداية  لم أحصل على نفس الأوزان و ذلك لأنه كان على تغيير الضبط الإفتراضي في تطبيق الPerceptron في مكتبة sci-kit learn. لم يكن التطبيق يستعمل قيم عشوائية جديدة في كل مرة و كان يستعمل بذرة ثابته لتوليد الأرقام فكان علي إزالة هذه الخاصية. نفس الشيء في عملية الخلط حيث كان علي إزالة خاصية استعمال بذرة ثابته لتوليد الأرقام. لمطابقة معدل التعلم كان علي تغيير معامل eta0 إلى 0.1. أخيراً أزلت خيار fit_intercept. كما قمت بإضافة عامود ببيانات زائفة قيمتها 1 إلى مجموعة بياناتي لأطابق نقطة التقاطع (معامل الانحياز) تلقائياً.

صورة 8: صورة بعد ضبط معاملات تطبيق Perceptron في sci-kit learn بالشكل المطلوب

هنا تتضح أهمية نقطة أخرى: عند مقارنة عملك بتطبيق مسبق لنفس الخوارزمية يجب أن تكون حذراً جداً من جميع مدخلات الخوارزمية. لا تستعمل أي نموذج دون أن تراجع افتراضاتك و أن تعرف أهمية كل مدخل.

الخطوة السادسة: أكتب و دوّن تجربتك

آخر خطوة في المنهجية قد تكون أهم خطوة. لقد عملت الكثير حتى تتعلم و تدون ملاحظاتك و تطبق الخوارزمية من الصفر ومقارنتها بتطبيق مسبق و موثوق. لا تدع كل هذا العمل الجيد يضيع! كتابة هذه التجربة مهمة لسببين:

1- سوف يصبح عندك فهم أعمق عندما تشرح ما تعلمته للآخرين

2- تستطيع استعراضه عند التقديم على وظائف في المستقبل. قدرتك على استعمال خوارزمية مطبقة مسبقاً في مكتبة شيء جيد و لكن قدرتك على تطبيق خوارزمية من الصفر أكثر إثارة للإعجاب

يمكنك عرض عملك بشكل مميز من خلال استخدام GitHub Pages.

صورة 9: مثال لكيفية عرض المشاريع في GitHub Pages

الخلاصة

تطبيق خوارزمية من الصفر تجربة مثمرة جداً فهي وسيلة ممتازة لفهم النموذج بصورة أعمق و في نفس الوقت بناء مشروع عملي مثير للإعجاب.

تذكر بأن تتمهل و أن تبدأ بمثال بسيط. و الأهم من ذلك كله أن تكتب تجربتك و تشارك عملك مع الغير.

الوسوم
اظهر المزيد

Yehia Khoja

يحيى مدير منتج (Product Manager) في شركة نفيديا تحت إدارة البنية التحتية للذكاء الإصطناعي. مشروعه الحالي يهدف لبناء منصة برمجية لأتمتة تطوير و اختبار الخوارزميات المستعملة في السيارة ذاتية القيادة بنفيديا. تخرّج من برنامج الماجتسير المزدوج من جامعة ستانفورد حيث حصل على ماجستير هندسة كهربائية في التعلم العميق و رؤية الحاسب و على ماجتسير إدارة الأعمال.

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

شاهد أيضاً

إغلاق
إغلاق